summaryrefslogtreecommitdiff
path: root/sanctuary.s
diff options
context:
space:
mode:
Diffstat (limited to 'sanctuary.s')
-rw-r--r--sanctuary.s30
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