Skip to content

Commit c7cbebf

Browse files
authored
fix inference of e.g. Generator(=>, x, y) (#24145)
reported in #22907
1 parent 4fd1d40 commit c7cbebf

File tree

2 files changed

+7
-0
lines changed

2 files changed

+7
-0
lines changed

base/generator.jl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@ Generator(f, I1, I2, Is...) = Generator(a->f(a...), zip(I1, I2, Is...))
3737

3838
Generator(::Type{T}, iter::I) where {T,I} = Generator{I,Type{T}}(T, iter)
3939

40+
Generator(::Type{T}, I1, I2, Is...) where {T} = Generator(a->T(a...), zip(I1, I2, Is...))
41+
4042
start(g::Generator) = (@_inline_meta; start(g.iter))
4143
done(g::Generator, s) = (@_inline_meta; done(g.iter, s))
4244
function next(g::Generator, s)

test/functional.jl

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,11 @@ let gen = ((x,y) for x in 1:10, y in 1:10 if x % 2 == 0 && y % 2 == 0),
131131
@test collect(gen) == collect(gen2)
132132
end
133133

134+
# inference on vararg generator of a type (see #22907 comments)
135+
let f(x) = collect(Base.Generator(=>, x, x))
136+
@test @inferred(f((1,2))) == [1=>1, 2=>2]
137+
end
138+
134139
# generators with nested loops (#4867)
135140
@test [(i,j) for i=1:3 for j=1:i] == [(1,1), (2,1), (2,2), (3,1), (3,2), (3,3)]
136141

0 commit comments

Comments
 (0)