diff options
| -rw-r--r-- | labels.e | 35 |
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); |