Skip to content

Commit 764597a

Browse files
authored
Fix try catch else Expr conversion (#198)
This was incorrect when not including a finally clause.
1 parent 5e46a0d commit 764597a

File tree

3 files changed

+36
-2
lines changed

3 files changed

+36
-2
lines changed

src/expr.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -213,7 +213,7 @@ function _to_expr(node::SyntaxNode; iteration_spec=false, need_linenodes=true,
213213
end
214214
# At this point args is
215215
# [try_block catch_var catch_block]
216-
if finally_ !== false
216+
if finally_ !== false || else_ !== false
217217
push!(args, finally_)
218218
end
219219
if else_ !== false

test/expr.jl

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -261,4 +261,38 @@
261261
@test parse(Expr, "@.") == Expr(:macrocall, Symbol("@__dot__"), LineNumberNode(1))
262262
@test parse(Expr, "using A: @.") == Expr(:using, Expr(Symbol(":"), Expr(:., :A), Expr(:., Symbol("@__dot__"))))
263263
end
264+
265+
@testset "try" begin
266+
@test parse(Expr, "try x catch e; y end") ==
267+
Expr(:try,
268+
Expr(:block, LineNumberNode(1), :x),
269+
:e,
270+
Expr(:block, LineNumberNode(1), :y))
271+
@test parse(Expr, "try x finally y end") ==
272+
Expr(:try,
273+
Expr(:block, LineNumberNode(1), :x),
274+
false,
275+
false,
276+
Expr(:block, LineNumberNode(1), :y))
277+
@test parse(Expr, "try x catch e; y finally z end") ==
278+
Expr(:try,
279+
Expr(:block, LineNumberNode(1), :x),
280+
:e,
281+
Expr(:block, LineNumberNode(1), :y),
282+
Expr(:block, LineNumberNode(1), :z))
283+
@test parse(Expr, "try x catch e; y else z end", version=v"1.8") ==
284+
Expr(:try,
285+
Expr(:block, LineNumberNode(1), :x),
286+
:e,
287+
Expr(:block, LineNumberNode(1), :y),
288+
false,
289+
Expr(:block, LineNumberNode(1), :z))
290+
@test parse(Expr, "try x catch e; y else z finally w end", version=v"1.8") ==
291+
Expr(:try,
292+
Expr(:block, LineNumberNode(1), :x),
293+
:e,
294+
Expr(:block, LineNumberNode(1), :y),
295+
Expr(:block, LineNumberNode(1), :w),
296+
Expr(:block, LineNumberNode(1), :z))
297+
end
264298
end

test/test_utils.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -267,7 +267,7 @@ function reduce_test(tree::SyntaxNode)
267267
end
268268

269269
function reduce_test(text::AbstractString)
270-
tree, = parseall(SyntaxNode, text)
270+
tree = parseall(SyntaxNode, text)
271271
reduce_test(tree)
272272
end
273273

0 commit comments

Comments
 (0)