about summary refs log tree commit diff stats
path: root/apps/tile/rpn.mu
diff options
context:
space:
mode:
authorKartik Agaram <vc@akkartik.com>2020-10-25 20:12:32 -0700
committerKartik Agaram <vc@akkartik.com>2020-10-25 20:12:32 -0700
commitfa4cc8c871d1f343599197e1b5b29b1f0a8f8134 (patch)
tree20ff25508ed195e849ff1a04f5bfa11d142b9040 /apps/tile/rpn.mu
parentbdf1bf77774ae3e2b66eb9c6ce87b52b2b646fd6 (diff)
downloadmu-fa4cc8c871d1f343599197e1b5b29b1f0a8f8134.tar.gz
7104 - tile: word-rename works with strings
Diffstat (limited to 'apps/tile/rpn.mu')
-rw-r--r--apps/tile/rpn.mu14
1 files changed, 11 insertions, 3 deletions
diff --git a/apps/tile/rpn.mu b/apps/tile/rpn.mu
index 3f331639..b5755ce0 100644
--- a/apps/tile/rpn.mu
+++ b/apps/tile/rpn.mu
@@ -94,12 +94,20 @@ fn evaluate functions: (addr handle function), bindings: (addr table), scratch:
         var new-byte/eax: byte <- read-byte curr-stream
         compare new-byte, 0x3d  # '='
         break-if-!=
+        var out2/esi: (addr value-stack) <- copy out
+        var top-addr/ecx: (addr int) <- get out2, top
+        compare *top-addr, 0
+        break-if-<=
+        var data-ah/eax: (addr handle array value) <- get out2, data
+        var data/eax: (addr array value) <- lookup *data-ah
+        var top/edx: int <- copy *top-addr
+        top <- decrement
+        var dest-offset/edx: (offset value) <- compute-offset data, top
+        var target-val/edx: (addr value) <- index data, dest-offset
         var key-h: (handle array byte)
         var key/ecx: (addr handle array byte) <- address key-h
         stream-to-string curr-stream, key
-        var foo/eax: (addr array byte) <- lookup *key
-        var val/eax: int <- pop-int-from-value-stack out
-        bind-int-in-table bindings, key, val
+        bind-in-table bindings, key, target-val
         var line/eax: (addr line) <- copy scratch
         var next-line-ah/eax: (addr handle line) <- get line, next
         var next-line/eax: (addr line) <- lookup *next-line-ah