Skip to content

Commit 6d622d7

Browse files
authored
fix evals when the value is a symbols (#128)
* fix evals when the value is a symbols * Update test/evaling.jl Co-Authored-By: KristofferC <[email protected]> * add a test for watches
1 parent 8fed378 commit 6d622d7

File tree

5 files changed

+18
-4
lines changed

5 files changed

+18
-4
lines changed

src/Debugger.jl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,8 @@ end
6969

7070
@deprecate break_on_error(v::Bool) (v ? break_on(:error) : break_off(:error))
7171

72+
maybe_quote(x) = (isa(x, Expr) || isa(x, Symbol)) ? QuoteNode(x) : x
73+
7274
include("locationinfo.jl")
7375
include("repl.jl")
7476
include("commands.jl")

src/printing.jl

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,6 @@ function pattern_match_kw_call(expr)
5353
end
5454

5555
function print_next_expr(io::IO, frame::Frame)
56-
maybe_quote(x) = (isa(x, Expr) || isa(x, Symbol)) ? QuoteNode(x) : x
5756
expr = pc_expr(frame)
5857
@assert expr !== nothing
5958
print(io, "About to run: ")
@@ -96,7 +95,7 @@ function breakpoint_linenumbers(frame::Frame; lowered=false)
9695
isassigned(framecode.breakpoints, stmtidx) || continue
9796
bp = framecode.breakpoints[stmtidx]
9897
line = lowered ? stmtidx : JuliaInterpreter.linenumber(frame, stmtidx)
99-
breakpoint_lines[line] = bp
98+
breakpoint_lines[line] = bp
10099
end
101100
return breakpoint_lines
102101
end

src/repl.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,7 @@ function eval_code(frame::Frame, command::AbstractString)
179179
vars = filter(v -> v.name != Symbol(""), JuliaInterpreter.locals(frame))
180180
res = gensym()
181181
eval_expr = Expr(:let,
182-
Expr(:block, map(x->Expr(:(=), x...), [(v.name, v.value) for v in vars])...),
182+
Expr(:block, map(x->Expr(:(=), x...), [(v.name, maybe_quote(v.value)) for v in vars])...),
183183
Expr(:block,
184184
Expr(:(=), res, expr),
185185
Expr(:tuple, res, Expr(:tuple, [v.name for v in vars]...))

src/watch.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ function show_watch_list(io, state::DebuggerState)
1616
for (i, expr) in enumerate(state.watch_list)
1717
vars = filter(v -> v.name != Symbol(""), JuliaInterpreter.locals(frame))
1818
eval_expr = Expr(:let,
19-
Expr(:block, map(x->Expr(:(=), x...), [(v.name, v.value) for v in vars])...),
19+
Expr(:block, map(x->Expr(:(=), x...), [(v.name, maybe_quote(v.value)) for v in vars])...),
2020
expr)
2121
errored = false
2222
res = try

test/evaling.jl

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,3 +33,16 @@ evalkw(x; bar=true) = x
3333
frame = @make_frame evalkw(2)
3434
res = eval_code(frame, "x")
3535
@test res == 2
36+
37+
# Evaling with symbols
38+
evalsym() = (x = :foo)
39+
frame = @make_frame evalsym()
40+
res = eval_code(frame, "x")
41+
@test res == :foo
42+
43+
frame = Debugger.@make_frame evalsym()
44+
state = dummy_state(frame)
45+
Debugger.add_watch_entry!(state, "x")
46+
watch_str = sprint(Debugger.show_watch_list, state)
47+
@test occursin("1] x: :foo", watch_str)
48+
Debugger.clear_watch_list!(state)

0 commit comments

Comments
 (0)