about summary refs log tree commit diff stats
path: root/apps/tile/rpn.mu
diff options
context:
space:
mode:
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