What is the proper way to get the statistical profiler to be aware of function 
definitions that are created by macro expansion (in different 
splicing-syntax-parameterize'd blocks, if that matters)?

I have a data flow analysis framework that is parameterized by the Might/Van 
Horn metafunctions from Abstracting Abstract Machines, and some others that are 
necessary for a real-world analysis (delta axiom approximations, pretty 
printers, etc). This parameterization is at compile-time, which generates 
several definitions local to different syntax-parameterizations. At the top 
level, I have my test suite that I want to now profile, since I'm hitting some 
performance issues. The profiler finds a few functions that it hides since they 
don't contribute to much of the running time. Everything else is not profiled, 
it seems.

Example generator:
(define-syntax (with-basic-k-trunc-analysis stx)
  (syntax-case stx ()
    [(_ (k trunc?) body1 body ...)
     (syntax/loc stx
       (syntax-parameterize 
           ([contour-length (λ (stx) #'k)] ; should be constant
            [truncate-rt? (λ (stx) #'trunc?)] ; should be constant
            [alloc (make-rename-transformer #'base-alloc)]
            [addr-lookup (make-rename-transformer #'base-addr-lookup)]
            [join-stores (make-rename-transformer #'base-join-stores)]
            [compare-σ (make-rename-transformer #'base-compare-σ)]
            [compare-w (make-rename-transformer #'base-compare-w)]
            [step-parameters (make-rename-transformer #'base-step-parameters)]
            [initial-parameters (make-rename-transformer 
#'base-initial-parameters)]
            [combine-parameters/exit (make-rename-transformer 
#'base-combine-parameters/exit)]
            [pretty-local (make-rename-transformer #'base-pretty-local)]
            [pretty-wide (make-rename-transformer #'base-pretty-wide)])
         (begin
           (define (k-contour-add t label) <blah>)
           (define (base-tick s) <blah>)
           (syntax-parameterize ([tick (make-rename-transformer #'base-tick)])
              body1 body ...))))]))

There are several macros like this, all used in the same module as the 
invocation of the profiler. The top level wrapper is the splicing 
parameterization:

(define-syntax-rule (with-all-widening body1 body ...)
  (splicing-syntax-parameterize
   ([widening 'all]
    [add-context (make-rename-transformer #'values)]
    [combine-context (make-rename-transformer #'combine-all)]
    [no-state (make-rename-transformer #'no-state-all-widen)])
   body1 body ...))

Thanks,
-Ian

____________________
  Racket Users list:
  http://lists.racket-lang.org/users

Reply via email to