It is not uncommon that most of the expression returned by a macro needs to be escaped.
For example
using MacroTools
const IGNORE = [true]
macro foo(f)
fdict = MacroTools.splitdef(f)
fdict[:body] = quote
if IGNORE[1]
return nothing
end
$(fdict[:body])
end
return $(esc(MacroTools.combinedef(dict)))
end
Here, I inserted a hook such that the function will not be executed if IGNORE[1]
is true. IGNORE
is set to a vector such that I can change the true
to false
at runtime.
Clearly, the const IGNORE
should be resolved in the macro environment. However, it would be rather tedious to manually escape everything else except for IGNORE
.
Is there a way to somehow label the constant IGNORE
such that it will not be escaped even it’s inside the esc
function?