chore: 清理超长历史注释,并一并提交并行会话的代码改动

注释清理(65 文件 / 约 -2578 行 / 约 516 处):删除/压缩叙述式历史注释——多行根因叙事、工作代号段(D25/D30/N11/B5/S4/阶段E 等)、改前改后与先例叙述、逐条推导块,压成一行讲清作用信息;契约类注释(用途、参数与返回、关键约束与不变量、IR 结构说明)与被注释掉的代码一律保留

存疑 标记 6 处一字未动:StubMergerStore.vp、VpiReader.vp、VLogger.vp、AssignGenMixin.vp、CallGenLib.vp、CallGenLeafKit.vp

本次一并带入并行会话的代码改动(同批文件,按文件粒度无法拆分):fileio.File -> rowptr[fileio.File] 等

已知副作用/残留:① CallGenDispatch.vp 有 2 行非注释行的行尾被 LF->CRLF 规范化(纯字节变化,无文本改动);② core/Gen 区约 24 处压缩因并行会话整文件覆写被写回原样,尚未生效(StmtGenCifMixin/ClassGenVTable/FuncGenDef/ClassGenEnum/StructGenMixin/TypeSpec 等)

清单与复跑判据见 Debugger/comment_cleanup_summary.md(该目录不受版本控制)
This commit is contained in:
TermiNexus committed 2026-09-16 11:27:05 +08:00
1 parent b28f20cce7
commit 7cba4cbc95
65 files changed
+1233 -3292

No files matched your search

