831 - wire up trace browser to interactive repl

This commit is contained in:
Kartik K. Agaram 2015-02-24 00:35:56 -08:00
parent 6333b7614e
commit dc38033200
2 changed files with 69 additions and 19 deletions

39
mu.arc
View File

@ -867,6 +867,18 @@
;? (prn x) ;? 1
;? (new-string:repr:eval x)) ;? 1
$clear-trace
(do1 nil (wipe interactive-traces*))
$save-trace
;? (let x (string:map [string:intersperse ": " _]
;? (as cons (interactive-traces* (m arg.0))))
(let x (string:map [string:intersperse ": " _]
(apply join
(map [as cons _] rev.interactive-traces*)))
;? (write x)(write #\newline) ;? 1
;? (prn x) ;? 1
(new-string x))
; first-class continuations
current-continuation
(w/uniq continuation-name
@ -3067,11 +3079,30 @@
(add-next-space-generator function*!interactive 'interactive)
(= location*!interactive (assign-names-to-location function*!interactive 'interactive location*!interactive))
(replace-names-with-location function*!interactive 'interactive)
(= traces* (queue)) ; skip preprocessing
(run-more 'interactive))
(when (no cdr.argv)
; interactive mode
(whilet expr (do (pr "mu> ") (read))
(run-interactive expr)))
(when (no cdr.argv)
(add-code:readfile "trace.mu")
(freeze function*)
(load-system-functions)
(wipe interactive-commands*)
(wipe interactive-traces*)
(= interactive-cmdidx* 0)
(= traces* (queue))
;? (set dump-trace*) ;? 2
; interactive mode
(point break
(while t
(pr interactive-cmdidx*)(pr "> ")
(let expr (read)
(unless expr (break))
(push expr interactive-commands*)
(run-interactive expr))
(push traces* interactive-traces*)
(++ interactive-cmdidx*)
)))
(if ($.current-charterm) ($.close-charterm))
(reset)
;? (print-times)

View File

@ -504,6 +504,39 @@
(reply nil:literal)
])
(function browse-trace [
(default-space:space-address <- new space:literal 30:literal/capacity)
(x:string-address <- next-input)
;? ($start-tracing) ;? 1
;? (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)
(traces:instruction-trace-address-array-address <- parse-traces s:stream-address)
(0:space-address/names:screen-state <- screen-state traces:instruction-trace-address-array-address)
(cursor-mode)
(print-traces-collapsed 0:space-address/screen-state nil:literal/terminal)
{ begin
(quit?:boolean <- process-key 0:space-address/screen-state nil:literal/keyboard nil:literal/terminal)
(break-if quit?:boolean)
(loop)
}
; move cursor to bottom before exiting
(to-bottom 0:space-address/screen-state nil:literal/terminal)
(retro-mode)
])
(function main [
(default-space:space-address <- new space:literal 30:literal/capacity)
(x:string-address <- new
@ -520,19 +553,5 @@ 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)
(traces:instruction-trace-address-array-address <- parse-traces s:stream-address)
(0:space-address/names:screen-state <- screen-state traces:instruction-trace-address-array-address)
;? ($print (("#traces: " literal))) ;? 1
;? ($print len:integer) ;? 1
;? ($print (("\n" literal))) ;? 1
(cursor-mode)
(print-traces-collapsed 0:space-address/screen-state nil:literal/terminal)
{ begin
(quit?:boolean <- process-key 0:space-address/screen-state nil:literal/keyboard nil:literal/terminal)
(break-if quit?:boolean)
(loop)
}
; move cursor to bottom before exiting
(to-bottom 0:space-address/screen-state nil:literal/terminal)
(browse-trace x:string-address)
])