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