diff options
Diffstat (limited to 'sanctuary.s')
| -rw-r--r-- | sanctuary.s | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/sanctuary.s b/sanctuary.s index a209303..d5e387f 100644 --- a/sanctuary.s +++ b/sanctuary.s @@ -315,12 +315,22 @@ defcode "interpret", interpret, 0 cmp r11, false je .intrpnum + call dup + call compile_only_q + pspop r13 + cmp r13, true + je .componly + .callw: ; label here for immed jump call to_body pspop r13 call r13 jmp .loop +.componly: + call dots + call abort + .intrpnum: call number pspop r11 @@ -378,6 +388,17 @@ defcode "immediate?", immediate_q, 0 pspush r13 ret +defcode "compile-only?", compile_only_q, 0 + pspop r11 + add r11, 8 + mov r12b, byte [r11] + xor r13, r13 + test r12b, comp_only_mask + setnz r13b + neg r13 + pspush r13 + ret + defcode ">body", to_body, 0 pspop r11 add r11, 9 @@ -505,6 +526,15 @@ defcode "immediate", immediate, 0 mov byte [r12], r13b ret +defcode "compile-only", compile_only, 0 + mov r12, [latest] + add r12, 8 + mov r13b, [r12] + mov r14b, comp_only_mask + or r13b, r14b + mov byte [r12], r13b + ret + defcode "char", char, 0 call parse_name call drop |
