diff --git a/src/waforth.wat b/src/waforth.wat index 19e2b94..66ae8fb 100644 --- a/src/waforth.wat +++ b/src/waforth.wat @@ -76,7 +76,7 @@ (define !typeIndex #x85) (define !abortIndex #x39) -(define !nextTableIndex #xa5) +(define !nextTableIndex #xa6) (define (!+ x y) (list (+ x y))) @@ -1533,10 +1533,25 @@ (data (i32.const #x21858) "\u004c\u0018\u0002\u0000" "\u0003" "NIP" "\u00a4\u0000\u0000\u0000") (elem (i32.const #xa4) $TUCK) + (func $UWIDTH + (local $v i32) + (local $r i32) + (local $base i32) + (set_local $v (call $pop)) + (set_local $base (i32.load (i32.const !baseBase))) + (block $endLoop + (loop $loop + (br_if $endLoop (i32.eqz (get_local $v))) + (set_local $r (i32.add (get_local $r) (i32.const 1))) + (set_local $v (i32.div_s (get_local $v) (get_local $base))) + (br $loop))) + (call $push (get_local $r))) + (data (i32.const #x21864) "\u0058\u0018\u0002\u0000" "\u0006" "UWIDTH0" "\u00a5\u0000\u0000\u0000") + (elem (i32.const #xa5) $UWIDTH) + + ;; High-level words (!prelude #<<EOF - : UWIDTH BASE @ / ?DUP IF RECURSE 1+ ELSE 1 THEN ; - \ 6.1.2320 : U. BASE @ /MOD @@ -2372,8 +2387,8 @@ EOF ;; words start. (table (export "table") !nextTableIndex anyfunc) - (global $latest (mut i32) (i32.const #x21858)) - (global $here (mut i32) (i32.const #x21864)) + (global $latest (mut i32) (i32.const #x21864)) + (global $here (mut i32) (i32.const #x21874)) (global $nextTableIndex (mut i32) (i32.const !nextTableIndex)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;