diff --git a/vlib/v/checker/checker.v b/vlib/v/checker/checker.v index 1d194cb38fb6d6..b7178493e25634 100644 --- a/vlib/v/checker/checker.v +++ b/vlib/v/checker/checker.v @@ -3546,7 +3546,11 @@ fn (mut c Checker) at_expr(mut node ast.AtExpr) ast.Type { if c.table.cur_fn == unsafe { nil } { return ast.void_type } - node.val = c.table.cur_fn.name.all_after_last('.') + if _ := c.table.cur_fn.name.index('__static__') { + node.val = c.table.cur_fn.name.all_after_last('__static__') + } else { + node.val = c.table.cur_fn.name.all_after_last('.') + } } .method_name { if c.table.cur_fn == unsafe { nil } { @@ -3556,6 +3560,8 @@ fn (mut c Checker) at_expr(mut node ast.AtExpr) ast.Type { if c.table.cur_fn.is_method { node.val = c.table.type_to_str(c.table.cur_fn.receiver.typ).all_after_last('.') + '.' + fname + } else if _ := fname.index('__static__') { + node.val = fname.all_before('__static__') + '.' + fname.all_after('__static__') } else { node.val = fname } diff --git a/vlib/v/tests/comptime_at_test.v b/vlib/v/tests/comptime_at_test.v index c7b1dd71ac110c..46a121b22a68db 100644 --- a/vlib/v/tests/comptime_at_test.v +++ b/vlib/v/tests/comptime_at_test.v @@ -60,6 +60,12 @@ fn (mut t TestFn) tst_2(cb fn (int)) { cb(1) } +fn TestFn.static_fn() { + assert @FN == 'static_fn' + assert @METHOD == 'TestFn.static_fn' + assert @STRUCT == 'TestFn' +} + fn fn_name_mod_level() { assert @FN == 'fn_name_mod_level' assert @METHOD == 'fn_name_mod_level' @@ -96,6 +102,7 @@ fn test_at_fn() { t := i + 1 assert t == 2 }) + TestFn.static_fn() } fn test_at_mod() {