diff options
| author | kitty <nepeta@canaglie.net> | 2026-03-05 15:19:41 +1100 |
|---|---|---|
| committer | kitty <nepeta@canaglie.net> | 2026-03-05 15:19:41 +1100 |
| commit | fbbb6a1a2ab51dd7ed94e2ffa48bcde61df8ea7f (patch) | |
| tree | cde36fa4c03bbdccc97b374d1bcb6dd59e767a55 | |
| parent | e49e8042537c7cf57139c8ddac9c1497af3ee280 (diff) | |
error table
| -rw-r--r-- | jefs.fs | 19 |
1 files changed, 12 insertions, 7 deletions
@@ -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 ; \ }}} |
