summary refs log tree commit diff
path: root/labels.e
diff options
context:
space:
mode:
Diffstat (limited to 'labels.e')
-rw-r--r--labels.e35
1 files changed, 25 insertions, 10 deletions
diff --git a/labels.e b/labels.e
index 9c91fb6..6ece87e 100644
--- a/labels.e
+++ b/labels.e
@@ -53,16 +53,6 @@ init-labels
   dup { swap drop }
       { drop dup new-label labels swap find-in } if-else ;
 
-: L'
-  word value@
-  interpreter-flags @ 0x01 &
-  { ' litstring entry-to-execution-token ,
-    here @ swap packstring 0 pack8 8 packalign here !
-    ' intern-label entry-to-execution-token ,
-    dropstring }
-  { intern-label dropstring-with-result } if-else
-  ; make-immediate
-
 ~ (label entry pointer -- label value)
 : use-label
   ~ If it hasn't been defined yet, mark it used-before-set.
@@ -98,6 +88,31 @@ init-labels
 ~  -- output memory start, current output point, offset)
 : current-offset 2dup swap - ;
 
+: L'
+  word value@
+  interpreter-flags @ 0x01 &
+  { ' litstring entry-to-execution-token ,
+    here @ swap packstring 8 packalign here !
+    ' intern-label entry-to-execution-token ,
+    dropstring }
+  { intern-label dropstring-with-result } if-else
+  ; make-immediate
+
+: L@'
+  ' L' entry-to-execution-token execute
+  interpreter-flags @ 1 &
+    { ' use-label entry-to-execution-token , }
+    { use-label } if-else
+  ; make-immediate
+
+: L!'
+  ' L' entry-to-execution-token execute
+  interpreter-flags @ 1 &
+    { ' set-label entry-to-execution-token , }
+    { set-label } if-else
+  ; make-immediate
+
+
 ~ For a label to have "converged", at least one of the following must be true:
 ~
 ~ 1. The label must never have been used (bit zero clear);