summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkitty <nepeta@canaglie.net>2026-02-27 00:12:50 +1100
committerkitty <nepeta@canaglie.net>2026-02-27 00:12:50 +1100
commitb2c1fec326315d6f38c8b7c2c392539bf6df58c2 (patch)
treef6d5052895bbb48ab2fcb7fbc8f3528b6475e385
parent0cb56caeb9ce0d61275a6d19e7553df5ed86a9cf (diff)
fix new handler
just reset the stack at the error
-rw-r--r--jefs.fs16
-rw-r--r--jefs.s7
2 files changed, 18 insertions, 5 deletions
diff --git a/jefs.fs b/jefs.fs
index 771c53c..21c1b3e 100644
--- a/jefs.fs
+++ b/jefs.fs
@@ -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
diff --git a/jefs.s b/jefs.s
index 5f27236..f7ad9ac 100644
--- a/jefs.s
+++ b/jefs.s
@@ -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