From d6b87da0631e14c7cebd1985b3020182c5462fe5 Mon Sep 17 00:00:00 2001 From: TermiNexus Date: Wed, 14 Oct 2026 16:42:16 +0800 Subject: [PATCH] =?UTF-8?q?fix(viperc/attr):=20=E4=B8=8D=E5=86=8D=E8=A6=81?= =?UTF-8?q?=E6=B1=82=20`import=20c`=20=E6=89=8D=E8=AE=A4=20@=5F=5Fattribut?= =?UTF-8?q?e=5F=5F=EF=BC=88=E5=90=A6=E5=88=99=E5=87=BD=E6=95=B0=E5=B1=9E?= =?UTF-8?q?=E6=80=A7=E8=A2=AB=E9=9D=99=E9=BB=98=E4=B8=A2=E5=BC=83=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ast/parser.vp 的 _DesugarMagicAttribute 会把用户写的 `@__attribute__(...)` 脱糖成 `@c.Attribute(...)`,此处看到的 `c.` 前缀是编译器自己产生的(用户并未写 `@c.Attribute`)。 原先这里要求 is_module_imported(...,"c"),用户没写 `import c` 时整条装饰器被静默丢弃, stackrealign / always_inline 等函数属性全部失效。现去掉该守卫,与 extract_func_section (本就没有此守卫)保持一致。 --- App/lib/core/Gen/Func/FuncGenBase.vp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/App/lib/core/Gen/Func/FuncGenBase.vp b/App/lib/core/Gen/Func/FuncGenBase.vp index 1b80bf8..e9ecf13 100644 --- a/App/lib/core/Gen/Func/FuncGenBase.vp +++ b/App/lib/core/Gen/Func/FuncGenBase.vp @@ -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