diff --git a/App/lib/core/Gen/FuncGenBase.vp b/App/lib/core/Gen/FuncGenBase.vp index 41b4d0c..e34ec64 100644 --- a/App/lib/core/Gen/FuncGenBase.vp +++ b/App/lib/core/Gen/FuncGenBase.vp @@ -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) diff --git a/App/lib/core/Gen/FuncGenDef.vp b/App/lib/core/Gen/FuncGenDef.vp index c083651..5166c8a 100644 --- a/App/lib/core/Gen/FuncGenDef.vp +++ b/App/lib/core/Gen/FuncGenDef.vp @@ -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)