about summary refs log tree commit diff stats
path: root/baremetal/shell/read.mu
diff options
context:
space:
mode:
authorKartik K. Agaram <vc@akkartik.com>2021-02-21 22:06:03 -0800
committerKartik K. Agaram <vc@akkartik.com>2021-02-21 22:08:13 -0800
commit210c48370a9cfda64e421440df4bb378b0167d0b (patch)
tree18d84e300ca78107243cf3237735dbf0bf7895ea /baremetal/shell/read.mu
parent19f93c7457529a4dc04638eef5de878475067aa8 (diff)
downloadmu-210c48370a9cfda64e421440df4bb378b0167d0b.tar.gz
7777
Same identity REPL, but now going through some symbol processing.
Diffstat (limited to 'baremetal/shell/read.mu')
-rw-r--r--baremetal/shell/read.mu25
1 files changed, 25 insertions, 0 deletions
diff --git a/baremetal/shell/read.mu b/baremetal/shell/read.mu
new file mode 100644
index 00000000..ba575d83
--- /dev/null
+++ b/baremetal/shell/read.mu
@@ -0,0 +1,25 @@
+# out is not allocated
+fn read-cell in: (addr gap-buffer), _out: (addr handle cell) {
+  # TODO:
+  #   tokenize
+  #   insert parens
+  #   transform infix
+  #   token tree
+  #   syntax tree
+  rewind-gap-buffer in
+  # read symbol
+  var out/eax: (addr handle cell) <- copy _out
+  new-symbol out
+  var out-a/eax: (addr cell) <- lookup *out
+  var out-data-ah/eax: (addr handle stream byte) <- get out-a, text-data
+  var _out-data/eax: (addr stream byte) <- lookup *out-data-ah
+  var out-data/edi: (addr stream byte) <- copy _out-data
+  {
+    var done?/eax: boolean <- gap-buffer-scan-done? in
+    compare done?, 0/false
+    break-if-!=
+    var g/eax: grapheme <- read-from-gap-buffer in
+    write-grapheme out-data, g
+    loop
+  }
+}