From 1d3786ff1e8454fa58c368c85fef1adecae6bdb3 Mon Sep 17 00:00:00 2001 From: yuyi Date: Sat, 7 Aug 2021 23:05:22 +0800 Subject: [PATCH] v.parser: fix `if a == Abc{} {` (#11092) --- vlib/v/parser/parser.v | 4 ++++ vlib/v/tests/if_expr_with_struct_init_test.v | 11 +++++++++++ 2 files changed, 15 insertions(+) create mode 100644 vlib/v/tests/if_expr_with_struct_init_test.v diff --git a/vlib/v/parser/parser.v b/vlib/v/parser/parser.v index 6414ae73ee..e3e22cc3f7 100644 --- a/vlib/v/parser/parser.v +++ b/vlib/v/parser/parser.v @@ -2147,6 +2147,10 @@ pub fn (mut p Parser) name_expr() ast.Expr { return map_init } return p.struct_init(false) // short_syntax: false + } else if p.peek_tok.kind == .lcbr && p.inside_if && lit0_is_capital && !known_var + && language == .v { + // if a == Foo{} {...} + return p.struct_init(false) } else if p.peek_tok.kind == .dot && (lit0_is_capital && !known_var && language == .v) { // T.name if p.is_generic_name() { diff --git a/vlib/v/tests/if_expr_with_struct_init_test.v b/vlib/v/tests/if_expr_with_struct_init_test.v new file mode 100644 index 0000000000..a8814a2819 --- /dev/null +++ b/vlib/v/tests/if_expr_with_struct_init_test.v @@ -0,0 +1,11 @@ +struct Foo { + bar int +} + +fn test_if_expr_with_struct_init() { + a := Foo{} + if a == Foo{} { + println(true) + assert true + } +}