From 125650c9868e635915cefa7dd0a758cf81315ebb Mon Sep 17 00:00:00 2001 From: Nick Treleaven Date: Sat, 7 Nov 2020 13:47:27 +0000 Subject: [PATCH] cgen: fix using brackets for match expression (#6768) --- vlib/v/gen/cgen.v | 5 +++++ vlib/v/tests/match_test.v | 7 +++++++ 2 files changed, 12 insertions(+) diff --git a/vlib/v/gen/cgen.v b/vlib/v/gen/cgen.v index 7f17f75386..ab797017b0 100644 --- a/vlib/v/gen/cgen.v +++ b/vlib/v/gen/cgen.v @@ -2820,12 +2820,17 @@ fn (mut g Gen) match_expr(node ast.MatchExpr) { g.expr(node.cond) g.writeln(';') g.write(cur_line) + if is_expr { + // brackets needed otherwise '?' will apply to everything on the left + g.write('(') + } if node.is_sum_type { g.match_expr_sumtype(node, is_expr, cond_var) } else { g.match_expr_classic(node, is_expr, cond_var) } if is_expr { + g.write(')') g.decrement_inside_ternary() } } diff --git a/vlib/v/tests/match_test.v b/vlib/v/tests/match_test.v index 22d4ba12ab..2aa6f4e0d1 100644 --- a/vlib/v/tests/match_test.v +++ b/vlib/v/tests/match_test.v @@ -222,3 +222,10 @@ fn test_match_sumtype_multiple_types() { } } } + +fn test_sub_expression() { + b := false && match 1 {0 {true} else {true}} + assert !b + c := true || match 1 {0 {false} else {false}} + assert c +}