about summary refs log tree commit diff stats
path: root/apps/tile/grapheme-stack.mu
diff options
context:
space:
mode:
authorKartik Agaram <vc@akkartik.com>2020-10-19 23:53:45 -0700
committerKartik Agaram <vc@akkartik.com>2020-10-19 23:53:45 -0700
commit0cdbfff25664d2bd3257220ca1509e7bfbd84c75 (patch)
tree30a2a54b5231161e869ce08f204d1c8ade9db79e /apps/tile/grapheme-stack.mu
parente28b949f1826b5351e1bd5e5cad92774c72ad4c0 (diff)
downloadmu-0cdbfff25664d2bd3257220ca1509e7bfbd84c75.tar.gz
7079
Diffstat (limited to 'apps/tile/grapheme-stack.mu')
-rw-r--r--apps/tile/grapheme-stack.mu17
1 files changed, 17 insertions, 0 deletions
diff --git a/apps/tile/grapheme-stack.mu b/apps/tile/grapheme-stack.mu
index 401dda2d..3b8d95f9 100644
--- a/apps/tile/grapheme-stack.mu
+++ b/apps/tile/grapheme-stack.mu
@@ -62,6 +62,23 @@ $pop-grapheme-stack:body: {
 }
 }
 
+fn copy-grapheme-stack _src: (addr grapheme-stack), dest: (addr grapheme-stack) {
+  var src/esi: (addr grapheme-stack) <- copy _src
+  var data-ah/edi: (addr handle array grapheme) <- get src, data
+  var _data/eax: (addr array grapheme) <- lookup *data-ah
+  var data/edi: (addr array grapheme) <- copy _data
+  var top-addr/ecx: (addr int) <- get src, top
+  var i/eax: int <- copy 0
+  {
+    compare i, *top-addr
+    break-if->=
+    var g/edx: (addr grapheme) <- index data, i
+    push-grapheme-stack dest, *g
+    i <- increment
+    loop
+  }
+}
+
 # dump stack to screen from bottom to top
 # don't move the cursor or anything
 fn render-stack-from-bottom _self: (addr grapheme-stack), screen: (addr screen) {