From d8a6456206f767ee1e673e5fc16e4c64e4e2facf Mon Sep 17 00:00:00 2001 From: Virgil Dupras Date: Mon, 25 May 2020 21:15:07 -0400 Subject: [PATCH] (parsed): fix crash on parsing non-decimal staring with '-' The address returned in the error condition would be off by one. --- blk/354 | 1 + blk/357 | 15 ++++++--------- blk/367 | 1 - emul/forth.bin | Bin 6196 -> 6189 bytes 4 files changed, 7 insertions(+), 10 deletions(-) diff --git a/blk/354 b/blk/354 index 6c1919a..9471640 100644 --- a/blk/354 +++ b/blk/354 @@ -7,6 +7,7 @@ : MIN ( n n - n ) 2DUP > IF SWAP THEN DROP ; : MAX ( n n - n ) 2DUP < IF SWAP THEN DROP ; : NIP SWAP DROP ; : TUCK SWAP OVER ; +: -^ SWAP - ; : C@+ ( a -- a+1 c ) DUP C@ SWAP 1+ SWAP ; : C!+ ( c a -- a+1 ) TUCK C! 1+ ; : C@- ( a -- a-1 c ) DUP C@ SWAP 1- SWAP ; diff --git a/blk/357 b/blk/357 index 0d3eaf3..65b827f 100644 --- a/blk/357 +++ b/blk/357 @@ -1,11 +1,8 @@ -: _ ( a+1 len -- n f ) - OVER C@ ( a len c ) - '-' = IF - 1- SWAP 1+ SWAP ( a+1 len-1 ) _ 0 ROT ( f 0 n ) - - SWAP EXIT ( 0-n f ) - THEN ( a len ) - 0 SWAP ( len ) 0 DO ( a r ) +: (parsed) ( a -- n f ) + C@+ OVER C@ 0 ( a len firstchar startat ) + SWAP '-' = IF 1+ THEN ( a len startat ) + 0 ROT ROT ( len ) ( startat ) DO ( a r ) OVER I + C@ ( a r c ) _pdacc ( a r f ) IF DROP 1- 0 UNLOOP EXIT THEN LOOP ( a r ) - NIP 1 ; -: (parsed) ( a -- n f ) C@+ ( a+1 l ) _ ; + ( negate if needed ) + SWAP C@ '-' = IF 0 -^ THEN 1 ( r 1 ) ; diff --git a/blk/367 b/blk/367 index 619d14e..7e21ebf 100644 --- a/blk/367 +++ b/blk/367 @@ -3,7 +3,6 @@ DUP C@ 128 OR SWAP C! ; : IMMED? 1- C@ 0x80 AND ; : +! TUCK @ + SWAP ! ; -: -^ SWAP - ; : / /MOD NIP ; : MOD /MOD DROP ; : ALLOT HERE +! ; diff --git a/emul/forth.bin b/emul/forth.bin index 0fa74cef66f8907e8811d1e165940c9371e8f2d1..9cd6b223972bce201e8ad566563f85ad8c20b9eb 100644 GIT binary patch delta 2066 zcmY*aZ%i9y7=P~GYp=bwceLfo=Ikh?8+3GZ%cA0BjvfO?_)}~P%Glh<1_a$;0j4Z5 zTjz#iT=s$2m?cYQWSLovh-MOlBqnUxKA2^GAbub^MP`g6n5bdPB&qm3SJ0W}dheg- z@9%kj&wajSbc_AEUAVqc0C@PB-7hPfU$TR!M#Tu@A^D5;;-hW7eeH+Bm0(lLCeAWH8)F~Ko#2E*aSm_J%Lb(3m*ptxt?F1|R4S1t zBm=Ux4~AR#bG9qmXDuNU^b)c%I)-LM=1OAe%ucl5vBi&M4E;mr6!BuXKV9 zo!`T|n0SdzON;gxrdkSdORF^|4k_P@on|sKN`%cxGs-2F)w!o6F{Bx8I2y#L$}c(! zd_xWcigpr|8Rb(8u5BQwQ~X;;n}5L(00s*vP#(i$yBT%Rb&EHO!{*xg%un4XCbbO732R`P|22s^0UeDPBS4IILy_Qlb8`Vjmem`$2ZiG?6u1 zuo0CfOmCFzk*U9t=hr%NiAYjGk*!!F)J_27{nu1xKZ@ zvL`1aj95zKIpo?Ugt8PR-cVo93Bd)8$`Lc-iB!-HZ>ksZY@1bA__drw@ql(y+QFt! zIRH;X-@gD3Xh~Q=S366w35OZ*a`%%bKg2f7fi_m|9?PfWu5h^4Z{yKveshAM^x; zYW}8YtDf(n4x#X-P->7(NK=*}e#?{Z>hc7@0v!m$gXJmy&=Zu09HjjdFYuPiEGq0bSq$%?O+zw&nTS=@MFRgcs7Rn(_Wfah2jaB z>{434VpeImhG5q;q^c5)iK!v)kaV$UlVv?Yyi%Y8z) z%e!(53)89v!=R}%$U;z_OL)?HLJA-uXtl`4a!Z6X|1NjEOjPl+1H-zn2;58Bf!s7K zQdh-eyAmaSBz#sNDz3gIzC&NrvQsBQVkZ@Ba+)Alpk>-pXNV8Y}Fcj?GXD_pj} z8}TLK2P$RtRx^N3)15gfaeAkASE0Kz$Pc2b!QFY@B3;Seig_az0rA9;%GZ(%o)f(@ z!WcHzIbNIRKly0rO%17YuEZF3%?(U`-`GqjRtWxT$z xrmo5ZZ>hH&ALOkbx2~M;^TFGAL5MtKLwh0oeClo`Ypu0tUk;omJ^nDS{2!fo?&<&l delta 2133 zcmY*aUu;|D6+icW*SYq+_Py6moHP|#T*ov?YhoA!1Z!!1U8h($c4WI9Q|Kbobx}pr zhNgSy%N)o;1&a2NPu-^R0*MeHVTDOUldC>J(NH#Nm8L{{nAWwb5TFQzDi2mstn7EL zQ`jD^eZTXaf4_5n=iK`Jf4D#JK|uLnw?ee_`#_&AzpuYro7_i=l~z|pjP9d}jw$M< zn_5a;$8%k;Ynw_^q*RycIM=lXrPUjvPppbp^(hL{fO=D_Ym2%|bM*06SZ`=94b4=~ z&Yt+`@DcJ`N&PzR+LGhLHY6=&UE^4Th?Q1jBq#kB?O*s?%JT?q&?15?N)b3`_Xhr7 z_F^EmGv}Woja+(f`#%$CpC9qd_X3~yB@CA;#UB+*hivMw>e_(%1)R(qevwwC{ELzJ z@rJP=HlW2iVbZJ(V_kdKXerW|B0qwEguAr5BG$Dp0-W6l6@8rNyzx(U3J6o`hLIFE zwGCrMv~4~z%1CKL9ySZseLt~DwNh$QxRmnC-KKGx|Atp)0J!p)%heCBa^sd zN7JQT+RY;azx5wTRk|##P|{pCTS_c+29Dm6+0dRJIMB@$3*}0>P#N@e9b+Q2gfJ7i z(PK99Z#N@O9TSx&vV~(U<+fZ2{agvkUaP-$*<3N|+BcyE@u9YfUzgncle_MP*(RL) z1J5<3eecp}{z&!#ib4?Ney`lphTtv%lMG&@7K<3=%Mmd6$L!UBe>!V}V9~x~7yhp!!%kPEst} zO?kk%XOg)ZqqsMNZCnX(YjX>+bCq~M{Sq$Y}Ki#6EB=uw*ewt_XgOrIgrff3MiN$B#S z@WT(+K~RUPA``CJ{2<6vy?YP z%AK7f`epM=UxEU%*f}Vgwl2?i4%9B7u8x=A4b1&aXVZ?+LAoLKi=fpf7~4VWLuL)g zR&jp0lNZ&1dRAw@jOJ6InWHPHU#?Kemc~oj%25hnYZDVy?{u7QCIRuI|o7FrMq%5-rh`MsgVz@C|>%D#0 z4{ei_diURqf>Q_g?C_ZVI70K0nLQd^60#KSRgTM3(R=zU(M_da=WoPwQSLtPt)c1a z$G9eyllRVMa#*dVMbdw(6j7QP){VduNQZ>A?HDFDXSplMXYT% zdpK9vK?_*?DEr}bu3+GhYCHK3;gLcmm+!_+g4(&