about summary refs log tree commit diff stats
path: root/shell/trace.mu
diff options
context:
space:
mode:
authorKartik K. Agaram <vc@akkartik.com>2021-03-05 15:18:46 -0800
committerKartik K. Agaram <vc@akkartik.com>2021-03-05 15:18:46 -0800
commitbcde6be5283baef7c672404c9099fa0303bdacc3 (patch)
tree7d86772b86f1e8e9a5f5dd1163917ad96f6de14b /shell/trace.mu
parente4fc67ee44cda0769ce4d1e844ff8b5b4a937491 (diff)
downloadmu-bcde6be5283baef7c672404c9099fa0303bdacc3.tar.gz
7857 - shell: first function call
Diffstat (limited to 'shell/trace.mu')
-rw-r--r--shell/trace.mu30
1 files changed, 30 insertions, 0 deletions
diff --git a/shell/trace.mu b/shell/trace.mu
index 34303f43..218e35d5 100644
--- a/shell/trace.mu
+++ b/shell/trace.mu
@@ -255,6 +255,36 @@ fn trace-lines-equal? _a: (addr trace-line), _b: (addr trace-line) -> _/eax: boo
   return data-match?
 }
 
+fn dump-trace _self: (addr trace) {
+  var already-hiding-lines?: boolean
+  var y/ecx: int <- copy 0
+  var self/esi: (addr trace) <- copy _self
+  compare self, 0
+  {
+    break-if-!=
+    return
+  }
+  var trace-ah/eax: (addr handle array trace-line) <- get self, data
+  var _trace/eax: (addr array trace-line) <- lookup *trace-ah
+  var trace/edi: (addr array trace-line) <- copy _trace
+  var i/edx: int <- copy 0
+  var max-addr/ebx: (addr int) <- get self, first-free
+  var max/ebx: int <- copy *max-addr
+  $dump-trace:loop: {
+    compare i, max
+    break-if->=
+    $dump-trace:iter: {
+      var offset/ebx: (offset trace-line) <- compute-offset trace, i
+      var curr/ebx: (addr trace-line) <- index trace, offset
+      var curr-label-ah/eax: (addr handle array byte) <- get curr, label
+      var curr-label/eax: (addr array byte) <- lookup *curr-label-ah
+      y <- render-trace-line 0/screen, curr, 0, y, 0x80/width, 0x30/height, 7/fg, 0/bg
+    }
+    i <- increment
+    loop
+  }
+}
+
 ## UI stuff
 
 fn mark-lines-dirty _self: (addr trace) {