summary refs log tree commit diff
path: root/transform.e
diff options
context:
space:
mode:
Diffstat (limited to 'transform.e')
-rw-r--r--transform.e71
1 files changed, 55 insertions, 16 deletions
diff --git a/transform.e b/transform.e
index d4c1c43..d917601 100644
--- a/transform.e
+++ b/transform.e
@@ -479,9 +479,6 @@ allocate-transform-state s" transform-state" variable
   dup s" .hex32" stringcmp 0 = { drop -1 exit } if
   dup s" .hex64" stringcmp 0 = { drop -1 exit } if
   dup s" .hexn" stringcmp 0 = { drop -2 exit } if
-  ~ The following is a deliberate omission: s0.
-  dup s" stack" stringcmp 0 = { drop 0 exit } if
-  dup s" stackhex" stringcmp 0 = { drop 0 exit } if
 
   ~ From amd64.e.
   dup s" :rax" stringcmp 0 = { drop 1 exit } if
@@ -691,8 +688,44 @@ allocate-transform-state s" transform-state" variable
   dup s" pack-pushcontrol" stringcmp 0 = { drop -1 exit } if
   dup s" pack-popcontrol" stringcmp 0 = { drop -1 exit } if
 
-  ~ Word not provided statically, but used during the log-load routine anyway.
+  ~ From dynamic.e.
+  dup s" stack" stringcmp 0 = { drop 0 exit } if
+  dup s" stackhex" stringcmp 0 = { drop 0 exit } if
+  dup s" is-in-log" stringcmp 0 = { drop 0 exit } if
+  dup s" oldest-entry" stringcmp 0 = { drop 1 exit } if
+  dup s" next-newer-entry" stringcmp 0 = { drop 0 exit } if
+  dup s" guess-entry-end" stringcmp 0 = { drop 0 exit } if
+  dup s" containing-entry" stringcmp 0 = { drop 0 exit } if
+  dup s" is-assembly-word" stringcmp 0 = { drop 0 exit } if
+  dup s" is-docol-itself" stringcmp 0 = { drop 0 exit } if
+  dup s" is-docol-codeword" stringcmp 0 = { drop 0 exit } if
+  dup s" is-docol-interpreted-word" stringcmp 0 = { drop 0 exit } if
+  dup s" is-codeword-pointer" stringcmp 0 = { drop 0 exit } if
+  dup s" indent" stringcmp 0 = { drop -1 exit } if
+  dup s" word-heading" stringcmp 0 = { drop -1 exit } if
+  dup s" list-dictionary" stringcmp 0 = { drop 0 exit } if
+  dup s" hexdump-row" stringcmp 0 = { drop -3 exit } if
+  dup s" hexdump-between" stringcmp 0 = { drop -2 exit } if
+  dup s" hexdump-from" stringcmp 0 = { drop -2 exit } if
+  dup s" hexdump" stringcmp 0 = { drop -1 exit } if
+  dup s" describe-hex" stringcmp 0 = { drop -1 exit } if
+  dup s" describe-docol" stringcmp 0 = { drop -1 exit } if
+  dup s" describe" stringcmp 0 = { drop -1 exit } if
+  dup s" describe-all" stringcmp 0 = { drop 0 exit } if
+  dup s" forget" stringcmp 0 = { drop -1 exit } if
+  dup s" ," stringcmp 0 = { drop -1 exit } if
+  dup s" make-immediate" stringcmp 0 = { drop 0 exit } if
+  dup s" make-hidden" stringcmp 0 = { drop 0 exit } if
+  dup s" make-visible" stringcmp 0 = { drop 0 exit } if
+
+  ~ Created by warm-start in execution.e.
+  dup s" log" stringcmp 0 = { drop 1 exit } if
+  dup s" s0" stringcmp 0 = { drop 1 exit } if
+  dup s" r0" stringcmp 0 = { drop 1 exit } if
+  dup s" latest" stringcmp 0 = { drop 1 exit } if
   dup s" here" stringcmp 0 = { drop 1 exit } if
+
+  ~ Word not provided statically, but used during the log-load routine anyway.
   dup s" [" stringcmp 0 = { drop 0 exit } if
   dup s" ]" stringcmp 0 = { drop 0 exit } if
   dup s" :" stringcmp 0 = { drop 0 exit } if
@@ -700,7 +733,6 @@ allocate-transform-state s" transform-state" variable
   dup s" ;asm" stringcmp 0 = { drop 0 exit } if
   dup s" L@'" stringcmp 0 = { drop 1 exit } if
   dup s" L!'" stringcmp 0 = { drop -1 exit } if
-  dup s" ," stringcmp 0 = { drop -1 exit } if
 
   dup s" foo" stringcmp 0 = { drop 0 exit } if ~ DO NOT SUBMIT
   ~   If we get here, that's a problem. Emit an error message to make sure
@@ -1693,20 +1725,27 @@ allocate-transform-state s" transform-state" variable
 
 
 : log-load-comma-alternate
-  log-load-roll-log-address
+  ~   In immediate mode, we have special behavior because of the "here" magic.
+  ~ In compile mode, we compile a dynamic call, which is the same thing that
+  ~ would happen if we didn't have an alternate at all.
+  interpreter-flags @ 0x01 & {
+    s" ," log-load-compile-dynamic-word
+  } {
+    log-load-roll-log-address
 
-  swap-transform-variables
-  L@' log-load-comma
-  L@' swap
-  swap-transform-variables
+    swap-transform-variables
+    L@' log-load-comma
+    L@' swap
+    swap-transform-variables
 
-  offset-to-target-address-space ,     ~ swap
-  offset-to-target-address-space ,     ~ log-load-comma
+    offset-to-target-address-space ,     ~ swap
+    offset-to-target-address-space ,     ~ log-load-comma
 
-  ~   We consumed the value, so we apply a delta.
-  -1 transform-apply-stack-delta
+    ~   We consumed the value, so we apply a delta.
+    -1 transform-apply-stack-delta
 
-  log-load-roll-log-address
+    log-load-roll-log-address
+  } if-else
   ; make-immediate
 
 
@@ -1955,7 +1994,7 @@ allocate-transform-state s" transform-state" variable
 
 
 ~ (start pointer, length)
-: label-unless-alternate
+: log-load-unless-alternate
   log-load-roll-log-address
 
   swap-transform-variables