From 3bca6e80b914aee9bfe2a9d94a0566ac704676c0 Mon Sep 17 00:00:00 2001 From: Alexander Medvednikov Date: Wed, 11 Mar 2026 12:45:08 +0300 Subject: [PATCH] parser: failed to compile: Reference to a function prefixed with a type name is expected to be an enum (fixes #26414) --- 01KKE4J2DBNAXGWNR7Z7A9CFV5 | Bin 0 -> 128632 bytes vlib/v/checker/checker.v | 40 ++++++++++++++++++ vlib/v/gen/c/cgen.v | 4 ++ vlib/v/parser/parser.v | 12 ++++-- .../imported_static_method_fn_ref_test.v | 15 +++++++ .../v/tests/modules/staticfnref/staticfnref.v | 12 ++++++ 6 files changed, 80 insertions(+), 3 deletions(-) create mode 100755 01KKE4J2DBNAXGWNR7Z7A9CFV5 create mode 100644 vlib/v/tests/modules/imported_static_method_fn_ref_test.v create mode 100644 vlib/v/tests/modules/staticfnref/staticfnref.v diff --git a/01KKE4J2DBNAXGWNR7Z7A9CFV5 b/01KKE4J2DBNAXGWNR7Z7A9CFV5 new file mode 100755 index 0000000000000000000000000000000000000000..013addcb4e120c64418b60670aabd1428928d571 GIT binary patch literal 128632 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 literal 0 HcmV?d00001 diff --git a/vlib/v/checker/checker.v b/vlib/v/checker/checker.v index f04cca20e..efa4fe340 100644 --- a/vlib/v/checker/checker.v +++ b/vlib/v/checker/checker.v @@ -6110,6 +6110,38 @@ fn (mut c Checker) index_expr(mut node ast.IndexExpr) ast.Type { // `.green` or `Color.green` // If a short form is used, `expected_type` needs to be an enum // with this value. +fn (mut c Checker) static_fn_value_from_enum_val(mut node ast.EnumVal, fn_name string, func ast.Fn) ast.Type { + if !func.is_pub && func.mod != c.mod { + c.error('function `${func.name}` is private', node.pos) + return ast.void_type + } + mut fn_type := c.table.find_or_register_fn_type(func, false, true) + if fn_type < 0 { + mut f := ast.Fn{ + ...func + } + f.name = '' + fn_type = c.table.find_or_register_fn_type(f, false, true) + } + node.typ = ast.new_type(fn_type) + c.table.used_features.anon_fn = true + return node.typ +} + +fn (mut c Checker) enum_val_as_static_fn(mut node ast.EnumVal, typ_sym ast.TypeSymbol, fsym ast.TypeSymbol) ast.Type { + fn_name := '${typ_sym.name}__static__${node.val}' + if func := c.table.find_fn(fn_name) { + return c.static_fn_value_from_enum_val(mut node, fn_name, func) + } + if fsym.name != typ_sym.name { + alias_fn_name := '${fsym.name}__static__${node.val}' + if func := c.table.find_fn(alias_fn_name) { + return c.static_fn_value_from_enum_val(mut node, alias_fn_name, func) + } + } + return ast.void_type +} + fn (mut c Checker) enum_val(mut node ast.EnumVal) ast.Type { mut typ_idx := if node.enum_name == '' { // Get the type of the enum without enum name by looking at the expected type. @@ -6157,6 +6189,10 @@ fn (mut c Checker) enum_val(mut node ast.EnumVal) ast.Type { } fsym := c.table.final_sym(typ) if fsym.kind != .enum && !c.pref.translated && !c.file.is_translated { + fn_type := c.enum_val_as_static_fn(mut node, typ_sym, fsym) + if fn_type != ast.void_type { + return fn_type + } // TODO: in C int fields can be compared to enums, need to handle that in C2V if typ_sym.kind == .placeholder { // If it's a placeholder, the type doesn't exist, print @@ -6176,6 +6212,10 @@ fn (mut c Checker) enum_val(mut node ast.EnumVal) ast.Type { } info := typ_sym.enum_info() if node.val !in info.vals { + fn_type := c.enum_val_as_static_fn(mut node, typ_sym, fsym) + if fn_type != ast.void_type { + return fn_type + } suggestion := util.new_suggestion(node.val, info.vals) c.error(suggestion.say('enum `${typ_sym.name}` does not have a value `${node.val}`'), node.pos) diff --git a/vlib/v/gen/c/cgen.v b/vlib/v/gen/c/cgen.v index 219ec0368..088d92761 100644 --- a/vlib/v/gen/c/cgen.v +++ b/vlib/v/gen/c/cgen.v @@ -8430,6 +8430,10 @@ fn (mut g Gen) gen_enum_prefix(typ ast.Type) string { } fn (mut g Gen) enum_val(node ast.EnumVal) { + if g.table.final_sym(node.typ).kind == .function { + g.write(c_fn_name('${node.enum_name}__static__${node.val}')) + return + } g.write('${g.gen_enum_prefix(node.typ)}${node.val}') } diff --git a/vlib/v/parser/parser.v b/vlib/v/parser/parser.v index 987e24f16..513785e76 100644 --- a/vlib/v/parser/parser.v +++ b/vlib/v/parser/parser.v @@ -1882,16 +1882,22 @@ fn (mut p Parser) name_expr() ast.Expr { // `anon_fn := Foo.bar` assign static method if !known_var && lit0_is_capital && p.peek_tok.kind == .dot && language == .v && p.peek_token(2).kind == .name { - if func := p.table.find_fn(p.prepend_mod(p.tok.lit) + '__static__' + p.peek_token(2).lit) { + type_name := p.tok.lit + full_type_name := if mod != '' { + '${mod}.${type_name}' + } else { + p.imported_symbols[type_name] or { p.prepend_mod(type_name) } + } + if func := p.table.find_fn(full_type_name + '__static__' + p.peek_token(2).lit) { fn_type := ast.new_type(p.table.find_or_register_fn_type(func, false, true)) pos := p.tok.pos() - typ_name := p.check_name() + p.check_name() p.check(.dot) field_name := p.check_name() pos.extend(p.tok.pos()) return ast.Ident{ - name: p.prepend_mod(typ_name) + '__static__' + field_name + name: full_type_name + '__static__' + field_name mod: p.mod kind: .function info: ast.IdentFn{ diff --git a/vlib/v/tests/modules/imported_static_method_fn_ref_test.v b/vlib/v/tests/modules/imported_static_method_fn_ref_test.v new file mode 100644 index 000000000..63826ea8a --- /dev/null +++ b/vlib/v/tests/modules/imported_static_method_fn_ref_test.v @@ -0,0 +1,15 @@ +module main + +import staticfnref + +fn call_main(fun fn (value int) staticfnref.MyStruct, value int) staticfnref.MyStruct { + return fun(value) +} + +fn test_imported_static_method_reference() { + s := staticfnref.MyStruct.new(3) + assert s.value == 3 + + s2 := call_main(staticfnref.MyStruct.new, 4) + assert s2.value == 4 +} diff --git a/vlib/v/tests/modules/staticfnref/staticfnref.v b/vlib/v/tests/modules/staticfnref/staticfnref.v new file mode 100644 index 000000000..da54827bd --- /dev/null +++ b/vlib/v/tests/modules/staticfnref/staticfnref.v @@ -0,0 +1,12 @@ +module staticfnref + +pub struct MyStruct { +pub: + value int +} + +pub fn MyStruct.new(value int) MyStruct { + return MyStruct{ + value: value + } +} -- 2.39.5