about summary refs log tree commit diff stats
path: root/baremetal/shell/tokenize.mu
diff options
context:
space:
mode:
authorKartik K. Agaram <vc@akkartik.com>2021-02-27 13:05:07 -0800
committerKartik K. Agaram <vc@akkartik.com>2021-02-27 13:05:07 -0800
commitcb66df2e97bd7cd9858bee9218ed37c4a977b43b (patch)
tree0bb3ce9d038d593a58c50fa9da9cc09c6c716c00 /baremetal/shell/tokenize.mu
parent03178cde6fd47f4eebb49852199681355bff5a14 (diff)
downloadmu-cb66df2e97bd7cd9858bee9218ed37c4a977b43b.tar.gz
7819
Diffstat (limited to 'baremetal/shell/tokenize.mu')
-rw-r--r--baremetal/shell/tokenize.mu10
1 files changed, 5 insertions, 5 deletions
diff --git a/baremetal/shell/tokenize.mu b/baremetal/shell/tokenize.mu
index 07ba9f8a..6e8cca0c 100644
--- a/baremetal/shell/tokenize.mu
+++ b/baremetal/shell/tokenize.mu
@@ -8,14 +8,14 @@ fn tokenize in: (addr gap-buffer), out: (addr stream cell), trace: (addr trace)
   rewind-gap-buffer in
   var token-storage: cell
   var token/edx: (addr cell) <- address token-storage
-  # initialize token
-  var dest-ah/eax: (addr handle stream byte) <- get token, text-data
-  populate-stream dest-ah, 0x40/max-token-size
-  #
   {
     var done?/eax: boolean <- gap-buffer-scan-done? in
     compare done?, 0/false
     break-if-!=
+    # initialize token data each iteration to avoid aliasing
+    var dest-ah/eax: (addr handle stream byte) <- get token, text-data
+    populate-stream dest-ah, 0x40/max-token-size
+    #
     next-token in, token, trace
     var error?/eax: boolean <- has-errors? trace
     compare error?, 0/false
@@ -23,7 +23,7 @@ fn tokenize in: (addr gap-buffer), out: (addr stream cell), trace: (addr trace)
       break-if-=
       return
     }
-    write-to-stream out, token
+    write-to-stream out, token  # shallow-copy text-data
     loop
   }
   trace-higher trace