summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--jefs.fs1
-rw-r--r--jefs.s20
2 files changed, 21 insertions, 0 deletions
diff --git a/jefs.fs b/jefs.fs
index b406e63..172e6d0 100644
--- a/jefs.fs
+++ b/jefs.fs
@@ -1,6 +1,7 @@
\ i think something is going on with the stack. i dunno
\ things TODO:
\ EVALUATE
+\ CASE
\ DO LOOP
\ <builds does>
\ argc/argv
diff --git a/jefs.s b/jefs.s
index b76eb11..03436f6 100644
--- a/jefs.s
+++ b/jefs.s
@@ -218,6 +218,8 @@ defword "sp", _sp, 0
defword "parse", parse, 0
mov r13, qword [to_in]
add r13, qword [tib]
+ mov r10, qword [tib]
+ add r10, qword [num_tib]
mov r12b, byte [r13]
.wsloop: ; skip initial ws
@@ -229,10 +231,14 @@ defword "parse", parse, 0
jne .wordloop_start
.wsloop_cont:
inc r13
+ cmp r13, r10
+ jge .empty
mov r12b, byte [r13]
jmp .wsloop
.wordloop_start:
+ cmp r13, r10
+ jge .empty
push r13 ; keep start address of this word for later
mov r11, 1 ; W: word length count
.wordloop:
@@ -243,6 +249,8 @@ defword "parse", parse, 0
inc r11
inc r13
+ cmp r13, r10
+ jge .wordloop_end
mov r12b, byte [r13]
jmp .wordloop
@@ -255,6 +263,12 @@ defword "parse", parse, 0
pspush r11 ; u
ret
+.empty:
+ xor r13, r13
+ pspush r13
+ pspush r13
+ ret
+
; segfault issue is in here i think?
; on second go around only one value is returned?
defword "cparse", cparse, 0
@@ -326,6 +340,8 @@ defword "find", find, 0
defword "interpret", interpret, 0
.loop:
call parse
+ cmp qword [r14], 0
+ je .input_over
call twodup
call find
mov r12, qword [state]
@@ -386,6 +402,10 @@ defword "interpret", interpret, 0
jmp .loop
ret
+.input_over:
+ call twodrop
+ ret
+
defword "immediate?", immediate_q, 0 ; ( lfa -- flag )
pspop r11
add r11, 8