about summary refs log tree commit diff stats
path: root/baremetal
diff options
context:
space:
mode:
Diffstat (limited to 'baremetal')
-rw-r--r--baremetal/shell/parse.mu17
-rw-r--r--baremetal/shell/read.mu6
2 files changed, 12 insertions, 11 deletions
diff --git a/baremetal/shell/parse.mu b/baremetal/shell/parse.mu
index b9eeccab..918fb108 100644
--- a/baremetal/shell/parse.mu
+++ b/baremetal/shell/parse.mu
@@ -1,14 +1,9 @@
 fn parse-sexpression tokens: (addr stream cell), _out: (addr handle cell), trace: (addr trace) {
   # For now we just convert first token into a symbol and return it. TODO
-  var empty?/eax: boolean <- stream-empty? tokens
-  compare empty?, 0/false
-  {
-    break-if-!=
-    var out/eax: (addr handle cell) <- copy _out
-    allocate out
-    var out-addr/eax: (addr cell) <- lookup *out
-    read-from-stream tokens, out-addr
-    var type/ecx: (addr int) <- get out-addr, type
-    copy-to *type, 2/symbol
-  }
+  var out/eax: (addr handle cell) <- copy _out
+  allocate out
+  var out-addr/eax: (addr cell) <- lookup *out
+  read-from-stream tokens, out-addr
+  var type/ecx: (addr int) <- get out-addr, type
+  copy-to *type, 2/symbol
 }
diff --git a/baremetal/shell/read.mu b/baremetal/shell/read.mu
index d5a1d776..e49fbbac 100644
--- a/baremetal/shell/read.mu
+++ b/baremetal/shell/read.mu
@@ -3,6 +3,12 @@ fn read-cell in: (addr gap-buffer), out: (addr handle cell), trace: (addr trace)
   var tokens-storage: (stream cell 0x100)
   var tokens/ecx: (addr stream cell) <- address tokens-storage
   tokenize in, tokens, trace
+  var error?/eax: boolean <- has-errors? trace
+  compare error?, 0/false
+  {
+    break-if-=
+    return
+  }
   # TODO: insert parens
   # TODO: transform infix
   parse-sexpression tokens, out, trace