local-eval-hook now calls eval rather than interpret when profiling
is enabled, so local transformer code can be profiled. syntax.ss, profile.ms original commit: ab1656597150676dd33c311b8ae7e37287bbe54e
This commit is contained in:
parent
1fcf63ef18
commit
b25acba02e
4
LOG
4
LOG
|
@ -1765,3 +1765,7 @@
|
|||
library-rt-info records in the code for compile-whole-xxx.
|
||||
compile.ss,
|
||||
7.ms
|
||||
- local-eval-hook now calls eval rather than interpret when profiling
|
||||
is enabled, so local transformer code can be profiled.
|
||||
syntax.ss,
|
||||
profile.ms
|
||||
|
|
|
@ -605,6 +605,70 @@
|
|||
'(load-program "testfile-cp3.so")
|
||||
'(cdr (find (lambda (x) (equal? (source-file-descriptor-path (source-object-sfd (car x))) "testfile-ca3.ss")) (profile-dump))))
|
||||
"(0 . 1)\n123\n")
|
||||
|
||||
; verify that we get profiling information for local macro transformers
|
||||
(begin
|
||||
(call-with-port (open-output-file "testfile-cp4.ss" 'replace)
|
||||
(lambda (op)
|
||||
(put-string op "\
|
||||
(let ()
|
||||
(define-syntax a
|
||||
(lambda (q)
|
||||
(define square
|
||||
(lambda (n)
|
||||
(* n n)))
|
||||
(syntax-case q ()
|
||||
[(_ x (d ...) e)
|
||||
#`(let ([x (quote #,(map square (datum (d ...))))])
|
||||
e)])))
|
||||
(pretty-print (list (a b (8 6 7) b) (a b (5 3 0 9) (list b)))))")))
|
||||
(delete-file "testfile-cp4.so")
|
||||
(parameterize ([print-gensym #f] [current-eval compile] [compile-profile #t])
|
||||
(compile-file "testfile-cp4"))
|
||||
#t)
|
||||
(equal?
|
||||
(sort (lambda (x y) (< (list-ref x 2) (list-ref y 2)))
|
||||
(filter (lambda (x) (equal? (list-ref x 1) "testfile-cp4.ss"))
|
||||
(profile-dump-list)))
|
||||
'((1 "testfile-cp4.ss" 31 232 3 5) ; first transformer count ...
|
||||
(2 "testfile-cp4.ss" 72 102 5 9)
|
||||
(7 "testfile-cp4.ss" 94 101 6 11)
|
||||
(7 "testfile-cp4.ss" 95 96 6 12)
|
||||
(7 "testfile-cp4.ss" 97 98 6 14)
|
||||
(7 "testfile-cp4.ss" 99 100 6 16)
|
||||
(2 "testfile-cp4.ss" 110 231 7 7)
|
||||
(2 "testfile-cp4.ss" 123 124 7 20)
|
||||
(2 "testfile-cp4.ss" 162 229 9 10)
|
||||
(2 "testfile-cp4.ss" 182 210 9 30)
|
||||
(2 "testfile-cp4.ss" 183 186 9 31)
|
||||
(2 "testfile-cp4.ss" 187 193 9 35)
|
||||
(2 "testfile-cp4.ss" 194 209 9 42) ; ... last transformer count
|
||||
))
|
||||
(begin
|
||||
(collect (collect-maximum-generation))
|
||||
(profile-release-counters)
|
||||
#t)
|
||||
(equal?
|
||||
(with-output-to-string
|
||||
(lambda ()
|
||||
(revisit "testfile-cp4.so")))
|
||||
"((64 36 49) ((25 9 0 81)))\n")
|
||||
(equal?
|
||||
(sort (lambda (x y) (< (list-ref x 2) (list-ref y 2)))
|
||||
(filter (lambda (x) (equal? (list-ref x 1) "testfile-cp4.ss"))
|
||||
(profile-dump-list)))
|
||||
'((1 "testfile-cp4.ss" 0 299 1 1) ; top-level let
|
||||
(1 "testfile-cp4.ss" 236 298 11 3) ; pretty-print call ...
|
||||
(1 "testfile-cp4.ss" 237 249 11 4) ; ... and subforms
|
||||
(1 "testfile-cp4.ss" 250 297 11 17)
|
||||
(1 "testfile-cp4.ss" 251 255 11 18)
|
||||
(1 "testfile-cp4.ss" 256 271 11 23)
|
||||
(1 "testfile-cp4.ss" 269 270 11 36)
|
||||
(1 "testfile-cp4.ss" 272 296 11 39)
|
||||
(1 "testfile-cp4.ss" 287 295 11 54)
|
||||
(1 "testfile-cp4.ss" 288 292 11 55)
|
||||
(1 "testfile-cp4.ss" 293 294 11 60)
|
||||
))
|
||||
)
|
||||
|
||||
(mat profile-form
|
||||
|
|
|
@ -406,9 +406,9 @@
|
|||
(eval `(,noexpand ,x))))
|
||||
|
||||
(define local-eval-hook
|
||||
; for local macro transformers, use interpreter
|
||||
; for local macro transformers, use interpreter unless profiling is enabled
|
||||
(lambda (x)
|
||||
(interpret `(,noexpand ,x))))
|
||||
((if (compile-profile) eval interpret) `(,noexpand ,x))))
|
||||
|
||||
(define define-top-level-value-hook $set-top-level-value!)
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user