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.
Afficher les réponses par date
participants (1)
-
Christian