about summary refs log tree commit diff stats
path: root/baremetal/shell/sandbox.mu
diff options
context:
space:
mode:
authorKartik K. Agaram <vc@akkartik.com>2021-02-22 19:46:23 -0800
committerKartik K. Agaram <vc@akkartik.com>2021-02-22 19:46:23 -0800
commit421ed4651f0f9ceb23f07f8d00797e61d63a29ad (patch)
tree89e193027a98f490c58813a7ec54babb1451f3a9 /baremetal/shell/sandbox.mu
parent5ddc9dfd9cfc7eedfbdcb5e5dbf2cf1f2f8bf6b5 (diff)
downloadmu-421ed4651f0f9ceb23f07f8d00797e61d63a29ad.tar.gz
7784 - baremetal/shell: start of trace
Diffstat (limited to 'baremetal/shell/sandbox.mu')
-rw-r--r--baremetal/shell/sandbox.mu18
1 files changed, 14 insertions, 4 deletions
diff --git a/baremetal/shell/sandbox.mu b/baremetal/shell/sandbox.mu
index c89814d4..6ba2e4ac 100644
--- a/baremetal/shell/sandbox.mu
+++ b/baremetal/shell/sandbox.mu
@@ -1,6 +1,7 @@
 type sandbox {
   data: (handle gap-buffer)
   value: (handle stream byte)
+  trace: (handle trace)
 }
 
 fn initialize-sandbox _self: (addr sandbox) {
@@ -94,17 +95,26 @@ fn edit-sandbox _self: (addr sandbox), key: byte {
     var _data/eax: (addr gap-buffer) <- lookup *data-ah
     var data/ecx: (addr gap-buffer) <- copy _data
     var value-ah/eax: (addr handle stream byte) <- get self, value
-    var value/eax: (addr stream byte) <- lookup *value-ah
-    run data, value
+    var _value/eax: (addr stream byte) <- lookup *value-ah
+    var value/edx: (addr stream byte) <- copy _value
+    var trace-ah/eax: (addr handle trace) <- get self, trace
+    var trace/eax: (addr trace) <- lookup *trace-ah
+    run data, value, trace
     return
   }
   add-grapheme-to-sandbox self, g
 }
 
-fn run in: (addr gap-buffer), out: (addr stream byte) {
+fn run in: (addr gap-buffer), out: (addr stream byte), trace: (addr trace) {
   var read-result-storage: (handle cell)
   var read-result/esi: (addr handle cell) <- address read-result-storage
-  read-cell in, read-result
+  read-cell in, read-result, trace
+  var error?/eax: boolean <- has-errors? trace
+  {
+    compare error?, 0/false
+    break-if-=
+    return
+  }
   # TODO: eval
   print-cell read-result, out
 }