diff options
Diffstat (limited to 'transform.e')
| -rw-r--r-- | transform.e | 71 |
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 |