diff options
Diffstat (limited to 'jefs.fs')
| -rw-r--r-- | jefs.fs | 20 |
1 files changed, 17 insertions, 3 deletions
@@ -1,3 +1,12 @@ +\ i think something is going on with the stack. i dunno +\ things TODO: +\ EVALUATE +\ DO LOOP +\ <builds does> +\ argc/argv +\ file io +\ interactive input + : cell+ 8 + ; : syswrite ( u c-addr fd -- n ) 1 syscall3 ; : say ( c-addr u -- ) swap 2 syswrite drop ; @@ -33,7 +42,7 @@ hex : ret, c3 c, ; decimal : >resolve dup here @ swap - 4 - swap d! ; : begin <mark ; immediate -: again branch <resolve ; immediate \ add 4 to get to beginning of the next instruction +: again branch <resolve ; immediate : until 0branch <resolve ; immediate : if 0branch >mark ; immediate ( I: -- a ) : else branch >mark swap >resolve ; immediate @@ -68,7 +77,6 @@ variable modrm : rex.b rex @ 41 or rex ! ; : rex, rex @ ?dup if c, then ; - \ REGISTERS {{{ : rax modrm @ 0 or modrm ! ; : rcx modrm @ 1 or modrm ! ; : rdx modrm @ 2 or modrm ! ; : rbx modrm @ 3 or modrm ! ; @@ -168,10 +176,16 @@ variable hld : bytes-free bytes-allocated bytes-used - ; : .free bytes-free u. ." of " bytes-allocated u. ." bytes free (used " bytes-used (.) say ." )" cr ; -: >nfa ( lfa -- nfa ) 9 + ; : >ffa ( lfa -- ffa ) 8 + ; +: >nfa ( lfa -- nfa ) 9 + ; : (words) ( lfa -- ) >nfa dup w@ swap 2 + swap say 2 spaces ; : words latest @ begin ?dup 0<> while dup (words) @ repeat cr ; +\ TODO fix/rewrite interpreter to respect #tib +\ : (evaluate) ( c-addr u -- ) .s 0 >in ! ( u ) #tib ! ( c-addr ) tib ! interpret ; +: (evaluate) ( c-addr u -- ) .s 2drop ; +: evaluate ( c-addr u -- ) >r >r tib @ #tib @ >in @ r> r> (evaluate) >in ! #tib ! tib ! ; + +TESTSTR evaluate .free bye |
