From b2e69c2f752b10545bd3bf7473043ba50e9bf218 Mon Sep 17 00:00:00 2001 From: TermiNexus Date: Wed, 19 Aug 2026 10:11:37 +0800 Subject: [PATCH] =?UTF-8?q?chore(gen):=20=E7=A7=BB=E9=99=A4=E5=85=A8?= =?UTF-8?q?=E9=83=A8=20[DIAG]=20=E8=B0=83=E8=AF=95=E6=89=93=E5=8D=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- App/lib/core/Gen/TypeGenBase.vp | 5 --- App/lib/core/Gen/TypeGenResolve.vp | 3 -- App/lib/core/Handles/HandlesTranslator.vp | 39 ----------------------- 3 files changed, 47 deletions(-) diff --git a/App/lib/core/Gen/TypeGenBase.vp b/App/lib/core/Gen/TypeGenBase.vp index 615d7a4..e169b22 100644 --- a/App/lib/core/Gen/TypeGenBase.vp +++ b/App/lib/core/Gen/TypeGenBase.vp @@ -238,9 +238,4 @@ class TypeGenBase: if rg_ta is not None: rv_d = rg_ta break - # 诊断(8fbba list[str].get 返回类型不匹配定位):T 替换结果。 - # list[str] 特化时 T 应替换为 str;若替换为 Value 则泛型上下文 - # GenericTypeArgs 被嵌套特化污染。 - if string.strcmp(name, "T") == 0: - stdio.printf("[DIAG] resolve_generic_type_name: T -> %s\n", rv_d) return rv_d \ No newline at end of file diff --git a/App/lib/core/Gen/TypeGenResolve.vp b/App/lib/core/Gen/TypeGenResolve.vp index 549f1ff..5e3c90a 100644 --- a/App/lib/core/Gen/TypeGenResolve.vp +++ b/App/lib/core/Gen/TypeGenResolve.vp @@ -963,9 +963,6 @@ class TypeGenResolve(TypeGenBase.TypeGenBase): if gp_tpn is not None and string.strcmp(nm.id, gp_tpn) == 0: gp_ta: str = self.GenericTypeArgs.get(gp_i) if gp_ta is not None: - # 诊断(8fbba list[str].get 类型不匹配):方法体 T 替换 - # 的实际值。list[str] 特化时 T→str;T→Value 则上下文污染。 - stdio.printf("[DIAG] T 替换: %s -> %s\n", nm.id, gp_ta) # 自映射/污染实参防护(泛型循环套用): # 1) 实参与参数名完全一致(T→T) # 2) 实参串包含任一类型参数名(如 "T | t.CPtr"、" T "、 diff --git a/App/lib/core/Handles/HandlesTranslator.vp b/App/lib/core/Handles/HandlesTranslator.vp index e85dafd..b5a70ee 100644 --- a/App/lib/core/Handles/HandlesTranslator.vp +++ b/App/lib/core/Handles/HandlesTranslator.vp @@ -352,15 +352,6 @@ class Translator: return 1 llvmlite.add_param(pool, printf_func, i8_ptr_ty, "fmt") printf_func.IsVarArg = 1 - # 诊断(builtins.vp dump 卡死根因排查):printf.fmt Param 创建后立即 - # 校验其 Next——区分"创建即损坏"(create_declare/add_param 环节问题) - # 与"后续被越界写破坏"(dump 时遍历成环)。next=0 为正常。 - dbg_p0: llvmlite.Param | t.CPtr = llvmlite.function_get_param_head(printf_func) - if dbg_p0 is not None: - dbg_p0n: llvmlite.Param | t.CPtr = llvmlite.param_get_next(dbg_p0) - stdio.printf("[DIAG] printf.fmt 创建后: param=%llu next=%llu\n", - t.CUInt64T(dbg_p0), t.CUInt64T(dbg_p0n)) - # 声明 LLVM va_start/va_end intrinsic(供 *args 函数体内使用) # declare void @llvm.va_start(i8*) # declare void @llvm.va_end(i8*) @@ -380,7 +371,6 @@ class Translator: if malloc_func is not None: i64_ty: llvmlite.LLVMType | t.CPtr = llvmlite.Int64(pool) llvmlite.add_param(pool, malloc_func, i64_ty, "size") - stdio.printf("[DIAG] translate: 声明完成\n") # 检查用户是否定义了 main 函数 has_user_main: int = 0 @@ -395,7 +385,6 @@ class Translator: if string.strcmp(fd.name, "main") == 0: has_user_main = 1 break - stdio.printf("[DIAG] translate: main 检查完成(has_user_main=%d)\n", has_user_main) if self._declare_only != 0: # Phase 1a-pre(2=import扫描) / Phase 1a(1=struct注册): 只处理模块级,不创建 main 函数和 builder @@ -430,7 +419,6 @@ class Translator: """委托 HandlesMain.translate_children() 翻译模块级语句(trans 单参)""" # 全量翻译模式下,先处理导入语句,再创建前向声明,解决前向引用问题 if self._declare_only == 0: - stdio.printf("[DIAG] 模块级: 开始\n") # 预处理导入语句,确保 _imported_modules 和 _from_imports 已填充 # (前向声明需要解析类型注解,如 t.CArray[str] 依赖 t 模块已导入) # 记录最后处理的 import 行号,供 vpi 注入错误上下文帧定位 @@ -450,7 +438,6 @@ class Translator: cur_imp_lineno = child.lineno self.ImportsH.HandleImportFromModule(child) self.ImportsH.HandleImportFromNames(child) - stdio.printf("[DIAG] 模块级: import 处理完成\n") # 对齐 TPC _inject_auto_imports:检测源文件对 list/dict 容器的使用 # (裸名注解 d: dict / 构造 dict(...) / 下标 list[T]),自动把容器 # 类标记为可见结构体。背景:_list.vp/_dict.vp 定义内建容器类且已由 @@ -459,12 +446,10 @@ class Translator: # `d: dict` 注解 resolve_annotation_type 时 is_struct_visible=0 # 解析失败(DictTest 的 "变量类型注解解析失败")。 self._inject_auto_container_visibility(pool, tree) - stdio.printf("[DIAG] 模块级: 容器可见性完成\n") # 扫描当前模块的 CTypedef 声明已由 Phase1 1b 文本扫描注册 # (RegisterCTypedefFromSource,见 Phase1Main.vp)——AST 字符串字段 # token 零拷贝指向 src_buf,跨阶段内容不稳定,此处 AST 扫描读 attr # 会 0xC0000005(stdint.vp 崩溃根因),故移除。 - stdio.printf("[DIAG] 模块级: CTypedef 扫描完成(文本扫描替代)\n") # 跨模块 .vpi 注入:加载依赖模块的 .vpi 文件, # 将函数 declare 声明注入到当前模块,解决跨模块函数调用找不到函数的问题 # 严格保证 declare_only == 0 时才注入(避免 Phase A-pre-inc 死锁) @@ -476,7 +461,6 @@ class Translator: pool, mod, self._imported_modules, self._from_imports, HandlesType.get_temp_dir(), self) HandlesType.pop_trace() - stdio.printf("[DIAG] 模块级: vpi 注入完成\n") # 预注册模块级变量(AnnAssign/Assign)到 SymTab # 解决时序问题:class Logger 的 __init__ 引用 _mbuddy 时, # _mbuddy 的 AnnAssign 在 AST 中位于 class Logger 之后, @@ -492,12 +476,9 @@ class Translator: kd_mv: int = child.kind() if kd_mv == ast.ASTKind.AnnAssign or kd_mv == ast.ASTKind.Assign: HandlesMain.handle_module_level_var(self, child) - stdio.printf("[DIAG] 模块级: 变量预注册完成\n") # 创建前向声明 HandlesFunctions.forward_declare_functions(self, tree) - stdio.printf("[DIAG] 模块级: 前向声明完成\n") added: int = HandlesMain.translate_children(self, tree) - stdio.printf("[DIAG] 模块级: translate_children 完成\n") # ============================================================ # 容器模块自动可见性注入(对齐 TPC _inject_auto_imports) @@ -609,26 +590,6 @@ class Translator: return if _mbuddy is None: return - # 诊断(builtins.vp dump 卡死根因排查,仅 stub 模式打印一次): - # 模块函数清单 + 每个函数首个参数地址/Next 值(步数上限防成环死循环)。 - # 确认 printf declare 的创建上下文与 Params 链损坏状态。 - if mode == llvmlite.OUTPUT_STUB: - dbg_f: llvmlite.Function | t.CPtr = llvmlite.module_get_func_head(self.Module) - dbg_steps: int = 0 - while dbg_f is not None: - dbg_steps += 1 - if dbg_steps > 100000: - stdio.printf("[DIAG] 模块函数链遍历超限(dump_ir 诊断)\n") - stdlib.exit(1) - dbg_name: str = llvmlite.function_get_name(dbg_f) - dbg_p: llvmlite.Param | t.CPtr = llvmlite.function_get_param_head(dbg_f) - if dbg_p is not None: - dbg_pn: llvmlite.Param | t.CPtr = llvmlite.param_get_next(dbg_p) - stdio.printf("[DIAG] 模块函数: %s param0=%llu next=%llu\n", - dbg_name, t.CUInt64T(dbg_p), t.CUInt64T(dbg_pn)) - else: - stdio.printf("[DIAG] 模块函数: %s (无参数)\n", dbg_name) - dbg_f = llvmlite.function_get_next(dbg_f) buf[0] = '\0' llvmlite.LLVMModulePrint(buf, size, self.Module, _mbuddy, mode)