So apparently, this: https://github.com/JuliaLang/julia/issues/14110 is not
a bug. Which leaves me with the question, how to accomplish concatenating
the argument types tuple for ccall()? There doesn't seem to be a way to
accomplish the concatenation (without also evaluating the type parameters)
in ways that result in a valid argument type list for ccall(). The idea is
to not have to eval() at runtime for every ccall(), as ObjectiveC.jl
currently does.
A simplified core part of the above:
julia> U = (Ptr{UInt8},)
(Ptr{UInt8},)
julia> :((Ptr{Void},Ptr{Void})..., $U...)
:(((Ptr{Void},Ptr{Void})...,(Ptr{UInt8},)...))
julia> Meta.show_sexpr(:((Ptr{Void},Ptr{Void})..., $U...))
(:tuple, (:..., (:tuple, (:curly, :Ptr, :Void), (:curly, :Ptr, :Void))),
(:..., (Ptr{UInt8},)))
The suggestion is not evaluate the macro, which still leaves the unexpanded
(Ptr{UInt8},) in there, and ccall() complains about the types. With some
mucking about of objc_msgSendTupleConcat sometimes that shows up as (:curly,
:Ptr, :UInt8) but only in ways that fail at the ccall or julia trying to
evaluate the tuple concatenation.
Is there another way of doing this? I wasn't able to get the intended
behavior with a templated function, either, but it feels like it should be
possible.