Skip to content

Commit cb6ed25

Browse files
authored
Merge pull request #159 from JuliaDebug/teh/generated
Fix "sg" for parametric generated functions
2 parents c0a3c75 + 82ed758 commit cb6ed25

File tree

3 files changed

+20
-5
lines changed

3 files changed

+20
-5
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/breakpoints.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ end
101101
breakpoint(String(method.file), method.line+1)
102102
frame = JuliaInterpreter.enter_call(loop_radius2, 2)
103103
ret = @interpret JuliaInterpreter.locals(frame)
104-
@test isa(ret, JuliaInterpreter.BreakpointRef)
104+
@test isa(ret, Tuple{Frame,JuliaInterpreter.BreakpointRef})
105105
# Test kwarg method
106106
remove()
107107
bp = breakpoint(tmppath, 3)

test/debug.jl

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,10 @@ end
2525
:(return $T)
2626
end
2727
callgenerated() = generatedfoo(1)
28+
@generated function generatedparams(a::Array{T,N}) where {T,N}
29+
:(return ($T,$N))
30+
end
31+
callgeneratedparams() = generatedparams([1 2; 3 4])
2832

2933
macro insert_some_calls()
3034
esc(quote
@@ -100,6 +104,17 @@ struct B{T} end
100104
@test debug_command(frame, "finish") === nothing
101105
@test frame.callee === nothing
102106
@test get_return(frame) === 1
107+
108+
# Parametric generated function (see #157)
109+
frame = fr = JuliaInterpreter.enter_call(callgeneratedparams)
110+
while fr.pc < JuliaInterpreter.nstatements(fr.framecode) - 1
111+
fr, pc = debug_command(fr, "se")
112+
end
113+
fr, pc = debug_command(fr, "sg")
114+
@test JuliaInterpreter.scopeof(fr).name == :generatedparams
115+
fr, pc = debug_command(fr, "finish")
116+
@test debug_command(fr, "finish") === nothing
117+
@test JuliaInterpreter.get_return(fr) == (Int, 2)
103118
end
104119

105120
@testset "Optional arguments" begin

0 commit comments

Comments
 (0)