From e3d306d1d2ba36c6215148c77a51137ced19f0d9 Mon Sep 17 00:00:00 2001 From: Delyan Angelov Date: Tue, 21 Nov 2023 22:45:09 +0200 Subject: [PATCH] parser: fix panic for struct field with new style @[attribute], with an enum default value after it --- vlib/v/parser/parse_type.v | 3 ++- ..._attribute_field_followed_by_enum_default_value.out | 6 ++++++ ...w_attribute_field_followed_by_enum_default_value.vv | 10 ++++++++++ 3 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 vlib/v/parser/tests/expecting_type_declaration_for_new_attribute_field_followed_by_enum_default_value.out create mode 100644 vlib/v/parser/tests/expecting_type_declaration_for_new_attribute_field_followed_by_enum_default_value.vv diff --git a/vlib/v/parser/parse_type.v b/vlib/v/parser/parse_type.v index 15143231098f04..4aff6b3d32d291 100644 --- a/vlib/v/parser/parse_type.v +++ b/vlib/v/parser/parse_type.v @@ -547,7 +547,8 @@ fn (mut p Parser) parse_any_type(language ast.Language, is_ptr bool, check_dot b name = 'C.${name}' } else if language == .js { name = 'JS.${name}' - } else if p.peek_tok.kind == .dot && check_dot && !name[0].is_capital() { + } else if p.peek_tok.kind == .dot && check_dot && p.tok.lit.len > 0 + && !p.tok.lit[0].is_capital() { // `module.Type` mut mod := name mut mod_pos := p.tok.pos() diff --git a/vlib/v/parser/tests/expecting_type_declaration_for_new_attribute_field_followed_by_enum_default_value.out b/vlib/v/parser/tests/expecting_type_declaration_for_new_attribute_field_followed_by_enum_default_value.out new file mode 100644 index 00000000000000..0631e8a986a0b0 --- /dev/null +++ b/vlib/v/parser/tests/expecting_type_declaration_for_new_attribute_field_followed_by_enum_default_value.out @@ -0,0 +1,6 @@ +vlib/v/parser/tests/expecting_type_declaration_for_new_attribute_field_followed_by_enum_default_value.vv:9:23: error: expecting type declaration + 7 | s string + 8 | i int + 9 | e MyEnum @[required] = .a + | ^ + 10 | } diff --git a/vlib/v/parser/tests/expecting_type_declaration_for_new_attribute_field_followed_by_enum_default_value.vv b/vlib/v/parser/tests/expecting_type_declaration_for_new_attribute_field_followed_by_enum_default_value.vv new file mode 100644 index 00000000000000..b27fc45ba7f98f --- /dev/null +++ b/vlib/v/parser/tests/expecting_type_declaration_for_new_attribute_field_followed_by_enum_default_value.vv @@ -0,0 +1,10 @@ +enum MyEnum { + a + b +} + +struct MyStruct { + s string + i int + e MyEnum @[required] = .a +}