Subject: bug#65620: void function edebug-after

From: Michael Heerdegen <[email-masked]>
Date: Thu, 31 Aug 2023 01:09:11 +0200

Alan Mackenzie <[email-masked]> writes:

> (defmacro hash-if (condition then-form &rest else-forms)
>   "A conditional compilation macro analogous to C's #if.
> Evaluate CONDITION at macro-expansion time.  If it is non-nil,
> expand the macro to THEN-FORM.  Otherwise expand it to ELSE-FORMS
> enclosed in a `progn' form.  ELSE-FORMS may be empty."
>   (declare (indent 2)
>            (debug (form sexp &rest sexp)))
>   (if (eval condition lexical-binding)
>       then-form
>     (cons 'progn else-forms)))

Dunno if someone is able to fix this (I'm not).  Until then using
`def-form` `or `sexp` instead of `form` works in a better way (the
former edebugs CONDITION when instrumenting, the latter would omit
edebugging the CONDITION entirely).

Anyway, the key point in the above example is that macroexpanding (while
instrumenting) combined with the `eval' call seems to lead to the
evaluation of instrumented code outside of an Edebug session when
CONDITION is instrumented using `form`.  `eval-when-compile' uses
`def-form` for example - I guess using `form` in this case doesn't work
as one might expect.

Michael.