Skip to content

Commit f9b9ee0

Browse files
author
Erlang/OTP
committed
Merge branch 'isabell/syntax-tools/fix/GH-10103/OTP-19740' into maint-27
* isabell/syntax-tools/fix/GH-10103/OTP-19740: syntax_tools: Backport fix for annotating maybe to OTP-27
2 parents 8cc98dd + 973038f commit f9b9ee0

File tree

2 files changed

+22
-7
lines changed

2 files changed

+22
-7
lines changed

lib/syntax_tools/src/erl_syntax_lib.erl

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -561,14 +561,19 @@ vann_match_expr(Tree, Env) ->
561561
{ann_bindings(Tree1, Env, Bound, Free), Bound, Free}.
562562

563563
vann_maybe_expr(Tree, Env) ->
564+
Bound = [],
564565
Body = erl_syntax:maybe_expr_body(Tree),
565566
{B1, {_, Free1}} = vann_body(Body, Env),
566-
Else = erl_syntax:maybe_expr_else(Tree),
567-
{Else1, _, Free2} = vann_else_expr(Else, Env),
568-
Free = ordsets:union(Free1, Free2),
569-
Tree1 = rewrite(Tree, erl_syntax:maybe_expr(B1, Else1)),
570-
Bound = [],
571-
{ann_bindings(Tree1, Env, Bound, Free), Bound, Free}.
567+
case erl_syntax:maybe_expr_else(Tree) of
568+
none ->
569+
Tree1 = rewrite(Tree, erl_syntax:maybe_expr(B1)),
570+
{ann_bindings(Tree1, Env, Bound, Free1), Bound, Free1};
571+
Else ->
572+
{Else1, _, Free2} = vann_else_expr(Else, Env),
573+
Free = ordsets:union(Free1, Free2),
574+
Tree1 = rewrite(Tree, erl_syntax:maybe_expr(B1, Else1)),
575+
{ann_bindings(Tree1, Env, Bound, Free), Bound, Free}
576+
end.
572577

573578
vann_maybe_match_expr(Tree, Env) ->
574579
E = erl_syntax:maybe_match_expr_body(Tree),

lib/syntax_tools/test/syntax_tools_SUITE.erl

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -455,7 +455,17 @@ test_maybe_expr_ann(Config) when is_list(Config) ->
455455
[Env4, Bound4, Free4] = erl_syntax:get_ann(ElseAnn),
456456
{'env',[]} = Env4,
457457
{'bound',[]} = Bound4,
458-
{'free',[]} = Free4.
458+
{'free',[]} = Free4,
459+
460+
%% Test that it also works when there is no else clause
461+
MaybeNoElse = erl_syntax:maybe_expr([MaybeMatch1, MaybeMatch2, Match1]),
462+
MaybeNoElseAnn = erl_syntax_lib:annotate_bindings(MaybeNoElse, []),
463+
[Env, Bound, Free] = erl_syntax:get_ann(MaybeNoElseAnn),
464+
[MaybeMatchAnn1, MaybeMatchAnn2, MatchAnn1] = erl_syntax:maybe_expr_body(MaybeNoElseAnn),
465+
NoElseAnn = erl_syntax:maybe_expr_else(MaybeNoElseAnn),
466+
[] = erl_syntax:get_ann(NoElseAnn),
467+
468+
ok.
459469

460470
test_files(Config) ->
461471
DataDir = ?config(data_dir, Config),

0 commit comments

Comments
 (0)