~ chicken-core (chicken-5) af40e01b20b4949c8da325843d0651c49e618389
commit af40e01b20b4949c8da325843d0651c49e618389 Author: felix <bunny351@gmail.com> AuthorDate: Tue May 4 08:52:32 2010 +0200 Commit: felix <bunny351@gmail.com> CommitDate: Tue May 4 08:52:32 2010 +0200 time macro writes to stdout, moved ##sys#display-times into library unit, compresses output of time macro a little diff --git a/chicken-syntax.scm b/chicken-syntax.scm index 3ee16eea..56fc6563 100644 --- a/chicken-syntax.scm +++ b/chicken-syntax.scm @@ -128,9 +128,10 @@ (##sys#start-timer) (##sys#call-with-values (##core#lambda () ,@(cdr form)) - (##core#lambda ,rvar - (##sys#display-times (##sys#stop-timer)) - (##sys#apply ##sys#values ,rvar) ) ) ) ) ) ) ) + (##core#lambda + ,rvar + (##sys#display-times (##sys#stop-timer)) + (##sys#apply ##sys#values ,rvar) ) ) ) ) ) ) ) (##sys#extend-macro-environment 'declare '() diff --git a/eval.scm b/eval.scm index 1a901601..f1e1ebc3 100644 --- a/eval.scm +++ b/eval.scm @@ -1498,34 +1498,6 @@ (else (loop (##sys#slot paths 1))) ) ) ) ) ) ) -;;; Print timing information (support for "time" macro): - -(define ##sys#display-times - (let* ((display display) - (spaces - (lambda (n) - (do ((i n (fx- i 1))) - ((fx<= i 0)) - (display #\space) ) ) ) - (display-rj - (lambda (x w) - (let* ((xs (if (zero? x) "0" (number->string x))) - (xslen (##core#inline "C_block_size" xs)) ) - (spaces (fx- w xslen)) - (display xs) ) ) ) ) - (lambda (info) - (display-rj (##sys#slot info 0) 8) - (display " seconds elapsed\n") - (display-rj (##sys#slot info 1) 8) - (display " seconds in (major) GC\n") - (display-rj (##sys#slot info 2) 8) - (display " mutations\n") - (display-rj (##sys#slot info 3) 8) - (display " minor GCs\n") - (display-rj (##sys#slot info 4) 8) - (display " major GCs\n") ) ) ) - - ;;; SRFI-0 support code: (set! ##sys#features diff --git a/library.scm b/library.scm index c2137a8e..40879434 100644 --- a/library.scm +++ b/library.scm @@ -246,7 +246,11 @@ EOF (define ##sys#decode-seconds (##core#primitive "C_decode_seconds")) (define get-environment-variable (##core#primitive "C_get_environment_variable")) (define getenv get-environment-variable) ; DEPRECATED -(define (##sys#start-timer) (##core#inline "C_start_timer")) + +(define (##sys#start-timer) + (##sys#gc #t) + (##core#inline "C_start_timer")) + (define ##sys#stop-timer (##core#primitive "C_stop_timer")) (define (##sys#immediate? x) (not (##core#inline "C_blockp" x))) (define (##sys#message str) (##core#inline "C_message" str)) @@ -4624,3 +4628,22 @@ EOF (if (memq prop props) (values prop (##sys#slot tl 0) nxt) (loop nxt) ) ) ) ) ) + + +;;; Print timing information (support for "time" macro): + +(define (##sys#display-times info) + (define (pstr str) (##sys#print str #f ##sys#standard-error)) + (define (pnum num) + (##sys#print (if (zero? num) "0" (##sys#number->string num)) #f ##sys#standard-error)) + (##sys#flush-output ##sys#standard-output) + (pnum (##sys#slot info 0)) + (pstr "s elapsed, ") + (pnum (##sys#slot info 1)) + (pstr "s (major) GC, ") + (pnum (##sys#slot info 2)) + (pstr " mutations, GCs: ") + (pnum (##sys#slot info 3)) + (pstr " minor, ") + (pnum (##sys#slot info 4)) + (pstr " major\n") )Trap