注释清理(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(该目录不受版本控制)
72 lines
3.4 KiB
Plaintext
72 lines
3.4 KiB
Plaintext
import t, c
|
||
from stdint import *
|
||
import memhub
|
||
import string
|
||
import stdlib
|
||
import llvmlite
|
||
import w32.win32file as win32file
|
||
import w32.win32base as win32base
|
||
import w32.fileio as fileio
|
||
import viperlib
|
||
import sys
|
||
import ast
|
||
import lib.core.VLogger as VLogger
|
||
import lib.core.IncludesScanner as IncludesScanner
|
||
import lib.core.Gen.Translator as HandlesTranslator
|
||
import lib.Phase.BuildPipeline as BuildPipeline
|
||
import lib.Stub.StubGen.VpiReader as VpiReader
|
||
import lib.Projectrans.Utils as Utils
|
||
import lib.Projectrans.Config as Config
|
||
|
||
|
||
# ============================================================
|
||
# StubMerger - stub 声明合并模块(Phase2 核心)
|
||
#
|
||
# 从 temp 目录加载所有 .stub.ll,把依赖模块的声明合并到主 IR 的 target triple 之后,使链接器能解析跨模块符号引用。
|
||
# 合并策略:扫描 temp 目录收集 {sha1}.stub.ll → 读取内容 → 过滤去重(避免重复声明)→ 插入主 IR。
|
||
# ============================================================
|
||
|
||
# 全局 mbuddy 指针
|
||
_mbuddy: rowptr[memhub.MemBuddy]
|
||
|
||
# 最大 includes SHA1 数(用于过滤)
|
||
MAX_INCLUDES_SHA1: t.CDefine = 1024
|
||
# stub 读取缓冲区大小
|
||
# 1MB 不够:ast/parser.vp 的 text.ll >1MB,BuildCombinedIR 读取本地 text.ll
|
||
# 单次截断 → 合并 IR 尾部丢字(opt: "end of file in global variable name")。
|
||
STUB_READ_BUF_SIZE: t.CDefine = 8388608
|
||
# 最大 includes 条目数
|
||
MAX_INCLUDES: t.CDefine = 1024
|
||
# 可达性分析 worklist/processed 缓冲区大小(8192 不够:递归扫描 source_dir
|
||
# 后 worklist 含全部 App 文件 imports 的拼接 + BFS 依赖展开,追加82 溢出)
|
||
REACH_WORKLIST_BUF: t.CDefine = 65536
|
||
|
||
# 全局 SHA1 映射存储器(内存中,不依赖 _sha1_map.txt 文件)
|
||
# Phase1 扫描完成后填充,供所有函数使用
|
||
_sha1_store_arr: bytes # SHA1 数组(每个 17 字节,MAX_INCLUDES 个)
|
||
_sha1_store_mod: bytes # 模块名数组(每个 64 字节,MAX_INCLUDES 个)
|
||
_sha1_store_rel: bytes # 相对路径数组(每个 256 字节,MAX_INCLUDES 个)
|
||
_sha1_store_incdir: bytes # 所属 includes 根目录数组(每个 512 字节,MAX_INCLUDES 个,多 includes 支持)
|
||
_sha1_store_count: int # 条目数
|
||
|
||
# includes 依赖内存存储(不依赖 deps.txt 过程文件)
|
||
# Phase B+ 前用 declare_only 翻译所有 includes 文件,提取 _imported_modules 存入此处
|
||
# _BuildReachableSha1Set 从此处读取依赖,不读 deps.txt
|
||
_includes_deps_sha1: bytes # SHA1 数组(每个 17 字节,MAX_INCLUDES 个)
|
||
_includes_deps_str: bytes # 依赖字符串数组(每个 512 字节,MAX_INCLUDES 个)
|
||
_includes_deps_count: int # 条目数
|
||
|
||
# BuildCombinedIR 全目录扫描缓存:Phase B 每个源文件调用一次 BuildCombinedIR,而 _collect_stub_sha1s 会递归枚举
|
||
# temp_dir 全部切片子目录(O(N×S) 目录枚举很慢);按 temp_dir 缓存扫描结果,首次扫描后复用,temp_dir 变化时自动重建。
|
||
_stub_scan_cache_dir: str # 缓存对应的 temp_dir(None=未初始化)
|
||
_stub_scan_cache_arr: str # 扫描结果数组(每 17 字节一个 SHA1,MAX_INCLUDES_SHA1 个)
|
||
_stub_scan_cache_count: int # 收集数量
|
||
|
||
# 单条依赖字符串最大长度
|
||
MAX_DEPS_STR_LEN: t.CDefine = 512
|
||
|
||
# rel_path 最大长度
|
||
MAX_REL_PATH_LEN: t.CDefine = 256
|
||
# includes 根目录最大长度(绝对路径,多 includes 支持)
|
||
MAX_INC_DIR_LEN: t.CDefine = 512
|