diff options
Diffstat (limited to 'jefs.s')
| -rw-r--r-- | jefs.s | 20 |
1 files changed, 20 insertions, 0 deletions
@@ -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 |
