From 89a8854e5778a166249cf9215a904bf20e646bbc Mon Sep 17 00:00:00 2001 From: yuyi Date: Thu, 12 Aug 2021 15:19:06 +0800 Subject: [PATCH] v.parser: fix generics type name in if_expr (#11156) --- vlib/v/parser/expr.v | 2 +- vlib/v/tests/type_name_in_if_test.v | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 vlib/v/tests/type_name_in_if_test.v diff --git a/vlib/v/parser/expr.v b/vlib/v/parser/expr.v index 3317b4760c..a126c959d1 100644 --- a/vlib/v/parser/expr.v +++ b/vlib/v/parser/expr.v @@ -57,7 +57,7 @@ pub fn (mut p Parser) check_expr(precedence int) ?ast.Expr { node = p.map_init() p.check(.rcbr) // `}` } else { - if p.inside_if && p.is_generic_name() { + if p.inside_if && p.is_generic_name() && p.peek_tok.kind != .dot { // $if T is string {} p.expecting_type = true } diff --git a/vlib/v/tests/type_name_in_if_test.v b/vlib/v/tests/type_name_in_if_test.v new file mode 100644 index 0000000000..254ea26654 --- /dev/null +++ b/vlib/v/tests/type_name_in_if_test.v @@ -0,0 +1,13 @@ +struct Flag {} + +fn (f Flag) verify() { + if T.name == 'int' { + println('It is an int!') + assert true + } +} + +fn test_generic_type_name_in_if() { + flag := Flag{} + flag.verify() +}