Skip to content

Commit 27a6df7

Browse files
authored
specialize iterate for Iterators.Reverse (#24)
1 parent 5ecc91b commit 27a6df7

File tree

2 files changed

+12
-5
lines changed

2 files changed

+12
-5
lines changed

src/ZeroDimensionalArrays.jl

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,14 @@ Base.@nospecializeinfer function Base.iterate((@nospecialize a::ZeroDimensionalA
8282
nothing
8383
end
8484

85+
function Base.iterate(r::Iterators.Reverse{<:ZeroDimensionalArray})
86+
a = Iterators.reverse(r)
87+
iterate(a)
88+
end
89+
Base.@nospecializeinfer function Base.iterate((@nospecialize a::Iterators.Reverse{<:ZeroDimensionalArray}), @nospecialize state::Any)
90+
nothing
91+
end
92+
8593
function construct_given_eltype(::Type{Arr}, ::Type{T}, v) where {Arr <: ZeroDimensionalArray, T}
8694
c = type_to_constructor_function(Arr)
8795
c(T, v)

test/runtests.jl

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,11 @@ using Aqua: Aqua
2828
@test @inferred isassigned(Arr(x))
2929
@test @inferred isassigned(Arr(x), 1)
3030
@test !(isassigned(Arr(x), 2))
31-
@test (@inferred iterate(Arr(x))) isa Tuple{typeof(x), Any}
32-
@test x === first(iterate(Arr(x)))
33-
@test let a = Arr(x)
34-
nothing === @inferred iterate(a, last(iterate(a)))
31+
for it (Arr(x), Iterators.reverse(Arr(x)))
32+
@test (@inferred iterate(it)) isa Tuple{typeof(x), Any}
33+
@test x === first(iterate(it))
34+
@test nothing === @inferred iterate(it, last(iterate(it)))
3535
end
36-
@test nothing === @inferred iterate(Arr(x), nothing)
3736
@test (@inferred similar(Arr(x))) isa Box{typeof(x)}
3837
@test (@inferred similar(Arr(x), Float32)) isa Box{Float32}
3938
@test (@inferred copy(Arr(x))) isa Arr{typeof(x)}

0 commit comments

Comments
 (0)