I found one previous conversation related to this, but unfortunately the answer didn't work for me. Hopefully I'm not asking an obvious question.
Suppose I have some macro: macro mytest(fn::Symbol, ex::Expr) quote $(esc(fn))($ex) end end and I have some function that takes in the expression to operate on it: myfun(ex::Expr) = ... the problem (which may be obvious) is that `$ex` gets evaluated with the macro, and I won't pass an `Expr` to `myfun`. A quick demonstration: foo(x, y) = x+y println(expandmacro(:(@mytest foo 1+2))) gives: begin # .../mtestmod.jl, line 38: foo(mtestmod.+(1,2)) end What I can't figure out is how to keep `ex` an expression that is passed to foo (at least without writing out Expr by hand). I've tried many combinations of syntax to try to preserve the Expr-ness of `ex`. Thanks!