summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkitty <nepeta@canaglie.net>2026-03-05 15:19:41 +1100
committerkitty <nepeta@canaglie.net>2026-03-05 15:19:41 +1100
commitfbbb6a1a2ab51dd7ed94e2ffa48bcde61df8ea7f (patch)
treecde36fa4c03bbdccc97b374d1bcb6dd59e767a55
parente49e8042537c7cf57139c8ddac9c1497af3ee280 (diff)
error table
-rw-r--r--jefs.fs19
1 files changed, 12 insertions, 7 deletions
diff --git a/jefs.fs b/jefs.fs
index f26a8af..f459702 100644
--- a/jefs.fs
+++ b/jefs.fs
@@ -257,15 +257,19 @@ decimal
: .free bytes-free u. ." of " bytes-allocated u. ." bytes free (used " bytes-used (.) say ." )" cr ;
\ }}}
+5 constant #error-msgs
+make error-msgs #error-msgs cells allot
+: set-error ( xt -- ) cells error-msgs + ! ;
+: write-error cells error-msgs + @ execute ;
+:> ." no error" ; 0 set-error
+:> ." stack underflow" ; 1 set-error
+:> ." word not found" ; 2 set-error
+:> ." compile mode only" ; 3 set-error
+:> ." interpret mode only" ; 4 set-error
+
: #bye ( code -- ) 60 syscall1 ;
\ maybe this would be more elegant as a table?
-:> >s0 error @ dup case
- 1 of ." stack underflow" endof
- 2 of ." word not found" endof
- 3 of ." compile mode only" endof
- 4 of ." interpret mode only" endof
- ." unknown error"
- endcase cr #bye ; to handler
+:> >s0 error @ dup write-error cr #bye ; to handler
: fuck ( n -- ) error ! handler execute ;
: >ffa ( lfa -- ffa ) 8 + ;
@@ -350,6 +354,7 @@ make line-buffer line-buffer-length allot
0 >in ! line-buffer tib ! line-buffer line-buffer-length accept
0= if ?dup if false [ ret, ] then then #tib ! true ;
+\ bug: C-d causes stack underflow
: quit 0 to source-id [compile] [ begin refill while interpret ." ok" cr repeat ;
\ }}}