From b4407f08583b8c59db5430f5c4cda1a8a355e09a Mon Sep 17 00:00:00 2001 From: kitty Date: Thu, 26 Feb 2026 16:09:37 +1100 Subject: handle end of input in PARSE (todo: this in cparse) --- jefs.fs | 1 + jefs.s | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+) 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 \ \ 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 -- cgit v1.2.3