chore(gen): 移除全部 [DIAG] 调试打印
This commit is contained in:
1 parent
63caf152c2
commit
b2e69c2f75
3 files changed
-47
No files matched your search
@@ -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
|
||||
@@ -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 "、
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
Reference in new issue
Block a user