about summary refs log tree commit diff stats
path: root/shell/read.mu
diff options
context:
space:
mode:
authorKartik K. Agaram <vc@akkartik.com>2021-06-18 21:41:17 -0700
committerKartik K. Agaram <vc@akkartik.com>2021-06-18 21:42:01 -0700
commit29795a0db4e1d180217123f81f14b69189b3c12c (patch)
tree7f60a0df59feb7141ec1d722ed852c3764cff2b1 /shell/read.mu
parente5cf5708900497919f7ff4f2f1897e6c6af57aee (diff)
downloadmu-29795a0db4e1d180217123f81f14b69189b3c12c.tar.gz
start emitting indent tokens
Diffstat (limited to 'shell/read.mu')
-rw-r--r--shell/read.mu18
1 files changed, 13 insertions, 5 deletions
diff --git a/shell/read.mu b/shell/read.mu
index 3804c9e4..e5eea010 100644
--- a/shell/read.mu
+++ b/shell/read.mu
@@ -1,8 +1,7 @@
 fn read-cell in: (addr gap-buffer), out: (addr handle cell), trace: (addr trace) {
-  # TODO: we may be able to generate tokens lazily and drop this stream.
-  # Depends on how we implement indent-sensitivity and infix.
+  # eagerly tokenize everything so that the phases are easier to see in the trace
   var tokens-storage: (stream token 0x400)
-  var tokens/ecx: (addr stream token) <- address tokens-storage
+  var tokens/edx: (addr stream token) <- address tokens-storage
   tokenize in, tokens, trace
   var error?/eax: boolean <- has-errors? trace
   compare error?, 0/false
@@ -10,7 +9,16 @@ fn read-cell in: (addr gap-buffer), out: (addr handle cell), trace: (addr trace)
     break-if-=
     return
   }
-  # TODO: insert parens
+  # insert more parens based on indentation
+  var parenthesized-tokens-storage: (stream token 0x400)
+  var parenthesized-tokens/ecx: (addr stream token) <- address parenthesized-tokens-storage
+  parenthesize tokens, parenthesized-tokens, trace
+  var error?/eax: boolean <- has-errors? trace
+  compare error?, 0/false
+  {
+    break-if-=
+    return
+  }
   # TODO: transform infix
-  parse-input tokens, out, trace
+  parse-input parenthesized-tokens, out, trace
 }