From b8d2f2ec1fd52c6c57b5e83018e88f8b606b7d0a Mon Sep 17 00:00:00 2001 From: Aliaksei Chapyzhenka Date: Wed, 23 Feb 2022 18:16:11 -0800 Subject: [PATCH] recovery from broken VCD --- bin/build.js | 45 ++++++++++++++++++++++++++++++++++++-------- out/vcd.wasm | Bin 128009 -> 128797 bytes test/napi_any.js | 5 +++-- test/napi_basic.js | 12 ++++++------ test/napi_dump.js | 4 ++-- test/napi_events.js | 4 ++-- test/wasm_any.js | 1 + vcd_spans.c | 10 ++++++++++ 8 files changed, 61 insertions(+), 20 deletions(-) diff --git a/bin/build.js b/bin/build.js index 254594f..669f4ae 100755 --- a/bin/build.js +++ b/bin/build.js @@ -43,6 +43,9 @@ const properties = { napi_env: 'ptr' }; +const spaces = [' ', '\n', '\r', '\t']; +const lineSpaces = [' ', '\t']; + const generate = (cb) => { // const llparseDot = require('llparse-dot'); @@ -79,7 +82,7 @@ const generate = (cb) => { simulation, inSimulation, simulationTime, - simulationVector, simulationVectorEnd, + simulationVector, simulationVectorEnd, simulationVectorRecovery, simulationId } = ` declaration @@ -93,7 +96,7 @@ const generate = (cb) => { simulation inSimulation simulationTime - simulationVector simulationVectorEnd + simulationVector simulationVectorEnd simulationVectorRecovery simulationId ` .trim().split(/\s+/) @@ -101,8 +104,6 @@ const generate = (cb) => { const enddefinitions = p.node('inDeclarationEnd'); - const spaces = [' ', '\n', '\r', '\t']; - const cmd = objection({ $comment: 1, $date: 2, @@ -147,7 +148,22 @@ const generate = (cb) => { .otherwise(scopeTypeEnd); scopeTypeEnd - .select({begin: 1, fork: 2, function: 3, module: 4, task: 5}, + .select( + { + module: 0, + task: 1, + function: 2, + begin: 3, + fork: 4, + // extra scopes from Verilator + generate: 5, + struct: 6, + union: 7, + class: 8, + interface: 9, + package: 10, + program: 11 + }, p.invoke(p.code.store('type'), scopeIdentifier)) .otherwise(p.error(2, 'Expected scope type')); @@ -258,15 +274,28 @@ const generate = (cb) => { p.invoke( // p.code.mulAdd('value', {base: 2, signed: false}), p.code.value('onDigit'), - {1: p.error(1, 'Content-Length overflow')}, + {1: p.error(5, 'Content-Length overflow')}, simulationVector ) ) .otherwise(simulationVectorEnd); simulationVectorEnd - .match(spaces, idSpan.start(simulationId)) - .skipTo(simulationVectorEnd); + .match(lineSpaces, idSpan.start(simulationId)) + .skipTo(simulationVectorRecovery); + + simulationVectorRecovery + .select( + { + '\n': 1, '\r': 1 + }, + p.invoke( + p.code.value('onRecover'), + {1: p.error(6, 'recover')}, + simulation + ) + ) + .skipTo(simulationVectorRecovery); simulationId .match(spaces, idSpan.end(simulation)) diff --git a/out/vcd.wasm b/out/vcd.wasm index 33fef0613d1209401c6d8a2c548ca94e3cac0fb2..62d4285a09b06cd6b181712ff989a9889bede877 100755 GIT binary patch delta 17795 zcma)k3w%`7wf9+P9+~9KBoiKaKV~LxLLj^no|28cAIjSZC{W}T6a`URd)o;%ZPB8{ z4)vsdsfO?4yO-7|u>r$Ru?;rWRM7?v8f%mQ;UxisO>ML(-v8R?%w%}n+s^MdXRW>0 zUTd$t_TFo)z2_v4pO5&}<%qg7WYrW)bo~XIt*YgZ1;$wKp!oVHt*cbE?#aLx_G~R) z^C()R;!)gj0Z+u86c>0j;uM~DIlf16^&dGNC0F+swgN>Fw8f=}?!etqd(*qR6tAL| zs3jgtw5lqkdDL9hA=*4M(4^v0z^fGv?)t*!QHoTsd|`8EXaeP2HLxyT4{X+!463<` zk}}Ih9>qgtUd3Y(djlV7zQjXUZDrGwJgUc%t2%u&-C80luiEep3~(Nx#z4%Fc>8Wt z?7kZ4bUvh3T@5UE%}CrQ#c^X`9t(F{jYid11Fq=!36L%6Gh7x?g=(o5sw5Jld2A+~ z`B81~b3;gXMbGTl2|8b^)8^<~s3!1YbosTK&53!`8SIi+%CVU7={z!6&Clb(*nO%X z4{h_&mT7W~fh$7>2PV6p&uA>SmwAb;tCnDxvaJT@?^35T{Gy z6}l^J0~SVa+IB3GN7H|#qUzi9pHpM~&pi-B$p9IRcnF*r$SB zMjrbntQYs~sOBzI?rU%0b>A>8xQuy~edQ}m$Fi3aW}zu?gO#{Fc81s&cy4%p;DHSH zob%i5hIzXs!t>g*-9E)%jFw$M%4^E;v2qbjJx<{)6Ax?=ZNEAG8{2~{u5Y{D*hohM z?__vHvlQdApxZ_Rb$HY=9~Q|xkHr%?YpVw)YjZldSpw7+)~!$hUPoO0_S9|c4vaWtF@c_}LJ1ap2h{_%^0cx76daydAPiT_TJqjBSxb$C|xf4xYtsu1o z?$6Hk8!pU;jmJK0UNUcE)Opz0nt+28tq@`3{#$^^Ip96(=b8gRj49w!yJ<^H33dS% zmnwK=VtBm#eC*DEH*uB3;fu?BQHo%9tFe>wt^5nBG-A44ZsL7`kA?;<`Ol$a$Fyy?=c!7u z>c%9%1QJKE!9%C4A(?1+Fnmv|BW2;qNt$%&gA5|n9 zKPvh;(vrAhJGm;mZSFg?C~E_pWs9R8WF<2h;8 zSv)gm{~piI*?&^2j|KM6`IMUKpPakQMje6Wi<0qtWYH+Q6xdupX<;gb)z5+}KC&o- z*d?4@JTe;IL+*JG#b}}_kiFy{TSucJz6tDF@}XK8UB7LPwSH+cjw`%R?p+tkNU&FVpQvH`*Q^B6dh3o}$(u zGTLeqD-L$g8f7ayMfsm(D@N-~VzVUTDS8YdqlZjlizK$8=A|~jGJz0L zfVUWZwSyR)Bx@SY_T935?>Dw7FCmCG+IT)tCwdKz@_$GUu4y(oDp8dv@DxW4n=#sM z+N??v@f3}JR+h?T2)xsz)<`OzV)rpQEJnLb;yy{lQ}n%WmNjxu!c#67HlE|pP)ueVyYA>p4yCjv-o>qy1CYt)uK67N{a$D@+PYbfW&?wsS%F4pHq_rpr}q{wr*fMB-R5= z&N&mg`!WL!BL6raI+7D!Yuu(60`fiK9~5PSE?+VRon!1!(BkCe>*a81YVGwO|Ux$*`TS?CQKu+ZN6U;m%C zR7wbJd2R=u-#k}{Xa4g=cz);kay(Bz@5ggZ%@dSRf4Rn{Qf+FQ=(U$E#tDD-)q2Zs=MtRK{Q5n}pgud0 z9*8|K9_6_Qo|fe))E4j_ybovBT?bQ8Q+x1M&aSQ;Tn0VozLFJh#A$2`XPG-H3BF`7 z@8RCSj#skK{H0ei@%-QwJ*q{zUbwB+`fUx#k?5kb@e$A*N79|O@WEzUe4u{Rk$U!$ z=lp%F@TLYtTB1R*x11@aurvW6V zV?W~)!=}%c21yYhz4O^vR31Jt49|-vas$gxq+Lr+4b+@S4r{VHNVbDJ=_FF&z?P0& zJfH1&_-3Spz`T>O2n8!oj)ObbcO9Z7fy<{VZ{GB^(=m{=@?>)0?CBN3CWyL$xt-k6 z`p&6%)^?7Ewa<0t+}L1ChcB??%m8$^;mjKrOilgJ3*|`pCkI~o{AIANx_FEWqqmdEzX1J#Plf!8kkEJDIta3c8Ta(aBlWuA{BH38MeQGhQs+Ug6x zSP-E;of`PjS0xPo_*DkfzwlKgajEC;Qy7fxeTc#S-U8Rt>19I|#T$#OF4SD;mGpwI zw=#Xt*YONq{d%C`e@zs%uF1H~I9n(D89eZ*pm_oxWYP5=CX>TFNv3p8&GbZ9v^ zkA7jEXav9k2Q5MyM_o8ReB1~12p5daxThK_9Y~m*K`B6H>KLwXW z`27CcZy}NEW*Q<&f+9}QrdrRSB~r%IkO8%|_YH28R(=_;F{oz>JhT4m< z^e_zeodI;wg5qs)^b=}oI37no;K46Sq-CgmDUrqlTu7v;0K<}KEWmmR8fubguZ80E zX=(HfG8uW^J*=NjBk#}-4!3YSv3R&URjkiij^L=#c;zCL7O680yhblfC*(9K`qFe- zLER1Y>GW$0wd;3fP##q?$kY)?1jRR8%Ai4%-unS>7Mv52b4b*^)1n#K)nQ~;x+jaq zCf3PYIjkD(Gve!La?f*na6wk5Z^@!#!~Z#1b@!Ohp#sd;gazPsO;`bL(}WFRo+j)7b2SkGFh>&(fZ3Xe1em3X zD1e!o&;Vv=!U-^46E1*hnurFNs)-nYTQ%VZn4*bT0Kd@00KgJW3d?zywVs0F2i}BEUFJBms=oL^43JCQ<;3G?5B0MiXfOqcxEZFiI01fRUQ; z0*ugv51>#J834omn#cqkrim5-1rF-C*3kRY-!HBjn}1y_+jHa8(x7M*yCf3I>l7Gd$7lfjLmBk|DUh8$s2*Mo$DOYmU-*eu9qv>;9eWf-Q^S(_h57x zp-1Oa{D8S@?^zd8gqPM@y<-@q((U@HLK>uR%%|A66~<~?9cssmZna*SPbu0${w1W0 zO`WEHF@y&Dce{kOU%SUxJBv3$YUZ;?TU;yeUM1J5q1)Zzx>eoC>Ih?X-hJ0fxwZ|~ zyTVzkT|$+;PLxKG-CDzVwYyf_EjNV0yCR(TIhTMvrAcCkVgykumfsZ`DsP?@_-zmo z)2E2Pab_h)49l}0z$7Z-i||@@5=%89HBh~FCmarTp3&{H@NW0IM8tK5va!Z~zF3E) z9Lw%pE_bWJduKTB3ohZfjyE!Fv=MifqFd~6gS9lAwcaIc*RmRO6M^Lu5pA)T`tP_? zx&?#xj&R;XH}Jv>_Rp>Dj-{p2l^Co`!&zUykyQ(0wJu$9hiP+viF8A-tZDQw!_CVs zbv_&YWOyz6Tlnyh(Xn~p!wfYRhpX|%jcVA#)KC{MS^^gd$7k>^3g>;x#ak!1?_^)t zccGO{ix#3=I7@?dVL0pCH?Hi6Fji&Zf<@T>o(T8144NHUi0ppDhNvIO zra|}_l7C1$rEH2Gq)=(8YALmrmX_K|OYNnla80HBqc(n5w+Rkp3qvK2XA43l4rDN? z*^=Yg?V%EfwcA1^j&AcpCAW71N5>!|hqpPQ5(habZwlpDH!Cz04k5Qo_d&vNGu;K` z@^c782<6CvV2j9N7;<*FA>X^kkf!gmtN2w~dOl^&Y$&8+o;C!#=7@?=j0k0jn-wnZ z{jhy>Pso?rkp&p@8f__@H4`Bpfz9Ba8P5F|={SN5BB%`JEyz54=8XPPb5xwk&UJDU zNAk%=fSek#3dhN*(kcnXrt+NGnlXaI=dF^ek1wR;s6Im2o-BTIT3cNMR7}4c1ZNteu8)zJaxW%KefX zG1P+?h_%jX333KQ*2r*KpUc_4QH_3CqehN4!mcR_sSWZDL(~YwF{s`jh`*HnK&)lm ziYUk)+f#GFI(3pCS|G9yI} z`p1y0A>p#Vk-5OlWpQwgwkY{SuvQVjgL8vS^v#g4yl`QC|BEm~){s0T&hVN+SxF(2 zyu~KTGwt{#&xr5`&BKW`oNLhdNPe3`3gm<C9j-a3Ktf1?Kd}Ni=Bo>G zGW1QO37ILXGohCe8#sB-xFMvn8_v+2iTZ1!Da-#hOUgEfav^L<$ebU^erQ~fYr3p= zm?z8NLGE--7-wgQ1*eE>WN~1?i6JBl+wZ8fihg<$#rn&mImru=Z?Z@-Gq5ah+zOgv zkS5-h0+49CeBow&>|e^t@WGKFs0C#W#PH3Ly~iWNewG`=nAnicUOl#m;_ZLtCSHA5 z5yj1AKb(BSVA-R~+G{cyjsjSXA#we?vV|pj^vWX2_GiftW#I&pm1VPsrjpNg;4mka zk9cXJ5})Q$LnTfpQbHv@szDc%k0S+Eu|=FwX1LOVOBAmNn!`V4V^z|n_s3m>JSfNr z&LINlviF$`ac1)m%%W*6&Y)Ff+@T1~p#%rHVEp8RU@KT8yDKq#(kh}kcMY|~xm-qC z9D`&e$-~Z0On~N`Nrl97?*l^09Oq(!?iou-g$W4>gw0}(nopf*XO{Tz85`pIkh$XZ zvayssoX_TiLhbm7J}^|`lX|}lKDox~zaLAqtmbsKjIGKboV&Q zNsflAy)84=5EDt4=xlPi2a9%^Z4tmS_tN zQU>eo<0!wB!x9e0U^bUL8`6T5luyNcFM?w--&WwD%m+nO@~wl_xM#2!_YA6W&p^h> zUeOd>Tj=+Vrz9Gz?-);`DN%oYJSCUFY#s$Kkhu80JbAQ5N&F}*yOVeEa$2FIO~D$M zF_~Xk!rh6UFoAsf*a?&(59HZ6kPlSIYO^EjHIL(i;}Vkk!xJadV~nG1lCfexoB)@C zdl62JM}%gYk8dbla~4P7H{zjJv6S#-kfC~Exawbo85pXYiVqv1j0`C*t-(Qu_l0X1 zbI%DL>i_EGGpO`v$kyNBQ?u1;$6Po}NtR&+!{wcm!CesSn{NcZcCug8U!F(YFebpq2_d7X2$u(0}BR*|*WxJjN) zTtEFGD(#AnMQzmbc{vL$WVb#nJ^ps zYQH%yJ}#xo95|G~VL2Sf3DX{v7(a1rs$X$AAb^jKDRGc^;x857SY8dt0cwwd^Vpw!sjqaJP6I_ zbK>U_$aq7UzQPp;q*;O0L>jPDz!H*xoW~yV;#Ssy+eT9pj$N^+z{myy;My?(04K6R z0PtIJ0C2Hx0Ng$f@H+HV425F#$%4{v!KGyiC~&ON0C21^0C23y0C22{0C22>y^ipW z$#ck?Dq61=lu8c$RYBPRCk2%bh+?zhho$*J{cQU9DU|JESL(C58~G49K)-JaCB|VR zpp&3Qd3mF+feqDD=!AVh>m>+r;~h}kP&zU6ip%lJfosJk+se?fw8f&sRPgopIibI7Y!7E3C_*trxBro6eNGgIO`%42wGF5&mGVzXSV zPn}2kYGsDLWgbmpST~QRG5q^H8qKiaHrhwc4Ikb{J0tO1#F|n{bFDUi_NZ-A+&?s5 zA(W^SKXbray35?B$oOgEDg5N6CFA#nzuMTfV~sjDxudY&%fGboOSMcZ|NC{cjvoDY z8!1lXc8y=lcKQqJC@*F=znNBhMZO4AbH%1xP&vKbfy$jmW%(5w`V}20MI~tkidrJN zu1JS0|EL1E@irYAh@MFBaSd|djw|}sbu`5HwT8N*MqMLheV--tguSfSqkmXNxB6dl zy4~XF*EaD2Bi(pQ2YT}FC}_*_P=ndgj^KBc644pP4_s=1Y7CpNmZW09O~ralTezd~ zD>mEd?{fSMrJ_AH@pFeCopu3x+ySH)NK+J$ioe;!tBh0vX=73~kY_X?`+z*lH3xt^ z5ecLb$j6Kv1=7q&8;}-8I)R*Kq#MY77T5>mZ!BlWS9s$r((QMP-N2f-Q4J8;SuKzX zZhZ(yJtIv(-e#l)NH;fb2l7is&I5UjkscsdSab)B*wG`6$VTExF^qVQ*oduRMr`%> zTM-K@WJTbH6|uOC)fTiODDo9{ukt!hj7}*P?j*&Vb&ogou$T3Em zfxOB{s~=c753B>oe=*Vpq|LQ42u;) z4X+n$hPL1W;Ej@m1yEGN+l|T= zNc(}55jJss{qqKOL-PjQT>Zf@1m_JDId9y8R|Iz4&Mw6rE4qMHNvxOG4R1a_UZ69q zi7K|{$8z^|h4l|yc7&n9mZAQE8~wwa*RC5-WdGa({evzl&U63O!1hXPAFyV|{Ne!6 z4q4ddcSQW4?iR}f}C$aOe zE=J9+jg1EzpoWe6H@Pd@!;I@kA!uE!;*fQL8`i~2zSg>+Nb7P7NCsWhoneg+13N0Q zW?<(f)(ULLS*CVyJBf7xYn52(p)nBWiIoZu`^owdVaTayR#936`8~UCKO48f6BhR_*$Mk*H z{m1kvMz8PtDWzxi3&G#^goN0`gxE!0L)T9!mkl=faXO{O?mnXADoT+OgASgA-irRx zPD)B1Sms`X7juxjp}zWvf`v0)aRRS8(lBW!MYDjpPtsqw@0?w?5K-WuAKEEa+`D^bu67+e0H=X4ScuxJpM=cEg$dbhq7n_e%feE3|wL zUeZ8j>-PBg6%3q-IB$0^5g%ciGUclo@{J6BHN*Im1t1{dWfJop4UZKs{;Lzg*{x4* zp!kgL{YV=5C&=zyK={`Az~AE7Z||m%)BUreX~b zyh=sEg5LKUt+4OJ2H4r%aQ9(a=!nDnq3(0UZ?L$};N8p%veeY@W)ppk%(S8AO?rXh z+-6#*Mt!re7Oh zN_nKBlmHHj0@UCBGYyaA;$m4;TS$+sM)5L={2_d2>c45BVp%;_leMzCTpxdo(scJR zN|dznFxpI}6{oVK=CJB=NVW9fH7k4`(4RU+i~Ow8PVO6UK1RL)Ux(3&;sNWez^CHd z3p4VU>!zVR-E1=xyfc8$G|MF@&jLQ%EN8kDWeD&&_|C-_+f*5bFSepms3`iX_i4-m zR^oLqvJzG>q~IG=VgovykH!n|4JyHP3sGK#FMoJkivgF&lA<)}XWyqg#<9445XED% znxs0gE(g8>-#(0ozg%}0%6FS>7V8gxKzEE~_Oa21HbM4YG`$DS)`qcj-8z)l;}26( zwH{U9-by1Hidyjk8D25ee{h^;59p4;jHAu1!pF3Z%HzIf-oJZEnNHnHh>Q5nui^>4!g~^#x4+PgL=e z*=>?kkf#D?c-Vx@QmW5CVX_ou8Z3hV`4i4EA9Y;j&r!Ye1l^v+()ay~rX_l52i=~? zO;a#r{#+wfZ|tCaKa*G8jBIv#+oElwR<0abbnpFZR^PjJ%*vG;?|WbxMDe8V1s{*g zY*W1E{(J9*bD6bf+B8XT{vYU%nDp~m%E)j5W7cf@-U9}^VGT#NRQnpe59`$@DLsn& zp9u2Q41Lc@8koQ`O|@3ZYJ;;~??!9t({UtDrz*Yh6z#v2=jiSnql=k<{9y<2T@z=U zSWP_KWaT-EIQ(Ztdza)m|Mgjj z1Ke|kQuVLS(#A0?=uxspPLC%hJs)Us?~R&qxBQVsyuvkX^6=LyU$-J?&rNRJF< zhAD^=%+Pleh82a1*m05>93%8I7wKWy#aWZ12JreWlo3dXPBBNV{*x|Krzb`jT}%bM zo?$N-T23q4yN*mf_Y%#K^GYKPhOV11q<|K*{D0^*muQqU(LJcXUUqoXi4DD%=!cew zeO-z+WsqFbX?DpW*JGMiaS8XJrN}|5FX?Yzq0us#s4h~Z$NDwkQ9b5M${D~8rUS)R zeEDN7)@Oc6*|bBy|4W(^%j8w~TJhyir~VGA{ak(6sK!48QM3q;@xk9G?V|9~{_qlB zzSk^;j}Y!3fDx|HIvFCo^#TqUXLP}Tg`~8V!9Q5>$H(uJW<|{X7U?Tc{D35S-lqpO znxKfCACMM35sfF|dw#RYfJ#CS^?sb*YqoGqeK%7wWv{{VjJ6_p+-w3K!6|tLL2>}jq?4^+`F3%`u*(w%spr3 zJm$=qnKNhRUi|sF$RG7ZHlHB7VvEsQPSavl?b)hNwXdPXmLJ>Ksp@M#)XzucX^EOw z(V`Tu;z`iGk=Ig!zB%$3p5JgjLg335IOJgWNQND0#(sf*EM6SzF>5bo4ksb zDt(IACaU#2UH+8%FC3NgQ@yI!R-n54G~Zq!20nM-Pydyxl^XQeaY+$_s2KcQf5?5m zI`p|d;9ihYBh@i8Ft3f<90t?y=lY76l*_6mb%EO^hEORjLX|{fHLpXMbe0BYN;4yL zuZT&~wHTMaKPGp?GFU#^GF$9ys?z7gR*kl=Cw8+d*fg=W+dR{=xPNe5fO`cG_*Fq( z+T^E=^JGu;3*!>>F3;214OJ19K4J%}73i$wwS!mPK(KOU?Sw{s=O2*suvb1kc2Z{BeF%Z;Em7Wq!lP$o$&8UTYSlTRj zp2dWV@H|641)7hiT}Fv|M*4LsrpZI;<#`QoGDQ4jnpNQ?%uT<|YZvT(zulZw`g`f~ zcmic+{AWf;f*E->N=BQ-*q-q%pBy-{=88{M1DH7EwQcg-ff+5>~S25&e58&=# zn+g^ic_TJp&UluinwwC$t!n*ce~E^s&AAOdpZH6&umGfnMPLPPiW2i`D^IKIv54sVSx z8*bA7lqR*; zsYAabXPV2>#e?6VH|5+$o%)#EyR#t88eq1t-v<*Ae8d+QFJ6pX;wCZBr8neG%o^yz zpeyLMhB?xB$RSGE)_{+=gWws+O;!P-^Ty49nU<+u%nlhJ8l`rx!p;LO!nt>-{+`>-fn$Eei6#``Q8XC z9=?*Fca0>;4nhaJ!|Z^UmV_IQ34>5&W0Nu6D`1h0W4y9}`;9tS!iz<9lS}25s!uPt zdoG7x*-^7OxtuZhG7#~KCk&SzO>(>s#cWBOuExrl4@_lkm^{Jf}q>Yl9;g{m@5 z^u;j;m(#>S7lIG{UU_o*H&c{ zhlG;sh-DQRlp46CbkKQ^thsRLHa$Z0@ zj$Y-G)C5ue*sTHSGu~G?pSbh3g(K?(OU>n1!`8{$w{ceDx}CF8iIro~bD4y-A$iTMdnTL>N?fS?fM5aeq&EVTQ z9Iz5ci1P3&a&2WI>kvKA@|w$YpUgd;K>1T{7EjUNA)95i>72up=1CWQl8C3MeOnS4 zZMBF4l8C41Fby68I^bvD4hMj;t%Auz=pt*Y`iz^xQ|$SJ)W#^!QYO|&BA%k-O-W?5 zYQQAcNg|%2>J3S(N5xofiR)@Ct_I14r|6*r`YU&)1-jmn+&fWKZ!tAXrah>6u3MQw z*inEsn_BmR7LzJ#8Z7os$=>~$W6pEf#M>P_9;g%DrbLe^!8JQAi2*5rr)Ub8PGfwp z<+LG5#Zxr=McT&bK8slOFX^CvAv^DsL{x|li&!Ixc#6aCNFt+M7O_qe@f58eNFt-d zl@_&LQt=cA{wAr6R$Gp5kVHJi-oui}Xst!uDT#QB=D$lKquVWFvn1jv8b8#F?@m(> z9MKowofhctk*w_?G+C?%BrBex?wBMp+G-IyC9xYdwf&OFXjhj+K@*K5=wYizJyN6( z#AZ{3(Zhe0A^{LZlZi9hYsm~qnISxXq6!p5eYfOiwBO>Xl8dkgPw=21THlvEj1F2n zb&>~9(Ry4G8Qp93rGD6P4JJ8&XzGgyFEQ>Z<<-`)Z_o_U@R}%HRgHvMI4Rv zpFVL-%fcr#awckHcr)7Da=kH?(ud<&2nlGV$BpxIB5=<85Vl35-c(Cq00^KJZo>OY702IT?EY}IF zPhwrb#I9f1vchJ0y1YJ3MDF#ZSRdPG1rxE!2c-{)v27aP|lVdUy8!%!l)(J5v z9EKRGSYac4j^c8XPLswhaFF zOed0*iNDPzBn+#Y9;0f#w<&ZLgSG17v-1Ks!VY#{ByU;I7K8KoU1|FIXKzJ%@#klQ z>4kpgS$QdQ^K)}Axs;J3X`Tx7xLwK9t>p0Ey_J#T*7+cAS19kXd*NA_7nb+jw~OWJKlpiz?S-X; zsI;Qx86;L8wr1&Zt6VnFE=s)GYgK=WA|mYY~Hub;Tp!4Uszw>YWa6pX$y3GQ-9mzrOlJJepg7;&mH_rlsg~6;1-P_2)i% z9-`~c9OS~}{w@@pXA263JNatChZ6!P@SP;;&LOB_$O7|uC(%T}OJ3CKYtK$iO4PI@ zrYQ^Xz^&|DNjF zo5lBPzF64Myn7k_(C$sbHJGQ;>nOB&{lE)t1^#3PrTi%OBpHKtnnOu#(;V~=c6a0X z2%1DmMsEZ>l+@;kr0)`n-*?hPfL1510*^C_#sf@=qEe~9nPda)xR5Bc9iTbN9OSb2 zwJV;aw(2Mvz~Rcc-$mQ9lDzgpTe5E~1CK9(FB)RSmb;$yj$MVJYBaLlR5}|>qGAKH ztl-DmIe|I2JHqePix;7h>lT_SDuODG(S|1P*ws?UPoM*4*~NfT$-Gs>&zjL@8AsjJ zgdRN>Ls!Kya}QMt#p}ck>L$@_T!^7y1q5WOpoWrslR%56we7 zHXewhO{hH+M-RYZH^|Sa)8?< zXluY)uu-BhFO!}?DkG1!{CQKXcL*i>{@+|XsadB2>Y|N#D6CRtcIs@t!QGE!`hH0V- zh`i>n0U{HjS|EIaMlgp^9`zgd}`J%PYj3E9TCdzhL2_WlNXX z?2d>?XOwZndz5Ol=F`}~N==meY_3I`Ab^FMPyrTb!Uiy36Lx@kns5Nj)kFlq6`F_y zn4<|NfY3w~K!qlv0WQ~s1~6L_E`V8@a0ATLL=3(N| zV*tuDF&1E|CK3RqXd)3{vL=!MCTSuWV4@~c07^BH3NS$vX#gdfNCzm^Lgg_`gI6llT^kgthsfIKZAasYERkqeNci97(L?)d_{@C_FauCu%1FaRzO-0wo79qEdJ>-ma3%H@LFUATwTT+wj3D+&&G zIpJQN=`}7 z@Mh=aj~ic9Tr#0_;-tw_rj|_$n@jWNFI=?vN)5r@!TATzmYX>|V?N@_o3AwOuBCGN zNEY`xEO;j_bG^9Y5hq<~b7V2p6kf?p_ znrkr)F;z|3HQ~)Z=?*z8*sRU$zLT4^t+{4xs5d;z*WlG2b~C>sKIW`Pb_#;LQdjaR z?0k4FFJml!?o0p%N4QqYHDa2vI^2u~w{VO$AAv!Rf;59xUk%@4U74a+hl~Ew&4U&k zFzGl)n5c5~s@0f20k6|@5mO3dput`aH%mhu! zMy=q1XoMbHDD32vO~n?32yF^Z4HtZ6lxu^6D&7doh^4S7uOD3Wn{x=;2!gz+X-c@J zeWOPB%bKQ6!3KzpH>e035w;0a(PY!wk&x06zOe9W9UU66Y06~mp;$#hP5zM2c)x)o zv9HS&BnHD51#g?h8n!&yCKds2OOwo)BKpHQd1u8w8|;Gz8*)&F(}{^j#8k=*a7YT{ z;$0hSGiX#+NaQl`L4mv)IuYIsZ`s(ugUw*054JKL6zu*%3I_#KzH~#3st`z#KI4~D zu?%MfU057G7JnHP(niz-N42DQLMVc807AwvGpML2Tv6Ak(EepbV~dNBo*)PXyNxtq zmhswDO1S*5Un5#H9JxI2KEXX=851LsRZf5t_v^A~} z`4S>rP*HNIt#$>C6&j_}Xj(4kMR_5=AQT~W!nSf0F*GG8={NLglpA=B#R{xJJsm!% z9DI;m1zp7ot(fvU%jBCf*u(x2F2%746H^hRba607h8EI=OzsUR@gkje%y;L8d*Fkw z@jzZK#u&M2updam_DNN&DJNXh;jht@o0F%dbAB6CH73-<{oKPGIdV8NoW)sX{U5k0 zJJjh>TQtYZj4ySXW2&q@8txz~Aq}}=WEH>3E%=Q)FQdFbzWh->62JU>M?`2WITwP2 zwS#gR?G2SUW5!~&XuL6IhDy9iz!rsu+7p-&-eC7f=F$NNo8pr(n^NSqnr>yu zZ!ra$tf}xvSv2mQjumVr(7`Q{6YW2NELq)Y;Un|ms8t;lKqv_Af=XH{>{F3$gf?Yv zXl$t64lZIR3(6v}7*R9GU7DJjiXAT4QBLL|WObW!`jIhyn^mM3^Jh@rgjk^X*39C= z>_UPcEMbC#>EHvw7~^L%C@o{889tMZG{edE7~|j^8e?>plY^3t{uz{?mXeaf-=bM< zm$24d)I%r`gSOn$1kTRr7#F=0>h)3Yd(U zvnUl^;grePXyUcAD6Im!KQ5SPzMH>cl1B)X#KU3RxKl=ba~mdyg2{}dM5T{E@4&Ir zI5ms>p##tOTpW1f6*3RNE_Y0Vyobzv1xQ@vtgspOZS>dFpReLnDHeF_87}#=?vZ_c#PcRxy#0%r;;=9 z&yh0|Qrp-0`3x2j>M3CbpAk zP~}#95{o$C=L;ok;_xuzAgx&p2+`-j0=nvr3@s=#N}mi5P3%QP=3x7b^Hw9fIx0s0 zOCIq|N12_?;NDt2jpo1_w1so&T;s+HN=-uW{EDMZwoz9>3FDDOh1vy<1!=aM9qy+u zWV=Quw2jTl#-3&^CJYE~FCHUMP6-iPW!#rsY1#gqAQ!?#&?sKge&b3(nU`@yH;*H{ zR7OH8A3R1vE4zFo58^c3XHG$<@rJ+@#MJ^Xs*$+J8Fq&CRaPkJ!9YauF^KGT)n>Mf z`vTcMt_(~V!%p(zn<=yC4w{FniJ&sq@=`>#dClUW~fNfoz!qVVxFed+=W@etn|NKBe}g*#$N^=(+buGI9Rrq>3Z#!WIov}<2Az!qBzhNz z3iNIafSWI^A~}kV1wd3v1i)R52LRDC-WO^7>k9Ib$H zossz73;{I~ixGEYk>M+j56rw6+{Wg)xa^2D>gQ4(z^ijZ#Zd(Rr*T}ocu*S9^j6c??y zQ$4^F?@Oj&0~0S1x;a?zLIv*&bIw4sWu9?t5;o5neKpflUut_@oX_Kb%)+y z)PP+)O2H0zV(_L79S22zH_04m9sLo{xjY`x1mw4jbizK=@`ZC(z%&t6xTw}%!$ot2 z*caA1@L=okVyJcCX6x`I?~1r#w^|29w$2=A9dz-y6ODEN`4J=CK=wrg=>_sqfUyB! z-Ao$>@`MJY=3|F=l54gDc_a!*1CaL_X##S9kv%{<8QBNqI3t}vcCo_4Kt5(YeL(t| zGzerLBUPVRZPfy)jt-!z9#{*DH3In~Bh5etn0qgfpE7a)$oCoP0&;;>x5JC*9ea_T z#CDdJpuC*vDYimz%0`R&^#q_H)O=ntNaB2o=1D_ZN*Hfa#eC_5mH6rh# zLONhfyo<(8hVs-@t%UtI9OggZ=4=~)A&ndpn9Ozz3>e?Ji^h4{_jBc8a~XAFZTBhhvR37L*qj=&(2Y(4Cv2Gqub5$HRm7|6``Mz8f9bxtW z4~{3g7#dIDmYKnL6I>La$l+uTwi5^Dn1 zC$T-ih9$NSSlwxs=mgdzvBSW+B-RIPP-26?>OW$>sv&$6C9&E7&<=^#13N6SMqvFC zYX)XEycgK8tUCa#R=TPS*ba&H0Be$1Kd`+L8v@oLv1&N?u*43)x#%^|Aa)*n5I_}s z_hY$Q_J(;Ec+k6;Tp{lQH@%AqHag^hVg@{LKr`r~?gV#t2e2lI?F4o}Vy(dXfCb`2 zJ2ReS#tvYu66*%mDY0H)gAyA6R&9cuVeAUH|_g!5v8QCdyc=hnZ5myY;KHQ5^}>MYy?yvD+vz^jbrYAP@u zt)_)--v7kTjxQ2c{E+fes$S=RN5jcMq!1wkZ7TPxLv{Yn69|k()PBZZ4|=_X4KIK+;-yQbYtw9c4dO1 z%%BePD&kaoTlM3#!Vz=As!d1b(RSmZ23prPr=E)G5=z_meoD_!Oi;-UrjDYY(dC!w zXoHTxrQ!y}=e8~WZ~6|IA6gr4{(|0viBC7uBzJ6kJHEYc=aiWn{cS zbubVPNU={O3Losg#>Udm$w1o7dzm`7X+f=5LEG-j|OA?OO)kk zIE1XhsC|hpP2tV4Qh{Ziwi|my-SG+m^jbS2+{$HJj%Y@%whq z34BR*T9z8ycE3sQBg<^t_7?q?;fz1gZEEzPtES;KxKlgsX#4HkRIhsO+i>@{Hr;X0 z-S^yb|DCtq^z9ACL!C5hOl^!t*kD>>G>81g0W!v0oiv{g8lHoc=X}(okxLPVG5a8; zI`^X#qlkmXIxbyA$)kuzjqe|%>^ZN;X}B~{l=ygl;)e|HpK%&#inti3B}8+Td_-xC z;t-Gj#Ix~I|L@|prf5SPL>m10L8QM6T}IUhG(CbDhh4_{cj&gbp)y5T7o{lPX^Jw) z&^YoAF0Z*b1&Y1Vim~`zT#QV9m;NK}yQuxMY)(-KN(ziu-=%4?I@xSrRMhJe23-kADS_T>!XHmSk6yMZgzZWxKKF5UpCt&HUVIrWZ{Nhc&YhDp!Dg zCH{iVaNSiXud>vzr@zs2~HmDlUyhjt;mb{10Sn#2f@pv~a zj_-_Bl(FEsqGa{e^NY)oRvYKKDFdgQHuw8vCv|XK+n5jN3m|1}V-7PiFuQHchx7zd zo$;F^RG7FUS5ekO#U1#o#2^2LbB)tS@Lka@MtToTpee@E9?GY+ZJT;1ks=58E80_0 zImSGonK{{U4yDK=Ro733V?40l+NMaqp^k69v# zIi|?qSBR8?#-jXdGCn;<%X3+K4XXJUu05R9Yut65mdn{W{Qt2UzT>$6>_1LpQ&?pM zT=ONBMoKSbMe!h3gPdcCUP_Y1ow9gSuy{Zgx1uO@^?ik|9mexPUFmtO>-}Czi(}Ol zT(tVW*KnMmEIMrDGWd=$?*#3-g8e!>-*i#|ApdyTuC;JBzZXjQ7w(aD`HI-_7e)Ic zEj6Z{Bx43MrenY3-=zw=EoI>frW9a0b}IO+Xo?YaihePdE%^)zWQ$>n#ul1NxxT@w z4_B04h)*)#QM6ZRxX>6lMUTv6&JIh8O$pafW7UUi=!J%cE=7A%8y;u8*heKQ;K@FE zz`-`{Hf}mi`DKiDjx)`>7m$B8`~@fA0o1Y5L8dwJhhN`#4g0=^wZYhb##$;> zNJLoV7C`=mYp+Kgm-#o=xVGO~DnnnxT4THo);!jFXNf8O|7jgAG3K15E2YsrU&GsA z>^@5mj%ROfL1x72%K`Z}O8o?!YmZ=9X|A#696eaX0{&7{;P6)n%q&GN(!&CMrN(FH z=mFWpA1sL~z)PFxfkf>wmZ&v;cHXk7a-!Kp4&bE%)f4d#gN`fO+fKVNYk-!>aXo4Y zbbN)tFzSMyzrol&K$E45=1%&u?r_%hHunYEVvDTlSF|~UayDlg&4XlDd*ocqaN$!| z+$EMHjTr7XjttTixy^qUF5 { it('simple', done => { - const inst = lib.parser(); + const inst = parser(); const dump = []; inst.change.any((id, time, cmd, value, mask) => { dump.push({ @@ -46,6 +46,7 @@ $enddefinitions $end 0XyZ #400 b1010101010101010101010101010101010101010101010101010101010101010 64b +b0001010101010xx010101000000ggg b10101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010 128b b1010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010 256b b10101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010 512b diff --git a/test/napi_basic.js b/test/napi_basic.js index d06e14d..0f19519 100644 --- a/test/napi_basic.js +++ b/test/napi_basic.js @@ -1,22 +1,22 @@ 'use strict'; const expect = require('chai').expect; -const lib = require('../lib/index.js'); +const parser = require('../lib/parser.js'); describe('basic', () => { it('typeof vcd', done => { - expect(lib.parser).to.be.an('function'); + expect(parser).to.be.an('function'); done(); }); it('typeof vcd instance', done => { - expect(lib.parser()).to.be.an('object'); + expect(parser()).to.be.an('object'); done(); }); it('fail: foo bar', done => { - const inst = lib.parser(); + const inst = parser(); expect(inst.write(Buffer.from(' foo bar ???'))).to.eq(true); expect(inst.info).to.deep.eq({ stack: [{}], @@ -27,7 +27,7 @@ describe('basic', () => { }); it('$comment', done => { - const inst = lib.parser(); + const inst = parser(); expect(inst.write(Buffer.from( ' \n $comment some text $end $comment more text $end ???' ))).to.eq(true); @@ -41,7 +41,7 @@ describe('basic', () => { }); it('$version', done => { - const inst = lib.parser(); + const inst = parser(); expect(inst.write(` $version Generated by VerilatedVcd $end $date Wed Sep 18 22:59:07 2019 diff --git a/test/napi_dump.js b/test/napi_dump.js index c17f7fd..ac54bb3 100644 --- a/test/napi_dump.js +++ b/test/napi_dump.js @@ -1,12 +1,12 @@ 'use strict'; const expect = require('chai').expect; -const lib = require('../lib/index.js'); +const parser = require('../lib/parser.js'); describe('dump', () => { it('simple', done => { - const inst = lib.parser(); + const inst = parser(); const dump = []; ['"}G', '{u', 'u)'] // array of all signal ids .map(id => diff --git a/test/napi_events.js b/test/napi_events.js index 3929f6f..099a14d 100644 --- a/test/napi_events.js +++ b/test/napi_events.js @@ -1,12 +1,12 @@ 'use strict'; const expect = require('chai').expect; -const lib = require('../lib/index.js'); +const parser = require('../lib/parser.js'); describe('events', () => { it('$enddefinitions', done => { - const inst = lib.parser(); + const inst = parser(); inst.on('$enddefinitions', () => { expect(inst.info).to.deep.eq({ status: 'simulation', diff --git a/test/wasm_any.js b/test/wasm_any.js index 985dfba..a5e9012 100644 --- a/test/wasm_any.js +++ b/test/wasm_any.js @@ -49,6 +49,7 @@ $enddefinitions $end 0XyZ #400 b1010101010101010101010101010101010101010101010101010101010101010 64b +b0001010101010xx010101000000ggg b10101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010 128b b1010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010 256b b10101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010 512b diff --git a/vcd_spans.c b/vcd_spans.c index e417f83..f1fba78 100644 --- a/vcd_spans.c +++ b/vcd_spans.c @@ -260,6 +260,16 @@ int onDigit( return 0; } +int onRecover( + vcd_parser_t* state, + const unsigned char* p, + const unsigned char* endp, + int digit +) { + state->digitCount = 0; + return 0; +} + int timeSpan(vcd_parser_t* state, const unsigned char* p, const unsigned char* endp) { int64_t time = strtoul((const char *)p, (char **)&endp, 10); if (state->time == INT64_MAX) {