debug(funcattrs): 第二轮诊断——dump decorator AST/args/kwargs/模块SHA1,确认第三个属性参数去向
This commit is contained in:
1 parent
e60be41ad8
commit
e9a60273a7
2 files changed
+17
-1
No files matched your search
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in new issue
Block a user