lhupe
1
I have a function that takes an SVector
of some type, i.e.
function foo(vec::SVector{2,T}) where T
for x in vec
#do something with x
end
end
and want to use Unrolled.jl
on it. However, when I add the @unroll
macro like this
@unroll function foo(vec::SVector{2,T}) where T
@unroll for x in vec
#do something with x
end
end
I get an error message: LoadError: AssertionError:
@unroll must precede a function definition
Is there anything I’m doing wrong or is Unrolled.jl
just not able to deal with where
s?
1 Like
Haven’t used Unrolled.jl before, but the readme and tests don’t show any examples of @unroll function ...
, it’s just applied to for
loops.
rdeits
3
This looks like a bug in Unrolled.jl to me. The relevant line is here: https://github.com/cstjean/Unrolled.jl/blob/b71319847801847426886ca0720a7b5277ca09ff/src/Unrolled.jl#L70 and should probably include an @capture
that matches against functions with where
clauses. You can play around with this yourself using MacroTools.jl:
julia> using MacroTools
julia> @capture(:(function foo(x); end), function fname_(args__) body__ end)
true
julia> @capture(:(function foo(x) where {T}; end), function fname_(args__) body__ end)
false
julia> @capture(:(function foo(x) where {T}; end), function fname_(args__) where {T__} body__ end)
true
1 Like
Should be fixed on Unrolled.jl’s master
. Thank you for the bug report.
2 Likes
If you’re using MacroTools, you might be interested in splitdef
and combinedef
for processing function definitions.