Hi, I would like to know how to control the way in which package name
prefixes are added in the expressions returned by macros.
Let's take a simple example macro, which takes an function call and
replaces the first argument by a function "foo" of that argument:
macro composefoo(ex)
x = ex.args[2]
ex.args[2] = :(foo($x))
ex
end
If I define this in Main I will obtain:
julia> macroexpand(:(@composefoo bar(x)))
:(bar(foo(x)))
But if I define the same macro inside a package called Foo, the result is:
julia> using Foo
julia> macroexpand(:(@composefoo bar(x)))
:(Foo.bar(Foo.foo(Foo.x)))
In this example, if the function "foo" is defined inside Foo (and not
exported), it is useful to have the prefix automatically added in the
returned expression, but I would like to preserve the function name "bar"
and the argument "x" untouched.
I know that I can escape the returned expression, but that would be
dangerous in more complex cases, if the expression contains different
lines, including the assignment of values to new variables and I don't want
to accidentally overwrite existing variables with the same name in Main.
Generally, I would like to escape only the names of the variables and
functions that are included in the input expression. But I don't know if
there is a smart way of doing that.
Best regards
Helios De Rosario