about summary refs log tree commit diff stats
path: root/baremetal/shell/read.mu
diff options
context:
space:
mode:
Diffstat (limited to 'baremetal/shell/read.mu')
-rw-r--r--baremetal/shell/read.mu45
1 files changed, 29 insertions, 16 deletions
diff --git a/baremetal/shell/read.mu b/baremetal/shell/read.mu
index 24d5df13..5ebf98db 100644
--- a/baremetal/shell/read.mu
+++ b/baremetal/shell/read.mu
@@ -1,11 +1,8 @@
 # out is not allocated
 fn read-cell in: (addr gap-buffer), out: (addr handle cell), trace: (addr trace) {
-  # TODO:
-  #   tokenize
-  #   insert parens
-  #   transform infix
-  #   token tree
-  #   syntax tree
+  trace-text trace, "read", ""
+  trace-lower trace
+  trace-text trace, "read", "tokenize"
   rewind-gap-buffer in
   var token-storage: (stream byte 0x1000)  # strings can be large
   var token/ecx: (addr stream byte) <- address token-storage
@@ -20,20 +17,36 @@ fn read-cell in: (addr gap-buffer), out: (addr handle cell), trace: (addr trace)
     read-symbol token, out
     loop
   }
+  trace-higher trace  # tokenize
+  # TODO:
+  #   insert parens
+  #   transform infix
+  #   token tree
+  #   syntax tree
+  trace-higher trace  # read
 }
 
 fn next-token in: (addr gap-buffer), out: (addr stream byte), trace: (addr trace) {
-  clear-stream out
-  skip-whitespace-from-gap-buffer in
-  var g/eax: grapheme <- peek-from-gap-buffer in
-  {
-    var digit?/eax: boolean <- is-decimal-digit? g
-    compare digit?, 0/false
-    break-if-=
-    next-number-token in, out, trace
-    return
+  trace-text trace, "read", "next-token"
+  trace-lower trace
+  $next-token:body: {
+    clear-stream out
+    skip-whitespace-from-gap-buffer in
+    var g/eax: grapheme <- peek-from-gap-buffer in
+    {
+      var digit?/eax: boolean <- is-decimal-digit? g
+      compare digit?, 0/false
+      break-if-=
+      next-number-token in, out, trace
+      break $next-token:body
+    }
+    next-symbol-token in, out, trace
   }
-  next-symbol-token in, out, trace
+  trace-higher trace
+  var stream-storage: (stream byte 0x40)
+  var stream/eax: (addr stream byte) <- address stream-storage
+  write stream, "next-token: result"
+  trace trace, "read", stream
 }
 
 fn next-symbol-token in: (addr gap-buffer), out: (addr stream byte), trace: (addr trace) {