From f206829ac1a58a27657e1c264aabdd2cc760ff28 Mon Sep 17 00:00:00 2001 From: Irene Knapp Date: Thu, 7 May 2026 19:08:51 -0700 Subject: add new words L@' and L!' wow it feels strange having a clear meaning associated with line noise like that Force-Push: yes Change-Id: If3d101234a9b8798c88f6b90090479b2866f5406 --- labels.e | 35 +++++++++++++++++++++++++---------- 1 file changed, 25 insertions(+), 10 deletions(-) (limited to 'labels.e') 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); -- cgit 1.4.1