Skip to content

Commit a6394cd

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

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
@@ -98,7 +98,7 @@ IteratorSize(::Type{Any}) = SizeUnknown()
9898

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

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

test/iterators.jl

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -988,6 +988,12 @@ end
988988
@test accumulate(+, (x^2 for x in 1:3); init=100) == [101, 105, 114]
989989
end
990990

991+
@testset "issue #58109" begin
992+
i = Iterators.map(identity, 3)
993+
j = Iterators.map(sqrt, 7)
994+
@test (@inferred Base.IteratorSize(i)) === @inferred Base.IteratorSize(eltype([i, j]))
995+
end
996+
991997
@testset "IteratorSize trait for zip" begin
992998
@test (@inferred Base.IteratorSize(zip())) == Base.IsInfinite() # for zip of empty tuple
993999
@test (@inferred Base.IteratorSize(zip((1,2,3), repeated(0)))) == Base.HasLength() # for zip of ::HasLength and ::IsInfinite

0 commit comments

Comments
 (0)