Skip to content

Commit 4a5b6c0

Browse files
committed
Fix "sg" for parametric generated functions
1 parent c41e768 commit 4a5b6c0

File tree

2 files changed

+19
-4
lines changed

2 files changed

+19
-4
lines changed

src/construct.jl

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -45,10 +45,10 @@ function namedtuple(kwargs)
4545
return NamedTuple{(names...,), Tuple{types...}}(vals)
4646
end
4747

48-
get_source(meth) = Base.uncompressed_ast(meth)
48+
get_source(meth::Method) = Base.uncompressed_ast(meth)
4949

50-
function get_source(g::GeneratedFunctionStub)
51-
b = g(g.argnames...)
50+
function get_source(g::GeneratedFunctionStub, env)
51+
b = g(env..., g.argnames...)
5252
b isa CodeInfo && return b
5353
return eval(b)
5454
end
@@ -138,7 +138,7 @@ function prepare_framecode(method::Method, @nospecialize(argtypes); enter_genera
138138
generator = false
139139
else
140140
if is_generated(method)
141-
code = get_source(method.generator)
141+
code = get_source(method.generator, lenv)
142142
generator = true
143143
else
144144
code = get_source(method)

test/debug.jl

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@ end
1313
:(return $T)
1414
end
1515
callgenerated() = generatedfoo(1)
16+
@generated function generatedparams(a::Array{T,N}) where {T,N}
17+
:(return ($T,$N))
18+
end
19+
callgeneratedparams() = generatedparams([1 2; 3 4])
1620

1721
macro insert_some_calls()
1822
esc(quote
@@ -85,6 +89,17 @@ struct B{T} end
8589
@test debug_command(frame, "finish") === nothing
8690
@test frame.callee === nothing
8791
@test get_return(frame) === 1
92+
93+
# Parametric generated function (see #157)
94+
frame = fr = JuliaInterpreter.enter_call(callgeneratedparams)
95+
while fr.pc < JuliaInterpreter.nstatements(fr.framecode) - 1
96+
fr, pc = debug_command(fr, "se")
97+
end
98+
fr, pc = debug_command(fr, "sg")
99+
@test JuliaInterpreter.scopeof(fr).name == :generatedparams
100+
fr, pc = debug_command(fr, "finish")
101+
@test debug_command(fr, "finish") === nothing
102+
@test JuliaInterpreter.get_return(fr) == (Int, 2)
88103
end
89104

90105
@testset "Optional arguments" begin

0 commit comments

Comments
 (0)