From 973eba9f0a6c844100c7bc0f9a97db43d38d7dc6 Mon Sep 17 00:00:00 2001 From: Camden Dixie O'Brien Date: Fri, 27 Feb 2026 22:56:26 +0000 Subject: [PATCH] Fix NUMBER? I wasn't able to keep the length the same so had to update the addresses of , IMMEDIATE? INTERPRET QUIT and the cold start (and therefore also the values of LATEST and HERE). --- wipforth.wat | 41 ++++++++++++++++++++++------------------- 1 file changed, 22 insertions(+), 19 deletions(-) diff --git a/wipforth.wat b/wipforth.wat index 3febec1..2d84843 100644 --- a/wipforth.wat +++ b/wipforth.wat @@ -1068,13 +1068,13 @@ "\64\05\00\00" "\04HERE\00\00\00" "\02\00\00\00" - "\a8\0b\00\00") + "\b0\0b\00\00") (data (i32.const 0x058c) "\78\05\00\00" "\06LATEST\00" "\02\00\00\00" - "\7c\0b\00\00") + "\84\0b\00\00") (data (i32.const 0x05a0) "\8c\05\00\00" @@ -1421,7 +1421,8 @@ ;; : NUMBER? ( len -- value TRUE | FALSE ) ;; WORDBUF \ Initial address ;; - ;; C@ 45 = 0BRANCH [56] \ Check for minus sign + ;; DUP C@ 45 = 0BRANCH [60] \ Check for minus sign + ;; 1+ \ Increment address ;; SWAP 1- \ Decrement length ;; DUP 0BRANCH [24] \ Check if any characters remain ;; TRUE -ROT \ Set negate flag true @@ -1460,12 +1461,14 @@ "\07NUMBER?" "\00\00\00\00" "\ac\05\00\00" ;; WORDBUF + "\08\02\00\00" ;; DUP "\fc\03\00\00" ;; C@ "\18\04\00\00" ;; LIT "\2d\00\00\00" ;; 45 "\fc\02\00\00" ;; = "\b4\04\00\00" ;; 0BRANCH - "\38\00\00\00" ;; 56 + "\3c\00\00\00" ;; 60 + "\90\02\00\00" ;; 1+ "\28\02\00\00" ;; SWAP "\9c\02\00\00" ;; 1- "\08\02\00\00" ;; DUP @@ -1519,11 +1522,11 @@ "\34\05\00\00" ;; TRUE "\0c\04\00\00") ;; EXIT - ;; => 0xfc bytes + ;; => 0x104 bytes ;; : , HERE @ ! 4 HERE +! ; - (data (i32.const 0x0a4c) + (data (i32.const 0x0a54) "\50\09\00\00" "\01,\00\00" "\00\00\00\00" @@ -1540,8 +1543,8 @@ ;; : IMMEDIATE? 4+ @ 128 AND 0BRANCH [12] TRUE EXIT FALSE ; - (data (i32.const 0x0a78) - "\4c\0a\00\00" + (data (i32.const 0x0a80) + "\54\0a\00\00" "\0aIMMEDIATE?\00" "\00\00\00\00" "\a8\02\00\00" ;; 4+ @@ -1586,8 +1589,8 @@ ;; DROP 1 ERROR ! ;; ; - (data (i32.const 0x0ab8) - "\78\0a\00\00" + (data (i32.const 0x0ac0) + "\80\0a\00\00" "\09INTERPRET\00\00" "\00\00\00\00" "\74\06\00\00" ;; WORD @@ -1599,7 +1602,7 @@ "\28\02\00\00" ;; SWAP "\18\02\00\00" ;; DROP "\08\02\00\00" ;; DUP - "\88\0a\00\00" ;; IMMEDIATE? + "\90\0a\00\00" ;; IMMEDIATE? "\b4\03\00\00" ;; INVERT "\b4\04\00\00" ;; 0BRANCH "\20\00\00\00" ;; 32 @@ -1608,7 +1611,7 @@ "\b4\04\00\00" ;; 0BRANCH "\10\00\00\00" ;; 16 "\28\08\00\00" ;; >CFA - "\54\0a\00\00" ;; , + "\5c\0a\00\00" ;; , "\0c\04\00\00" ;; EXIT "\28\08\00\00" ;; >CFA "\24\04\00\00" ;; >R @@ -1625,8 +1628,8 @@ "\b4\04\00\00" ;; 0BRANCH "\10\00\00\00" ;; 16 "\00\05\00\00" ;; LIT-CFA - "\54\0a\00\00" ;; , - "\54\0a\00\00" ;; , + "\5c\0a\00\00" ;; , + "\5c\0a\00\00" ;; , "\0c\04\00\00" ;; EXIT "\18\02\00\00" ;; DROP "\18\04\00\00" ;; LIT @@ -1639,13 +1642,13 @@ ;; : QUIT R0 RSP! INTERPRET BRANCH [-8] ; - (data (i32.const 0x0b7c) - "\b8\0a\00\00" + (data (i32.const 0x0b84) + "\c0\0a\00\00" "\04QUIT\00\00\00" "\00\00\00\00" "\10\05\00\00" ;; R0 "\50\04\00\00" ;; RSP! - "\c8\0a\00\00" ;; INTERPRET + "\d0\0a\00\00" ;; INTERPRET "\a4\04\00\00" ;; BRANCH "\f8\ff\ff\ff" ;; -8 "\0c\04\00\00") ;; EXIT @@ -1654,7 +1657,7 @@ ;; Cold start - (data (i32.const 0x0ba4) "\88\0b\00\00") ;; QUIT + (data (i32.const 0x0bac) "\90\0b\00\00") ;; QUIT ;; The trampoline is a workaround for WebAssembly's lack of indirect ;; jumps and code addresses. Instead of jumping into the next @@ -1675,6 +1678,6 @@ (func (export "reset") i32.const 0x10000 global.set $rsp ;; Set the return stack pointer i32.const 0xf000 global.set $sp ;; Set the stack pointer - i32.const 0x0ba4 global.set $ip ;; Set the IP to the cold start + i32.const 0x0bac global.set $ip ;; Set the IP to the cold start call $next call $trampoline))