X-Git-Url: https://git.kengrimes.com/?p=watForth.git;a=blobdiff_plain;f=forth.wat;fp=forth.wat;h=666cc818a562b4883e3d980ab85a9854c460967e;hp=61cbb2238a83b51ed204844b6302a1d782a55e92;hb=94d40c7e5521898acd394ca7a3e30cf20065ee5c;hpb=63e17ddc993a5a04cc6ae55bad8420b61c37d1bf diff --git a/forth.wat b/forth.wat index 61cbb22..666cc81 100644 --- a/forth.wat +++ b/forth.wat @@ -28,13 +28,13 @@ (import "env" "sys_fetch" (func $sys_fetch (param i32 i32) (result i32))) (import "env" "sys_listen" (func $sys_listen (param i32) (result i32))) (import "env" "sys_write" (func $sys_write (param i32 i32 i32) (result i32))) - (import "env" "sys_echo" (func $sys_echo (param i32))) + (import "env" "sys_echo" (func $sys_echo (param i32 i32))) (import "env" "sys_echochar" (func $sys_echochar (param i32))) (import "env" "sys_reflect" (func $sys_reflect (param i32))) (import "env" "vocab_get" (func $vocab_get (param i32 i32) (result i32))) (import "env" "vocab_set" (func $vocab_set (param i32 i32 i32))) - (import "env" "does_get" (func $does_get (param i32) (result i32))) - (import "env" "does_set" (func $does_set (param i32 i32))) + (import "env" "does_get" (func $does_get (param i32 i32) (result i32))) + (import "env" "does_set" (func $does_set (param i32 i32 i32))) (import "env" "is_whitespace" (func $is_whitespace (param i32) (result i32))) (import "env" "sys_parsenum" (func $sys_parsenum (param i32 i32 i32) (result i32))) (import "env" "sys_stack" (func $sys_stack)) @@ -177,9 +177,14 @@ i32.const 14340 i32.load set_local $here + (; Load "start" into esi, then restore "start" to "quit" ;) i32.const 14344 i32.load set_local $esi + i32.const 14344 + i32.const 16384 + i32.store + (; "start" will be a normal quit, unless cirumvented in this run ;) get_global $inbuf_data set_local $inbuf_head i32.const 14352 @@ -215,7 +220,7 @@ block $words block $here block $dictset block $dup2 block $rot block $drop2 block $comma block $subtract block $keychan block $sethere block $eqbool block $echostring block $strstart block $strput block $strend block $fetchinc - block $setinc block $finddoes block $definedoes + block $setinc block $finddoes block $definedoes block $stacktrace get_local $eax br_table $op0 $ret (;2;)$lit $rinit (;4;)$word $key (;6;)$dup $plus (;8;)$jmp $emit (;10;)$fetch $set (;12;)$execute $noop (;14;)$jz $jnz @@ -224,16 +229,27 @@ (;28;)$here $dictset (;30;)$dup2 $rot (;32;)$drop2 $comma (;34;)$subtract $keychan (;36;)$sethere $eqbool (;38;)$echostring $strstart (;40;)$strput $strend (;42;)$fetchinc $setinc (;44;)$finddoes $definedoes - (;46;)$default + (;46;)$stacktrace $default + end ;; stacktrace + call $sys_stack + get_local $esi + call $sys_reflect + br $next end ;; definedoes + call $pop + call $rpush call $pop set_local $eax call $pop get_local $eax + call $rpop call $does_set br $next end ;; finddoes call $pop + set_local $eax + call $pop + get_local $eax call $does_get call $push br $next @@ -662,6 +678,8 @@ br $next end ;; emit (.) call $pop + i32.const 14348 + i32.load call $sys_echo br $next end ;; noop2