905 - even factorial trace takes too long to parse
Parsing proceeds at 1-3 lines per *second*.
This commit is contained in:
parent
f6d4743566
commit
441202fac4
12
mu.arc
12
mu.arc
|
@ -3148,6 +3148,15 @@
|
|||
(reply result:terminal-address)
|
||||
)
|
||||
|
||||
(init-fn divides?
|
||||
(default-space:space-address <- new space:literal 30:literal/capacity)
|
||||
(x:integer <- next-input)
|
||||
(y:integer <- next-input)
|
||||
(_ remainder:integer <- divide-with-remainder x:integer y:integer)
|
||||
(result:boolean <- equal remainder:integer 0:literal)
|
||||
(reply result:boolean)
|
||||
)
|
||||
|
||||
; after all system software is loaded:
|
||||
;? (= dump-trace* (obj whitelist '("cn0" "cn1")))
|
||||
(freeze system-function*)
|
||||
|
@ -3186,7 +3195,8 @@
|
|||
(when (no cdr.argv)
|
||||
(add-code:readfile "trace.mu")
|
||||
(wipe function*!main)
|
||||
(add-code:readfile "chessboard.mu")
|
||||
(add-code:readfile "factorial.mu")
|
||||
;? (add-code:readfile "chessboard.mu") ; takes too long
|
||||
(wipe function*!main)
|
||||
(freeze function*)
|
||||
(load-system-functions)
|
||||
|
|
18
trace.mu
18
trace.mu
|
@ -22,6 +22,7 @@
|
|||
;? ($print (("parse-traces\n" literal))) ;? 2
|
||||
(in:stream-address <- next-input)
|
||||
; check input size
|
||||
($print (("counting lines\n" literal)))
|
||||
(n:integer <- copy 0:literal)
|
||||
{ begin
|
||||
(done?:boolean <- end-of-stream? in:stream-address)
|
||||
|
@ -31,6 +32,13 @@
|
|||
(newline?:boolean <- equal c:character ((#\newline literal)))
|
||||
(break-unless newline?:boolean)
|
||||
(n:integer <- add n:integer 1:literal)
|
||||
{ begin
|
||||
;? (print?:boolean <- divides? n:integer 100:literal)
|
||||
;? (break-unless print?:boolean)
|
||||
($print ((" " literal)))
|
||||
($print n:integer)
|
||||
($print (("\n" literal)))
|
||||
}
|
||||
}
|
||||
(loop)
|
||||
}
|
||||
|
@ -42,6 +50,8 @@
|
|||
(curr-tail:instruction-trace-address <- copy nil:literal)
|
||||
(ch:buffer-address <- init-buffer 5:literal) ; accumulator for traces between instructions
|
||||
(run:string-address/const <- new "run")
|
||||
($print (("parsing\n" literal)))
|
||||
(n:integer <- copy 0:literal)
|
||||
; reading each line from 'in'
|
||||
{ begin
|
||||
next-line
|
||||
|
@ -51,6 +61,14 @@
|
|||
(break-if done?:boolean)
|
||||
; parse next line as a generic trace
|
||||
(line:string-address <- read-line in:stream-address)
|
||||
{ begin
|
||||
(n:integer <- add n:integer 1:literal)
|
||||
(print?:boolean <- divides? n:integer 100:literal)
|
||||
(break-unless print?:boolean)
|
||||
($print ((" " literal)))
|
||||
($print n:integer)
|
||||
($print (("\n" literal)))
|
||||
}
|
||||
;? (print-string nil:literal/terminal line:string-address) ;? 1
|
||||
(f:trace-address <- parse-trace line:string-address)
|
||||
(l:string-address <- get f:trace-address/deref label:offset)
|
||||
|
|
Loading…
Reference in New Issue