diff options
-rw-r--r-- | mu.arc | 4 | ||||
-rw-r--r-- | trace.arc.t | 57 | ||||
-rw-r--r-- | trace.mu | 58 |
3 files changed, 94 insertions, 25 deletions
diff --git a/mu.arc b/mu.arc index 401ab0c0..b6a3cfd4 100644 --- a/mu.arc +++ b/mu.arc @@ -1649,13 +1649,13 @@ (and (>= memory*.addr len.value) (loop (addr (+ addr 1) idx 0) -;? (prn "comparing @idx: @memory*.addr and @value.idx") +;? (and (< idx len.value) (prn "comparing @idx: @memory*.addr and @value.idx")) ;? 1 (if (>= idx len.value) t (~is memory*.addr value.idx) (do1 nil (prn "@addr should contain @(repr value.idx) but contains @(repr memory*.addr)") -;? (recur (+ addr 1) (+ idx 1)) ;? 3 +;? (recur (+ addr 1) (+ idx 1)) ;? 4 ) :else (recur (+ addr 1) (+ idx 1)))))) diff --git a/trace.arc.t b/trace.arc.t new file mode 100644 index 00000000..d0324bd5 --- /dev/null +++ b/trace.arc.t @@ -0,0 +1,57 @@ +(selective-load "mu.arc" section-level) +(set allow-raw-addresses*) + +(reset) +(new-trace "print-trace") +(add-code:readfile "trace.mu") +(add-code + '((function! main [ + (default-space:space-address <- new space:literal 30:literal/capacity) + (x:string-address <- new +"schedule: main +run: main 0: (((1 integer)) <- ((copy)) ((1 literal))) +run: main 0: 1 => ((1 integer)) +mem: ((1 integer)): 1 <= 1 +run: main 1: (((2 integer)) <- ((copy)) ((3 literal))) +run: main 1: 3 => ((2 integer)) +mem: ((2 integer)): 2 <= 3 +run: main 2: (((3 integer)) <- ((add)) ((1 integer)) ((2 integer))) +mem: ((1 integer)) => 1 +mem: ((2 integer)) => 3 +run: main 2: 4 => ((3 integer)) +mem: ((3 integer)): 3 <= 4 +schedule: done with routine") + (s:stream-address <- init-stream x:string-address) + (arr:instruction-trace-address-array-address <- parse-traces s:stream-address) + (len:integer <- length arr:instruction-trace-address-array-address/deref) + ; fake screen + (screen:terminal-address <- init-fake-terminal 70:literal 15:literal) + ; print trace collapsed + (i:integer <- copy 0:literal) + { begin + (done?:boolean <- greater-or-equal i:integer len:integer) + (break-if done?:boolean) + (tr:instruction-trace-address <- index arr:instruction-trace-address-array-address/deref i:integer) + (print-instruction-trace-collapsed screen:terminal-address tr:instruction-trace-address) + (i:integer <- add i:integer 1:literal) + (loop) + } + (1:string-address/raw <- get screen:terminal-address/deref data:offset) + ]))) +;? (set dump-trace*) +;? (= dump-trace* (obj whitelist '("run"))) +(run 'main) +(each routine completed-routines* + (awhen rep.routine!error + (prn "error - " it))) +;? (prn memory*.1) +(when (~memory-contains-array memory*.1 + (+ "+ main/ 0 : (((1 integer)) <- ((copy)) ((1 literal))) " + "+ main/ 0 : 1 => ((1 integer)) " + "+ main/ 1 : (((2 integer)) <- ((copy)) ((3 literal))) " + "+ main/ 1 : 3 => ((2 integer)) " + "+ main/ 2 : (((3 integer)) <- ((add)) ((1 integer)) ((2 integer))) " + "+ main/ 2 : 4 => ((3 integer)) ")) + (prn "F - print-instruction-trace-collapsed works")) + +(reset) diff --git a/trace.mu b/trace.mu index 2f72b850..06674020 100644 --- a/trace.mu +++ b/trace.mu @@ -106,16 +106,20 @@ (function print-trace [ (default-space:space-address <- new space:literal 30:literal) + (screen:terminal-address <- next-input) (x:trace-address <- next-input) (l:string-address <- get x:trace-address/deref label:offset) - (print-string nil:literal/terminal l:string-address) - ($print ((" : " literal))) + (print-string screen:terminal-address l:string-address) + (print-character screen:terminal-address ((#\space literal))) + (print-character screen:terminal-address ((#\: literal))) + (print-character screen:terminal-address ((#\space literal))) (c:string-address <- get x:trace-address/deref contents:offset) - (print-string nil:literal/terminal c:string-address) + (print-string screen:terminal-address c:string-address) ]) (function print-instruction-trace [ (default-space:space-address <- new space:literal 30:literal) + (screen:terminal-address <- next-input) (x:instruction-trace-address <- next-input) ; print call stack (c:string-address-array-address <- get x:instruction-trace-address/deref call-stack:offset) @@ -125,20 +129,22 @@ (done?:boolean <- greater-or-equal i:integer len:integer) (break-if done?:boolean) (s:string-address <- index c:string-address-array-address/deref i:integer) - (print-string nil:literal/terminal s:string-address) - ($print (("/" literal))) + (print-string screen:terminal-address s:string-address) + (print-character screen:terminal-address ((#\/ literal))) (i:integer <- add i:integer 1:literal) (loop) } ; print pc - ($print ((" " literal))) + (print-character screen:terminal-address ((#\space literal))) (p:string-address <- get x:instruction-trace-address/deref pc:offset) - (print-string nil:literal/terminal p:string-address) + (print-string screen:terminal-address p:string-address) ; print instruction - ($print ((" : " literal))) + (print-character screen:terminal-address ((#\space literal))) + (print-character screen:terminal-address ((#\: literal))) + (print-character screen:terminal-address ((#\space literal))) (i:string-address <- get x:instruction-trace-address/deref instruction:offset) - (print-string nil:literal/terminal i:string-address) - ($print (("\r\n" literal))) + (print-string screen:terminal-address i:string-address) + (cursor-to-next-line screen:terminal-address) ; print children (ch:trace-address-array-address <- get x:instruction-trace-address/deref children:offset) (i:integer <- copy 0:literal) @@ -152,9 +158,9 @@ (done?:boolean <- greater-or-equal i:integer len:integer) (break-if done?:boolean) (t:trace-address <- index ch:trace-address-array-address/deref i:integer) - ($print ((" " literal))) - (print-trace t:trace-address) - ($print (("\r\n" literal))) + (print-character screen:terminal-address ((#\space literal))) + (print-trace screen:terminal-address t:trace-address) + (cursor-to-next-line screen:terminal-address) (i:integer <- add i:integer 1:literal) (loop) } @@ -162,8 +168,10 @@ (function print-instruction-trace-collapsed [ (default-space:space-address <- new space:literal 30:literal) + (screen:terminal <- next-input) (x:instruction-trace-address <- next-input) - ($print (("+ " literal))) + (print-character screen:terminal-address ((#\+ literal))) + (print-character screen:terminal-address ((#\space literal))) ; print call stack (c:string-address-array-address <- get x:instruction-trace-address/deref call-stack:offset) (i:integer <- copy 0:literal) @@ -172,20 +180,24 @@ (done?:boolean <- greater-or-equal i:integer len:integer) (break-if done?:boolean) (s:string-address <- index c:string-address-array-address/deref i:integer) - (print-string nil:literal/terminal s:string-address) - ($print (("/" literal))) + (print-string screen:terminal-address s:string-address) +;? (print-character screen:terminal-address ((#\space literal))) + (print-character screen:terminal-address ((#\/ literal))) +;? (print-character screen:terminal-address ((#\space literal))) (i:integer <- add i:integer 1:literal) (loop) } ; print pc - ($print ((" " literal))) + (print-character screen:terminal-address ((#\space literal))) (p:string-address <- get x:instruction-trace-address/deref pc:offset) - (print-string nil:literal/terminal p:string-address) + (print-string screen:terminal-address p:string-address) ; print instruction - ($print ((" : " literal))) + (print-character screen:terminal-address ((#\space literal))) + (print-character screen:terminal-address ((#\: literal))) + (print-character screen:terminal-address ((#\space literal))) (i:string-address <- get x:instruction-trace-address/deref instruction:offset) - (print-string nil:literal/terminal i:string-address) - ($print (("\r\n" literal))) + (print-string screen:terminal-address i:string-address) + (cursor-to-next-line screen:terminal-address) ]) (function main [ @@ -217,7 +229,7 @@ schedule: done with routine") (done?:boolean <- greater-or-equal i:integer len:integer) (break-if done?:boolean) (tr:instruction-trace-address <- index arr:instruction-trace-address-array-address/deref i:integer) - (print-instruction-trace-collapsed tr:instruction-trace-address) + (print-instruction-trace-collapsed nil:literal/terminal tr:instruction-trace-address) (i:integer <- add i:integer 1:literal) (loop) } @@ -253,7 +265,7 @@ schedule: done with routine") (toggle?:boolean <- equal c:character ((#\newline literal))) (break-unless toggle?:boolean) (tr:instruction-trace-address <- index arr:instruction-trace-address-array-address/deref cursor-row:integer) - (print-instruction-trace tr:instruction-trace-address) + (print-instruction-trace nil:literal/terminal tr:instruction-trace-address) (jump next-key:offset) ; loop } ; debugging: print cursor-row |