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:
1 parent
0f2675e794
commit
d6b87da063
1 file changed
+5
-2
@@ -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
|
||||
|
||||
Reference in new issue
Block a user