summaryrefslogtreecommitdiff
path: root/jefs.fs
diff options
context:
space:
mode:
Diffstat (limited to 'jefs.fs')
-rw-r--r--jefs.fs22
1 files changed, 19 insertions, 3 deletions
diff --git a/jefs.fs b/jefs.fs
index a806945..771c53c 100644
--- a/jefs.fs
+++ b/jefs.fs
@@ -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