Skip to content

Commit 7530876

Browse files
nsajkoKristofferC
authored andcommitted
relax dispatch for the IteratorSize method for Generator (#58110)
Fixes #58109 (cherry picked from commit 805f85f)
1 parent 296b1bc commit 7530876

File tree

2 files changed

+7
-1
lines changed

2 files changed

+7
-1
lines changed

base/generator.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ IteratorSize(::Type{Any}) = SizeUnknown()
9797

9898
IteratorSize(::Type{<:Tuple}) = HasLength()
9999
IteratorSize(::Type{<:AbstractArray{<:Any,N}}) where {N} = HasShape{N}()
100-
IteratorSize(::Type{Generator{I,F}}) where {I,F} = IteratorSize(I)
100+
IteratorSize(::Type{<:Generator{I}}) where {I} = (@isdefined I) ? IteratorSize(I) : SizeUnknown()
101101

102102
haslength(iter) = IteratorSize(iter) isa Union{HasShape, HasLength}
103103

test/iterators.jl

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -959,6 +959,12 @@ end
959959
@test Iterators.tail_if_any((1,)) == ()
960960
end
961961

962+
@testset "issue #58109" begin
963+
i = Iterators.map(identity, 3)
964+
j = Iterators.map(sqrt, 7)
965+
@test (@inferred Base.IteratorSize(i)) === @inferred Base.IteratorSize(eltype([i, j]))
966+
end
967+
962968
@testset "IteratorSize trait for zip" begin
963969
@test Base.IteratorSize(zip()) == Base.IsInfinite() # for zip of empty tuple
964970
@test Base.IteratorSize(zip((1,2,3), repeated(0))) == Base.HasLength() # for zip of ::HasLength and ::IsInfinite

0 commit comments

Comments
 (0)