[gambit-list] macro debugging

Christian christian at pflanze.mine.nu
Sun Aug 7 18:22:00 EDT 2005


Hello

For some reason, errors in macro expansion don't trigger the
debugger. This may be on purpose, but it makes macro debugging
difficult. Gladly, I've found a workaround: run

 (current-exception-handler primordial-exception-handler)

before expansion of the faulty macro, or

 (with-exception-handler primordial-exception-handler
         (eval '(code-containing-calls-to-faulty-macro)))

but using eval disconnects the code from the lexical environment.

Now I'm looking for a simpler way to turn macro debugging on. I've
thought about a macro; since using eval is out of question (because of
breaking lexical env), I wanted to work around this by saving and
restoring the current handler manually:

(define-macro (cj-env#insert-result-of expr)
  (eval expr))

(define-macro (with-macro-debugging body)
  `(begin
     (cj-env#insert-result-of
      (begin
        (define |  saved-exception-handler| (current-exception-handler))
        (warn "saved:" |  saved-exception-handler|)
        (current-exception-handler primordial-exception-handler)
        (warn "now is:" (current-exception-handler))
        '(begin)))
     ,body
     (cj-env#insert-result-of
      (begin
        (warn "put back:" |  saved-exception-handler|)
        (current-exception-handler |  saved-exception-handler|)
        (warn "now is:" (current-exception-handler))
        '(begin))))))

But this won't work because the macro call after ,body isn't allowed,
see my former mail about (begin).

What are your suggestions?

Cheers
Christian.




More information about the Gambit-list mailing list