debug(funcattrs): 第二轮诊断——dump decorator AST/args/kwargs/模块SHA1,确认第三个属性参数去向

This commit is contained in:
TermiNexus committed 2026-08-26 21:32:29 +08:00
1 parent e60be41ad8
commit e9a60273a7
2 files changed
+17 -1

No files matched your search

+16
View File
@@ -99,13 +99,29 @@ class FuncGenBase(CallGenBase.CallGenBase):
if call_node.args is None:
stdio.printf("[ATTR] call.args=None\n")
continue
dbuf: bytes = pool.alloc(1024)
if dbuf is not None:
dbuf[0] = '\0'
dpos: t.CSizeT = deco.dump(dbuf, 1024, 0)
if dpos < 1024:
dbuf[dpos] = '\0'
stdio.printf("[ATTR] deco.dump='%s'\n", dbuf)
args_list: list[ast.AST | t.CPtr] | t.CPtr = call_node.args
an: t.CSizeT = len(args_list)
stdio.printf("[ATTR] args_len=%d\n", an)
if call_node.keywords is not None:
kwl: t.CSizeT = len(call_node.keywords)
stdio.printf("[ATTR] keywords_len=%d\n", kwl)
for kwi in range(kwl):
kwnd: ast.AST | t.CPtr = call_node.keywords.get(kwi)
if kwnd is not None:
stdio.printf("[ATTR] kw[%d] kind=%d\n", kwi, kwnd.kind())
for ai in range(an):
arg_node: ast.AST | t.CPtr = args_list.get(ai)
if arg_node is None:
stdio.printf("[ATTR] arg[%d]=None\n", ai)
continue
stdio.printf("[ATTR] arg[%d] kind=%d\n", ai, arg_node.kind())
# 提取属性名(t.attr.xxx / t.attr.xxx() / t.attr.llvm.xxx)
attr_name: str = self._get_attr_name_from_node(arg_node)
+1 -1
View File
@@ -480,7 +480,7 @@ class FuncGenDef(CallGenBase.CallGenBase):
# 复用前向声明:清除 IsDeclared 标记,转为 define
func.IsDeclared = 0
# 装饰器属性设置(前向声明时未设置)
stdio.printf("[ATTR] call@reuse: func='%s'\n", fd.name)
stdio.printf("[ATTR] call@reuse: func='%s' mod_sha1='%s'\n", fd.name, trans.ModuleSha1)
func_attrs_reuse: str = self.Gen.FuncGenBase.extract_func_attrs(pool, fd.decorator_list, imported_modules)
if func_attrs_reuse is not None:
llvmlite.function_set_attrs(func, func_attrs_reuse)