+10 -39
View File
@@ -18,10 +18,7 @@ import w32.fileio as fileio
# 全局 mbuddy 指针
_mbuddy: memhub.MemManager | t.CPtr
# 配置值(从 project.vpj 加载)
# 默认 None/0:未加载 project.vpj 时字段为 null,调用方 is not None
# 检查才能正确兜底(否则垃圾指针通过检查 → 用非法路径 → 崩溃,
# 尤其非工作区执行无配置时)。
# 配置值(从 project.vpj 加载);默认 None/0:未加载时字段为 null,调用方须 is not None 检查兜底(否则垃圾指针 → 崩溃)
SourceDir: str = None
BuildDir: str = None
TempDir: str = None # = {BuildDir}/temp(自动计算)
@@ -43,9 +40,7 @@ StrictMode: int = 0
IncludesDir: str = None # includes 目录路径(从 includes 数组首元素,兼容单目录场景)
IncludesDirs: str = None # 全部 includes 目录(空格分隔,多 includes 目录支持)
# includes 预编译缓存目录后缀(asan 模式用 .binary_asan 隔离,避免
# asan 插桩 obj 与非 asan obj 混链:asan obj 引用 __asan_init 等符号,
# 非 asan 链接不提供 asan 库 → undefined reference)
# includes 预编译缓存目录后缀(asan 模式用 .binary_asan 隔离 asan 插桩 obj,避免与非 asan obj 混链)
_inc_bin_suffix: str = ".binary"
@@ -67,7 +62,7 @@ def Load_project_config(path: str) -> int:
if _mbuddy is None: return 1
# 打开文件
f: fileio.File | t.CPtr = fileio.File(path, fileio.MODE.R)
f: rowptr[fileio.File] = fileio.File(path, fileio.MODE.R)
if f is None: return 1
if f.closed: return 1
@@ -139,10 +134,7 @@ def Load_project_config(path: str) -> int:
TargetDataLayout = tgt_dl_val.as_string() if tgt_dl_val is not None else None
# 读取 options 子对象
# Sha1SliceLevel: SHA1 切片层数(默认 1,每层取 SHA1 前 2 字符作为子目录)
# level=0 → 不切片,文件直接放 base_dir
# level=1 → b7/{sha1}.ext
# level=2 → b7/90/{sha1}.ext
# Sha1SliceLevel: SHA1 切片层数(默认 1,每层取 SHA1 前 2 字符作为子目录:0=不切片, 1=b7/, 2=b7/90/)
options: JsonValue | t.CPtr = root["options"]
Sha1SliceLevel = 1
StrictMode = 1
@@ -255,9 +247,7 @@ def _join_path(rel: str, project_dir: str) -> str:
# 绝对路径(以 / 或 \ 开头)保持不变
if rel[0] == '/' or rel[0] == '\\':
return rel
# [FIX] 命令行 --build-dir 按进程 cwd 给出的路径(如 ./TransPyV/.tpv_build2)
# 已含 project_dir 前缀(./TransPyV)时不再拼接,避免双份路径
# (./TransPyV/TransPyV/.tpv_build2)。边界取到目录分隔符或串尾。
# 路径已含 project_dir 前缀时不再拼接,避免双份路径(./TransPyV/TransPyV/.tpv_build2);边界取到目录分隔符或串尾
if project_dir is not None:
pdl: sizet = string.strlen(project_dir)
if pdl > 0 and string.strncmp(rel, project_dir, pdl) == 0:
@@ -337,13 +327,7 @@ def _normalize_path(path: str) -> str:
# 单段 ".":跳过
if seg_len == 1 and path[seg_start] == '.':
pass
# 单段 "..":弹出上一段;但**前导 ".." 不可弹**,必须保留。
# 旧实现只判 out_len > 0 就回退,于是 "无段可弹时保留" 的那一个
# 前导 ".." 会被下一个 ".." 当成普通段吃掉:
# ./VKernel/../../../includes → 缓冲反复清空 → "./includes"
# (cwd 在项目目录时,语义应得 "../../includes")。这正是
# ViperOS 各子工程 import 找不到模块的根因。
# 与 Python os.path.normpath / TPC 的行为对齐。
# 单段 "..":弹出上一段;前导 ".." 无段可弹时必须保留(对齐 Python os.path.normpath)
elif seg_len == 2 and path[seg_start] == '.' and path[seg_start + 1] == '.':
# 末段是否已经是前导 ".."(独立一段:要么是开头,要么前面是分隔符)
last_is_dotdot: int = 0
@@ -542,9 +526,7 @@ def resolve_paths(project_dir: str) -> int:
dl_pos += jl
dl_out[dl_pos] = '\0'
LinkerDynamicLibs = dl_out
# linker.flags 中 `-T <脚本>` 的链接脚本路径同样基于 project_dir 解析,
# 否则 subprocess 按进程 cwd(TransPyC/)找 linker.ld → ld.lld 报
# "cannot find linker script linker.ld"
# linker.flags 中 -T <脚本> 的路径同样基于 project_dir 解析,否则 ld.lld 按进程 cwd 找不到脚本
_resolve_linker_t_paths(project_dir)
return 0
@@ -705,20 +687,9 @@ def print_config():
# ============================================================
# slice_subdir - 根据 SHA1 和切片层数返回子目录路径
#
# 每层取 SHA1 的 2 个字符作为子目录名:
# level=0 → None(不切片)
# level=1 → "b7"
# level=2 → "b7/90"
# level=3 → "b7/90/23"
#
# Args:
# sha1: SHA1 字符串(至少 2*level 字符)
# level: 切片层数
#
# Returns:
# 子目录路径字符串(mbuddy 分配,无需释放),level<=0 时返回 None
# slice_subdir - 每层取 SHA1 的 2 字符作为子目录名(level=0 不切片, 1→"b7", 2→"b7/90")
# Args: sha1(至少 2*level 字符)/ level(切片层数)
# Returns: 子目录路径字符串(mbuddy 分配,无需释放),level<=0 时返回 None
# ============================================================
def slice_subdir(sha1: str, level: int) -> str:
"""根据 SHA1 和切片层数返回子目录路径"""
+4 -13
View File
@@ -11,9 +11,7 @@ import w32.fileio as fileio
# ============================================================
# Utils - 工程工具函数
#
# 提供 SHA1 计算和目录清理等通用工具函数。
# Utils - 工程工具函数(SHA1 计算、目录清理等)
# ============================================================
# 全局 mbuddy 指针
@@ -63,10 +61,7 @@ def bytes_to_hex(pool: rowptr[memhub.MemBuddy],
# ============================================================
# compute_sha1 - 计算字符串的 SHA1,返回前 16 个十六进制字符
#
# 使用 includes/hashlib 库的 sha1 类计算摘要,转为十六进制字符串。
# 参考 Projectrans.py 的 compute_sha1(hashlib.sha1().hexdigest()[:16])。
# compute_sha1 - 计算字符串的 SHA1,返回前 16 个十六进制字符(与 Projectrans.py 一致)
# ============================================================
def compute_sha1(pool: rowptr[memhub.MemBuddy], content: str) -> str:
"""计算字符串的 SHA1,返回前 16 个十六进制字符(用于文件命名)"""
@@ -130,7 +125,7 @@ def read_file_to_buf(path: str, buf_size: sizet) -> bytes:
合并自 Phase2/StubMerger/IncludesScanner 的重复"打开+读取+终止"序列。
"""
if path is None or buf_size <= 0: return None
sf: fileio.File | t.CPtr = fileio.File(path, fileio.MODE.R)
sf: rowptr[fileio.File] = fileio.File(path, fileio.MODE.R)
if sf.closed: return None
buf: bytes = stdlib.malloc(buf_size)
if buf is None:
@@ -200,11 +195,7 @@ def PathToModuleName(path: str, strip_includes_prefix: int) -> str:
# ============================================================
# CleanDir - 递归删除目录中所有文件和子目录(保留 dir_path 本身)
#
# 用于 --clean 选项:清理 temp_dir 和 output_dir 中的旧文件。
# SHA1 分片目录结构(如 temp/1c/、temp/7a/)需要递归清理,
# 否则旧的截断文件(如 256KB text.ll)会被 Phase1 跳过逻辑复用。
# CleanDir - 递归删除目录中所有文件和子目录(保留 dir_path 本身;用于 --clean)
# ============================================================
def CleanDir(dir_path: str) -> int:
"""递归删除目录中所有文件和子目录,保留 dir_path 本身,返回删除的文件数,-1 表示错误"""