In a macro I need to first define a large number of functions and then 
merge them into one block and return that as the code from the macro. Is 
there a simpler/smarter way than what I currently do, which is based on 
explicitly adding

using Base.Test

# We want to find a way to merge the definition of two (or more) quoted 
function
# bodies into one quoted expression.

ex_a = quote
function a()
b()
end
end

ex_b = quote
function b()
2
end
end

ex_c = quote
function b()
c()
end
function c()
3
end
end

ex_funcs = [ex_a, ex_b, ex_c]

function concat_expr_blocks(a, b)
args = a.args
for barg in b.args
push!(a.args, barg)
end
a
end

function concat_expr_blocks(blocks)
ex = blocks[1]
for i in 2:length(blocks)
ex = concat_expr_blocks(ex, blocks[i])
end
ex
end

eval(concat_expr_blocks(ex_funcs[1:2]))
@test a() == 2
eval(concat_expr_blocks(ex_funcs))
@test a() == 3

Thanks for any pointers. I'm sure there is an obvious way but I can't see 
it right now... ;)

Regards,

Robert

Reply via email to