diff options
| author | kitty <nepeta@canaglie.net> | 2026-02-27 00:12:50 +1100 |
|---|---|---|
| committer | kitty <nepeta@canaglie.net> | 2026-02-27 00:12:50 +1100 |
| commit | b2c1fec326315d6f38c8b7c2c392539bf6df58c2 (patch) | |
| tree | f6d5052895bbb48ab2fcb7fbc8f3528b6475e385 | |
| parent | 0cb56caeb9ce0d61275a6d19e7553df5ed86a9cf (diff) | |
fix new handler
just reset the stack at the error
| -rw-r--r-- | jefs.fs | 16 | ||||
| -rw-r--r-- | jefs.s | 7 |
2 files changed, 18 insertions, 5 deletions
@@ -2,6 +2,7 @@ \ things TODO: \ better error handling \ :noname +\ asciiz strings (for syscalls) \ DO LOOP \ s\" \ <builds does> @@ -192,12 +193,12 @@ variable hld \ 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 +: (handler) >s0 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 +: _ ' (handler) handler ! ; _ \ i should do immediate ' at some point : >ffa ( lfa -- ffa ) 8 + ; : >nfa ( lfa -- nfa ) 9 + ; @@ -207,10 +208,15 @@ 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 2drop drop" ; -teststr3 evaluate - \ FILE I/O {{{ +\ for syswrite see the top of the file +0 constant stdin +1 constant stdout +2 constant stderr \ }}} +: teststr3 s" 1 2 3 2drop drop" ; +teststr3 evaluate + +drop .free bye @@ -1093,6 +1093,13 @@ defword "(handler)", brac_handler, 0 syscall ret +; used in later error handler; +; just say 'fuck the stack' and put it back to s0. +; this avoids any stack fuckery happening inside the handler. +defword ">s0", to_s0, 0 + mov r14, wstack + ret + ; TEMPORARY HORRIBLE DEBUGGING BULLSHIT {{{ ; debugging word; outputs raw bytes so needs to be piped through `x(x)d` ; terrible and awful |
