fix(viperc/attr): 不再要求 import c 才认 @__attribute__(否则函数属性被静默丢弃)

ast/parser.vp 的 _DesugarMagicAttribute 会把用户写的 `@__attribute__(...)` 脱糖成
`@c.Attribute(...)`,此处看到的 `c.` 前缀是编译器自己产生的(用户并未写 `@c.Attribute`)。
原先这里要求 is_module_imported(...,"c"),用户没写 `import c` 时整条装饰器被静默丢弃,
stackrealign / always_inline 等函数属性全部失效。现去掉该守卫,与 extract_func_section
(本就没有此守卫)保持一致。
This commit is contained in:
TermiNexus committed 2026-10-14 16:42:16 +08:00
1 parent 0f2675e794
commit d6b87da063
1 file changed
+5 -2
+5 -2
View File
@@ -56,8 +56,11 @@ novirtual class FuncGenBase(CallGenBase.CallGenBase):
c_name: ast.Name* = ast.Name*(func_attr.value)
if c_name.id is None: continue
if string.strcmp(c_name.id, "c") != 0: continue
imp_c: int = self.Gen.ImportsGen.is_module_imported(imported_modules, "c")
if imp_c == 0: continue
# 不要求 `import c`:`@__attribute__(...)` 会被 ast/parser.vp(_DesugarMagicAttribute)
# 脱糖成 `@c.Attribute(...)`,这里的 `c.` 前缀是编译器自己产生的(用户写的是
# `@__attribute__`,并非 `@c.Attribute`)。若在此要求 `import c`,用户明明没引入 c
# 就会把整条装饰器静默丢弃(`stackrealign`/`always_inline` 等函数属性全失效)。
# extract_func_section 本就没有这个守卫,二者保持一致。
# Iterate args and extract attrs
if call_node.args is None: continue