diff --git a/vlib/v/parser/if_match.v b/vlib/v/parser/if_match.v index 996ad4a7be..12743b4af0 100644 --- a/vlib/v/parser/if_match.v +++ b/vlib/v/parser/if_match.v @@ -238,7 +238,7 @@ fn (mut p Parser) match_expr() ast.MatchExpr { && (((ast.builtin_type_names_matcher.matches(p.tok.lit) || p.tok.lit[0].is_capital()) && p.peek_tok.kind != .lpar) || (p.peek_tok.kind == .dot && p.peek_token(2).lit.len > 0 && p.peek_token(2).lit[0].is_capital()))) || p.is_only_array_type() - || p.tok.kind == .key_fn { + || p.tok.kind == .key_fn || p.peek_token(2).kind == .amp { mut types := []ast.Type{} for { // Sum type match diff --git a/vlib/v/tests/match_array_of_reference_sumtype_test.v b/vlib/v/tests/match_array_of_reference_sumtype_test.v new file mode 100644 index 0000000000..3ac9c05c97 --- /dev/null +++ b/vlib/v/tests/match_array_of_reference_sumtype_test.v @@ -0,0 +1,14 @@ +type MySumType = []&MyStructA | []&MyStructB + +struct MyStructA {} + +struct MyStructB {} + +fn test_match_branch_with_array_expression() { + t := MySumType([&MyStructA{}, &MyStructA{}]) + ret := match t { + []&MyStructA { '[]&MyStructA' } + []&MyStructB { '[]&MyStructB' } + } + assert ret == '[]&MyStructA' +}