Skip to content

Commit c317091

Browse files
authored
fix f and fr (#101)
1 parent b453538 commit c317091

File tree

3 files changed

+915
-25
lines changed

3 files changed

+915
-25
lines changed

src/commands.jl

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -76,23 +76,36 @@ end
7676

7777
function stacklength(frame)
7878
s = 0
79-
JuliaInterpreter.traverse(fr -> (s += 1; JuliaInterpreter.caller(fr)), JuliaInterpreter.leaf(frame))
79+
while frame !== nothing
80+
s += 1
81+
frame = caller(frame)
82+
end
8083
return s
8184
end
8285

8386
execute_command(state::DebuggerState, ::Val{:st}, cmd) = true
8487

8588
function execute_command(state::DebuggerState, ::Union{Val{:f}, Val{:fr}}, cmd)
86-
subcmds = split(cmd,' ')[2:end]
87-
if isempty(subcmds) || subcmds[1] == "v"
88-
print_frame(Base.pipe_writer(state.terminal), state.level, active_frame(state))
89-
return false
89+
subcmds = split(cmd, ' ')
90+
if length(subcmds) == 1
91+
new_level = 1
9092
else
91-
new_level = parse(Int, subcmds[1])
92-
if new_level > stacklength(state.frame) || new_level < 1
93-
printstyled(stderr, "Not a valid frame index\n"; color=:red)
93+
new_level = tryparse(Int, subcmds[2])
94+
if new_level == nothing
95+
printstyled(stderr, "Failed to parse $(subcmds[2]) as an integer\n"; color=:red)
9496
return false
9597
end
98+
end
99+
100+
if new_level > stacklength(state.frame) || new_level < 1
101+
printstyled(stderr, "Not a valid frame index\n"; color=:red)
102+
return false
103+
end
104+
105+
if subcmds[1] == "f"
106+
print_frame(Base.pipe_writer(state.terminal), new_level, state.frame)
107+
return false
108+
else
96109
state.level = new_level
97110
return true
98111
end

test/ui.jl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ end
6969
run_terminal_test(@make_frame(my_gcd(10, 20)),
7070
["n\n","`", "my_gc\t\n", "a\n", UP_ARROW, UP_ARROW, UP_ARROW, CTRL_C,
7171
"w add a\n", "w add sin(a)\n", "w add b\n", "w\n", "w rm 1\n", "w\n",
72+
"s\n", "f 1\n", "f 2\n", "fr 2\n", "fr 1\n",
7273
"bt\n", "st\n", "c\n", "c\n"],
7374
"ui/history_gcd.multiout")
7475

0 commit comments

Comments
 (0)