Skip to content

Commit d10d650

Browse files
authored
Remove invoke from StructArray SA extension (#348)
1 parent 5bffae7 commit d10d650

2 files changed

Lines changed: 13 additions & 5 deletions

File tree

ext/StructArraysStaticArraysExt.jl

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,12 @@ function StructArrays.component(s::StructArray{<:Union{SVector,MVector}}, key::S
3333
StructArrays.component(s, i)
3434
end
3535

36-
# invoke general fallbacks for a `FieldArray` type.
36+
# use general fallbacks for a `FieldArray` type.
3737
@inline function StructArrays.staticschema(T::Type{<:FieldArray})
38-
invoke(StructArrays.staticschema, Tuple{Type{<:Any}}, T)
38+
StructArrays.staticschema_generic(T)
3939
end
40-
StructArrays.component(s::FieldArray, i) = invoke(StructArrays.component, Tuple{Any, Any}, s, i)
41-
StructArrays.createinstance(T::Type{<:FieldArray}, args...) = invoke(StructArrays.createinstance, Tuple{Type{<:Any}, Vararg}, T, args...)
40+
StructArrays.component(s::FieldArray, i) = getfield(s, i)
41+
StructArrays.createinstance(T::Type{<:FieldArray}, args...) = StructArrays.createinstance_generic(T, args...)
4242

4343
# disambiguation
4444
Base.similar(s::StructArray, S::Type, sz::Tuple{Union{Integer, Base.OneTo, SOneTo}, Vararg{Union{Union{Integer, Base.OneTo, SOneTo}}}}) = StructArrays._similar(s, S, sz)

src/interface.jl

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,11 @@ julia> StructArrays.staticschema(Complex{Float64})
2525
NamedTuple{(:re, :im),Tuple{Float64,Float64}}
2626
```
2727
"""
28-
@generated function staticschema(::Type{T}) where {T}
28+
function staticschema(::Type{T}) where {T}
29+
return staticschema_generic(T)
30+
end
31+
32+
@generated function staticschema_generic(::Type{T}) where {T}
2933
name_tuple = Expr(:tuple, [QuoteNode(f) for f in fieldnames(T)]...)
3034
type_tuple = Expr(:curly, :Tuple, [Expr(:call, :fieldtype, :T, i) for i in 1:fieldcount(T)]...)
3135
Expr(:curly, :NamedTuple, name_tuple, type_tuple)
@@ -46,6 +50,10 @@ julia> StructArrays.createinstance(Complex{Float64}, (re=1.0, im=2.0)...)
4650
```
4751
"""
4852
function createinstance(::Type{T}, args...)::T where {T}
53+
return createinstance_generic(T, args...)
54+
end
55+
56+
function createinstance_generic(::Type{T}, args...)::T where {T}
4957
isconcretetype(T) ? bypass_constructor(T, args) : constructorof(T)(args...)
5058
end
5159

0 commit comments

Comments
 (0)