From e9a60273a7aa345f256af32e857374dc534da1bb Mon Sep 17 00:00:00 2001 From: TermiNexus Date: Wed, 26 Aug 2026 21:32:29 +0800 Subject: [PATCH] =?UTF-8?q?debug(funcattrs):=20=E7=AC=AC=E4=BA=8C=E8=BD=AE?= =?UTF-8?q?=E8=AF=8A=E6=96=AD=E2=80=94=E2=80=94dump=20decorator=20AST/args?= =?UTF-8?q?/kwargs/=E6=A8=A1=E5=9D=97SHA1=EF=BC=8C=E7=A1=AE=E8=AE=A4?= =?UTF-8?q?=E7=AC=AC=E4=B8=89=E4=B8=AA=E5=B1=9E=E6=80=A7=E5=8F=82=E6=95=B0?= =?UTF-8?q?=E5=8E=BB=E5=90=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- App/lib/core/Gen/FuncGenBase.vp | 16 ++++++++++++++++ App/lib/core/Gen/FuncGenDef.vp | 2 +- 2 files changed, 17 insertions(+), 1 deletion(-) 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)