Thanks to all for your ideas. Independently of Gray, I arrived at something pretty similar, as follows.
It then turned out that this wasn't in the end what I needed for my
package, but I am working on something very similar.
transform(a::BigFloat) = a
transform(a::Number) = :( BigFloat(string($a)) )
transform(a::Symbol) = isa(eval(a), MathConst) ? :(big($a)) : a
function transform(expr::Expr)
ex = copy(expr)
for (i, arg) in enumerate(expr.args)
ex.args[i] = transform(arg)
end
return ex
end
