diff options
Diffstat (limited to 'jefs.fs')
| -rw-r--r-- | jefs.fs | 22 |
1 files changed, 19 insertions, 3 deletions
@@ -1,6 +1,9 @@ \ i think something is going on with the stack. i dunno \ things TODO: +\ better error handling +\ :noname \ DO LOOP +\ s\" \ <builds does> \ argc/argv \ file io @@ -8,7 +11,7 @@ : cell+ 8 + ; : syswrite ( u c-addr fd -- n ) 1 syscall3 ; -: say ( c-addr u -- ) swap 2 syswrite drop ; +: say ( c-addr u -- ) swap 1 syswrite drop ; : emit ( chr -- ) sp cell+ 1 swap 1 syswrite 2drop ; : cr 10 emit ; @@ -60,7 +63,6 @@ hex : ret, c3 c, ; decimal \ }}} \ TODO interpret mode strings? -\ i think s" causes stack underflow : s" 1 >in +! [ char " ] literal cparse branch >mark >r 2dup cmove, r> >resolve swap [compile] lit [compile] lit ; immediate : ." [compile] s" ' say compile, ; immediate \ lol this word breaks the highlighting, here have another " @@ -181,11 +183,22 @@ variable hld : ? @ . ; : .s sp cell+ ( skip sp itself ) begin dup s0 @ > while dup @ .qword cell+ repeat drop cr ; +: .rs rp cell+ ( skip rsp itself ) begin dup rs0 @ > while dup @ .qword cell+ repeat drop cr ; : bytes-allocated hend @ h0 @ - ; : bytes-used here @ h0 @ - ; : bytes-free bytes-allocated bytes-used - ; : .free bytes-free u. ." of " bytes-allocated u. ." bytes free (used " bytes-used (.) say ." )" cr ; +\ FUCK is BYE but it takes an error code. its called that because you call it when shit is fucked. +: fuck ( code -- ) 60 syscall1 ; +\ TODO broken as shit +: (handler) error @ dup case + 1 of ." stack underflow" endof + 2 of ." word not found" endof + ." unknown error" + endcase cr fuck ; +\ : _ ' (handler) handler ! ; _ \ so broken that it breaks Seer + : >ffa ( lfa -- ffa ) 8 + ; : >nfa ( lfa -- nfa ) 9 + ; : (words) ( lfa -- ) >nfa dup w@ swap 2 + swap say 2 spaces ; @@ -194,7 +207,10 @@ variable hld : (evaluate) ( c-addr u -- ) 0 >in ! ( u ) #tib ! ( c-addr ) tib ! interpret ; : evaluate ( c-addr u -- ) tib @ >r #tib @ >r >in @ >r (evaluate) r> >in ! r> #tib ! r> tib ! ; -: teststr3 s" 1 2 3 .s 2drop drop" ; +: teststr3 s" 1 2 3 2drop drop" ; teststr3 evaluate +\ FILE I/O {{{ +\ }}} + .free bye |
