From 5b69593766c6b6f2223783d36a90d5e7fd7901ab Mon Sep 17 00:00:00 2001 From: ChAoS_UnItY <43753315+ChAoSUnItY@users.noreply.github.com> Date: Fri, 22 Oct 2021 03:30:05 +0800 Subject: [PATCH] cgen,js: fix missing break in switch case, generated by match with range branches (#12260) --- vlib/v/gen/c/cgen.v | 2 ++ vlib/v/gen/c/testdata/enum_switch_case.out | 1 + vlib/v/gen/c/testdata/enum_switch_case.vv | 10 +++++++--- vlib/v/gen/js/js.v | 2 ++ 4 files changed, 12 insertions(+), 3 deletions(-) create mode 100644 vlib/v/gen/c/testdata/enum_switch_case.out diff --git a/vlib/v/gen/c/cgen.v b/vlib/v/gen/c/cgen.v index 9ada6badb3..e6f7889eab 100644 --- a/vlib/v/gen/c/cgen.v +++ b/vlib/v/gen/c/cgen.v @@ -4480,6 +4480,7 @@ fn (mut g Gen) match_expr_switch(node ast.MatchExpr, is_expr bool, cond_var stri } g.writeln(') {') g.stmts_with_tmp_var(range_branch.stmts, tmp_var) + g.writeln('break;') g.writeln('}') } g.indent-- @@ -4543,6 +4544,7 @@ fn (mut g Gen) match_expr_switch(node ast.MatchExpr, is_expr bool, cond_var stri } g.writeln(') {') g.stmts_with_tmp_var(range_branch.stmts, tmp_var) + g.writeln('break;') g.writeln('}') } g.indent-- diff --git a/vlib/v/gen/c/testdata/enum_switch_case.out b/vlib/v/gen/c/testdata/enum_switch_case.out new file mode 100644 index 0000000000..11d2c888d1 --- /dev/null +++ b/vlib/v/gen/c/testdata/enum_switch_case.out @@ -0,0 +1 @@ +4..5 \ No newline at end of file diff --git a/vlib/v/gen/c/testdata/enum_switch_case.vv b/vlib/v/gen/c/testdata/enum_switch_case.vv index 29075c5390..364c7fc7d5 100644 --- a/vlib/v/gen/c/testdata/enum_switch_case.vv +++ b/vlib/v/gen/c/testdata/enum_switch_case.vv @@ -8,13 +8,17 @@ enum Enum { } fn main() { - e := Enum.e1 + e := Enum.e5 match e { .e1 {} .e2 {} .e3 {} .e4 {} - 4...5 {} - else {} + 4...5 { + println('4..5') + } + else { + println('else') + } } } diff --git a/vlib/v/gen/js/js.v b/vlib/v/gen/js/js.v index 705d64fb10..732d1dab04 100644 --- a/vlib/v/gen/js/js.v +++ b/vlib/v/gen/js/js.v @@ -2362,6 +2362,7 @@ fn (mut g JsGen) match_expr_switch(node ast.MatchExpr, is_expr bool, cond_var Ma } g.writeln(') {') g.stmts_with_tmp_var(range_branch.stmts, tmp_var) + g.writeln('break;') g.writeln('}') } g.dec_indent() @@ -2423,6 +2424,7 @@ fn (mut g JsGen) match_expr_switch(node ast.MatchExpr, is_expr bool, cond_var Ma } g.writeln(') {') g.stmts_with_tmp_var(range_branch.stmts, tmp_var) + g.writeln('break;') g.writeln('}') } g.dec_indent()