allow tracing macros

This commit is contained in:
Alex Shinn 2021-05-06 10:17:03 +09:00
parent 68a81c8aff
commit 249f4f21ba

View file

@ -26,13 +26,25 @@
(define (make-tracer cell) (define (make-tracer cell)
(let ((proc (cdr cell))) (let ((proc (cdr cell)))
(lambda args (if (macro? proc)
(show-trace cell args) (make-macro
(active-trace-depth (+ (active-trace-depth) 1)) (lambda (expr use-env mac-env)
(let ((res (apply proc args))) (show-trace cell (strip-syntactic-closures (cdr expr)))
(active-trace-depth (- (active-trace-depth) 1)) (active-trace-depth (+ (active-trace-depth) 1))
(show-trace-result cell args res) (let ((res ((macro-procedure proc) expr use-env mac-env)))
res)))) (active-trace-depth (- (active-trace-depth) 1))
(show-trace-result cell
(strip-syntactic-closures (cdr expr))
(strip-syntactic-closures res))
res))
(macro-env proc))
(lambda args
(show-trace cell args)
(active-trace-depth (+ (active-trace-depth) 1))
(let ((res (apply proc args)))
(active-trace-depth (- (active-trace-depth) 1))
(show-trace-result cell args res)
res)))))
;;> Write a trace of all calls to the procedure \var{id} to ;;> Write a trace of all calls to the procedure \var{id} to
;;> \scheme{(current-error-port)}. ;;> \scheme{(current-error-port)}.