diff --git a/App/lib/Phase/BuildPipeline.vp b/App/lib/Phase/BuildPipeline.vp index 1a9fc07..f631f68 100644 --- a/App/lib/Phase/BuildPipeline.vp +++ b/App/lib/Phase/BuildPipeline.vp @@ -34,7 +34,7 @@ import lib.Stub.StubMerger.StubMergerCollect as StubMergerCollect # ============================================================ # 全局 mbuddy 指针 -_mbuddy: rowptr[memhub.MemBuddy] +_mbuddy: rawptr[memhub.MemBuddy] # ASan 模式(--asan):对 .ll 先 opt -passes=asan 插桩;ASan 运行库由 # project.vpj 的 linker.static_libs / dynamic_libs 显式声明(TPV 不注入) @@ -61,7 +61,7 @@ PYI_BUF_SIZE: sizet = 262144 # Args: mb 内存池;file_path 源文件路径;sha1_val 文件内容的 SHA1 前16字符(用于函数名混淆);current_package 当前文件所属包名(用于解析相对导入),None 表示顶级模块;declare_only 0=全量翻译(默认),1=仅注册 struct/enum/union(不翻译方法体);temp_dir temp 目录路径(非 None 时在翻译前生成 .vpi 存根文件) # Returns: Translator 对象(None 失败) # ============================================================ -def TranslateFileGetTrans(mb: rowptr[memhub.MemBuddy], file_path: str, +def TranslateFileGetTrans(mb: rawptr[memhub.MemBuddy], file_path: str, sha1_val: str, current_package: str = None, declare_only: int = 0, @@ -73,7 +73,7 @@ def TranslateFileGetTrans(mb: rowptr[memhub.MemBuddy], file_path: str, temp_dir: temp 目录路径(非 None 时在翻译前生成 .vpi 存根文件) """ if file_path is None: return None - f: rowptr[fileio.File] = fileio.File(file_path, fileio.MODE.R) + f: rawptr[fileio.File] = fileio.File(file_path, fileio.MODE.R) if f.closed: return None # read_all 的容量参数含终止符(最多读 cap-1 字节), 文件更长会被**静默截断**; # 这里先按文件大小拒绝, 否则拿截断后的源码去 parse 只会得到莫名其妙的语法错误 @@ -121,7 +121,7 @@ def TranslateFileGetTrans(mb: rowptr[memhub.MemBuddy], file_path: str, td_len_vpi: sizet = len(temp_dir) pyi_path: str = StubMergerCollect._sliced_path(temp_dir, td_len_vpi, sha1_val, "vpi") if pyi_path is not None: - pf: rowptr[fileio.File] = fileio.File(pyi_path, fileio.MODE.W) + pf: rawptr[fileio.File] = fileio.File(pyi_path, fileio.MODE.W) if not pf.closed: pf.write(pyi_buf, pyi_pos) pf.close() @@ -135,7 +135,7 @@ def TranslateFileGetTrans(mb: rowptr[memhub.MemBuddy], file_path: str, tr._declare_only = declare_only # P2: 复用全局 gen 单例(App/main.vp 创建;HandlesType 等旧模块函数经 # 延迟 import 委托到 gen 方法)。单例未注册时兜底创建(防御直接调用路径)。 - gen: rowptr[GenGenerator.Generator] = GenGenerator._g_gen + gen: rawptr[GenGenerator.Generator] = GenGenerator._g_gen if gen is None: gen = mb.alloc(GenGenerator.Generator.__sizeof__()) if gen is None: @@ -282,7 +282,7 @@ def write_ir_to_file(ir_buf: bytes, ir_len: sizet, output_dir: str, module_name: if path is None: return 1 # 打开文件写入 - f: rowptr[fileio.File] = fileio.File(path, fileio.MODE.W) + f: rawptr[fileio.File] = fileio.File(path, fileio.MODE.W) if f.closed: return 1 written: int64 = f.write(ir_buf, ir_len) @@ -467,7 +467,7 @@ def _phase2_write_cmd(cmd: str) -> None: global _phase2_bat_init if _phase2_cmd_path is None or cmd is None: return - f: rowptr[fileio.File] = fileio.File(_phase2_cmd_path, fileio.MODE.A) + f: rawptr[fileio.File] = fileio.File(_phase2_cmd_path, fileio.MODE.A) if f.closed: VLogger.error("phase2command: bat 打开失败", "phase2cmd") return diff --git a/App/lib/Phase/Phase1/Phase1Main.vp b/App/lib/Phase/Phase1/Phase1Main.vp index bf50a07..9f3ea31 100644 --- a/App/lib/Phase/Phase1/Phase1Main.vp +++ b/App/lib/Phase/Phase1/Phase1Main.vp @@ -146,7 +146,7 @@ def _RewriteDepsTxt(temp_dir: str, sha1: str, deps_str: str) -> None: dpath: str = StubMergerCollect._sliced_path(temp_dir, td_len, sha1, "deps.txt") if dpath is None: return - df: rowptr[fileio.File] = fileio.File(dpath, fileio.MODE.W) + df: rawptr[fileio.File] = fileio.File(dpath, fileio.MODE.W) if not df.closed: dl: sizet = string.strlen(deps_str) if dl > 0: @@ -234,7 +234,7 @@ def _BreakContainerCyclesInDeps(temp_dir: str) -> int: # Args: mb 内存池;includes_dir includes 根目录(仅用于失败诊断,路径以 store 为准) # Returns: ScanResult 指针(stdlib 分配,调用方负责释放);失败返回 None # ============================================================ -def _BuildReachableResult(mb: rowptr[memhub.MemBuddy], +def _BuildReachableResult(mb: rawptr[memhub.MemBuddy], includes_dir: str) -> IncludesScanner.ScanResult | t.CPtr: """从 Sha1Store(仅可达 includes + App)构建可达 FileEntry 列表""" if mb is None: @@ -318,7 +318,7 @@ def _BuildReachableResult(mb: rowptr[memhub.MemBuddy], # Args: mb 内存池;includes_dir includes 目录路径;temp_dir 临时目录(保存 stub);log 日志器 # Returns: 0 成功,非 0 失败 # ============================================================ -def RunPhase1(mb: rowptr[memhub.MemBuddy], includes_dir: str, temp_dir: str, +def RunPhase1(mb: rawptr[memhub.MemBuddy], includes_dir: str, temp_dir: str, log: VLogger.Logger | t.CPtr) -> int: """Phase1: 扫描 includes 目录,按需翻译并生成 stub""" if includes_dir is None or temp_dir is None: @@ -581,7 +581,7 @@ def RunPhase1(mb: rowptr[memhub.MemBuddy], includes_dir: str, temp_dir: str, # 读取文件内容 file_path_r: str = entry_r.Path - f_r: rowptr[fileio.File] = fileio.File(file_path_r, fileio.MODE.R) + f_r: rawptr[fileio.File] = fileio.File(file_path_r, fileio.MODE.R) if f_r.closed: p1a_fl += 1 continue @@ -733,7 +733,7 @@ def RunPhase1(mb: rowptr[memhub.MemBuddy], includes_dir: str, temp_dir: str, p1bpre_failed += 1 VLogger.error(f"[Phase 1b-pre] {entry_pv.Path} | vpi 路径生成失败", "Phase1") continue - vf_pv: rowptr[fileio.File] = fileio.File(vpi_path_pv, fileio.MODE.R) + vf_pv: rawptr[fileio.File] = fileio.File(vpi_path_pv, fileio.MODE.R) if not vf_pv.closed: vf_pv.close() stdlib.free(vpi_path_pv) @@ -741,7 +741,7 @@ def RunPhase1(mb: rowptr[memhub.MemBuddy], includes_dir: str, temp_dir: str, stdlib.free(vpi_path_pv) # 读取文件、解析 AST、生成 vpi file_path_pv: str = entry_pv.Path - f_pv: rowptr[fileio.File] = fileio.File(file_path_pv, fileio.MODE.R) + f_pv: rawptr[fileio.File] = fileio.File(file_path_pv, fileio.MODE.R) if f_pv.closed: p1bpre_failed += 1 VLogger.error(f"[Phase 1b-pre] {file_path_pv} | 无法打开源文件", "Phase1") @@ -790,7 +790,7 @@ def RunPhase1(mb: rowptr[memhub.MemBuddy], includes_dir: str, temp_dir: str, if pyi_pos_pv > 0: pyi_path_pv: str = StubMergerCollect._sliced_path(temp_dir, dir_len_pv, sha1_pv, "vpi") if pyi_path_pv is not None: - pf_pv: rowptr[fileio.File] = fileio.File(pyi_path_pv, fileio.MODE.W) + pf_pv: rawptr[fileio.File] = fileio.File(pyi_path_pv, fileio.MODE.W) if not pf_pv.closed: pf_pv.write(pyi_buf_pv, pyi_pos_pv) pf_pv.close() @@ -876,7 +876,7 @@ def RunPhase1(mb: rowptr[memhub.MemBuddy], includes_dir: str, temp_dir: str, force_translate: int = 0 vpi_path_1b: str = StubMergerCollect._sliced_path(temp_dir, dir_len, sha1, "vpi") if vpi_path_1b is not None: - vf_1b: rowptr[fileio.File] = fileio.File(vpi_path_1b, fileio.MODE.R) + vf_1b: rawptr[fileio.File] = fileio.File(vpi_path_1b, fileio.MODE.R) if not vf_1b.closed: vbuf_1b: bytes = stdlib.malloc(1048576) if vbuf_1b is not None: @@ -910,13 +910,13 @@ def RunPhase1(mb: rowptr[memhub.MemBuddy], includes_dir: str, temp_dir: str, VLogger.info(f"含 class 定义,强制翻译: {rp}(sha1={sha1})", "Phase1") else: # 检查 stub 是否已存在(按需翻译:跳过已存在的) - sf: rowptr[fileio.File] = fileio.File(stub_path, fileio.MODE.R) + sf: rawptr[fileio.File] = fileio.File(stub_path, fileio.MODE.R) if not sf.closed: sf.close() # 检查 text.ll 是否也存在(虚表扫描需要 text.ll) text_path: str = StubMergerCollect._sliced_path(temp_dir, dir_len, sha1, "text.ll") if text_path is not None: - tf: rowptr[fileio.File] = fileio.File(text_path, fileio.MODE.R) + tf: rawptr[fileio.File] = fileio.File(text_path, fileio.MODE.R) if not tf.closed: tf.close() stdlib.free(text_path) @@ -938,7 +938,7 @@ def RunPhase1(mb: rowptr[memhub.MemBuddy], includes_dir: str, temp_dir: str, # 读取文件内容 file_path: str = entry.Path - f: rowptr[fileio.File] = fileio.File(file_path, fileio.MODE.R) + f: rawptr[fileio.File] = fileio.File(file_path, fileio.MODE.R) if f is None: VLogger.error(f"无法打开(f=None): {file_path}", "Phase1") failed += 1 @@ -998,7 +998,7 @@ def RunPhase1(mb: rowptr[memhub.MemBuddy], includes_dir: str, temp_dir: str, # (消除 1b-pre 与 1b 对同一文件的重复 _GeneratePyiFromAst 工作) vpi_path_1b: str = StubMergerCollect._sliced_path(temp_dir, dir_len, sha1, "vpi") if vpi_path_1b is not None: - vf_1b: rowptr[fileio.File] = fileio.File(vpi_path_1b, fileio.MODE.R) + vf_1b: rawptr[fileio.File] = fileio.File(vpi_path_1b, fileio.MODE.R) vpi_exists_1b: int = 0 if not vf_1b.closed: vf_1b.close() @@ -1009,7 +1009,7 @@ def RunPhase1(mb: rowptr[memhub.MemBuddy], includes_dir: str, temp_dir: str, pyi_pos: sizet = StubConverter._GeneratePyiFromAst( mb, tree, entry.RelPath, pyi_buf, Phase1.PYI_BUF_SIZE) if pyi_pos > 0: - pf_1b: rowptr[fileio.File] = fileio.File(vpi_path_1b, fileio.MODE.W) + pf_1b: rawptr[fileio.File] = fileio.File(vpi_path_1b, fileio.MODE.W) if not pf_1b.closed: pf_1b.write(pyi_buf, pyi_pos) pf_1b.close() @@ -1082,7 +1082,7 @@ def RunPhase1(mb: rowptr[memhub.MemBuddy], includes_dir: str, temp_dir: str, dir_len_p1: sizet = string.strlen(temp_dir) stub_path_p1: str = StubMergerCollect._sliced_path(temp_dir, dir_len_p1, sha1, "stub.ll") if stub_path_p1 is not None: - sf_p1: rowptr[fileio.File] = fileio.File(stub_path_p1, fileio.MODE.W) + sf_p1: rawptr[fileio.File] = fileio.File(stub_path_p1, fileio.MODE.W) if not sf_p1.closed: sf_p1.write(stub_buf, stub_len) sf_p1.close() @@ -1105,7 +1105,7 @@ def RunPhase1(mb: rowptr[memhub.MemBuddy], includes_dir: str, temp_dir: str, # save text.ll text_path_p1: str = StubMergerCollect._sliced_path(temp_dir, dir_len_p1, sha1, "text.ll") if text_path_p1 is not None: - tf_p1: rowptr[fileio.File] = fileio.File(text_path_p1, fileio.MODE.W) + tf_p1: rawptr[fileio.File] = fileio.File(text_path_p1, fileio.MODE.W) if not tf_p1.closed: tf_p1.write(text_buf, text_len) tf_p1.close() @@ -1119,7 +1119,7 @@ def RunPhase1(mb: rowptr[memhub.MemBuddy], includes_dir: str, temp_dir: str, # save dependencies(_imported_modules) for Phase B deps_path_p1: str = StubMergerCollect._sliced_path(temp_dir, dir_len_p1, sha1, "deps.txt") if deps_path_p1 is not None: - df_p1: rowptr[fileio.File] = fileio.File(deps_path_p1, fileio.MODE.W) + df_p1: rawptr[fileio.File] = fileio.File(deps_path_p1, fileio.MODE.W) if not df_p1.closed: if tr._imported_modules is not None: dl: sizet = string.strlen(tr._imported_modules) diff --git a/App/lib/Phase/Phase1/Phase1Scan.vp b/App/lib/Phase/Phase1/Phase1Scan.vp index 4195ae6..b06c9a4 100644 --- a/App/lib/Phase/Phase1/Phase1Scan.vp +++ b/App/lib/Phase/Phase1/Phase1Scan.vp @@ -53,7 +53,7 @@ import lib.core.Gen.GenApi as GenApi # parent_names_buf 父类名扁平数组(每个 Phase1.CLASS_NAME_LEN 字节,无父类填 '\0');def_sha1s_buf 定义 SHA1 扁平数组(每个 Phase1.SHA1_LEN 字节) # Returns: 收集到的类数量,-1 失败 # ============================================================ -def _ScanClassInheritance(mb: rowptr[memhub.MemBuddy], +def _ScanClassInheritance(mb: rawptr[memhub.MemBuddy], result: IncludesScanner.ScanResult | t.CPtr, reachable_set: str, reachable_count: int, use_reachable: int, @@ -97,7 +97,7 @@ def _ScanClassInheritance(mb: rowptr[memhub.MemBuddy], # 读取文件 file_path: str = entry.Path - f: rowptr[fileio.File] = fileio.File(file_path, fileio.MODE.R) + f: rawptr[fileio.File] = fileio.File(file_path, fileio.MODE.R) if f.closed: continue @@ -252,12 +252,12 @@ def _BufHasGenericClassMarker(buf: bytes, blen: sizet) -> int: # _find_generic_template 遍历悬空内存 strcmp 崩溃。本函数先文本扫描(_BufHasGenericClassMarker,不 parse)筛选出含泛型类的文件, # 仅对命中文件用**永久池(perm_pool)**解析(模板节点与表直接进 perm_pool,跨 mark 永久存活、不占主 pool);重复注册由 _register_generic_template 内部查重跳过。 # ============================================================ -def _PreRegisterAllGenericTemplates(mb: rowptr[memhub.MemBuddy], +def _PreRegisterAllGenericTemplates(mb: rawptr[memhub.MemBuddy], result: IncludesScanner.ScanResult | t.CPtr) -> int: """预注册全部 includes 文件的泛型类模板,返回处理到的泛型类数量""" if result is None or mb is None: return 0 - perm: rowptr[memhub.MemBuddy] = CompilerFactory.factory.PermPool + perm: rawptr[memhub.MemBuddy] = CompilerFactory.factory.PermPool if perm is None: return 0 p1e_size: sizet = IncludesScanner.FileEntry.__sizeof__() @@ -270,7 +270,7 @@ def _PreRegisterAllGenericTemplates(mb: rowptr[memhub.MemBuddy], continue # 读取文件 file_path_pg: str = entry_pg.Path - f_pg: rowptr[fileio.File] = fileio.File(file_path_pg, fileio.MODE.R) + f_pg: rawptr[fileio.File] = fileio.File(file_path_pg, fileio.MODE.R) if f_pg.closed: continue # read_all 的容量参数含终止符(最多读 cap-1 字节), 文件更长会被静默截断 diff --git a/App/lib/Phase/Phase1/Phase1Topo.vp b/App/lib/Phase/Phase1/Phase1Topo.vp index b04fbfe..e292361 100644 --- a/App/lib/Phase/Phase1/Phase1Topo.vp +++ b/App/lib/Phase/Phase1/Phase1Topo.vp @@ -45,7 +45,7 @@ import lib.Phase.Phase1 as Phase1 # class_count 类数量;out_order 输出拓扑顺序的文件索引数组(调用者分配,int 数组);out_count 输出文件数量 # Returns: 0 成功,-1 失败 # ============================================================ -def _TopoSortFiles(mb: rowptr[memhub.MemBuddy], +def _TopoSortFiles(mb: rawptr[memhub.MemBuddy], result: IncludesScanner.ScanResult | t.CPtr, reachable_set: str, reachable_count: int, use_reachable: int, diff --git a/App/lib/Phase/Phase1/__init__.vp b/App/lib/Phase/Phase1/__init__.vp index cf559b9..5afae0f 100644 --- a/App/lib/Phase/Phase1/__init__.vp +++ b/App/lib/Phase/Phase1/__init__.vp @@ -3,7 +3,7 @@ from stdint import * import memhub # 全局 mbuddy 指针 -_mbuddy: rowptr[memhub.MemBuddy] +_mbuddy: rawptr[memhub.MemBuddy] # 源代码缓冲区大小(1MB) SRC_BUF_SIZE: t.CDefine = 1048576 diff --git a/App/lib/Phase/Phase2/__init__.vp b/App/lib/Phase/Phase2/__init__.vp index e33d834..a81b84b 100644 --- a/App/lib/Phase/Phase2/__init__.vp +++ b/App/lib/Phase/Phase2/__init__.vp @@ -30,7 +30,7 @@ import lib.Stub.StubMerger.StubMergerTopo as StubMergerTopo import lib.Stub.StubGen.Converter as StubConverter # 全局 mbuddy 指针 -_mbuddy: rowptr[memhub.MemBuddy] +_mbuddy: rawptr[memhub.MemBuddy] # 源代码缓冲区大小(1MB) SRC_BUF_SIZE: t.CDefine = 1048576 @@ -50,7 +50,7 @@ class SrcFileEntry: # Args: mb 内存池;dir_path 当前扫描目录;entries SrcFileEntry 数组;entry_size 单个条目大小(SrcFileEntry.__sizeof__());file_count 当前已收集的文件数;max_files 最大文件数 # Returns: 新的 file_count # ============================================================ -def _ScanDirForPyFiles(mb: rowptr[memhub.MemBuddy], +def _ScanDirForPyFiles(mb: rawptr[memhub.MemBuddy], dir_path: str, entries: SrcFileEntry | t.CPtr, entry_size: sizet, @@ -156,7 +156,7 @@ def _ScanDirForPyFiles(mb: rowptr[memhub.MemBuddy], # Kernel/intr/isr.s 定义 isr0/syscall_entry/_per_cpu 等符号)。 # TPV 不对 .s 翻译,直接用 llvm-mc 汇编为 .obj 参与链接。 # ============================================================ -def _ScanDirForAsmFiles(mb: rowptr[memhub.MemBuddy], +def _ScanDirForAsmFiles(mb: rawptr[memhub.MemBuddy], dir_path: str, entries: SrcFileEntry | t.CPtr, entry_size: sizet, @@ -256,7 +256,7 @@ def _ScanDirForAsmFiles(mb: rowptr[memhub.MemBuddy], # 才首次注册,reset_to(mark2) 会回收表与节点 → 后续查重/特化遍历悬空内存崩溃;App 文件数量少,mark2 前预注册的 AST 驻留内存可忽略。 # 重复注册由 _register_generic_template 查重跳过。 # ============================================================ -def _PreRegisterAppGenericTemplates(mb: rowptr[memhub.MemBuddy], +def _PreRegisterAppGenericTemplates(mb: rawptr[memhub.MemBuddy], entries: SrcFileEntry | t.CPtr, file_count: int, entry_size: sizet) -> int: @@ -270,7 +270,7 @@ def _PreRegisterAppGenericTemplates(mb: rowptr[memhub.MemBuddy], if ent_pa is None or ent_pa.Path is None or ent_pa.Sha1 is None: continue # 读取文件 - f_pa: rowptr[fileio.File] = fileio.File(ent_pa.Path, fileio.MODE.R) + f_pa: rawptr[fileio.File] = fileio.File(ent_pa.Path, fileio.MODE.R) if f_pa.closed: continue # read_all 的容量参数含终止符(最多读 cap-1 字节), 文件更长会被静默截断 @@ -290,7 +290,7 @@ def _PreRegisterAppGenericTemplates(mb: rowptr[memhub.MemBuddy], if bytes_read_pa < SRC_BUF_SIZE: src_buf_pa[bytes_read_pa] = 0 # 解析 AST(只解析,不完整翻译;用永久池使模板节点跨 mark2 reset 存活) - perm_pa: rowptr[memhub.MemBuddy] = CompilerFactory.factory.PermPool + perm_pa: rawptr[memhub.MemBuddy] = CompilerFactory.factory.PermPool if perm_pa is None: perm_pa = mb lx_pa: ast.Lexer | t.CPtr = ast.new_lexer(perm_pa) @@ -450,7 +450,7 @@ def _PhaseATextLLExists(temp_dir: str, td_len: sizet, sha1: str) -> int: tpath: str = StubMergerCollect._sliced_path(temp_dir, td_len, sha1, "text.ll") if tpath is None: return 0 - tf: rowptr[fileio.File] = fileio.File(tpath, fileio.MODE.R) + tf: rawptr[fileio.File] = fileio.File(tpath, fileio.MODE.R) exists: int = 0 if not tf.closed: tf.close() @@ -479,7 +479,7 @@ def _PhaseADumpNode(temp_dir: str, td_len: sizet, sha1: str, # 回退:读取 {temp_dir}/{前缀}/{sha1}.deps.txt(Phase1 已为 includes 写盘) dpath: str = StubMergerCollect._sliced_path(temp_dir, td_len, sha1, "deps.txt") if dpath is not None: - df: rowptr[fileio.File] = fileio.File(dpath, fileio.MODE.R) + df: rawptr[fileio.File] = fileio.File(dpath, fileio.MODE.R) if not df.closed: deps = stdlib.malloc(PA_DEPS_MAX_STR) if deps is not None: @@ -608,7 +608,7 @@ def _PhaseADumpFailGraph(temp_dir: str, td_len: sizet, path: str, sha1: str) -> stdio.fflush(None) -def RunMultiFileProject(mb: rowptr[memhub.MemBuddy], +def RunMultiFileProject(mb: rawptr[memhub.MemBuddy], source_dir: str, temp_dir: str, output_dir: str, cc_cmd: str, cc_flags: str, linker_cmd: str, linker_flags: str, linker_output: str, @@ -699,7 +699,7 @@ def RunMultiFileProject(mb: rowptr[memhub.MemBuddy], map_path_am: bytes = stdlib.malloc(td_len_am + 32) if map_path_am is not None: viperlib.snprintf(map_path_am, td_len_am + 32, "%s/_sha1_map.txt", temp_dir) - mf: rowptr[fileio.File] = fileio.File(map_path_am, fileio.MODE.A) + mf: rawptr[fileio.File] = fileio.File(map_path_am, fileio.MODE.A) line_am: bytes = stdlib.malloc(512) # 先遍历一次填充内存存储器(不依赖文件 I/O),再写入 _sha1_map.txt app_filled: int = 0 @@ -758,7 +758,7 @@ def RunMultiFileProject(mb: rowptr[memhub.MemBuddy], vpi_failed_p2 += 1 VLogger.error(f"[Phase A-pre-vpi] {ent_vp2.Path} | vpi 路径生成失败", "PhaseA") continue - vf_vp2: rowptr[fileio.File] = fileio.File(vpi_path_vp2, fileio.MODE.R) + vf_vp2: rawptr[fileio.File] = fileio.File(vpi_path_vp2, fileio.MODE.R) if not vf_vp2.closed: vf_vp2.close() stdlib.free(vpi_path_vp2) @@ -766,7 +766,7 @@ def RunMultiFileProject(mb: rowptr[memhub.MemBuddy], stdlib.free(vpi_path_vp2) # 读取源文件 → 解析 AST → 生成 vpi # (rel_path 传 None:与 TranslateFileGetTrans 后续覆盖写的内容一致) - f_vp2: rowptr[fileio.File] = fileio.File(ent_vp2.Path, fileio.MODE.R) + f_vp2: rawptr[fileio.File] = fileio.File(ent_vp2.Path, fileio.MODE.R) if f_vp2.closed: vpi_failed_p2 += 1 VLogger.error(f"[Phase A-pre-vpi] {ent_vp2.Path} | 无法打开源文件", "PhaseA") @@ -816,7 +816,7 @@ def RunMultiFileProject(mb: rowptr[memhub.MemBuddy], if pyi_pos_vp2 > 0: pyi_path_vp2: str = StubMergerCollect._sliced_path(temp_dir, td_len_vpa, ent_vp2.Sha1, "vpi") if pyi_path_vp2 is not None: - pf_vp2: rowptr[fileio.File] = fileio.File(pyi_path_vp2, fileio.MODE.W) + pf_vp2: rawptr[fileio.File] = fileio.File(pyi_path_vp2, fileio.MODE.W) if not pf_vp2.closed: pf_vp2.write(pyi_buf_vp2, pyi_pos_vp2) pf_vp2.close() @@ -1052,7 +1052,7 @@ def RunMultiFileProject(mb: rowptr[memhub.MemBuddy], # save stub.ll (切片路径: temp_dir/{sha1前缀}/{sha1}.stub.ll) stub_path_a: str = StubMergerCollect._sliced_path(temp_dir, td_len_pa, ent.Sha1, "stub.ll") if stub_path_a is not None: - sf_a: rowptr[fileio.File] = fileio.File(stub_path_a, fileio.MODE.W) + sf_a: rawptr[fileio.File] = fileio.File(stub_path_a, fileio.MODE.W) if not sf_a.closed: sf_a.write(stub_buf_a, stub_len_a) sf_a.close() @@ -1069,7 +1069,7 @@ def RunMultiFileProject(mb: rowptr[memhub.MemBuddy], # save text.ll (切片路径) text_path_a: str = StubMergerCollect._sliced_path(temp_dir, td_len_pa, ent.Sha1, "text.ll") if text_path_a is not None: - tf_a: rowptr[fileio.File] = fileio.File(text_path_a, fileio.MODE.W) + tf_a: rawptr[fileio.File] = fileio.File(text_path_a, fileio.MODE.W) if not tf_a.closed: tf_a.write(text_buf_a, text_len_a) tf_a.close() @@ -1079,7 +1079,7 @@ def RunMultiFileProject(mb: rowptr[memhub.MemBuddy], # save dependencies (_imported_modules) for Phase B (切片路径) deps_path_a: str = StubMergerCollect._sliced_path(temp_dir, td_len_pa, ent.Sha1, "deps.txt") if deps_path_a is not None: - df_a: rowptr[fileio.File] = fileio.File(deps_path_a, fileio.MODE.W) + df_a: rawptr[fileio.File] = fileio.File(deps_path_a, fileio.MODE.W) if not df_a.closed: if tr_a._imported_modules is not None: dl_a: sizet = string.strlen(tr_a._imported_modules) @@ -1429,7 +1429,7 @@ def RunMultiFileProject(mb: rowptr[memhub.MemBuddy], is_decl_mi: int = -1 tpath_mi: str = StubMergerCollect._sliced_path(temp_dir, td_len_mi, inc_sha1_mi, "text.ll") if tpath_mi is not None: - tf_mi: rowptr[fileio.File] = fileio.File(tpath_mi, fileio.MODE.R) + tf_mi: rawptr[fileio.File] = fileio.File(tpath_mi, fileio.MODE.R) if not tf_mi.closed: is_decl_mi = 1 tbuf_mi: bytes = stdlib.malloc(StubMerger.STUB_READ_BUF_SIZE) @@ -1495,7 +1495,7 @@ def RunMultiFileProject(mb: rowptr[memhub.MemBuddy], inc_stub_len: sizet = string.strlen(inc_stub_buf) inc_stub_path: str = StubMergerCollect._sliced_path(temp_dir, td_len_mi, inc_sha1_mi, "stub.ll") if inc_stub_path is not None: - isf: rowptr[fileio.File] = fileio.File(inc_stub_path, fileio.MODE.W) + isf: rawptr[fileio.File] = fileio.File(inc_stub_path, fileio.MODE.W) if not isf.closed: isf.write(inc_stub_buf, inc_stub_len) isf.close() @@ -1508,7 +1508,7 @@ def RunMultiFileProject(mb: rowptr[memhub.MemBuddy], inc_text_len: sizet = string.strlen(inc_text_buf) inc_text_path: str = StubMergerCollect._sliced_path(temp_dir, td_len_mi, inc_sha1_mi, "text.ll") if inc_text_path is not None: - itf: rowptr[fileio.File] = fileio.File(inc_text_path, fileio.MODE.W) + itf: rawptr[fileio.File] = fileio.File(inc_text_path, fileio.MODE.W) if not itf.closed: itf.write(inc_text_buf, inc_text_len) itf.close() @@ -1527,13 +1527,13 @@ def RunMultiFileProject(mb: rowptr[memhub.MemBuddy], diag_stub_ex: int = 0 diag_text_ex: int = 0 if diag_stub is not None: - df_diag_s: rowptr[fileio.File] = fileio.File(diag_stub, fileio.MODE.R) + df_diag_s: rawptr[fileio.File] = fileio.File(diag_stub, fileio.MODE.R) if not df_diag_s.closed: diag_stub_ex = 1 df_diag_s.close() stdlib.free(diag_stub) if diag_text is not None: - df_diag_t: rowptr[fileio.File] = fileio.File(diag_text, fileio.MODE.R) + df_diag_t: rawptr[fileio.File] = fileio.File(diag_text, fileio.MODE.R) if not df_diag_t.closed: diag_text_ex = 1 df_diag_t.close() @@ -1663,7 +1663,7 @@ def RunMultiFileProject(mb: rowptr[memhub.MemBuddy], obj_path_pc: str = StubMergerCollect._sliced_path(includes_binary_dir, ibd_len_pc, rsha1_pc, "obj") if obj_path_pc is not None: # 检查 .obj 文件是否存在 - cf_pc: rowptr[fileio.File] = fileio.File(obj_path_pc, fileio.MODE.R) + cf_pc: rawptr[fileio.File] = fileio.File(obj_path_pc, fileio.MODE.R) if not cf_pc.closed: cf_pc.close() # .obj 存在,追加到 final_obj_paths diff --git a/App/lib/Projectrans/Config.vp b/App/lib/Projectrans/Config.vp index 59696e6..61eea3d 100644 --- a/App/lib/Projectrans/Config.vp +++ b/App/lib/Projectrans/Config.vp @@ -62,7 +62,7 @@ def Load_project_config(path: str) -> int: if _mbuddy is None: return 1 # 打开文件 - f: rowptr[fileio.File] = fileio.File(path, fileio.MODE.R) + f: rawptr[fileio.File] = fileio.File(path, fileio.MODE.R) if f is None: return 1 if f.closed: return 1 diff --git a/App/lib/Projectrans/Utils.vp b/App/lib/Projectrans/Utils.vp index b068fe6..5570338 100644 --- a/App/lib/Projectrans/Utils.vp +++ b/App/lib/Projectrans/Utils.vp @@ -15,7 +15,7 @@ import w32.fileio as fileio # ============================================================ # 全局 mbuddy 指针 -_mbuddy: rowptr[memhub.MemBuddy] +_mbuddy: rawptr[memhub.MemBuddy] # ============================================================ @@ -31,7 +31,7 @@ def nibble_to_hex_char(n: int, uppercase: int) -> char: # ============================================================ # bytes_to_hex - 字节序列转十六进制字符串 # ============================================================ -def bytes_to_hex(pool: rowptr[memhub.MemBuddy], +def bytes_to_hex(pool: rawptr[memhub.MemBuddy], digest: bytes, nbytes: sizet, uppercase: int, @@ -63,7 +63,7 @@ def bytes_to_hex(pool: rowptr[memhub.MemBuddy], # ============================================================ # compute_sha1 - 计算字符串的 SHA1,返回前 16 个十六进制字符(与 Projectrans.py 一致) # ============================================================ -def compute_sha1(pool: rowptr[memhub.MemBuddy], content: str) -> str: +def compute_sha1(pool: rawptr[memhub.MemBuddy], content: str) -> str: """计算字符串的 SHA1,返回前 16 个十六进制字符(用于文件命名)""" if content is None or pool is None: return None @@ -125,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: rowptr[fileio.File] = fileio.File(path, fileio.MODE.R) + sf: rawptr[fileio.File] = fileio.File(path, fileio.MODE.R) if sf.closed: return None buf: bytes = stdlib.malloc(buf_size) if buf is None: diff --git a/App/lib/Stub/StubGen/Converter.vp b/App/lib/Stub/StubGen/Converter.vp index 81f6b0d..90e6032 100644 --- a/App/lib/Stub/StubGen/Converter.vp +++ b/App/lib/Stub/StubGen/Converter.vp @@ -678,7 +678,7 @@ def _PyiClass(buf: bytes, buf_size: sizet, pos: sizet, # Args: mb 内存池(保留以符合调用约定,实际未使用);tree AST Module 根节点;rel_path 相对路径(用于模块名,当前未使用);buf 输出缓冲区;buf_size 缓冲区大小 # Returns: 写入的字节数(0 表示失败) # ============================================================ -def _GeneratePyiFromAst(mb: rowptr[memhub.MemBuddy], tree: ast.AST | t.CPtr, +def _GeneratePyiFromAst(mb: rawptr[memhub.MemBuddy], tree: ast.AST | t.CPtr, rel_path: str, buf: bytes, buf_size: sizet) -> sizet: """从 AST 生成 .vpi 存根文件内容到 buf""" diff --git a/App/lib/Stub/StubGen/VpiReader.vp b/App/lib/Stub/StubGen/VpiReader.vp index c15d637..f7b0ea5 100644 --- a/App/lib/Stub/StubGen/VpiReader.vp +++ b/App/lib/Stub/StubGen/VpiReader.vp @@ -699,7 +699,7 @@ def _lookup_vpi_param_annots(src_sha1: str, cls_name: str, method_name: str) -> # 调用点 declare 停在调用点实参宽度(如 elem_size 字面量 i32 把定义侧 sizet(i64) 固化窄)。本函数按 {sha1}.{base}[T].{method} 形态定位模板条目, # 把段内独立的类型形参 token 用特化实参(cls_name 的 [...] 内容)替换后再解析;未命中/多参模板(键段含空格被截断)返回 None,不做兜底推断。 # ============================================================ -def _resolve_vpi_param_annot_seg_template(pool: rowptr[memhub.MemBuddy], +def _resolve_vpi_param_annot_seg_template(pool: rawptr[memhub.MemBuddy], src_sha1: str, cls_name: str, method_name: str, @@ -773,7 +773,7 @@ def _resolve_vpi_param_annot_seg_template(pool: rowptr[memhub.MemBuddy], break string.strncpy(seg_buf_t, annots_t + seg_start_t, seg_len_t) seg_buf_t[seg_len_t] = '\0' - # 类型形参 token(如 T)→ 特化实参(如 str / rowptr[AST] / AST|t.CPtr): + # 类型形参 token(如 T)→ 特化实参(如 str / rawptr[AST] / AST|t.CPtr): # 模板注解按源码原样缓存,不替换则 `item: T` 解析不出类型(None 跳过) tparam_t: bytes = stdlib.malloc(tplen_t + 1) if tparam_t is not None: @@ -802,7 +802,7 @@ def _resolve_vpi_param_annot_seg_template(pool: rowptr[memhub.MemBuddy], # vpi tree 参数列表被覆盖损坏时(param_count 偏小,尾部默认参数丢失),用 _cache_vpi_param_annots_text 的文本缓存补全:参数位置 p 对应缓存段 p(含首参空串占位)。 # 补全后 declare 参数数与 define 一致,调用点默认参数填充才能生效,避免被调函数读栈垃圾。 # ============================================================ -def _repair_declare_params_from_text(pool: rowptr[memhub.MemBuddy], +def _repair_declare_params_from_text(pool: rawptr[memhub.MemBuddy], func: llvmlite.Function | t.CPtr, src_sha1: str, cls_name: str, @@ -860,7 +860,7 @@ def _repair_declare_params_from_text(pool: rowptr[memhub.MemBuddy], # 参数类型错会导致调用侧 trunc 传参、callee 按 i64 读栈残留高位 → can=巨值读未写槽位崩溃(SlotsBugTest 根因)。 # 从 @-joined 注解串取第 seg_idx 段(0=self 空段),用 _resolve_vpi_ret_annot_str 解析;空段/未命中返回 None(走 AST 兜底)。 # ============================================================ -def _resolve_vpi_param_annot_seg(pool: rowptr[memhub.MemBuddy], +def _resolve_vpi_param_annot_seg(pool: rawptr[memhub.MemBuddy], src_sha1: str, cls_name: str, method_name: str, @@ -966,7 +966,7 @@ def _ensure_vpi_ret_annot_loaded(src_sha1: str, temp_dir: str) -> int: vpi_path[td_len + 3] = '/' string.strcpy(vpi_path + td_len + 4, src_sha1) string.strcpy(vpi_path + td_len + 4 + sha1_len, ".vpi") - f: rowptr[fileio.File] = fileio.File(vpi_path, fileio.MODE.R) + f: rawptr[fileio.File] = fileio.File(vpi_path, fileio.MODE.R) if f.closed: stdlib.free(vpi_path) return 0 @@ -1025,7 +1025,7 @@ def _ensure_vpi_param_annot_loaded(src_sha1: str, temp_dir: str) -> int: vpi_path[td_len + 3] = '/' string.strcpy(vpi_path + td_len + 4, src_sha1) string.strcpy(vpi_path + td_len + 4 + sha1_len, ".vpi") - f: rowptr[fileio.File] = fileio.File(vpi_path, fileio.MODE.R) + f: rawptr[fileio.File] = fileio.File(vpi_path, fileio.MODE.R) if f.closed: stdlib.free(vpi_path) return 0 @@ -1205,7 +1205,7 @@ def _lookup_vpi_ret_annot(src_sha1: str, cls_name: str, method_name: str) -> str # # 纯字符串解析,不构造 AST 节点。 # ============================================================ -def _resolve_single_vpi_type_str(pool: rowptr[memhub.MemBuddy], +def _resolve_single_vpi_type_str(pool: rawptr[memhub.MemBuddy], seg: str) -> llvmlite.LLVMType | t.CPtr: """解析单个类型段为 LLVMType,无法识别返回 None""" if seg is None or pool is None: @@ -1246,13 +1246,13 @@ def _resolve_single_vpi_type_str(pool: rowptr[memhub.MemBuddy], # None 与 void 同义,归一到 Void。 if string.strcmp(seg, "None") == 0: return llvmlite.Void(pool) - # rowptr[T] 内建裸指针(等价 t.CPtr[T] → Ptr(T)):vpi 返回/参数注解按源码 - # 原样保留 Subscript 形态(如 tokens.vp `new_token -> rowptr[Token]`)。 + # rawptr[T] 内建裸指针(等价 t.CPtr[T] → Ptr(T)):vpi 返回/参数注解按源码 + # 原样保留 Subscript 形态(如 tokens.vp `new_token -> rawptr[Token]`)。 # 此前无此分支 → 整个注解解析返回 None → text.ll 尚未生成(合法时序:依赖 # 模块尚未翻译,占位 text.ll 为空)时跨模块调用 fail-fast 误报 # (includes/ast/lexer.vp new_token 根因)。与定义侧 TypeGenResolve - # resolve_annotation_type 的 rowptr 分支同口径:Ptr(resolve(T))。 - if string.strncmp(seg, "rowptr[", 7) == 0: + # resolve_annotation_type 的 rawptr 分支同口径:Ptr(resolve(T))。 + if string.strncmp(seg, "rawptr[", 7) == 0: seg_len_rp: sizet = string.strlen(seg) if seg_len_rp > 8 and seg[seg_len_rp - 1] == ']': inner_len_rp: sizet = seg_len_rp - 8 @@ -1337,9 +1337,9 @@ def _resolve_single_vpi_type_str(pool: rowptr[memhub.MemBuddy], # # 纯字符串解析,避免 _parse_type_string 跨模块构造 ast.Name/ast.BinOp 时节点 kind() 异常(可能退化为裸函数调用)导致 resolve 得到垃圾类型(如 Ptr(i8))。 # -# 支持: "str"/"bytes" → i8*; "int" → i32; "bool" → i1; "char" 等 → map_t_type 映射; "X | t.CPtr" → Ptr(Struct X); "t.CPtr" → i8*; "rowptr[memhub.MemBuddy]" → Ptr(Struct MemBuddy)。 +# 支持: "str"/"bytes" → i8*; "int" → i32; "bool" → i1; "char" 等 → map_t_type 映射; "X | t.CPtr" → Ptr(Struct X); "t.CPtr" → i8*; "rawptr[memhub.MemBuddy]" → Ptr(Struct MemBuddy)。 # ============================================================ -def _resolve_vpi_ret_annot_str(pool: rowptr[memhub.MemBuddy], +def _resolve_vpi_ret_annot_str(pool: rawptr[memhub.MemBuddy], ret_annot: str, i32_ty: llvmlite.LLVMType | t.CPtr, i8_ptr_ty: llvmlite.LLVMType | t.CPtr) -> llvmlite.LLVMType | t.CPtr: @@ -1596,7 +1596,7 @@ def _extract_sha1_from_path(vpi_path: str) -> str: # 与 HandlesImports.add_imported_module 逻辑一致,但内联在本模块, # 避免 VpiReader → HandlesImports → StubMerger → VpiReader 循环依赖。 # ============================================================ -def _stub_add_imported(pool: rowptr[memhub.MemBuddy], +def _stub_add_imported(pool: rawptr[memhub.MemBuddy], cur: str, name: str) -> str: """追加模块名到空格分隔列表(pool 分配),返回新列表""" if name is None: @@ -1620,7 +1620,7 @@ def _stub_add_imported(pool: rowptr[memhub.MemBuddy], # ============================================================ # _stub_add_from - 追加 from-import 映射("local:mod[:orig]" 空格分隔) # ============================================================ -def _stub_add_from(pool: rowptr[memhub.MemBuddy], +def _stub_add_from(pool: rawptr[memhub.MemBuddy], cur: str, local: str, mod: str, orig: str) -> str: """追加 from-import 映射(pool 分配),返回新列表 @@ -1716,7 +1716,7 @@ def _vpi_typedef_visited_mark(sha1: str) -> None: _g_vpi_typedef_visited_count += 1 -def _vpi_register_typedef_closure(pool: rowptr[memhub.MemBuddy], +def _vpi_register_typedef_closure(pool: rawptr[memhub.MemBuddy], import_mods: str, temp_dir: str, depth: int) -> int: @@ -1771,7 +1771,7 @@ def _vpi_register_typedef_closure(pool: rowptr[memhub.MemBuddy], vpi_path_r[td_len + 3] = '/' string.strcpy(vpi_path_r + td_len + 4, sha1_r) string.strcpy(vpi_path_r + td_len + 4 + 16, ".vpi") - f_r: rowptr[fileio.File] = fileio.File(vpi_path_r, fileio.MODE.R) + f_r: rawptr[fileio.File] = fileio.File(vpi_path_r, fileio.MODE.R) if f_r.closed: stdlib.free(vpi_path_r) continue @@ -1899,7 +1899,7 @@ def _vpi_register_typedef_closure(pool: rowptr[memhub.MemBuddy], # Args: pool 内存池;mod 当前 LLVM 模块;vpi_path .vpi 文件路径;trans 翻译器对象 # Returns: 1=成功,0=失败 # ============================================================ -def ParseVpiIntoModule(pool: rowptr[memhub.MemBuddy], +def ParseVpiIntoModule(pool: rawptr[memhub.MemBuddy], mod: llvmlite.LLVMModule | t.CPtr, vpi_path: str, trans: HT.Translator | t.CPtr) -> int: @@ -1918,7 +1918,7 @@ def ParseVpiIntoModule(pool: rowptr[memhub.MemBuddy], return ret -def _ParseVpiIntoModuleImpl(pool: rowptr[memhub.MemBuddy], +def _ParseVpiIntoModuleImpl(pool: rawptr[memhub.MemBuddy], mod: llvmlite.LLVMModule | t.CPtr, vpi_path: str, trans: HT.Translator | t.CPtr) -> int: @@ -1927,7 +1927,7 @@ def _ParseVpiIntoModuleImpl(pool: rowptr[memhub.MemBuddy], return 0 # 1. 读取 .vpi 文件 - f: rowptr[fileio.File] = fileio.File(vpi_path, fileio.MODE.R) + f: rawptr[fileio.File] = fileio.File(vpi_path, fileio.MODE.R) if f.closed: return 0 vpi_buf: bytes = stdlib.malloc(VPI_READ_BUF_SIZE) @@ -2004,7 +2004,7 @@ def _ParseVpiIntoModuleImpl(pool: rowptr[memhub.MemBuddy], elif sk == ast.ASTKind.ImportFrom: sifr: ast.ImportFrom | t.CPtr = (ast.ImportFrom | t.CPtr)(schild) sifr_mod: str = sifr.module - # 相对导入补包前缀:vpi 里 `from .base import X` 只存 module="base"(前导点记在 level),若按字面 "base" 精确查找则查不到 "ast.base" ⇒ 裸类名(AST 等)解析失败 ⇒ rowptr[AST] 等注解 fail-fast。 + # 相对导入补包前缀:vpi 里 `from .base import X` 只存 module="base"(前导点记在 level),若按字面 "base" 精确查找则查不到 "ast.base" ⇒ 裸类名(AST 等)解析失败 ⇒ rawptr[AST] 等注解 fail-fast。 # 故按 stub 自身相对路径还原包名(ast/parser.vp → "ast"),level==1 时拼成完整模块名 "ast.base" 再登记(level>1 保持原样,避免未确认路径形态时做过深上溯)。 sifr_mod_q: str = sifr_mod if sifr_mod is not None and sifr_mod[0] != '\0' and sifr.level == 1: @@ -2059,7 +2059,7 @@ def _ParseVpiIntoModuleImpl(pool: rowptr[memhub.MemBuddy], # [D26 fail-fast] 包 __init__ 的 from-import 解析不出子模块 sha1 时 # **不再静默跳过**:跳过会让该子模块的类一个都注册不上 → 包 stub 里 # 引用这些类的注解在后续解析时落空 → 报错点远离真因(实测:报错指向 - # ast/__init__.vpi 的 `parse_expression -> rowptr[Expression]`,而 + # ast/__init__.vpi 的 `parse_expression -> rawptr[Expression]`,而 # Expression 定义在 ast.stmts,真因是子模块 sha1 查找/注入失败)。 # 此处直接给出包名与子模块名(含补前缀后的精确名)便于定位。 if is_pkg_init_rt != 0 and sub_sha1_rt is None \ @@ -2311,7 +2311,7 @@ def ResetVpiInjectVisited() -> None: _vpi_inj_depth = 0 -def _ensure_dep_vpi_injected(pool: rowptr[memhub.MemBuddy], +def _ensure_dep_vpi_injected(pool: rawptr[memhub.MemBuddy], mod: llvmlite.LLVMModule | t.CPtr, dep_sha1: str, trans: HT.Translator | t.CPtr) -> int: @@ -2351,7 +2351,7 @@ def _ensure_dep_vpi_injected(pool: rowptr[memhub.MemBuddy], viperlib.snprintf(path_i, path_len_i, "%s/%s/%s.vpi", temp_dir, sub_i, dep_sha1) else: viperlib.snprintf(path_i, path_len_i, "%s/%s.vpi", temp_dir, dep_sha1) - vf_i: rowptr[fileio.File] = fileio.File(path_i, fileio.MODE.R) + vf_i: rawptr[fileio.File] = fileio.File(path_i, fileio.MODE.R) if vf_i.closed: stdlib.free(path_i) return 0 @@ -2386,7 +2386,7 @@ def _ensure_dep_vpi_injected(pool: rowptr[memhub.MemBuddy], # # Args: src_name 子模块中的原类名;local_name 包命名空间中的名字(或 as 别名);sub_sha1 子模块(定义文件)sha1;pkg_sha1 当前包 __init__ 的 sha1;trans 翻译器对象(源 entry 缺失时按需注入子模块 vpi 需要) # ============================================================ -def _inject_reexport_class_declare(pool: rowptr[memhub.MemBuddy], +def _inject_reexport_class_declare(pool: rawptr[memhub.MemBuddy], mod: llvmlite.LLVMModule | t.CPtr, src_name: str, local_name: str, @@ -2514,7 +2514,7 @@ def _vpi_class_is_renum(class_cd: ast.ClassDef | t.CPtr) -> int: # 2) 未注册 → 解析字段类型 → 创建命名 StructType("sha1.ClassName") → register_struct + add_visible_struct。 # 字段解析失败不 fatal(不注册该类,留给源模块编译注册,后续裸类名引用由调用侧 fail-fast 暴露)。 # ============================================================ -def _inject_class_struct_declare(pool: rowptr[memhub.MemBuddy], +def _inject_class_struct_declare(pool: rawptr[memhub.MemBuddy], mod: llvmlite.LLVMModule | t.CPtr, class_cd: ast.ClassDef | t.CPtr, cls_name: str, @@ -2655,7 +2655,7 @@ def _inject_class_struct_declare(pool: rowptr[memhub.MemBuddy], # 指针引用(Ptr(Struct))无需——_scan_type_for_cross_module_refs 的 Ptr 分支添加 opaque 即可。 # ============================================================ def _ensure_full_value_types(mod: llvmlite.LLVMModule | t.CPtr, - pool: rowptr[memhub.MemBuddy], + pool: rawptr[memhub.MemBuddy], ty: llvmlite.LLVMType | t.CPtr) -> None: """递归为值 struct / 数组元素 struct 注册完整定义(递归深度守卫)""" if mod is None or pool is None or ty is None: @@ -2693,7 +2693,7 @@ def _ensure_full_value_types(mod: llvmlite.LLVMModule | t.CPtr, # * TPV 内部函数/方法(存在 define 侧)→ Ptr(struct):与定义侧逐字一致,指针目标只需 opaque 声明(module_ensure_opaque_for_type)。 # ============================================================ def _AggregateParamTy(mod: llvmlite.LLVMModule | t.CPtr, - pool: rowptr[memhub.MemBuddy], + pool: rawptr[memhub.MemBuddy], ty: llvmlite.LLVMType | t.CPtr, is_c_abi: int) -> llvmlite.LLVMType | t.CPtr: """裸结构体形参类型(C ABI 按值 / 内部 Ptr(struct),见上方注释)""" @@ -2723,7 +2723,7 @@ def _AggregateParamTy(mod: llvmlite.LLVMModule | t.CPtr, # vpi 里模块级全局变量(如 tokens.vp 的 _op_head: OpEntry | t.CPtr = None)需在当前模块创建 external global 声明(短名 @name,COFF 按名链接), # 否则跨模块 from-import 读取全局变量时 find_global_in_module 找不到 → 误杀「跨模块全局变量类型未知(stub 未注入)」。 # ============================================================ -def _inject_global_variable_declare(pool: rowptr[memhub.MemBuddy], +def _inject_global_variable_declare(pool: rawptr[memhub.MemBuddy], mod: llvmlite.LLVMModule | t.CPtr, aa: ast.AnnAssign | t.CPtr, trans: HT.Translator | t.CPtr, @@ -2820,7 +2820,7 @@ def _inject_global_variable_declare(pool: rowptr[memhub.MemBuddy], # 用 find_func_in_module 去重,创建 declare 并添加参数, # 注册到函数表。 # ============================================================ -def _inject_function_declare(pool: rowptr[memhub.MemBuddy], +def _inject_function_declare(pool: rawptr[memhub.MemBuddy], mod: llvmlite.LLVMModule | t.CPtr, fd: ast.FunctionDef | t.CPtr, trans: HT.Translator | t.CPtr, @@ -3040,7 +3040,7 @@ def _inject_function_declare(pool: rowptr[memhub.MemBuddy], # 方法混淆名 {src_sha1}.{ClassName}.{method};参数类型从 vpi 注解解析(self 无注解时默认为 i8*)。 # 注入正确签名可避免调用时 _ensure_method_declare 用实参类型创建错误 declare(如 size: sizet 被写成 i32 而非 i64)。 # ============================================================ -def _inject_method_declare(pool: rowptr[memhub.MemBuddy], +def _inject_method_declare(pool: rawptr[memhub.MemBuddy], mod: llvmlite.LLVMModule | t.CPtr, m_fd: ast.FunctionDef | t.CPtr, cls_name: str, @@ -3246,7 +3246,7 @@ def _inject_method_declare(pool: rowptr[memhub.MemBuddy], # 提取 NAME: t.CTypedef = Type 中的名称和类型表达式字符串, # 调用 register_ctypedef 注册到动态 CTypedef 表。 # ============================================================ -def _register_ctypedef_from_annassign(pool: rowptr[memhub.MemBuddy], +def _register_ctypedef_from_annassign(pool: rawptr[memhub.MemBuddy], aa: ast.AnnAssign | t.CPtr) -> None: """从 AnnAssign 节点提取并注册 CTypedef""" if aa is None or pool is None: diff --git a/App/lib/Stub/StubMerger/StubMergerBuild.vp b/App/lib/Stub/StubMerger/StubMergerBuild.vp index fd6d455..32a759b 100644 --- a/App/lib/Stub/StubMerger/StubMergerBuild.vp +++ b/App/lib/Stub/StubMerger/StubMergerBuild.vp @@ -271,7 +271,7 @@ def _LoadAndAppendStub(temp_dir: str, td_len: sizet, dep_sha1: str, dep_path: str = StubMergerCollect._sliced_path(temp_dir, td_len, dep_sha1, "stub.ll") if dep_path is None: return out_pos - df_ls: rowptr[fileio.File] = fileio.File(dep_path, fileio.MODE.R) + df_ls: rawptr[fileio.File] = fileio.File(dep_path, fileio.MODE.R) if df_ls.closed: stdlib.free(dep_path) # 依赖 stub 缺失:includes 映射内的模块缺失属编译错误(fail-fast), @@ -466,7 +466,7 @@ def _LoadAndAppendTextDeclares(temp_dir: str, td_len: sizet, dep_sha1: str, text_path: str = StubMergerCollect._sliced_path(temp_dir, td_len, dep_sha1, "text.ll") if text_path is None: return out_pos - tf_lt: rowptr[fileio.File] = fileio.File(text_path, fileio.MODE.R) + tf_lt: rawptr[fileio.File] = fileio.File(text_path, fileio.MODE.R) if tf_lt.closed: stdlib.free(text_path) # 依赖 text 缺失:includes 映射内的模块缺失属编译错误(fail-fast), @@ -764,7 +764,7 @@ def _AppendDepsToWorklist(worklist: bytes, wl_len: sizet, # Args: mb 内存池;source_dir App 源文件目录(Config.SourceDir);temp_dir 临时目录(deps.txt 所在位置);reachable_set 输出参数,可达 SHA1 集合缓冲区(MAX_INCLUDES_SHA1 * 17 字节);app_deps App 源文件直接依赖模块名(空格分隔),非空则跳过 App 扫描;includes_dirs includes 根目录(空格分隔) # Returns: 可达 SHA1 数量(>0 成功;0 无 includes 依赖;<0 失败) # ============================================================ -def _BuildReachableSha1Set(mb: rowptr[memhub.MemBuddy], source_dir: str, +def _BuildReachableSha1Set(mb: rawptr[memhub.MemBuddy], source_dir: str, temp_dir: str, reachable_set: str, app_deps: str = None, @@ -1138,7 +1138,7 @@ def _BuildReachableSha1Set(mb: rowptr[memhub.MemBuddy], source_dir: str, td_len_w: sizet = string.strlen(temp_dir) deps_path_w: str = StubMergerCollect._sliced_path(temp_dir, td_len_w, sha1_r2, "deps.txt") if deps_path_w is not None: - df_w: rowptr[fileio.File] = fileio.File(deps_path_w, fileio.MODE.W) + df_w: rawptr[fileio.File] = fileio.File(deps_path_w, fileio.MODE.W) if not df_w.closed: dl_w: sizet = string.strlen(deps_r2) if dl_w > 0: @@ -1369,7 +1369,7 @@ def BuildCombinedIR(temp_dir: str, local_sha1: str, stub_path: str = StubMergerCollect._sliced_path(temp_dir, td_len, local_sha1, "stub.ll") if stub_path is None: return 0 - sf: rowptr[fileio.File] = fileio.File(stub_path, fileio.MODE.R) + sf: rawptr[fileio.File] = fileio.File(stub_path, fileio.MODE.R) if sf.closed: stdlib.free(stub_path) return 0 @@ -1434,7 +1434,7 @@ def BuildCombinedIR(temp_dir: str, local_sha1: str, deps_loaded: int = 0 deps_path: str = StubMergerCollect._sliced_path(temp_dir, td_len, local_sha1, "deps.txt") if deps_path is not None: - df_deps: rowptr[fileio.File] = fileio.File(deps_path, fileio.MODE.R) + df_deps: rawptr[fileio.File] = fileio.File(deps_path, fileio.MODE.R) if not df_deps.closed: deps_buf = stdlib.malloc(4096) if deps_buf is not None: @@ -1576,7 +1576,7 @@ def BuildCombinedIR(temp_dir: str, local_sha1: str, # 检查 stub 文件是否存在 chk_path: str = StubMergerCollect._sliced_path(temp_dir, td_len, found_s, "stub.ll") if chk_path is not None: - chk_f: rowptr[fileio.File] = fileio.File(chk_path, fileio.MODE.R) + chk_f: rawptr[fileio.File] = fileio.File(chk_path, fileio.MODE.R) if chk_f.closed: VLogger.error(f"依赖模块 '{mod_nm}' (sha1={found_s}) 的 stub 文件不存在: {chk_path},立即终止编译", "BuildCombinedIR") chk_f.close() @@ -1587,7 +1587,7 @@ def BuildCombinedIR(temp_dir: str, local_sha1: str, text_path: str = StubMergerCollect._sliced_path(temp_dir, td_len, local_sha1, "text.ll") if text_path is None: return out_pos - tf: rowptr[fileio.File] = fileio.File(text_path, fileio.MODE.R) + tf: rawptr[fileio.File] = fileio.File(text_path, fileio.MODE.R) if tf.closed: # 本地 text.ll 缺失:合并 IR 无法生成定义块,fail-fast 终止 VLogger.error(f"本地 text.ll 缺失: {text_path}", "StubMerger") @@ -1764,7 +1764,7 @@ def BuildCombinedIR(temp_dir: str, local_sha1: str, # Args: pool 内存池;mod 当前 LLVM 模块;imported_modules 已导入模块名字符串(空格分隔);from_imports from-import 映射字符串("name:module name:module" 格式);temp_dir temp 目录路径;trans 翻译器对象 # Returns: 成功加载的 .vpi 文件数 # ============================================================ -def LoadDepVpiIntoModule(pool: rowptr[memhub.MemBuddy], +def LoadDepVpiIntoModule(pool: rawptr[memhub.MemBuddy], mod: llvmlite.LLVMModule | t.CPtr, imported_modules: str, from_imports: str, @@ -1829,7 +1829,7 @@ def LoadDepVpiIntoModule(pool: rowptr[memhub.MemBuddy], vpi_path: str = StubMergerCollect._sliced_path(temp_dir, td_len, sha1_val, "vpi") if vpi_path is not None: # 检查 .vpi 文件是否存在(可读) - vf: rowptr[fileio.File] = fileio.File(vpi_path, fileio.MODE.R) + vf: rawptr[fileio.File] = fileio.File(vpi_path, fileio.MODE.R) if not vf.closed: vf.close() # 调用 VpiReader 解析 .vpi 并注入 declare diff --git a/App/lib/Stub/StubMerger/StubMergerCollect.vp b/App/lib/Stub/StubMerger/StubMergerCollect.vp index e465a68..43b8f99 100644 --- a/App/lib/Stub/StubMerger/StubMergerCollect.vp +++ b/App/lib/Stub/StubMerger/StubMergerCollect.vp @@ -96,7 +96,7 @@ def _collect_stub_sha1s(base_dir: str, bd_len: sizet, level: int, if out_count >= max_count: return out_count - find_data: rowptr[win32file.WIN32_FIND_DATAA] = stdlib.malloc(win32file.WIN32_FIND_DATAA.__sizeof__()) + find_data: rawptr[win32file.WIN32_FIND_DATAA] = stdlib.malloc(win32file.WIN32_FIND_DATAA.__sizeof__()) if find_data is None: return out_count string.memset(find_data, 0, win32file.WIN32_FIND_DATAA.__sizeof__()) @@ -166,7 +166,7 @@ def _collect_stub_sha1s(base_dir: str, bd_len: sizet, level: int, # 数据来源是 PopulateSha1MapStore 填充的全局存储器(不读取 _sha1_map.txt)。 # 用于过滤 stub 文件,避免加载 TransPyV 自身源文件(lib/*)的 stub 导致链接失败。 # ============================================================ -def _load_includes_sha1_set(pool: rowptr[memhub.MemBuddy], +def _load_includes_sha1_set(pool: rawptr[memhub.MemBuddy], temp_dir: str, sha1_set: str) -> int: """从全局内存存储器将 includes 的 SHA1 写入 sha1_set @@ -205,8 +205,8 @@ def _is_in_sha1_set(sha1: str, sha1_set: str, set_count: int) -> int: # Args: mb 内存池;temp_dir 临时目录(_sha1_map.txt 写入位置);scan_result IncludesScanner 扫描结果 # Returns: 0 成功,非 0 失败 # ============================================================ -def WriteIncludesSha1Map(mb: rowptr[memhub.MemBuddy], temp_dir: str, - scan_result: rowptr[IncludesScanner.ScanResult], +def WriteIncludesSha1Map(mb: rawptr[memhub.MemBuddy], temp_dir: str, + scan_result: rawptr[IncludesScanner.ScanResult], filter_set: str, filter_count: int) -> int: """将 includes 扫描结果写入 _sha1_map.txt(人类可读输出,程序内部使用内存存储器) @@ -224,7 +224,7 @@ def WriteIncludesSha1Map(mb: rowptr[memhub.MemBuddy], temp_dir: str, viperlib.snprintf(map_path, dir_len + 32, "%s/_sha1_map.txt", temp_dir) # 打开文件写入(CREATE_ALWAYS) - f: rowptr[fileio.File] = fileio.File(map_path, fileio.MODE.W) + f: rawptr[fileio.File] = fileio.File(map_path, fileio.MODE.W) if f.closed: return 1 @@ -238,7 +238,7 @@ def WriteIncludesSha1Map(mb: rowptr[memhub.MemBuddy], temp_dir: str, written_count: int = 0 for i in range(scan_result.Count): ea_w: uint64 = uint64(scan_result.Entries) + i * entry_size_w - ent_w: rowptr[IncludesScanner.FileEntry] = (rowptr[IncludesScanner.FileEntry])(t.CVoid(ea_w, t.CPtr)) + ent_w: rawptr[IncludesScanner.FileEntry] = (rawptr[IncludesScanner.FileEntry])(t.CVoid(ea_w, t.CPtr)) if ent_w is None or ent_w.Sha1 is None or ent_w.RelPath is None: continue # 若提供过滤集合,只写入集合中的条目 diff --git a/App/lib/Stub/StubMerger/__init__.vp b/App/lib/Stub/StubMerger/__init__.vp index 71d4af5..2eb1df1 100644 --- a/App/lib/Stub/StubMerger/__init__.vp +++ b/App/lib/Stub/StubMerger/__init__.vp @@ -27,7 +27,7 @@ import lib.Projectrans.Config as Config # ============================================================ # 全局 mbuddy 指针 -_mbuddy: rowptr[memhub.MemBuddy] +_mbuddy: rawptr[memhub.MemBuddy] # 最大 includes SHA1 数(用于过滤) MAX_INCLUDES_SHA1: t.CDefine = 1024 diff --git a/App/lib/__init__.vp b/App/lib/__init__.vp index 8425ec9..d0efa99 100644 --- a/App/lib/__init__.vp +++ b/App/lib/__init__.vp @@ -10,4 +10,4 @@ import lib.core.VLogger as VLogger # 全局 mbuddy 内存池指针(由 App/main.vp 初始化后注入) # 注意: 使用 MemBuddy 类型而非 MemManager,避免虚函数分派不工作时调用父类 alloc 返回 None -_mbuddy: rowptr[memhub.MemBuddy] +_mbuddy: rawptr[memhub.MemBuddy] diff --git a/App/lib/core/CompilerFactory.vp b/App/lib/core/CompilerFactory.vp index 9e52df2..0194cab 100644 --- a/App/lib/core/CompilerFactory.vp +++ b/App/lib/core/CompilerFactory.vp @@ -8,8 +8,8 @@ import memhub @t.NoVTable class CompilerFactory: """编译器结构体工厂(持有主池/永久池等共享对象)""" - Pool: rowptr[memhub.MemBuddy] # 主内存池(瞬时数据,mark/reset 回收) - PermPool: rowptr[memhub.MemBuddy] # 永久内存池(持久数据,从不 reset) + Pool: rawptr[memhub.MemBuddy] # 主内存池(瞬时数据,mark/reset 回收) + PermPool: rawptr[memhub.MemBuddy] # 永久内存池(持久数据,从不 reset) # ---- REnum 变体注册表(编译期单例持有,与 perm_pool 的 struct entry 同寿命)---- RenumClassNames: sizet | t.CPtr @@ -26,10 +26,10 @@ class CompilerFactory: RenumAliasVariant: sizet | t.CPtr RenumAliasCount: int - def __init__(self, pool: rowptr[memhub.MemBuddy], perm_pool: rowptr[memhub.MemBuddy]): + def __init__(self, pool: rawptr[memhub.MemBuddy], perm_pool: rawptr[memhub.MemBuddy]): if self is None: return self.Pool = pool self.PermPool = perm_pool # 全局工厂单例 -factory: rowptr[CompilerFactory] = None +factory: rawptr[CompilerFactory] = None diff --git a/App/lib/core/Gen/AssignGenMixin.vp b/App/lib/core/Gen/AssignGenMixin.vp index b9b361c..83435d1 100644 --- a/App/lib/core/Gen/AssignGenMixin.vp +++ b/App/lib/core/Gen/AssignGenMixin.vp @@ -156,7 +156,7 @@ class AssignGenMixin: # register_cdefine_double,否则 translate_value 查表得 0 生成 # ret i32 0(llc 报错 "value doesn't match function result type")。 # ============================================================ - def _register_cdefine_from_value(self, pool: rowptr[memhub.MemBuddy], + def _register_cdefine_from_value(self, pool: rawptr[memhub.MemBuddy], name: str, val_node: ast.AST | t.CPtr) -> None: """注册 CDefine 常量(浮点字面量 → register_cdefine_double,否则整数)""" if pool is None or name is None: @@ -220,7 +220,7 @@ class AssignGenMixin: fp: str = self.Gen.TypeGenResolve.get_current_file() if fp is None or name is None or out is None: return 0 - f: rowptr[fileio.File] = fileio.File(fp, fileio.MODE.R) + f: rawptr[fileio.File] = fileio.File(fp, fileio.MODE.R) if f.closed: return 0 BUF_SZ: sizet = 1048576 @@ -418,7 +418,7 @@ class AssignGenMixin: return 1 return 0 - def _stg_ty_equal(self, pool: rowptr[memhub.MemBuddy], + def _stg_ty_equal(self, pool: rawptr[memhub.MemBuddy], ta: llvmlite.LLVMType | t.CPtr, tb: llvmlite.LLVMType | t.CPtr) -> int: """类型内容相等比较(storage 绑定判定用)。 @@ -610,7 +610,7 @@ class AssignGenMixin: # 0 成功,1 失败 # ============================================================ def _init_global_array_from_list(self, builder: llvmlite.IRBuilder | t.CPtr, - pool: rowptr[memhub.MemBuddy], + pool: rawptr[memhub.MemBuddy], mod: llvmlite.LLVMModule | t.CPtr, array_alloca: llvmlite.Value | t.CPtr, list_node: ast.AST | t.CPtr, @@ -717,7 +717,7 @@ class AssignGenMixin: # 支持浮点运算、指针算术: ptr += int / ptr -= int # 整数运算自动类型提升 # ============================================================ - def _apply_aug_op(self, pool: rowptr[memhub.MemBuddy], + def _apply_aug_op(self, pool: rawptr[memhub.MemBuddy], builder: llvmlite.IRBuilder | t.CPtr, op: int, lhs: llvmlite.Value | t.CPtr, @@ -821,7 +821,7 @@ class AssignGenMixin: # Attribute 目标: self.field += 1 # 流程: get_attribute_ptr → load → binop → store if tk == ast.ASTKind.Attribute: - pool: rowptr[memhub.MemBuddy] = trans.Pool + pool: rawptr[memhub.MemBuddy] = trans.Pool builder: llvmlite.IRBuilder | t.CPtr = trans._cur_builder mod: llvmlite.LLVMModule | t.CPtr = trans.Module @@ -870,7 +870,7 @@ class AssignGenMixin: # Subscript 目标: self.state[i] += x / arr[i] += x # 流程: get_subscript_ptr → load → binop → store if tk == ast.ASTKind.Subscript: - pool: rowptr[memhub.MemBuddy] = trans.Pool + pool: rawptr[memhub.MemBuddy] = trans.Pool builder: llvmlite.IRBuilder | t.CPtr = trans._cur_builder mod: llvmlite.LLVMModule | t.CPtr = trans.Module @@ -925,7 +925,7 @@ class AssignGenMixin: if nm is None or nm.id is None: return 0 - pool: rowptr[memhub.MemBuddy] = trans.Pool + pool: rawptr[memhub.MemBuddy] = trans.Pool builder: llvmlite.IRBuilder | t.CPtr = trans._cur_builder mod: llvmlite.LLVMModule | t.CPtr = trans.Module @@ -1075,7 +1075,7 @@ class AssignGenMixin: # 单参 t.CArray[elem_ty] 本解析为 Ptr(elem_ty),RHS 为列表字面量时按 TPC # ParseListAnnotation 语义推断为静态数组(否则误走动态 list 构造 → 链接期 undefined)。 # PreScan 与 Handle 都必须调用:两处 alloca 类型须一致,否则复用旧 alloca 使推断失效。 - def _infer_static_array_ty_from_literal(self, pool: rowptr[memhub.MemBuddy], + def _infer_static_array_ty_from_literal(self, pool: rawptr[memhub.MemBuddy], annot: ast.AST | t.CPtr, value: ast.AST | t.CPtr, resolved_ty: llvmlite.LLVMType | t.CPtr) -> llvmlite.LLVMType | t.CPtr: @@ -1109,7 +1109,7 @@ class AssignGenMixin: # 以及 builtins 最后匹配的诊断结果(_lookup_builtins_typedef 记录), # 便于直接定位是"注解本身未注册"还是"builtins 扫描未命中/未展开"。 # ============================================================ - def _build_ann_fail_msg(self, pool: rowptr[memhub.MemBuddy], + def _build_ann_fail_msg(self, pool: rawptr[memhub.MemBuddy], annot: ast.AST | t.CPtr, nm_id: str) -> str: """构建变量类型注解解析失败的详细报错信息 @@ -1166,7 +1166,7 @@ class AssignGenMixin: # 供后续 t.CArray[elem_ty, NAME] 编译期解析使用 # 浮点/整数自动识别(与 Handle/handle_module_level_var 路径一致) if self.is_cdefine_annotation(aa.annotation) != 0: - pool_ps: rowptr[memhub.MemBuddy] = trans.Pool + pool_ps: rawptr[memhub.MemBuddy] = trans.Pool self._register_cdefine_from_value(pool_ps, nm.id, aa.value) return 0 @@ -1195,7 +1195,7 @@ class AssignGenMixin: if existing is not None: return 0 - pool: rowptr[memhub.MemBuddy] = trans.Pool + pool: rawptr[memhub.MemBuddy] = trans.Pool builder: llvmlite.IRBuilder | t.CPtr = trans._cur_builder # 从 annotation 推断类型(修复:原硬编码 i32 导致 str 等类型错误) @@ -1264,7 +1264,7 @@ class AssignGenMixin: # _specialize_generic_class 幂等,重复调用安全。 # 返回 1=执行过特化尝试;0=注解形态不适用(非泛型 Subscript)。 def _prespecialize_generic_annotation(self, trans: HT.Translator | t.CPtr, - pool: rowptr[memhub.MemBuddy], + pool: rawptr[memhub.MemBuddy], annot: ast.AST | t.CPtr) -> int: """泛型注解预特化(见上方注释),返回 1=已尝试 / 0=不适用""" if annot is None or trans is None: @@ -1384,7 +1384,7 @@ class AssignGenMixin: # 注册到全局 CDefine 表供 t.CArray[elem_ty, NAME] 解析 # 注: PreScan 已注册过,此处保证即使跳过 PreScan 也能正确注册 if self.is_cdefine_annotation(aa.annotation) != 0: - pool_cd: rowptr[memhub.MemBuddy] = trans.Pool + pool_cd: rawptr[memhub.MemBuddy] = trans.Pool self._register_cdefine_from_value(pool_cd, nm.id, aa.value) return 0 @@ -1395,13 +1395,13 @@ class AssignGenMixin: # 解析查表失败 → NameError: mode_t。仅登记类型表达式,不创建全局/ # 局部存储——否则生成 @mode_t 符号,链接 duplicate symbol warning。 if self.is_ctypedef_annotation(aa.annotation) != 0: - pool_ct: rowptr[memhub.MemBuddy] = trans.Pool + pool_ct: rawptr[memhub.MemBuddy] = trans.Pool ctd_str: str = self.Gen.TypeGenResolve._get_type_name_from_annotation(pool_ct, aa.value) if ctd_str is not None: self.Gen.TypeGenCType.register_ctypedef(pool_ct, nm.id, ctd_str) return 0 - pool: rowptr[memhub.MemBuddy] = trans.Pool + pool: rawptr[memhub.MemBuddy] = trans.Pool builder: llvmlite.IRBuilder | t.CPtr = trans._cur_builder mod: llvmlite.LLVMModule | t.CPtr = trans.Module @@ -1917,7 +1917,7 @@ class AssignGenMixin: return 0 # 从 trans 取共享状态(替代 11 个参数) - pool: rowptr[memhub.MemBuddy] = trans.Pool + pool: rawptr[memhub.MemBuddy] = trans.Pool builder: llvmlite.IRBuilder | t.CPtr = trans._cur_builder mod: llvmlite.LLVMModule | t.CPtr = trans.Module @@ -2423,7 +2423,7 @@ class AssignGenMixin: # Attribute → 字段注解类名(委托 Generator 单例 _resolve_attr_field_class) # 仅当目标为已注册结构体时采用,与"按需过滤,找不到 fast-fail"原则一致。 # ============================================================ - def _infer_rhs_annot(self, pool: rowptr[memhub.MemBuddy], + def _infer_rhs_annot(self, pool: rawptr[memhub.MemBuddy], mod: llvmlite.LLVMModule | t.CPtr, node: ast.AST | t.CPtr, trans: HT.Translator | t.CPtr, @@ -2545,7 +2545,7 @@ class AssignGenMixin: # CFloat64T/t.CPtr 等均不注册 struct,天然过滤)。"A | B" 联合 # 多候选时取首个命中段。 # ============================================================ - def _extract_annot_class_name(self, pool: rowptr[memhub.MemBuddy], + def _extract_annot_class_name(self, pool: rawptr[memhub.MemBuddy], annot: str) -> str: """从返回注解文本提取已注册结构体类名,无命中返回 None""" if pool is None or annot is None: @@ -2621,7 +2621,7 @@ class AssignGenMixin: # 或跨模块类有 SHA1(stub 中声明)即视为存在。仅在确实存在时 # 才采用运算符重载推断的类名,避免把原生运算误标为类类型。 # ============================================================ - def _cls_has_dunder(self, pool: rowptr[memhub.MemBuddy], + def _cls_has_dunder(self, pool: rawptr[memhub.MemBuddy], mod: llvmlite.LLVMModule | t.CPtr, class_name: str, dunder: str) -> int: """类及其 MRO 祖先链中是否存在 dunder 方法,存在返回 1""" diff --git a/App/lib/core/Gen/AsyncGenMixin.vp b/App/lib/core/Gen/AsyncGenMixin.vp index 8731135..868e0eb 100644 --- a/App/lib/core/Gen/AsyncGenMixin.vp +++ b/App/lib/core/Gen/AsyncGenMixin.vp @@ -68,7 +68,7 @@ class AsyncGenMixin(CallGenBase.CallGenBase): if fd is None or fd.name is None or trans is None: return 0 name: str = fd.name - pool: rowptr[memhub.MemBuddy] = trans.Pool + pool: rawptr[memhub.MemBuddy] = trans.Pool mod: llvmlite.LLVMModule | t.CPtr = trans.Module if pool is None or mod is None: return 0 @@ -712,7 +712,7 @@ class AsyncGenMixin(CallGenBase.CallGenBase): # 帧结构体 %Coro_ = { i32 state, i32 done, i32 ret, <局部槽>* } # 槽索引: 0=state 1=done 2=ret 3..3+nlocals-1=局部变量 # ============================================================ - def _build_frame_ty(self, pool: rowptr[memhub.MemBuddy], + def _build_frame_ty(self, pool: rawptr[memhub.MemBuddy], mod: llvmlite.LLVMModule | t.CPtr, trans: HT.Translator | t.CPtr, name: str, @@ -767,7 +767,7 @@ class AsyncGenMixin(CallGenBase.CallGenBase): # ============================================================ # create_() -> %Coro_* # ============================================================ - def _emit_create(self, pool: rowptr[memhub.MemBuddy], + def _emit_create(self, pool: rawptr[memhub.MemBuddy], mod: llvmlite.LLVMModule | t.CPtr, trans: HT.Translator | t.CPtr, name: str, @@ -928,7 +928,7 @@ class AsyncGenMixin(CallGenBase.CallGenBase): # ============================================================ # M7:每帧类型的全局 free-list 池头(i64,0 = 空) # ============================================================ - def _get_coro_pool(self, pool: rowptr[memhub.MemBuddy], + def _get_coro_pool(self, pool: rawptr[memhub.MemBuddy], mod: llvmlite.LLVMModule | t.CPtr, trans: HT.Translator | t.CPtr, name: str) -> llvmlite.GlobalVariable | t.CPtr: @@ -974,7 +974,7 @@ class AsyncGenMixin(CallGenBase.CallGenBase): # ============================================================ # resume_(%Coro_*) -> i32 状态机(静态段切分) # ============================================================ - def _emit_resume(self, pool: rowptr[memhub.MemBuddy], + def _emit_resume(self, pool: rawptr[memhub.MemBuddy], mod: llvmlite.LLVMModule | t.CPtr, trans: HT.Translator | t.CPtr, name: str, @@ -1204,7 +1204,7 @@ class AsyncGenMixin(CallGenBase.CallGenBase): # ============================================================ def _handle_segment(self, trans: HT.Translator | t.CPtr, builder: llvmlite.IRBuilder | t.CPtr, - pool: rowptr[memhub.MemBuddy], + pool: rawptr[memhub.MemBuddy], mod: llvmlite.LLVMModule | t.CPtr, stmts: list[ast.AST | t.CPtr] | t.CPtr): """递归翻译协程体语句。builder 当前块 = 活跃执行块(state0 或某恢复块)。""" @@ -1300,7 +1300,7 @@ class AsyncGenMixin(CallGenBase.CallGenBase): # ============================================================ def _handle_coro_if(self, trans: HT.Translator | t.CPtr, builder: llvmlite.IRBuilder | t.CPtr, - pool: rowptr[memhub.MemBuddy], + pool: rawptr[memhub.MemBuddy], mod: llvmlite.LLVMModule | t.CPtr, stmt: ast.AST | t.CPtr): ifn: ast.If | t.CPtr = (ast.If | t.CPtr)(stmt) @@ -1350,7 +1350,7 @@ class AsyncGenMixin(CallGenBase.CallGenBase): # ============================================================ def _handle_coro_while(self, trans: HT.Translator | t.CPtr, builder: llvmlite.IRBuilder | t.CPtr, - pool: rowptr[memhub.MemBuddy], + pool: rawptr[memhub.MemBuddy], mod: llvmlite.LLVMModule | t.CPtr, stmt: ast.AST | t.CPtr): whn: ast.While | t.CPtr = (ast.While | t.CPtr)(stmt) @@ -1400,7 +1400,7 @@ class AsyncGenMixin(CallGenBase.CallGenBase): # ============================================================ def _handle_nested_await_stmt(self, trans: HT.Translator | t.CPtr, builder: llvmlite.IRBuilder | t.CPtr, - pool: rowptr[memhub.MemBuddy], + pool: rawptr[memhub.MemBuddy], mod: llvmlite.LLVMModule | t.CPtr, stmt: ast.AST | t.CPtr): """把语句中所有嵌套 await 提升为顶层临时赋值(与预扫描 DFS 顺序一致)""" @@ -1532,7 +1532,7 @@ class AsyncGenMixin(CallGenBase.CallGenBase): return self._find_expr_await(sb.slice) return None - def _replace_await_with_name(self, pool: rowptr[memhub.MemBuddy], + def _replace_await_with_name(self, pool: rawptr[memhub.MemBuddy], stmt: ast.AST | t.CPtr, temp_name: str) -> int: """把语句树中第一个 Await 替换为 Name(temp_name)(DFS 字段序)""" @@ -1561,7 +1561,7 @@ class AsyncGenMixin(CallGenBase.CallGenBase): return 0 return 0 - def _replace_expr_await(self, pool: rowptr[memhub.MemBuddy], + def _replace_expr_await(self, pool: rawptr[memhub.MemBuddy], node: ast.AST | t.CPtr, temp_name: str) -> int: """在表达式树中把第一个 Await 替换为 Name(temp_name, Load)。 @@ -1698,7 +1698,7 @@ class AsyncGenMixin(CallGenBase.CallGenBase): # 条件归一化(i1 直通;其余 icmp ne 0) # ============================================================ def _normalize_cond(self, builder: llvmlite.IRBuilder | t.CPtr, - pool: rowptr[memhub.MemBuddy], + pool: rawptr[memhub.MemBuddy], cond: llvmlite.Value | t.CPtr) -> llvmlite.Value | t.CPtr: if cond is None: return None @@ -1761,7 +1761,7 @@ class AsyncGenMixin(CallGenBase.CallGenBase): # M3:await coro_sleep(ms) —— wake 槽挂起(coro_run 轮询续跑) # ============================================================ def _emit_await_sleep(self, builder: llvmlite.IRBuilder | t.CPtr, - pool: rowptr[memhub.MemBuddy], + pool: rawptr[memhub.MemBuddy], mod: llvmlite.LLVMModule | t.CPtr, trans: HT.Translator | t.CPtr, node: ast.AST | t.CPtr) -> llvmlite.Value | t.CPtr: @@ -1812,7 +1812,7 @@ class AsyncGenMixin(CallGenBase.CallGenBase): # M4-M6:协程内 raise(异常类型/值 → 帧 exc 槽) # ============================================================ def _handle_coro_raise(self, builder: llvmlite.IRBuilder | t.CPtr, - pool: rowptr[memhub.MemBuddy], + pool: rawptr[memhub.MemBuddy], mod: llvmlite.LLVMModule | t.CPtr, trans: HT.Translator | t.CPtr, stmt: ast.AST | t.CPtr): @@ -1849,7 +1849,7 @@ class AsyncGenMixin(CallGenBase.CallGenBase): llvmlite.build_store(builder, done_r, trans._coro_done_ptr) llvmlite.build_br(builder, trans._coro_exit_bb) - def _resolve_raise_code(self, pool: rowptr[memhub.MemBuddy], + def _resolve_raise_code(self, pool: rawptr[memhub.MemBuddy], exc_node: ast.AST | t.CPtr) -> int: """解析 raise 目标的异常码(内置/用户异常类名);非异常类返回 0""" if exc_node is None: @@ -1871,7 +1871,7 @@ class AsyncGenMixin(CallGenBase.CallGenBase): return self.Gen.ClassGenBase.lookup_exception_code(name) def _resolve_raise_msg(self, builder: llvmlite.IRBuilder | t.CPtr, - pool: rowptr[memhub.MemBuddy], + pool: rawptr[memhub.MemBuddy], mod: llvmlite.LLVMModule | t.CPtr, trans: HT.Translator | t.CPtr, exc_node: ast.AST | t.CPtr) -> llvmlite.Value | t.CPtr: @@ -1889,7 +1889,7 @@ class AsyncGenMixin(CallGenBase.CallGenBase): # ============================================================ def _handle_coro_try(self, trans: HT.Translator | t.CPtr, builder: llvmlite.IRBuilder | t.CPtr, - pool: rowptr[memhub.MemBuddy], + pool: rawptr[memhub.MemBuddy], mod: llvmlite.LLVMModule | t.CPtr, stmt: ast.AST | t.CPtr): """协程内 try/except:raise/await 传播异常在 try 栈内改跳 except 处理器; @@ -2027,7 +2027,7 @@ class AsyncGenMixin(CallGenBase.CallGenBase): llvmlite.build_br(builder, merge_bb) llvmlite.position_at_end(builder, merge_bb) - def _exception_type_name(self, pool: rowptr[memhub.MemBuddy], + def _exception_type_name(self, pool: rawptr[memhub.MemBuddy], type_node: ast.AST | t.CPtr) -> str: """取 except 类型名(Name/Attribute),未命中返回 None""" if type_node is None: @@ -2045,7 +2045,7 @@ class AsyncGenMixin(CallGenBase.CallGenBase): # ============================================================ def _handle_coro_try_finally(self, trans: HT.Translator | t.CPtr, builder: llvmlite.IRBuilder | t.CPtr, - pool: rowptr[memhub.MemBuddy], + pool: rawptr[memhub.MemBuddy], mod: llvmlite.LLVMModule | t.CPtr, stmt: ast.AST | t.CPtr): """协程内 try/finally:正常/异常路径都执行 fbody; @@ -2099,7 +2099,7 @@ class AsyncGenMixin(CallGenBase.CallGenBase): # ============================================================ def _handle_coro_for(self, trans: HT.Translator | t.CPtr, builder: llvmlite.IRBuilder | t.CPtr, - pool: rowptr[memhub.MemBuddy], + pool: rawptr[memhub.MemBuddy], mod: llvmlite.LLVMModule | t.CPtr, stmt: ast.AST | t.CPtr): """range-For(含 await):__f_idx_N = start; __f_len_N = end; @@ -2194,7 +2194,7 @@ class AsyncGenMixin(CallGenBase.CallGenBase): # M3/M4/M7:coro.coro_destroy / coro_exception / coro_exception_msg / coro_gather # ============================================================ def translate_coro_destroy(self, builder: llvmlite.IRBuilder | t.CPtr, - pool: rowptr[memhub.MemBuddy], + pool: rawptr[memhub.MemBuddy], mod: llvmlite.LLVMModule | t.CPtr, cl: ast.Call | t.CPtr, trans: HT.Translator | t.CPtr) -> llvmlite.Value | t.CPtr: @@ -2240,7 +2240,7 @@ class AsyncGenMixin(CallGenBase.CallGenBase): return llvmlite.const_int32(pool, 0) def translate_coro_exception(self, builder: llvmlite.IRBuilder | t.CPtr, - pool: rowptr[memhub.MemBuddy], + pool: rawptr[memhub.MemBuddy], mod: llvmlite.LLVMModule | t.CPtr, cl: ast.Call | t.CPtr, trans: HT.Translator | t.CPtr) -> llvmlite.Value | t.CPtr: @@ -2269,7 +2269,7 @@ class AsyncGenMixin(CallGenBase.CallGenBase): return llvmlite.build_load(builder, i32_ty, exc_ptr) def translate_coro_exception_msg(self, builder: llvmlite.IRBuilder | t.CPtr, - pool: rowptr[memhub.MemBuddy], + pool: rawptr[memhub.MemBuddy], mod: llvmlite.LLVMModule | t.CPtr, cl: ast.Call | t.CPtr, trans: HT.Translator | t.CPtr) -> llvmlite.Value | t.CPtr: @@ -2299,7 +2299,7 @@ class AsyncGenMixin(CallGenBase.CallGenBase): return llvmlite.build_load(builder, i8_ptr_ty, msg_ptr) def translate_coro_gather(self, builder: llvmlite.IRBuilder | t.CPtr, - pool: rowptr[memhub.MemBuddy], + pool: rawptr[memhub.MemBuddy], mod: llvmlite.LLVMModule | t.CPtr, cl: ast.Call | t.CPtr, trans: HT.Translator | t.CPtr) -> llvmlite.Value | t.CPtr: @@ -2366,7 +2366,7 @@ class AsyncGenMixin(CallGenBase.CallGenBase): # await 表达式翻译(顶层段尾 / translate_value Await 分支共用) # ============================================================ def _emit_await(self, builder: llvmlite.IRBuilder | t.CPtr, - pool: rowptr[memhub.MemBuddy], + pool: rawptr[memhub.MemBuddy], mod: llvmlite.LLVMModule | t.CPtr, trans: HT.Translator | t.CPtr, node: ast.AST | t.CPtr, @@ -2501,7 +2501,7 @@ class AsyncGenMixin(CallGenBase.CallGenBase): # coro.coro_run(帧) 内联翻译 # ============================================================ def translate_coro_run(self, builder: llvmlite.IRBuilder | t.CPtr, - pool: rowptr[memhub.MemBuddy], + pool: rawptr[memhub.MemBuddy], mod: llvmlite.LLVMModule | t.CPtr, cl: ast.Call | t.CPtr, trans: HT.Translator | t.CPtr) -> llvmlite.Value | t.CPtr: @@ -2729,7 +2729,7 @@ class AsyncGenMixin(CallGenBase.CallGenBase): # 段翻译辅助 # ============================================================ def _emit_coro_return(self, builder: llvmlite.IRBuilder | t.CPtr, - pool: rowptr[memhub.MemBuddy], + pool: rawptr[memhub.MemBuddy], mod: llvmlite.LLVMModule | t.CPtr, trans: HT.Translator | t.CPtr, stmt: ast.AST | t.CPtr) -> None: diff --git a/App/lib/core/Gen/BaseGenMixin.vp b/App/lib/core/Gen/BaseGenMixin.vp index 991e724..89bbce1 100644 --- a/App/lib/core/Gen/BaseGenMixin.vp +++ b/App/lib/core/Gen/BaseGenMixin.vp @@ -15,7 +15,7 @@ class BaseGenMixin: # 内存/IR 状态 Gen: Generator.Generator | t.CPtr - Pool: rowptr[memhub.MemBuddy] # 内存池 + Pool: rawptr[memhub.MemBuddy] # 内存池 Module: llvmlite.LLVMModule | t.CPtr # 当前 LLVM 模块 Builder: llvmlite.IRBuilder | t.CPtr # 当前 IRBuilder # 符号表/函数表 @@ -31,7 +31,7 @@ class BaseGenMixin: CurBuilder: llvmlite.IRBuilder | t.CPtr CurClassName: str - def InitBaseGen(self, pool: rowptr[memhub.MemBuddy]) -> int: + def InitBaseGen(self, pool: rawptr[memhub.MemBuddy]) -> int: """初始化生成器状态(默认值;子类构造时调用)""" if self is None: return 1 diff --git a/App/lib/core/Gen/Call/CallGenBase.vp b/App/lib/core/Gen/Call/CallGenBase.vp index 609be8d..cf982d4 100644 --- a/App/lib/core/Gen/Call/CallGenBase.vp +++ b/App/lib/core/Gen/Call/CallGenBase.vp @@ -143,7 +143,7 @@ class CallGenBase: return StubMergerStore.LookupSha1ByModNameSuffix(mod_suffix) - def _module_package_from_sha1(self, pool: rowptr[memhub.MemBuddy], + def _module_package_from_sha1(self, pool: rawptr[memhub.MemBuddy], mod_sha1: str) -> str: """从 SHA1 存储器的 rel_path 计算模块所属包名(目录部分,'/' → '.')""" if pool is None or mod_sha1 is None: @@ -178,7 +178,7 @@ class CallGenBase: return None - def _lookup_reexport_from_vpi(self, pool: rowptr[memhub.MemBuddy], + def _lookup_reexport_from_vpi(self, pool: rawptr[memhub.MemBuddy], mod_sha1: str, func_name: str) -> str: """re-export 表未命中时,从模块 .vpi 按需解析 from-import 定位定义模块 @@ -205,7 +205,7 @@ class CallGenBase: if buf is None: stdlib.free(vpi_path) return None - vf: rowptr[fileio.File] = fileio.File(vpi_path, fileio.MODE.R) + vf: rawptr[fileio.File] = fileio.File(vpi_path, fileio.MODE.R) stdlib.free(vpi_path) if vf.closed: stdlib.free(buf) @@ -437,7 +437,7 @@ class CallGenBase: return 0 - def _is_state_func_from_vpi(self, pool: rowptr[memhub.MemBuddy], + def _is_state_func_from_vpi(self, pool: rawptr[memhub.MemBuddy], sha1: str, func_name: str) -> int: """vpi 返回注解含 t.State → 外部 C 函数(定义端用裸名,跨模块调用无 sha1 头) @@ -459,7 +459,7 @@ class CallGenBase: return 0 - def _lookup_mod_sha1(self, pool: rowptr[memhub.MemBuddy], + def _lookup_mod_sha1(self, pool: rawptr[memhub.MemBuddy], from_imports: str, class_name: str, allow_star_fallback: int = 1) -> str: """从 from_imports 查找类所属模块的 SHA1,返回 None=未找到 @@ -473,7 +473,7 @@ class CallGenBase: return self._lookup_sha1_from_modname_raw(pool, mod_name_raw) - def _lookup_sha1_from_modname_raw(self, pool: rowptr[memhub.MemBuddy], + def _lookup_sha1_from_modname_raw(self, pool: rawptr[memhub.MemBuddy], mod_name_raw: str) -> str: """从原始模块名查找 SHA1,返回 None=未找到""" # 手动找到模块名结束位置(空格、null、或 ':' 别名分隔符),复制到新缓冲区 @@ -578,7 +578,7 @@ class CallGenBase: # _ensure_method_declare:found_func 为 None(stub 未注入或跨模块调用)时在当前模块创建 declare,避免 llc 报 undefined value - def _ensure_method_declare(self, pool: rowptr[memhub.MemBuddy], + def _ensure_method_declare(self, pool: rawptr[memhub.MemBuddy], mod: llvmlite.LLVMModule | t.CPtr, call_name: str, ret_ty: llvmlite.LLVMType | t.CPtr, @@ -721,7 +721,7 @@ class CallGenBase: # _lookup_method_ret_ty_via_vpi:按 模块SHA1 + 类名 + 方法名 查 vpi 返回注解缓存并解析为 LLVMType,未命中返回 None(不硬编码白名单,类型始终来自定义处) # ============================================================ - def _lookup_method_ret_ty_via_vpi(self, pool: rowptr[memhub.MemBuddy], + def _lookup_method_ret_ty_via_vpi(self, pool: rawptr[memhub.MemBuddy], cls_sha1: str, cls_name: str, method_name: str) -> llvmlite.LLVMType | t.CPtr: @@ -741,7 +741,7 @@ class CallGenBase: return VpiReader._resolve_vpi_ret_annot_str(pool, annot, i32_ty, i8_ptr_ty) # _vpi_method_param_annot:按需加载并查询 vpi 参数注解串('@' 分隔,含首参 self 空串占位),供调用方补全 declare/call 缺失参数;未命中返回 None - def _vpi_method_param_annot(self, pool: rowptr[memhub.MemBuddy], + def _vpi_method_param_annot(self, pool: rawptr[memhub.MemBuddy], cls_sha1: str, cls_name: str, method_name: str) -> str: @@ -754,7 +754,7 @@ class CallGenBase: return VpiReader._lookup_vpi_param_annots(cls_sha1, cls_name, method_name) # _vpi_resolve_param_annot_ty:解析 vpi 参数注解段为 LLVMType,失败返回 None(调用方以 i8* 兜底) - def _vpi_resolve_param_annot_ty(self, pool: rowptr[memhub.MemBuddy], + def _vpi_resolve_param_annot_ty(self, pool: rawptr[memhub.MemBuddy], seg: str) -> llvmlite.LLVMType | t.CPtr: """解析单个 vpi 参数注解段为 LLVMType,失败返回 None""" if pool is None or seg is None: @@ -766,7 +766,7 @@ class CallGenBase: # _special_method_ret_ty:编译器内置特殊方法的固定返回类型——__before_init__/__init__ → void,__new__ → Ptr(StructTy),非特殊返回 None(vpi 无条目,固定即可避免 fail-fast 误报) # ============================================================ - def _special_method_ret_ty(self, pool: rowptr[memhub.MemBuddy], + def _special_method_ret_ty(self, pool: rawptr[memhub.MemBuddy], class_name: str, method_name: str) -> llvmlite.LLVMType | t.CPtr: """编译器内置特殊方法的固定返回类型;非特殊返回 None""" @@ -818,7 +818,7 @@ class CallGenBase: # _ParseLLVMRetTyStr:把 LLVM IR 返回类型字符串(define 与 @ 之间)转为 LLVMType——void / iN / double / float,含 * 者返回通用 Ptr(Int8);无法解析返回 None # ============================================================ - def _ParseLLVMRetTyStr(self, pool: rowptr[memhub.MemBuddy], + def _ParseLLVMRetTyStr(self, pool: rawptr[memhub.MemBuddy], buf: bytes, start: sizet, end: sizet) -> llvmlite.LLVMType | t.CPtr: @@ -969,7 +969,7 @@ class CallGenBase: """登记 text.ll 全部 define 行到持久缓存(建表/分配失败即不缓存,回退原扫描)""" if self.Gen is None or class_sha1 is None or text_buf is None or text_len == 0: return - perm: rowptr[memhub.MemBuddy] = CompilerFactory.factory.PermPool + perm: rawptr[memhub.MemBuddy] = CompilerFactory.factory.PermPool if perm is None: return ht: hashtable.HashTable | t.CPtr = self.Gen.CallGenBase.MethodRetTyMap @@ -1039,7 +1039,7 @@ class CallGenBase: # _LookupMethodRetTyFromTextLL:读取 {temp_dir}/{sha1[0:2]}/{sha1}.text.ll (level=1),按 "{sha1}.{class_name}.{method_name}" 搜索 define 行并解析返回类型;未找到/文件不存在返回 None # ============================================================ - def _LookupMethodRetTyFromTextLL(self, pool: rowptr[memhub.MemBuddy], + def _LookupMethodRetTyFromTextLL(self, pool: rawptr[memhub.MemBuddy], class_sha1: str, class_name: str, method_name: str, @@ -1082,7 +1082,7 @@ class CallGenBase: stdlib.free(subdir_buf) # 按文件实际大小读取 text.ll(固定缓冲区会截断大模块导致末尾定义查不到);64MB 上限防御异常超大文件 - tf: rowptr[fileio.File] = fileio.File(path_buf, fileio.MODE.R) + tf: rawptr[fileio.File] = fileio.File(path_buf, fileio.MODE.R) if tf.closed: stdlib.free(path_buf) return None @@ -1179,7 +1179,7 @@ class CallGenBase: # _dep_text_ll_exists:探测 {temp_dir}/{sha1[0:2]}/{sha1}.text.ll 是否存在(1=存在),用于区分「依赖已编译但函数缺失」与「依赖模块尚未翻译」 # ============================================================ - def _dep_text_ll_exists(self, pool: rowptr[memhub.MemBuddy], + def _dep_text_ll_exists(self, pool: rawptr[memhub.MemBuddy], sha1: str) -> int: """探测 {temp_dir}/{sha1[0:2]}/{sha1}.text.ll 是否存在,1=存在""" if self.Gen.CallGenBase.TempDir is None or self.Gen.CallGenBase.TempDirLen == 0 or sha1 is None: diff --git a/App/lib/core/Gen/Call/CallGenCBuiltin.vp b/App/lib/core/Gen/Call/CallGenCBuiltin.vp index ec1611c..bf86bbe 100644 --- a/App/lib/core/Gen/Call/CallGenCBuiltin.vp +++ b/App/lib/core/Gen/Call/CallGenCBuiltin.vp @@ -82,7 +82,7 @@ class CallGenCBuiltin(CallGenBase.CallGenBase): """c.* 内建 + 内联汇编 + LLVMIR 翻译(继承 Base)""" - def translate_c_deref(self, pool: rowptr[memhub.MemBuddy], + def translate_c_deref(self, pool: rawptr[memhub.MemBuddy], builder: llvmlite.IRBuilder | t.CPtr, mod: llvmlite.LLVMModule | t.CPtr, cl: ast.Call | t.CPtr, @@ -151,7 +151,7 @@ class CallGenCBuiltin(CallGenBase.CallGenBase): return None - def translate_c_derefas(self, pool: rowptr[memhub.MemBuddy], + def translate_c_derefas(self, pool: rawptr[memhub.MemBuddy], builder: llvmlite.IRBuilder | t.CPtr, mod: llvmlite.LLVMModule | t.CPtr, cl: ast.Call | t.CPtr, @@ -213,7 +213,7 @@ class CallGenCBuiltin(CallGenBase.CallGenBase): return val - def translate_c_set(self, pool: rowptr[memhub.MemBuddy], + def translate_c_set(self, pool: rawptr[memhub.MemBuddy], builder: llvmlite.IRBuilder | t.CPtr, mod: llvmlite.LLVMModule | t.CPtr, cl: ast.Call | t.CPtr, @@ -337,7 +337,7 @@ class CallGenCBuiltin(CallGenBase.CallGenBase): return b_val - def translate_c_addr(self, pool: rowptr[memhub.MemBuddy], + def translate_c_addr(self, pool: rawptr[memhub.MemBuddy], builder: llvmlite.IRBuilder | t.CPtr, mod: llvmlite.LLVMModule | t.CPtr, cl: ast.Call | t.CPtr, @@ -640,7 +640,7 @@ class CallGenCBuiltin(CallGenBase.CallGenBase): return None - def translate_c_load(self, pool: rowptr[memhub.MemBuddy], + def translate_c_load(self, pool: rawptr[memhub.MemBuddy], builder: llvmlite.IRBuilder | t.CPtr, mod: llvmlite.LLVMModule | t.CPtr, cl: ast.Call | t.CPtr, @@ -702,7 +702,7 @@ class CallGenCBuiltin(CallGenBase.CallGenBase): dst[dlen + i] = '\0' - def _asm_mangle_global_symbols(self, pool: rowptr[memhub.MemBuddy], + def _asm_mangle_global_symbols(self, pool: rawptr[memhub.MemBuddy], asm_text: str, asm_size: sizet, mod: llvmlite.LLVMModule | t.CPtr) -> str: """asm 模板中裸符号引用模块全局的检查(fail-fast) @@ -774,7 +774,7 @@ class CallGenCBuiltin(CallGenBase.CallGenBase): return out - def _asm_escape_for_ir(self, pool: rowptr[memhub.MemBuddy], + def _asm_escape_for_ir(self, pool: rawptr[memhub.MemBuddy], src: str) -> str: """转义汇编文本用于 LLVM IR 字符串字面量""" if src is None: @@ -909,7 +909,7 @@ class CallGenCBuiltin(CallGenBase.CallGenBase): return "" - def _resolve_asm_descr(self, pool: rowptr[memhub.MemBuddy], + def _resolve_asm_descr(self, pool: rawptr[memhub.MemBuddy], node: ast.AST | t.CPtr) -> str: """递归解析约束表达式,返回约束字符串""" if node is None: @@ -1054,7 +1054,7 @@ class CallGenCBuiltin(CallGenBase.CallGenBase): return count + 1 - def translate_c_asm(self, pool: rowptr[memhub.MemBuddy], + def translate_c_asm(self, pool: rawptr[memhub.MemBuddy], builder: llvmlite.IRBuilder | t.CPtr, mod: llvmlite.LLVMModule | t.CPtr, cl: ast.Call | t.CPtr, @@ -1684,7 +1684,7 @@ class CallGenCBuiltin(CallGenBase.CallGenBase): return None - def translate_c_llvmir(self, pool: rowptr[memhub.MemBuddy], + def translate_c_llvmir(self, pool: rawptr[memhub.MemBuddy], builder: llvmlite.IRBuilder | t.CPtr, mod: llvmlite.LLVMModule | t.CPtr, cl: ast.Call | t.CPtr, diff --git a/App/lib/core/Gen/Call/CallGenCall.vp b/App/lib/core/Gen/Call/CallGenCall.vp index 5a2e153..de8384e 100644 --- a/App/lib/core/Gen/Call/CallGenCall.vp +++ b/App/lib/core/Gen/Call/CallGenCall.vp @@ -39,7 +39,7 @@ class CallGenCall(CallGenBase.CallGenBase): # ============================================================ # ============================================================ - def _do_virtual_call(self, pool: rowptr[memhub.MemBuddy], + def _do_virtual_call(self, pool: rawptr[memhub.MemBuddy], builder: llvmlite.IRBuilder | t.CPtr, mod: llvmlite.LLVMModule | t.CPtr, class_name: str, @@ -212,7 +212,7 @@ class CallGenCall(CallGenBase.CallGenBase): # ============================================================ # ============================================================ - def _call_method_on_ptr(self, pool: rowptr[memhub.MemBuddy], + def _call_method_on_ptr(self, pool: rawptr[memhub.MemBuddy], builder: llvmlite.IRBuilder | t.CPtr, mod: llvmlite.LLVMModule | t.CPtr, class_name: str, @@ -673,7 +673,7 @@ class CallGenCall(CallGenBase.CallGenBase): # ============================================================ # ============================================================ - def _translate_method_call(self, pool: rowptr[memhub.MemBuddy], + def _translate_method_call(self, pool: rawptr[memhub.MemBuddy], builder: llvmlite.IRBuilder | t.CPtr, mod: llvmlite.LLVMModule | t.CPtr, class_name: str, @@ -709,7 +709,7 @@ class CallGenCall(CallGenBase.CallGenBase): # 真实 list 命中不变;非容器不命中;实际类型不可得回退 lb_cls。 if self.Gen.CallGenProp._is_list_builtin_receiver( pool, obj_ptr, lb_cls, method_name, cl) != 0: - # 双指针槽形态(rowptr[list[...]] 局部变量 alloca Ptr(Ptr(Struct)) + # 双指针槽形态(rawptr[list[...]] 局部变量 alloca Ptr(Ptr(Struct)) # 直接传入时先 load 一层得到对象指针 Ptr(Struct),与分派方 # _translate_method_call 调用点的 obj_ptr 语义一致)。 lb_obj: llvmlite.Value | t.CPtr = obj_ptr @@ -772,7 +772,7 @@ class CallGenCall(CallGenBase.CallGenBase): # 构造方法查找名: ClassName.method_name # [D6·截断纪律] 缓冲按精确长度分配(class_name 现可能取实际特化名,长度不定): - # 固定 128 会在嵌套泛型名(如 list[rowptr[sha.AST]])下静默截断 → 查错/漏查。 + # 固定 128 会在嵌套泛型名(如 list[rawptr[sha.AST]])下静默截断 → 查错/漏查。 lk_cap: sizet = string.strlen(class_name) + string.strlen(method_name) + 2 lookup_name: str = pool.alloc(lk_cap) if lookup_name is None: @@ -1683,7 +1683,7 @@ class CallGenCall(CallGenBase.CallGenBase): # 翻译,绝不生成对 list 方法函数的跨模块调用(list 方法无对应 C 函数)。 # lm_obj 必须是已 load 的 list 对象指针 Ptr(list-struct)。 # ============================================================ - def _translate_list_builtin_call(self, pool: rowptr[memhub.MemBuddy], + def _translate_list_builtin_call(self, pool: rawptr[memhub.MemBuddy], builder: llvmlite.IRBuilder | t.CPtr, mod: llvmlite.LLVMModule | t.CPtr, cl: ast.Call | t.CPtr, @@ -1903,7 +1903,7 @@ class CallGenCall(CallGenBase.CallGenBase): # ============================================================ # ============================================================ - def _translate_super_call(self, pool: rowptr[memhub.MemBuddy], + def _translate_super_call(self, pool: rawptr[memhub.MemBuddy], builder: llvmlite.IRBuilder | t.CPtr, mod: llvmlite.LLVMModule | t.CPtr, cl: ast.Call | t.CPtr, @@ -2127,7 +2127,7 @@ class CallGenCall(CallGenBase.CallGenBase): # ============================================================ # ============================================================ - def _field_byte_offset(self, pool: rowptr[memhub.MemBuddy], + def _field_byte_offset(self, pool: rawptr[memhub.MemBuddy], entry: GenTypes.StructEntry | t.CPtr, field_index: int) -> int: """计算字段在结构体中的字节偏移(含对齐 padding),无法计算返回 0""" diff --git a/App/lib/core/Gen/Call/CallGenCtor.vp b/App/lib/core/Gen/Call/CallGenCtor.vp index 29d29c0..37f80ae 100644 --- a/App/lib/core/Gen/Call/CallGenCtor.vp +++ b/App/lib/core/Gen/Call/CallGenCtor.vp @@ -32,7 +32,7 @@ class CallGenCtor(CallGenBase.CallGenBase): # 遍历所有字段,对有默认值的字段翻译并 store # 显式参数(位置/关键字)后续会覆盖默认值 # ============================================================ - def _apply_struct_defaults(self, pool: rowptr[memhub.MemBuddy], + def _apply_struct_defaults(self, pool: rawptr[memhub.MemBuddy], builder: llvmlite.IRBuilder | t.CPtr, mod: llvmlite.LLVMModule | t.CPtr, struct_ty: llvmlite.LLVMType | t.CPtr, @@ -106,7 +106,7 @@ class CallGenCtor(CallGenBase.CallGenBase): # ============================================================ # ============================================================ - def _translate_struct_ctor(self, pool: rowptr[memhub.MemBuddy], + def _translate_struct_ctor(self, pool: rawptr[memhub.MemBuddy], builder: llvmlite.IRBuilder | t.CPtr, mod: llvmlite.LLVMModule | t.CPtr, struct_ty: llvmlite.LLVMType | t.CPtr, @@ -355,7 +355,7 @@ class CallGenCtor(CallGenBase.CallGenBase): # ============================================================ # ============================================================ - def _translate_renum_construct(self, pool: rowptr[memhub.MemBuddy], + def _translate_renum_construct(self, pool: rawptr[memhub.MemBuddy], builder: llvmlite.IRBuilder | t.CPtr, mod: llvmlite.LLVMModule | t.CPtr, class_name: str, @@ -457,7 +457,7 @@ class CallGenCtor(CallGenBase.CallGenBase): # ============================================================ # ============================================================ - def _translate_struct_ctor_kw(self, pool: rowptr[memhub.MemBuddy], + def _translate_struct_ctor_kw(self, pool: rawptr[memhub.MemBuddy], builder: llvmlite.IRBuilder | t.CPtr, mod: llvmlite.LLVMModule | t.CPtr, struct_ty: llvmlite.LLVMType | t.CPtr, @@ -690,7 +690,7 @@ class CallGenCtor(CallGenBase.CallGenBase): # ============================================================ # ============================================================ - def _translate_t_type_cast(self, pool: rowptr[memhub.MemBuddy], + def _translate_t_type_cast(self, pool: rawptr[memhub.MemBuddy], builder: llvmlite.IRBuilder | t.CPtr, val: llvmlite.Value | t.CPtr, target_ty: llvmlite.LLVMType | t.CPtr, @@ -768,7 +768,7 @@ class CallGenCtor(CallGenBase.CallGenBase): # _get_type_name_from_annotation 已移至 HandlesType.py(支持 BinOp/Attribute) # HandlesExprCall 通过 HandlesType._get_type_name_from_annotation 调用 - def _extract_type_args_from_slice(self, pool: rowptr[memhub.MemBuddy], + def _extract_type_args_from_slice(self, pool: rawptr[memhub.MemBuddy], slice_node: ast.AST | t.CPtr, from_imports: str = None) -> list[str] | t.CPtr: """从 Subscript.slice 提取类型实参名列表 @@ -810,7 +810,7 @@ class CallGenCtor(CallGenBase.CallGenBase): # 泛型类构造调用辅助 list[str](pool, 8):复用 translate_list_literal 的构造逻辑——alloca tmp → 翻译 cl.args 为参数指针数组 → __new__(tmp,*args) → __before_init__ → __init__ → 返回 storage_ptr。必须独立于 translate_call 普通函数路径:spec_name 是类名不是函数名,走裸名会被 _lookup_mod_sha1 的 star import 回退误导 # ============================================================ - def _infer_generic_ctor_type_arg(self, pool: rowptr[memhub.MemBuddy], + def _infer_generic_ctor_type_arg(self, pool: rawptr[memhub.MemBuddy], arg_node: ast.AST | t.CPtr, class_name: str, trans: HT.Translator | t.CPtr) -> str: @@ -1069,7 +1069,7 @@ class CallGenCtor(CallGenBase.CallGenBase): return int(ki_kw) return -1 - def _infer_ctor_type_args_from_ctx(self, pool: rowptr[memhub.MemBuddy], + def _infer_ctor_type_args_from_ctx(self, pool: rawptr[memhub.MemBuddy], trans: HT.Translator | t.CPtr, class_name: str, tp_count: int, @@ -1133,7 +1133,7 @@ class CallGenCtor(CallGenBase.CallGenBase): return None return type_args_ctx - def _translate_generic_ctor_call(self, pool: rowptr[memhub.MemBuddy], + def _translate_generic_ctor_call(self, pool: rawptr[memhub.MemBuddy], builder: llvmlite.IRBuilder | t.CPtr, mod: llvmlite.LLVMModule | t.CPtr, spec_name: str, diff --git a/App/lib/core/Gen/Call/CallGenDispatch.vp b/App/lib/core/Gen/Call/CallGenDispatch.vp index 209ba3f..ad0217d 100644 --- a/App/lib/core/Gen/Call/CallGenDispatch.vp +++ b/App/lib/core/Gen/Call/CallGenDispatch.vp @@ -33,7 +33,7 @@ import lib.core.Gen.GenApi as GenApi class CallGenDispatch(CallGenBase.CallGenBase): """translate_call 前置检测 helper(继承 Base)""" - def _tc_h1_super_ctraits(self, pool: rowptr[memhub.MemBuddy], + def _tc_h1_super_ctraits(self, pool: rawptr[memhub.MemBuddy], builder: llvmlite.IRBuilder | t.CPtr, mod: llvmlite.LLVMModule | t.CPtr, cl: ast.Call | t.CPtr, @@ -89,7 +89,7 @@ class CallGenDispatch(CallGenBase.CallGenBase): return llvmlite.const_int32(pool, 0) return None - def _tc_h2_c_special(self, pool: rowptr[memhub.MemBuddy], + def _tc_h2_c_special(self, pool: rawptr[memhub.MemBuddy], builder: llvmlite.IRBuilder | t.CPtr, mod: llvmlite.LLVMModule | t.CPtr, cl: ast.Call | t.CPtr, @@ -193,7 +193,7 @@ class CallGenDispatch(CallGenBase.CallGenBase): builder, pool, mod, cl, trans) return None - def _tc_h3_stdarg_cast(self, pool: rowptr[memhub.MemBuddy], + def _tc_h3_stdarg_cast(self, pool: rawptr[memhub.MemBuddy], builder: llvmlite.IRBuilder | t.CPtr, mod: llvmlite.LLVMModule | t.CPtr, cl: ast.Call | t.CPtr, @@ -282,7 +282,7 @@ class CallGenDispatch(CallGenBase.CallGenBase): return None return None - def _tc_h4_type_casts(self, pool: rowptr[memhub.MemBuddy], + def _tc_h4_type_casts(self, pool: rawptr[memhub.MemBuddy], builder: llvmlite.IRBuilder | t.CPtr, mod: llvmlite.LLVMModule | t.CPtr, cl: ast.Call | t.CPtr, @@ -550,7 +550,7 @@ class CallGenDispatch(CallGenBase.CallGenBase): return None - def _tc_h5_sizeof_len_isinst(self, pool: rowptr[memhub.MemBuddy], + def _tc_h5_sizeof_len_isinst(self, pool: rawptr[memhub.MemBuddy], builder: llvmlite.IRBuilder | t.CPtr, mod: llvmlite.LLVMModule | t.CPtr, cl: ast.Call | t.CPtr, @@ -625,14 +625,14 @@ class CallGenDispatch(CallGenBase.CallGenBase): break sz_resolved_name = sz_cls_name # 指针包装类型检查必须在 dot-strip 之前:类型实参可能带 sha1 - # 前缀内嵌点号(rowptr[7565e081d88517ac.AST]、f4679...AST|t.CPtr), + # 前缀内嵌点号(rawptr[7565e081d88517ac.AST]、f4679...AST|t.CPtr), # strrchr('.') 会把括号内 ".AST"/".CPtr" 剥掉 → "AST]"/"CPtr", # 前缀/联合判断永远失配 → 落回把接收者 Name(T) 当实例翻译 → - # NameError: 未定义名称 'T'(SlotsBugTest rowptr[list[rowptr[AST]]] 根因)。 - # 联合类型(X | t.CPtr)与新一代指针包装 rowptr[X] 均按指针大小 8。 + # NameError: 未定义名称 'T'(SlotsBugTest rawptr[list[rawptr[AST]]] 根因)。 + # 联合类型(X | t.CPtr)与新一代指针包装 rawptr[X] 均按指针大小 8。 if string.strstr(sz_cls_name, "|") is not None: return llvmlite.const_int64(pool, 8) - if string.strncmp(sz_cls_name, "rowptr[", 7) == 0: + if string.strncmp(sz_cls_name, "rawptr[", 7) == 0: return llvmlite.const_int64(pool, 8) # 保存完整名(含模块前缀)供模块归属精确匹配:去前缀后 # get_struct_type 裸名全局匹配会误命中跨模块同名类 @@ -1002,7 +1002,7 @@ class CallGenDispatch(CallGenBase.CallGenBase): return None - def _tc_h6_method_dispatch(self, pool: rowptr[memhub.MemBuddy], + def _tc_h6_method_dispatch(self, pool: rawptr[memhub.MemBuddy], builder: llvmlite.IRBuilder | t.CPtr, mod: llvmlite.LLVMModule | t.CPtr, cl: ast.Call | t.CPtr, @@ -1226,14 +1226,14 @@ class CallGenDispatch(CallGenBase.CallGenBase): obj_var: llvmlite.Value | t.CPtr = self.Gen.VarGen.lookup_var( trans.SymTab, method_obj_nm.id) if obj_var is not None and obj_var.Ty is not None: - # list 泛型容器注解先行识别(早期拦截,供下方各 class 分支共用):rowptr[list[rowptr[AST]]] 的 LLVM 形态为 Ptr(Ptr(Struct('list[sha.AST]'))),而 list 特化 struct 不注册为普通类,get_class_name_by_type 或返回 None、或后缀误命中内层元素类 ⇒ 下方两个 Ptr 分支的 list 内置拦截落空/错判。此处再兜底剥一次最外层 rowptr,内层以 'list' 开头且方法属 list 内置集合时置位 is_list_annot_builtin,交给本方法尾部 list 内置分支(内联 GEP)翻译 + # list 泛型容器注解先行识别(早期拦截,供下方各 class 分支共用):rawptr[list[rawptr[AST]]] 的 LLVM 形态为 Ptr(Ptr(Struct('list[sha.AST]'))),而 list 特化 struct 不注册为普通类,get_class_name_by_type 或返回 None、或后缀误命中内层元素类 ⇒ 下方两个 Ptr 分支的 list 内置拦截落空/错判。此处再兜底剥一次最外层 rawptr,内层以 'list' 开头且方法属 list 内置集合时置位 is_list_annot_builtin,交给本方法尾部 list 内置分支(内联 GEP)翻译 var_entry: GenTypes.VarEntry | t.CPtr = self.Gen.VarGen.lookup_var_entry( trans.SymTab, method_obj_nm.id) is_list_annot_builtin: int = 0 la_buf: str = self.Gen.VarGen.var_annot_class_name(var_entry) if la_buf is not None: la_tail: str = la_buf - if string.strncmp(la_buf, "rowptr[", 7) == 0: + if string.strncmp(la_buf, "rawptr[", 7) == 0: la_tail = la_buf + 7 if string.strncmp(la_tail, "list", 4) == 0: if self.Gen.CallGenProp._is_list_builtin_receiver( @@ -1298,7 +1298,7 @@ class CallGenDispatch(CallGenBase.CallGenBase): # list 注解识别处查得,同一变量表项)。 # list 容器注解命中(is_list_annot_builtin=1)时跳过本回退: # 本回退的"剥模块前缀"会按内层元素 '.'(如 - # list[rowptr[sha.AST]])把类名错切为 'AST]]' 垃圾 → 下方 + # list[rawptr[sha.AST]])把类名错切为 'AST]]' 垃圾 → 下方 # _is_list_builtin_method 前缀匹配不中 → 误走 FakeDuck/sha1 # 方法构造 → _translate_method_call MRO fatal。list 调用由 # 尾部 list 内置分支统一翻译。 diff --git a/App/lib/core/Gen/Call/CallGenFd.vp b/App/lib/core/Gen/Call/CallGenFd.vp index 6aa3124..74615cc 100644 --- a/App/lib/core/Gen/Call/CallGenFd.vp +++ b/App/lib/core/Gen/Call/CallGenFd.vp @@ -26,7 +26,7 @@ class CallGenFd(CallGenBase.CallGenBase): # _translate_fakeduck_call:FakeDuck str 变量方法调用 → 扩展类 _Type/_str(对齐 TPC HandlesExprCall.py L2841-2880)。对象是 Name 且有影子({var}__meta__)时 self=影子;否则在入口创建临时影子(__data__=obj 值、__mbuddy__=NULL)后作 self,避免 bitcast i8* → _str* 读垃圾指针 # ============================================================ - def _translate_fakeduck_call(self, pool: rowptr[memhub.MemBuddy], + def _translate_fakeduck_call(self, pool: rawptr[memhub.MemBuddy], builder: llvmlite.IRBuilder | t.CPtr, mod: llvmlite.LLVMModule | t.CPtr, cls_name: str, @@ -189,7 +189,7 @@ class CallGenFd(CallGenBase.CallGenBase): # ============================================================ def _inject_requires_fields(self, trans: HT.Translator | t.CPtr, - pool: rowptr[memhub.MemBuddy], + pool: rawptr[memhub.MemBuddy], builder: llvmlite.IRBuilder | t.CPtr, mod: llvmlite.LLVMModule | t.CPtr, meta_ptr: llvmlite.Value | t.CPtr, @@ -300,7 +300,7 @@ class CallGenFd(CallGenBase.CallGenBase): # ============================================================ def _emit_provider_push(self, trans: HT.Translator | t.CPtr, - pool: rowptr[memhub.MemBuddy], + pool: rawptr[memhub.MemBuddy], builder: llvmlite.IRBuilder | t.CPtr, mod: llvmlite.LLVMModule | t.CPtr, cls_name: str, @@ -353,7 +353,7 @@ class CallGenFd(CallGenBase.CallGenBase): llvmlite.build_call(builder, fd_pfn, fd_fstr, 2, ret_i32_p, 0) return fd_pc def _emit_provider_pop(self, trans: HT.Translator | t.CPtr, - pool: rowptr[memhub.MemBuddy], + pool: rawptr[memhub.MemBuddy], builder: llvmlite.IRBuilder | t.CPtr, mod: llvmlite.LLVMModule | t.CPtr, cls_name: str) -> int: diff --git a/App/lib/core/Gen/Call/CallGenLeafKit.vp b/App/lib/core/Gen/Call/CallGenLeafKit.vp index a5093dc..eb527fa 100644 --- a/App/lib/core/Gen/Call/CallGenLeafKit.vp +++ b/App/lib/core/Gen/Call/CallGenLeafKit.vp @@ -169,7 +169,7 @@ class CallGenLeafKit(CallGenCBuiltin.CallGenCBuiltin): # ============================================================ def _emit_eh_guarded_call(self, builder: llvmlite.IRBuilder | t.CPtr, - pool: rowptr[memhub.MemBuddy], + pool: rawptr[memhub.MemBuddy], mod: llvmlite.LLVMModule | t.CPtr, trans: HT.Translator | t.CPtr, func: llvmlite.Function | t.CPtr, @@ -293,7 +293,7 @@ class CallGenLeafKit(CallGenCBuiltin.CallGenCBuiltin): - def _translate_isinstance(self, pool: rowptr[memhub.MemBuddy], + def _translate_isinstance(self, pool: rawptr[memhub.MemBuddy], builder: llvmlite.IRBuilder | t.CPtr, mod: llvmlite.LLVMModule | t.CPtr, obj_node: ast.AST | t.CPtr, @@ -378,7 +378,7 @@ class CallGenLeafKit(CallGenCBuiltin.CallGenCBuiltin): return res - def _extract_isinstance_class_names(self, pool: rowptr[memhub.MemBuddy], + def _extract_isinstance_class_names(self, pool: rawptr[memhub.MemBuddy], node: ast.AST | t.CPtr) -> sizet | t.CPtr: """从 isinstance 第二参数提取类名数组(Name→id / Attribute→attr / Tuple→遍历)""" arr: sizet | t.CPtr = pool.alloc(8 * 16) @@ -426,7 +426,7 @@ class CallGenLeafKit(CallGenCBuiltin.CallGenCBuiltin): return arr - def _collect_subclass_vtable_classes(self, pool: rowptr[memhub.MemBuddy], + def _collect_subclass_vtable_classes(self, pool: rawptr[memhub.MemBuddy], class_name: str) -> sizet | t.CPtr: """反向 BFS 收集目标类及全部子类(含自身,仅 HasVTable==1),返回 0 结尾数组""" if class_name is None: @@ -491,7 +491,7 @@ class CallGenLeafKit(CallGenCBuiltin.CallGenCBuiltin): return names - def _make_vtable_ref_i8(self, pool: rowptr[memhub.MemBuddy], + def _make_vtable_ref_i8(self, pool: rawptr[memhub.MemBuddy], builder: llvmlite.IRBuilder | t.CPtr, mod: llvmlite.LLVMModule | t.CPtr, class_name: str, @@ -538,7 +538,7 @@ class CallGenLeafKit(CallGenCBuiltin.CallGenCBuiltin): return llvmlite.build_bitcast(builder, ref, i8_ptr_ty) - def _isinstance_compile_time(self, pool: rowptr[memhub.MemBuddy], + def _isinstance_compile_time(self, pool: rawptr[memhub.MemBuddy], obj_ptr: llvmlite.Value | t.CPtr, class_name: str) -> int: """编译时静态判断:obj 静态类型 == class_name 或 class_name 在其 MRO 中""" @@ -570,7 +570,7 @@ class CallGenLeafKit(CallGenCBuiltin.CallGenCBuiltin): - def translate_closure_call(self, pool: rowptr[memhub.MemBuddy], + def translate_closure_call(self, pool: rawptr[memhub.MemBuddy], builder: llvmlite.IRBuilder | t.CPtr, mod: llvmlite.LLVMModule | t.CPtr, closure_alloca: llvmlite.Value | t.CPtr, @@ -739,7 +739,7 @@ class CallGenLeafKit(CallGenCBuiltin.CallGenCBuiltin): return None - def _translate_func_ptr_call(self, pool: rowptr[memhub.MemBuddy], + def _translate_func_ptr_call(self, pool: rawptr[memhub.MemBuddy], builder: llvmlite.IRBuilder | t.CPtr, mod: llvmlite.LLVMModule | t.CPtr, fp_alloca: llvmlite.Value | t.CPtr, @@ -814,7 +814,7 @@ class CallGenLeafKit(CallGenCBuiltin.CallGenCBuiltin): return llvmlite.build_call_indirect(builder, fn_typed, head, arg_count, ret_ty) - def translate_printf_call(self, pool: rowptr[memhub.MemBuddy], + def translate_printf_call(self, pool: rawptr[memhub.MemBuddy], builder: llvmlite.IRBuilder | t.CPtr, mod: llvmlite.LLVMModule | t.CPtr, cl: ast.Call | t.CPtr, @@ -875,7 +875,7 @@ class CallGenLeafKit(CallGenCBuiltin.CallGenCBuiltin): llvmlite.build_call(builder, "printf", fmt_ptr, can, i32_ty, 1) - def translate_print_call(self, pool: rowptr[memhub.MemBuddy], + def translate_print_call(self, pool: rawptr[memhub.MemBuddy], builder: llvmlite.IRBuilder | t.CPtr, mod: llvmlite.LLVMModule | t.CPtr, cl: ast.Call | t.CPtr, @@ -1008,7 +1008,7 @@ class CallGenLeafKit(CallGenCBuiltin.CallGenCBuiltin): llvmlite.build_call(builder, "printf", fmt_ptr, arg_count, i32_ty, 1) - def init_func_table(self, pool: rowptr[memhub.MemBuddy], + def init_func_table(self, pool: rawptr[memhub.MemBuddy], max_count: int) -> GenTypes.FuncEntry | t.CPtr: """分配并清零函数表数组""" size: sizet = max_count * GenTypes.FuncEntry.__sizeof__() @@ -1085,7 +1085,7 @@ class CallGenLeafKit(CallGenCBuiltin.CallGenCBuiltin): defaults: t.CPtr = None, default_count: int = 0, param_count: int = 0, - pool: rowptr[memhub.MemBuddy] = None, + pool: rawptr[memhub.MemBuddy] = None, def_sha1: str = None) -> int: """添加函数到函数表,返回 0 成功 @@ -1144,7 +1144,7 @@ class CallGenLeafKit(CallGenCBuiltin.CallGenCBuiltin): def _register_global_func(self, name: str, func: llvmlite.Function | t.CPtr, - pool: rowptr[memhub.MemBuddy] = None) -> int: + pool: rawptr[memhub.MemBuddy] = None) -> int: """注册函数到全局表(已存在则跳过),返回 0 成功 直接操作全局表,不调用 add_func_to_table,避免递归。 @@ -1442,7 +1442,7 @@ class CallGenLeafKit(CallGenCBuiltin.CallGenCBuiltin): return None - def _build_const_from_snapshot(self, pool: rowptr[memhub.MemBuddy], + def _build_const_from_snapshot(self, pool: rawptr[memhub.MemBuddy], mod: llvmlite.LLVMModule | t.CPtr, gd_entry: GenTypes.FuncDefaultsEntry | t.CPtr, di: int, @@ -1527,7 +1527,7 @@ class CallGenLeafKit(CallGenCBuiltin.CallGenCBuiltin): return None - def NewExprCallHandle(self, pool: rowptr[memhub.MemBuddy], + def NewExprCallHandle(self, pool: rawptr[memhub.MemBuddy], trans: HT.Translator | t.CPtr) -> ExprCallHandle | t.CPtr: h: ExprCallHandle | t.CPtr = pool.alloc(ExprCallHandle.__sizeof__()) if h is None: diff --git a/App/lib/core/Gen/Call/CallGenLib.vp b/App/lib/core/Gen/Call/CallGenLib.vp index 1d9f00b..63e9189 100644 --- a/App/lib/core/Gen/Call/CallGenLib.vp +++ b/App/lib/core/Gen/Call/CallGenLib.vp @@ -24,7 +24,7 @@ from . import CallGenBase class CallGenLib(CallGenBase.CallGenBase): """C 库声明 / 返回类型推断 / kwargs 调用辅助(继承 Base)""" - def _ensure_c_lib_declare(self, pool: rowptr[memhub.MemBuddy], + def _ensure_c_lib_declare(self, pool: rawptr[memhub.MemBuddy], mod: llvmlite.LLVMModule | t.CPtr, name: str) -> llvmlite.Function | t.CPtr: """为已知的 C 库函数创建 declare 声明""" @@ -113,7 +113,7 @@ class CallGenLib(CallGenBase.CallGenBase): llvmlite.add_param(pool, fn, i64_ty, "n") return fn - def _promote_clib_call_args(self, pool: rowptr[memhub.MemBuddy], + def _promote_clib_call_args(self, pool: rawptr[memhub.MemBuddy], builder: llvmlite.IRBuilder | t.CPtr, mod: llvmlite.LLVMModule | t.CPtr, call_name: str, @@ -188,7 +188,7 @@ class CallGenLib(CallGenBase.CallGenBase): return new_head # _coerce_args_to_def_params:按 vpi 定义侧形参注解把跨模块调用实参 coerce 到目标类型并重建实参链,使 call/declare/define 宽度一致;支持 {sha1}.{func} 与 {sha1}.{cls}.{method} 两形态(段下标与实参下标一一对应),裸名 C 库走 _promote_clib_call_args/_ensure_c_lib_declare,未命中原样保留 - def _coerce_args_to_def_params(self, pool: rowptr[memhub.MemBuddy], + def _coerce_args_to_def_params(self, pool: rawptr[memhub.MemBuddy], builder: llvmlite.IRBuilder | t.CPtr, call_name: str, head: llvmlite.Value | t.CPtr, @@ -285,7 +285,7 @@ class CallGenLib(CallGenBase.CallGenBase): return new_head # _coerce_arg_value_to_ty:单个实参 Value 转换到目标形参类型——整型同宽原样、窄化 trunc/按宽度重建常量、扩宽按源符号性 zext/sext;指针 i8* 性不同则 bitcast;其余原样返回(不可转换亦不改型) - def _coerce_arg_value_to_ty(self, pool: rowptr[memhub.MemBuddy], + def _coerce_arg_value_to_ty(self, pool: rawptr[memhub.MemBuddy], builder: llvmlite.IRBuilder | t.CPtr, val: llvmlite.Value | t.CPtr, tgt_ty: llvmlite.LLVMType | t.CPtr, @@ -387,7 +387,7 @@ class CallGenLib(CallGenBase.CallGenBase): pass return val - def _infer_external_func_ret_ty(self, pool: rowptr[memhub.MemBuddy], + def _infer_external_func_ret_ty(self, pool: rawptr[memhub.MemBuddy], func_name: str, node: ast.AST | t.CPtr, fatal_if_unknown: int) -> llvmlite.LLVMType | t.CPtr: @@ -584,7 +584,7 @@ class CallGenLib(CallGenBase.CallGenBase): f"外部函数返回类型未登记且无法收敛推断(默认 i32 会截断指针/i64,需提供 stub 声明或加入白名单): {func_name}", "TypeError") return llvmlite.Int32(pool) - def _get_external_func_param_ty(self, pool: rowptr[memhub.MemBuddy], + def _get_external_func_param_ty(self, pool: rawptr[memhub.MemBuddy], func_name: str, param_idx: int) -> llvmlite.LLVMType | t.CPtr: """获取外部函数第 param_idx 个参数的期望类型,None 表示用字面量原类型 @@ -644,7 +644,7 @@ class CallGenLib(CallGenBase.CallGenBase): if GenApi.sha1_prefix_len(call_name) != 0: return 1 return 0 - def _emit_llvm_memcpy_intrinsic(self, pool: rowptr[memhub.MemBuddy], + def _emit_llvm_memcpy_intrinsic(self, pool: rawptr[memhub.MemBuddy], builder: llvmlite.IRBuilder | t.CPtr, mod: llvmlite.LLVMModule | t.CPtr, dst_val: llvmlite.Value | t.CPtr, @@ -733,7 +733,7 @@ class CallGenLib(CallGenBase.CallGenBase): # _translate_call_with_kwargs:带关键字参数的函数调用,按 found_func.Params 顺序构建实参链表(位置参数优先,否则按参数名匹配关键字) # ============================================================ - def _translate_call_with_kwargs(self, pool: rowptr[memhub.MemBuddy], + def _translate_call_with_kwargs(self, pool: rawptr[memhub.MemBuddy], builder: llvmlite.IRBuilder | t.CPtr, mod: llvmlite.LLVMModule | t.CPtr, func_name: str, diff --git a/App/lib/core/Gen/Call/CallGenMixin.vp b/App/lib/core/Gen/Call/CallGenMixin.vp index 13ecf64..807e401 100644 --- a/App/lib/core/Gen/Call/CallGenMixin.vp +++ b/App/lib/core/Gen/Call/CallGenMixin.vp @@ -61,7 +61,7 @@ class CallGenMixin(CallGenBase.CallGenBase): # ============================================================ # 翻译函数调用 Call(func, args) — 模块级版本 # ============================================================ - def translate_call(self, pool: rowptr[memhub.MemBuddy], + def translate_call(self, pool: rawptr[memhub.MemBuddy], builder: llvmlite.IRBuilder | t.CPtr, mod: llvmlite.LLVMModule | t.CPtr, node: ast.AST | t.CPtr, @@ -132,8 +132,8 @@ class CallGenMixin(CallGenBase.CallGenBase): if self.find_func_in_module(mod, gen_class_name) is not None: func_name = gen_class_name else: - # 内建指针/类型下标 cast:(rowptr[list[int]])(lst)、 - # (t.CPtr[T])(x)、(t.CArray[i8, N])(x) —— rowptr/CPtr/ + # 内建指针/类型下标 cast:(rawptr[list[int]])(lst)、 + # (t.CPtr[T])(x)、(t.CArray[i8, N])(x) —— rawptr/CPtr/ # CArray 不是泛型类模板,是类型注解下标。先按注解解析出 # 类型再单参转换(ast/base.vp L392 ops_list 行根因)。 if cl.args is not None and len(cl.args) == 1: diff --git a/App/lib/core/Gen/Call/CallGenProp.vp b/App/lib/core/Gen/Call/CallGenProp.vp index a4228e5..cdb421f 100644 --- a/App/lib/core/Gen/Call/CallGenProp.vp +++ b/App/lib/core/Gen/Call/CallGenProp.vp @@ -49,7 +49,7 @@ class CallGenProp(CallGenBase.CallGenBase): # # call_head/call_count: 已构建好的参数链表(如 getter 只有 obj 一个参数) # ============================================================ - def _translate_property_call(self, pool: rowptr[memhub.MemBuddy], + def _translate_property_call(self, pool: rawptr[memhub.MemBuddy], builder: llvmlite.IRBuilder | t.CPtr, mod: llvmlite.LLVMModule | t.CPtr, class_name: str, @@ -158,7 +158,7 @@ class CallGenProp(CallGenBase.CallGenBase): # ============================================================ # ============================================================ - def _resolve_obj_class_name(self, pool: rowptr[memhub.MemBuddy], + def _resolve_obj_class_name(self, pool: rawptr[memhub.MemBuddy], trans: HT.Translator | t.CPtr, obj_node: ast.AST | t.CPtr) -> str: """解析对象表达式的类名(短名),失败返回 None""" @@ -201,7 +201,7 @@ class CallGenProp(CallGenBase.CallGenBase): # ============================================================ # ============================================================ - def _try_property_getter_attr(self, pool: rowptr[memhub.MemBuddy], + def _try_property_getter_attr(self, pool: rawptr[memhub.MemBuddy], builder: llvmlite.IRBuilder | t.CPtr, mod: llvmlite.LLVMModule | t.CPtr, at_node: ast.Attribute | t.CPtr, @@ -234,7 +234,7 @@ class CallGenProp(CallGenBase.CallGenBase): # ============================================================ # ============================================================ - def _try_property_setter(self, pool: rowptr[memhub.MemBuddy], + def _try_property_setter(self, pool: rawptr[memhub.MemBuddy], builder: llvmlite.IRBuilder | t.CPtr, mod: llvmlite.LLVMModule | t.CPtr, target_attr: ast.Attribute | t.CPtr, @@ -276,7 +276,7 @@ class CallGenProp(CallGenBase.CallGenBase): # ============================================================ # ============================================================ - def _try_property_deleter(self, pool: rowptr[memhub.MemBuddy], + def _try_property_deleter(self, pool: rawptr[memhub.MemBuddy], builder: llvmlite.IRBuilder | t.CPtr, mod: llvmlite.LLVMModule | t.CPtr, target_attr: ast.Attribute | t.CPtr, @@ -314,7 +314,7 @@ class CallGenProp(CallGenBase.CallGenBase): # ============================================================ # ============================================================ - def _translate_static_class_call(self, pool: rowptr[memhub.MemBuddy], + def _translate_static_class_call(self, pool: rawptr[memhub.MemBuddy], builder: llvmlite.IRBuilder | t.CPtr, mod: llvmlite.LLVMModule | t.CPtr, class_name: str, @@ -431,7 +431,7 @@ class CallGenProp(CallGenBase.CallGenBase): return name + pfx if pfx != 0 else name # _resolve_generic_receiver_name:解析接收者实际泛型特化名(IR 真值)——接收者实际 LLVM 结构体类型名比可能退化的注解/注册名可靠,故泛型判定以此为准:去 sha1 前缀取 '[' 前基名,基名是已注册泛型模板时含类型实参 ⇒ 返回实际特化名,无类型实参 ⇒ fail-fast(D25);基名非泛型模板或实际类型不可得 ⇒ 返回 None(调用方各自回退)。与 CallGenCall._translate_method_call 的 D25 分派修复共用本函数(唯一口径) - def _resolve_generic_receiver_name(self, pool: rowptr[memhub.MemBuddy], + def _resolve_generic_receiver_name(self, pool: rawptr[memhub.MemBuddy], struct_ty: llvmlite.LLVMType | t.CPtr, method_name: str, cl: ast.Call | t.CPtr) -> str: @@ -471,7 +471,7 @@ class CallGenProp(CallGenBase.CallGenBase): return None # _is_list_builtin_receiver:基于接收者实际类型判定 list 内建方法,判据与 _resolve_generic_receiver_name 同源——优先采用接收者实际 LLVM 结构体类型名(去 sha1 判基名),不可得时回退注解名/注册名判定。返回 1=list 内置方法 / 0=非 - def _is_list_builtin_receiver(self, pool: rowptr[memhub.MemBuddy], + def _is_list_builtin_receiver(self, pool: rawptr[memhub.MemBuddy], recv_val: llvmlite.Value | t.CPtr, fallback_name: str, method_name: str, diff --git a/App/lib/core/Gen/Call/CallGenVa.vp b/App/lib/core/Gen/Call/CallGenVa.vp index 63d3879..bc30ade 100644 --- a/App/lib/core/Gen/Call/CallGenVa.vp +++ b/App/lib/core/Gen/Call/CallGenVa.vp @@ -27,7 +27,7 @@ class CallGenVa(CallGenBase.CallGenBase): # _translate_method 在含 raise 的函数签名末尾注入(main 除外)。 # ============================================================ - def _va_arg_get_alloca_ptr(self, pool: rowptr[memhub.MemBuddy], + def _va_arg_get_alloca_ptr(self, pool: rawptr[memhub.MemBuddy], builder: llvmlite.IRBuilder | t.CPtr, mod: llvmlite.LLVMModule | t.CPtr, arg_node: ast.AST | t.CPtr, @@ -51,7 +51,7 @@ class CallGenVa(CallGenBase.CallGenBase): return alloca # 回退:translate_value(可能返回 load 后的值,仅适用于已是指针的情况) return self.Gen.ExprGen.translate_value(builder, pool, mod, arg_node, funcs_ptr, func_count, trans) - def _resolve_va_arg_type(self, pool: rowptr[memhub.MemBuddy], + def _resolve_va_arg_type(self, pool: rawptr[memhub.MemBuddy], type_node: ast.AST | t.CPtr, trans: HT.Translator | t.CPtr) -> llvmlite.LLVMType | t.CPtr: """解析 va_arg/arg 的类型参数为 LLVMType @@ -74,7 +74,7 @@ class CallGenVa(CallGenBase.CallGenBase): # 类型节点存在但解析失败:fail-fast,绝不回退 i32(会按错宽度读变参槽位) self.Gen.TypeGenErr.fatal_error(type_node, "va_arg 类型解析失败", "TypeError") return llvmlite.Int32(pool) - def _translate_va_arg_sugar(self, pool: rowptr[memhub.MemBuddy], + def _translate_va_arg_sugar(self, pool: rawptr[memhub.MemBuddy], builder: llvmlite.IRBuilder | t.CPtr, mod: llvmlite.LLVMModule | t.CPtr, cl: ast.Call | t.CPtr, @@ -122,7 +122,7 @@ class CallGenVa(CallGenBase.CallGenBase): # 生成 va_arg 指令 return llvmlite.build_va_arg(builder, ap_ptr, read_ty) - def _translate_arg_sugar(self, pool: rowptr[memhub.MemBuddy], + def _translate_arg_sugar(self, pool: rawptr[memhub.MemBuddy], builder: llvmlite.IRBuilder | t.CPtr, mod: llvmlite.LLVMModule | t.CPtr, cl: ast.Call | t.CPtr, @@ -158,7 +158,7 @@ class CallGenVa(CallGenBase.CallGenBase): # 生成 va_arg 指令(使用 trans._va_list_ptr 作为 va_list 地址) return llvmlite.build_va_arg(builder, trans._va_list_ptr, read_ty) - def _translate_va_start_sugar(self, pool: rowptr[memhub.MemBuddy], + def _translate_va_start_sugar(self, pool: rawptr[memhub.MemBuddy], builder: llvmlite.IRBuilder | t.CPtr, mod: llvmlite.LLVMModule | t.CPtr, cargs: list[ast.AST | t.CPtr] | t.CPtr, @@ -190,7 +190,7 @@ class CallGenVa(CallGenBase.CallGenBase): void_ty_vs: llvmlite.LLVMType | t.CPtr = llvmlite.Void(pool) llvmlite.build_call(builder, "llvm.va_start", ap_i8, 1, void_ty_vs, 0) return llvmlite.const_int32(pool, 0) - def _translate_va_end_sugar(self, pool: rowptr[memhub.MemBuddy], + def _translate_va_end_sugar(self, pool: rawptr[memhub.MemBuddy], builder: llvmlite.IRBuilder | t.CPtr, mod: llvmlite.LLVMModule | t.CPtr, cargs: list[ast.AST | t.CPtr] | t.CPtr, @@ -250,7 +250,7 @@ class CallGenVa(CallGenBase.CallGenBase): return 2 return -1 - def _get_known_vararg_cfunc_param_ty(self, pool: rowptr[memhub.MemBuddy], + def _get_known_vararg_cfunc_param_ty(self, pool: rawptr[memhub.MemBuddy], name: str, idx: int) -> llvmlite.LLVMType | t.CPtr: """已知变参 C 库函数第 idx 个固定参数类型(变参位置/未知返回 None) @@ -276,7 +276,7 @@ class CallGenVa(CallGenBase.CallGenBase): return i8_ptr_kv return None return None - def _check_and_promote_variadic_call(self, pool: rowptr[memhub.MemBuddy], + def _check_and_promote_variadic_call(self, pool: rawptr[memhub.MemBuddy], builder: llvmlite.IRBuilder | t.CPtr, mod: llvmlite.LLVMModule | t.CPtr, call_name: str, diff --git a/App/lib/core/Gen/Call/CallGenVt.vp b/App/lib/core/Gen/Call/CallGenVt.vp index 7aeef20..cfbca92 100644 --- a/App/lib/core/Gen/Call/CallGenVt.vp +++ b/App/lib/core/Gen/Call/CallGenVt.vp @@ -25,7 +25,7 @@ class CallGenVt(CallGenBase.CallGenBase): # _write_vtable_slot / _write_vtable_attr:把模块级函数指针写入对象 vtable 的方法槽位(devfs 驱动注册模式,对齐 TPC HandlesAssign.py L905-949 写时复制)——vtable 方法不是数据字段,get_attribute_ptr 查不到;对象 vtable 仍指向类默认 vtable 时先复制一份(internal 全局 + llvm.memcpy)并让对象指向副本,再 GEP method_index 槽位 store i8*。多次写入互不覆盖 # ============================================================ - def _write_vtable_slot(self, pool: rowptr[memhub.MemBuddy], + def _write_vtable_slot(self, pool: rawptr[memhub.MemBuddy], builder: llvmlite.IRBuilder | t.CPtr, mod: llvmlite.LLVMModule | t.CPtr, obj_ptr: llvmlite.Value | t.CPtr, @@ -162,7 +162,7 @@ class CallGenVt(CallGenBase.CallGenBase): llvmlite.build_store(builder, fptr_i8, vt_slotp) return 1 def _write_vtable_attr(self, builder: llvmlite.IRBuilder | t.CPtr, - pool: rowptr[memhub.MemBuddy], + pool: rawptr[memhub.MemBuddy], mod: llvmlite.LLVMModule | t.CPtr, node: ast.AST | t.CPtr, rhs_val: llvmlite.Value | t.CPtr, diff --git a/App/lib/core/Gen/Class/ClassGenBase.vp b/App/lib/core/Gen/Class/ClassGenBase.vp index 823ee1f..fd380a8 100644 --- a/App/lib/core/Gen/Class/ClassGenBase.vp +++ b/App/lib/core/Gen/Class/ClassGenBase.vp @@ -492,7 +492,7 @@ class ClassGenBase: elif string.strcmp(at.attr, "deleter") == 0: meta |= GenTypes.META_PROP_DELETER return meta - def register_class_meta(self, pool: rowptr[memhub.MemBuddy], + def register_class_meta(self, pool: rawptr[memhub.MemBuddy], kind: int, cls: str, field: str) -> int: """注册类编译期元数据字段(__provides__/__requires__/__require_must__,幂等)""" if pool is None or cls is None or field is None: @@ -545,7 +545,7 @@ class ClassGenBase: return self.ClassMetaFields + i * 64 n_cm2 += 1 return None - def register_decorator(self, pool: rowptr[memhub.MemBuddy], + def register_decorator(self, pool: rawptr[memhub.MemBuddy], func_name: str, wrapper_name: str, arg0: int64) -> int: """注册自定义装饰器函数(@log/@skip/@repeat(3) → __decor_wrap_{name}) @@ -606,7 +606,7 @@ class ClassGenBase: """懒初始化异常表(perm_pool),返回 0 成功""" if self.ExceptionNames is not None: return 0 - pp_e: rowptr[memhub.MemBuddy] = CompilerFactory.factory.PermPool + pp_e: rawptr[memhub.MemBuddy] = CompilerFactory.factory.PermPool if pp_e is None: return -1 self.ExceptionNames = pp_e.alloc(EXCEPTION_MAX * EXCEPTION_NAME_LEN) @@ -785,7 +785,7 @@ class ClassGenBase: parent_e: str = self._get_exception_parent_name(cd) self.register_exception(cd.name, parent_e) return 0 - def _register_class_meta_list(self, pool: rowptr[memhub.MemBuddy], + def _register_class_meta_list(self, pool: rawptr[memhub.MemBuddy], kind: int, cls: str, value_node: ast.AST | t.CPtr) -> None: """解析类体 __provides__/__requires__ 的 list[str] 字面量并注册""" if value_node is None or cls is None: @@ -903,7 +903,7 @@ class ClassGenBase: return 1 return 0 def _get_base_name(self, base_node: ast.AST | t.CPtr, - pool: rowptr[memhub.MemBuddy] = None) -> str: + pool: rawptr[memhub.MemBuddy] = None) -> str: """从 base AST 节点提取基类名,返回 None=失败 对于 Subscript 节点,需要 pool 分配内存拼接特化名; @@ -960,7 +960,7 @@ class ClassGenBase: """获取 ClassDef 的真实父类名,返回 None=无真实父类""" if cd is None or cd.bases is None: return None - pool: rowptr[memhub.MemBuddy] = None + pool: rawptr[memhub.MemBuddy] = None if trans is not None: pool = trans.Pool bases: list[ast.AST | t.CPtr] | t.CPtr = cd.bases @@ -1007,7 +1007,7 @@ class ClassGenBase: og_buf[og_len] = '\0' return og_buf return base_name - def _collect_parents(self, pool: rowptr[memhub.MemBuddy], + def _collect_parents(self, pool: rawptr[memhub.MemBuddy], cd: ast.ClassDef | t.CPtr, parents_buf: sizet | t.CPtr, max_parents: int, @@ -1061,7 +1061,7 @@ class ClassGenBase: """触发 base 中 Subscript 的泛型特化(如 GSListNode[Value])""" if trans is None or cd is None or cd.bases is None: return - pool: rowptr[memhub.MemBuddy] = trans.Pool + pool: rawptr[memhub.MemBuddy] = trans.Pool bases: list[ast.AST | t.CPtr] | t.CPtr = cd.bases bn: sizet = len(bases) if bn == 0: diff --git a/App/lib/core/Gen/Class/ClassGenDef.vp b/App/lib/core/Gen/Class/ClassGenDef.vp index ee776c0..0feab86 100644 --- a/App/lib/core/Gen/Class/ClassGenDef.vp +++ b/App/lib/core/Gen/Class/ClassGenDef.vp @@ -38,7 +38,7 @@ class ClassGenDef(ClassGenBase.ClassGenBase): if cd is None or cd.name is None: return 0 - pool: rowptr[memhub.MemBuddy] = trans.Pool + pool: rawptr[memhub.MemBuddy] = trans.Pool class_name: str = cd.name if trans.ModuleSha1 is None: diff --git a/App/lib/core/Gen/Class/ClassGenEnum.vp b/App/lib/core/Gen/Class/ClassGenEnum.vp index 813d2fb..ac8f2ea 100644 --- a/App/lib/core/Gen/Class/ClassGenEnum.vp +++ b/App/lib/core/Gen/Class/ClassGenEnum.vp @@ -34,7 +34,7 @@ RENUM_ALIAS_MAX: t.CDefine = 512 class ClassGenEnum(ClassGenBase.ClassGenBase): """enum/union/renum 定义与变体表""" - def _resolve_enum_member_type(self, pool: rowptr[memhub.MemBuddy], + def _resolve_enum_member_type(self, pool: rawptr[memhub.MemBuddy], ann_node: ast.AST | t.CPtr, imported_modules: str, from_imports: str) -> llvmlite.LLVMType | t.CPtr: @@ -151,7 +151,7 @@ class ClassGenEnum(ClassGenBase.ClassGenBase): if cd is None or cd.name is None or trans is None: return 0 - pool: rowptr[memhub.MemBuddy] = trans.Pool + pool: rawptr[memhub.MemBuddy] = trans.Pool class_name: str = cd.name # 不按全局同名跳过:跨模块可能同名枚举(includes/w32/fileio.vp 的 @@ -398,7 +398,7 @@ class ClassGenEnum(ClassGenBase.ClassGenBase): if cd is None or cd.name is None or trans is None: return 0 - pool: rowptr[memhub.MemBuddy] = trans.Pool + pool: rawptr[memhub.MemBuddy] = trans.Pool class_name: str = cd.name # 命名空间隔离:标记为当前文件可见(必须在 existing 检查之前) @@ -552,7 +552,7 @@ class ClassGenEnum(ClassGenBase.ClassGenBase): VLogger.info(f"registered {class_name} with {field_count} fields, max_size={max_size}", "UNION") return 0 - def _get_annotation_field_size(self, pool: rowptr[memhub.MemBuddy], + def _get_annotation_field_size(self, pool: rawptr[memhub.MemBuddy], annotation: ast.AST | t.CPtr) -> int: """计算注解类型的字节大小,用于 REnum 布局计算""" if annotation is None: @@ -622,7 +622,7 @@ class ClassGenEnum(ClassGenBase.ClassGenBase): if cd is None or cd.name is None or trans is None: return 0 - pool: rowptr[memhub.MemBuddy] = trans.Pool + pool: rawptr[memhub.MemBuddy] = trans.Pool class_name: str = cd.name # 命名空间隔离:标记为当前文件可见 @@ -643,7 +643,7 @@ class ClassGenEnum(ClassGenBase.ClassGenBase): return 0 # 变体表缺失:中和旧 entry(对齐 ClassGenDef needs_rereg 先例),使 # find_struct_by_module 不再命中(按 Name 精确匹配),走下方完整注册路径 - # 以同时修正 struct 布局 + 变体表。 + # 以同时修正 struct 布局 + 变体表。 if existing.Name is not None: existing.Name[0] = '\0' existing.Ty = None @@ -859,7 +859,7 @@ class ClassGenEnum(ClassGenBase.ClassGenBase): # 注册变体字段名别名已在变体遍历时直接完成(避免 CSizeT→str 转换问题)。 # 注意:遍历发生在 register_struct 之前,注解引用本类自身(如 - # LLVMType.Ptr.Pointee: rowptr[LLVMType])时类尚未注册 → 别名表类型槽 + # LLVMType.Ptr.Pointee: rawptr[LLVMType])时类尚未注册 → 别名表类型槽 # 为 0 → match 绑定回退槽位 i64 把指针字段读成整数。此处类已注册, # 补一遍字段类型解析回填 0 槽(详见 _refill_renum_field_types)。 self._refill_renum_field_types(trans, pool, class_name, cd) @@ -867,18 +867,18 @@ class ClassGenEnum(ClassGenBase.ClassGenBase): VLogger.info(f"registered {class_name} with {variant_count} variants, {total_positions} positions", "RENUM") return 0 def _refill_renum_field_types(self, trans: HT.Translator | t.CPtr, - pool: rowptr[memhub.MemBuddy], + pool: rawptr[memhub.MemBuddy], class_name: str, cd: ast.ClassDef | t.CPtr): """REnum 注册完成后补解析变体字段类型(仅回填类型槽为 0 的别名记录) 第一遍变体字段遍历发生在 register_struct 之前:字段注解引用本 REnum 类 - 自身(如 LLVMType.Ptr.Pointee: rowptr[LLVMType]、Array.ElemTy: - rowptr[LLVMType]、Func.Ret: rowptr[LLVMType])时,find_struct 查不到 + 自身(如 LLVMType.Ptr.Pointee: rawptr[LLVMType]、Array.ElemTy: + rawptr[LLVMType]、Func.Ret: rawptr[LLVMType])时,find_struct 查不到 正在注册的类 → resolve_annotation_type 返回 None → _register_renum_field_alias 类型槽(RenumAliasTy)落 0。match 绑定时 _lookup_renum_member_ty 查不到 成员类型 → 绑定变量按 payload 槽位(i64)读取,把指针字段读成整数 → - 递归传参/赋值给 rowptr[LLVMType] 形参被 int→ptr 显式拦截误报 CastError + 递归传参/赋值给 rawptr[LLVMType] 形参被 int→ptr 显式拦截误报 CastError (llvmlite __types.vp L448 根因)。 本方法在 register_struct 完成(自身类已可查)后按与第一遍相同的位置 @@ -932,7 +932,7 @@ class ClassGenEnum(ClassGenBase.ClassGenBase): pool, class_name, vnm.id, field_idx + 1, mem_ty_l, variant_cd.name) field_idx += 1 - def _register_renum_variants(self, pool: rowptr[memhub.MemBuddy], + def _register_renum_variants(self, pool: rawptr[memhub.MemBuddy], class_name: str, cd: ast.ClassDef | t.CPtr, variant_count: int): @@ -1175,7 +1175,7 @@ class ClassGenEnum(ClassGenBase.ClassGenBase): return self.RenumVariantTags[name_offset] return -1 return -1 - def _register_renum_field_alias(self, pool: rowptr[memhub.MemBuddy], + def _register_renum_field_alias(self, pool: rawptr[memhub.MemBuddy], class_name: str, field_name: str, payload_idx: int, @@ -1194,7 +1194,7 @@ class ClassGenEnum(ClassGenBase.ClassGenBase): # 懒初始化表(perm_pool:1a 每文件 reset 后表本体不被回收) if self.RenumAliasClass is None: - alias_pool_rfa: rowptr[memhub.MemBuddy] = CompilerFactory.factory.PermPool + alias_pool_rfa: rawptr[memhub.MemBuddy] = CompilerFactory.factory.PermPool self.RenumAliasClass = alias_pool_rfa.alloc(8 * RENUM_ALIAS_MAX) self.RenumAliasField = alias_pool_rfa.alloc(8 * RENUM_ALIAS_MAX) self.RenumAliasIndex = alias_pool_rfa.alloc(8 * RENUM_ALIAS_MAX) diff --git a/App/lib/core/Gen/Class/ClassGenGeneric.vp b/App/lib/core/Gen/Class/ClassGenGeneric.vp index b36726d..4b3d62b 100644 --- a/App/lib/core/Gen/Class/ClassGenGeneric.vp +++ b/App/lib/core/Gen/Class/ClassGenGeneric.vp @@ -52,7 +52,7 @@ class ClassGenGeneric(ClassGenBase.ClassGenBase): if tp is None: return 0 return 1 - def _register_generic_template(self, pool: rowptr[memhub.MemBuddy], + def _register_generic_template(self, pool: rawptr[memhub.MemBuddy], cd: ast.ClassDef | t.CPtr, module_sha1: str) -> None: """注册泛型类模板(类名 + ClassDef 节点 + 来源模块 SHA1)""" @@ -115,7 +115,7 @@ class ClassGenGeneric(ClassGenBase.ClassGenBase): string.strcat(buf, " ") string.strcat(buf, tp_name) return buf - def _find_generic_template_tp_params(self, pool: rowptr[memhub.MemBuddy], + def _find_generic_template_tp_params(self, pool: rawptr[memhub.MemBuddy], class_name: str) -> list[str] | t.CPtr: """查找泛型类模板的类型参数名列表,未找到返回 None @@ -209,7 +209,7 @@ class ClassGenGeneric(ClassGenBase.ClassGenBase): f_val: str = files_local.get(i) return f_val return None - def _mangle_generic_class_name(self, pool: rowptr[memhub.MemBuddy], + def _mangle_generic_class_name(self, pool: rawptr[memhub.MemBuddy], class_name: str, type_args: list[str] | t.CPtr) -> str: """生成特化类名: list + [int] -> list[int] @@ -246,7 +246,7 @@ class ClassGenGeneric(ClassGenBase.ClassGenBase): string.strcat(mangled, ta) string.strcat(mangled, "]") return mangled - def _clone_annotation(self, pool: rowptr[memhub.MemBuddy], + def _clone_annotation(self, pool: rawptr[memhub.MemBuddy], node: ast.AST | t.CPtr, tp_names: list[str] | t.CPtr, type_args: list[str] | t.CPtr) -> ast.AST | t.CPtr: @@ -318,7 +318,7 @@ class ClassGenGeneric(ClassGenBase.ClassGenBase): # 其他: 直接引用(不拷贝) return node - def _clone_arguments(self, pool: rowptr[memhub.MemBuddy], + def _clone_arguments(self, pool: rawptr[memhub.MemBuddy], args: ast.AST | t.CPtr, tp_names: list[str] | t.CPtr, type_args: list[str] | t.CPtr) -> ast.AST | t.CPtr: @@ -347,7 +347,7 @@ class ClassGenGeneric(ClassGenBase.ClassGenBase): new_arg_list.append(arg_node) return ast.Arguments(pool, new_arg_list, old_args.vararg, old_args.kwarg, old_args.defaults, old_args.kw_defaults) - def _clone_classdef_for_spec(self, pool: rowptr[memhub.MemBuddy], + def _clone_classdef_for_spec(self, pool: rawptr[memhub.MemBuddy], cd: ast.ClassDef | t.CPtr, spec_name: str, tp_names: list[str] | t.CPtr, @@ -416,7 +416,7 @@ class ClassGenGeneric(ClassGenBase.ClassGenBase): if name_addr != 0: return (str | t.CPtr)(t.CVoid(name_addr, t.CPtr)) return None - def _cache_spec(self, pool: rowptr[memhub.MemBuddy], spec_key: str, spec_name: str): + def _cache_spec(self, pool: rawptr[memhub.MemBuddy], spec_key: str, spec_name: str): """缓存特化结果(stdlib 深拷贝存储,跨文件安全)""" if spec_key is None or spec_name is None: return @@ -463,7 +463,7 @@ class ClassGenGeneric(ClassGenBase.ClassGenBase): merged[cur_len] = ' ' string.strcpy(merged + cur_len + 1, tdeps) trans._imported_modules = merged - def _record_spec_trigger(self, pool: rowptr[memhub.MemBuddy], + def _record_spec_trigger(self, pool: rawptr[memhub.MemBuddy], spec_name: str, trigger_sha1: str) -> int: """记录泛型特化类的触发文件 sha1(StructEntry.SpecTriggerSha1) @@ -528,7 +528,7 @@ class ClassGenGeneric(ClassGenBase.ClassGenBase): if ta_rsv_g is not None and string.strcmp(ta_raw_g, ta_rsv_g) != 0: type_args.set(ta_i_g, ta_rsv_g) - pool: rowptr[memhub.MemBuddy] = trans.Pool + pool: rawptr[memhub.MemBuddy] = trans.Pool # 1. 查找泛型模板 template_cd: ast.ClassDef | t.CPtr = self._find_generic_template(class_name) diff --git a/App/lib/core/Gen/Class/ClassGenVTable.vp b/App/lib/core/Gen/Class/ClassGenVTable.vp index cd57f47..e227b20 100644 --- a/App/lib/core/Gen/Class/ClassGenVTable.vp +++ b/App/lib/core/Gen/Class/ClassGenVTable.vp @@ -84,7 +84,7 @@ class ClassGenVTable(ClassGenBase.ClassGenBase): if trans is None or cd is None or class_name is None: return 0 - pool: rowptr[memhub.MemBuddy] = trans.Pool + pool: rawptr[memhub.MemBuddy] = trans.Pool mod: llvmlite.LLVMModule | t.CPtr = trans.Module children: list[ast.AST | t.CPtr] | t.CPtr = cd.children @@ -296,7 +296,7 @@ class ClassGenVTable(ClassGenBase.ClassGenBase): return 0 - pool: rowptr[memhub.MemBuddy] = trans.Pool + pool: rawptr[memhub.MemBuddy] = trans.Pool mod: llvmlite.LLVMModule | t.CPtr = trans.Module # 收集虚方法信息(继承父类 + 自身,结果存 self.VtFullNames 等暂存区) @@ -579,7 +579,7 @@ class ClassGenVTable(ClassGenBase.ClassGenBase): return 0 - pool: rowptr[memhub.MemBuddy] = trans.Pool + pool: rawptr[memhub.MemBuddy] = trans.Pool mod: llvmlite.LLVMModule | t.CPtr = trans.Module imported_modules: str = trans._imported_modules from_imports: str = trans._from_imports @@ -1086,7 +1086,7 @@ class ClassGenVTable(ClassGenBase.ClassGenBase): return 0 - pool: rowptr[memhub.MemBuddy] = trans.Pool + pool: rawptr[memhub.MemBuddy] = trans.Pool mod: llvmlite.LLVMModule | t.CPtr = trans.Module funcs_ptr: GenTypes.FuncEntry | t.CPtr = trans._funcs func_count: int = trans._func_count diff --git a/App/lib/core/Gen/Expr/ExprGenAttr.vp b/App/lib/core/Gen/Expr/ExprGenAttr.vp index 2dcd31e..e961230 100644 --- a/App/lib/core/Gen/Expr/ExprGenAttr.vp +++ b/App/lib/core/Gen/Expr/ExprGenAttr.vp @@ -71,7 +71,7 @@ class ExprGenAttr(ExprGenBase.ExprGenBase): # 用于跨模块全局变量访问: stub 未注入时,翻译阶段生成 @name 引用, # 链接时由 stub 提供 external global 声明。 # ============================================================ - def make_global_ref(self, pool: rowptr[memhub.MemBuddy], + def make_global_ref(self, pool: rawptr[memhub.MemBuddy], name: str, ty: llvmlite.LLVMType | t.CPtr) -> llvmlite.Value | t.CPtr: """创建全局变量引用 (类型为 ty*,名称为 @name)""" @@ -185,7 +185,7 @@ class ExprGenAttr(ExprGenBase.ExprGenBase): if string.strcmp(name, "CAutoPtr") == 0: return 1 return 0 - def _attr_module_path_str(self, pool: rowptr[memhub.MemBuddy], + def _attr_module_path_str(self, pool: rawptr[memhub.MemBuddy], node: ast.AST | t.CPtr) -> str: """把模块引用 AST 转成模块路径字符串(递归拼接 Attribute 链): Name('sys') → "sys";Attribute(Attribute(Name('os'),'_win32')) → "os._win32"。 @@ -213,7 +213,7 @@ class ExprGenAttr(ExprGenBase.ExprGenBase): viperlib.snprintf(buf_m, blen + alen + 2, "%s.%s", base_m, at_m.attr) return buf_m return None - def _resolve_module_attribute_global(self, pool: rowptr[memhub.MemBuddy], + def _resolve_module_attribute_global(self, pool: rawptr[memhub.MemBuddy], mod: llvmlite.LLVMModule | t.CPtr, trans: HT.Translator | t.CPtr, at: ast.Attribute | t.CPtr, @@ -343,7 +343,7 @@ class ExprGenAttr(ExprGenBase.ExprGenBase): # 非 c.Deref 模式返回 None # ============================================================ def _get_cderef_attr_base(self, builder: llvmlite.IRBuilder | t.CPtr, - pool: rowptr[memhub.MemBuddy], + pool: rawptr[memhub.MemBuddy], mod: llvmlite.LLVMModule | t.CPtr, at_value: ast.AST | t.CPtr, trans: HT.Translator | t.CPtr = None) -> llvmlite.Value | t.CPtr: @@ -369,7 +369,7 @@ class ExprGenAttr(ExprGenBase.ExprGenBase): return inner_cd return None def translate_attribute(self, builder: llvmlite.IRBuilder | t.CPtr, - pool: rowptr[memhub.MemBuddy], + pool: rawptr[memhub.MemBuddy], mod: llvmlite.LLVMModule | t.CPtr, node: ast.AST | t.CPtr, trans: HT.Translator | t.CPtr = None) -> llvmlite.Value | t.CPtr: @@ -1015,7 +1015,7 @@ class ExprGenAttr(ExprGenBase.ExprGenBase): # 获取属性访问的字段指针(不加载值,用于赋值) # 对于 Name 类型的 obj,直接使用 alloca 指针(不 load 结构体) # ============================================================ - def _resolve_attr_field_class(self, pool: rowptr[memhub.MemBuddy], + def _resolve_attr_field_class(self, pool: rawptr[memhub.MemBuddy], trans: HT.Translator | t.CPtr, attr_node: ast.AST | t.CPtr) -> str: """解析属性链(a.b.c)中 c 字段的注解类名。 @@ -1064,7 +1064,7 @@ class ExprGenAttr(ExprGenBase.ExprGenBase): return None return self.Gen.StructGen.get_field_annot_class_name(fe) def get_attribute_ptr(self, builder: llvmlite.IRBuilder | t.CPtr, - pool: rowptr[memhub.MemBuddy], + pool: rawptr[memhub.MemBuddy], mod: llvmlite.LLVMModule | t.CPtr, node: ast.AST | t.CPtr, trans: HT.Translator | t.CPtr = None) -> llvmlite.Value | t.CPtr: diff --git a/App/lib/core/Gen/Expr/ExprGenBase.vp b/App/lib/core/Gen/Expr/ExprGenBase.vp index 3ac7c3c..efb3807 100644 --- a/App/lib/core/Gen/Expr/ExprGenBase.vp +++ b/App/lib/core/Gen/Expr/ExprGenBase.vp @@ -57,7 +57,7 @@ class ExprGenBase: # ============================================================ # 转义 LLVM IR 字符串字面量 # ============================================================ - def escape_llvm_string(self, pool: rowptr[memhub.MemBuddy], + def escape_llvm_string(self, pool: rawptr[memhub.MemBuddy], src: str) -> str: """将字符串转换为 LLVM IR 字符串字面量 c"...\\00" """ if src is None: @@ -218,7 +218,7 @@ class ExprGenBase: # 返回类名字符串或 None。用于 subscript 操作中判断是否需要 # 转发到 __getitem__/__setitem__ 而非生成 GEP。 # ============================================================ - def _get_custom_struct_cls_nm(self, pool: rowptr[memhub.MemBuddy], + def _get_custom_struct_cls_nm(self, pool: rawptr[memhub.MemBuddy], ty: llvmlite.LLVMType | t.CPtr) -> str: """检查 ty 或 ty 的 pointee 是否是已注册的自定义结构体,返回类名或 None""" if ty is None: @@ -241,7 +241,7 @@ class ExprGenBase: # - 普通结构体指针数组(如 pts: Point | t.CPtr):get_subscript_ptr 返回元素地址 # 路由错误会让 list[T] 被当作结构体数组 GEP,访问错位崩溃。 # ============================================================ - def _is_list_subscript_base(self, pool: rowptr[memhub.MemBuddy], + def _is_list_subscript_base(self, pool: rawptr[memhub.MemBuddy], trans: HT.Translator | t.CPtr, sub_node: ast.AST | t.CPtr) -> int: """判断下标基座是否为 list[T] 变量(1=是)""" @@ -277,7 +277,7 @@ class ExprGenBase: # ============================================================ # _sub_base_class_name - 解析下标基座变量的结构体类名 # ============================================================ - def _sub_base_class_name(self, pool: rowptr[memhub.MemBuddy], + def _sub_base_class_name(self, pool: rawptr[memhub.MemBuddy], trans: HT.Translator | t.CPtr, sub_node: ast.AST | t.CPtr) -> str: """解析下标基座变量的结构体类名(无则 None)""" @@ -311,7 +311,7 @@ class ExprGenBase: # - 普通结构体指针数组(如 pts: Point | t.CPtr)→ get_subscript_ptr # (GEP 元素地址,避免结构体值 base=非指针 报错) # ============================================================ - def _sub_base_uses_getitem(self, pool: rowptr[memhub.MemBuddy], + def _sub_base_uses_getitem(self, pool: rawptr[memhub.MemBuddy], mod: llvmlite.LLVMModule | t.CPtr, trans: HT.Translator | t.CPtr, sub_node: ast.AST | t.CPtr) -> int: @@ -489,7 +489,7 @@ class ExprGenBase: return llvmlite.build_bitcast(builder, val, target_ty) return val - def _zext_or_sext_val(self, pool: rowptr[memhub.MemBuddy], + def _zext_or_sext_val(self, pool: rawptr[memhub.MemBuddy], val: llvmlite.Value | t.CPtr, node: ast.AST | t.CPtr = None, trans: HT.Translator | t.CPtr = None) -> int: @@ -509,7 +509,7 @@ class ExprGenBase: return self.Gen.ExprGenOps.should_zext_widen(pool, val, None, node, trans) # translate_ptr_arith:指针算术 ptr±int,用 getelementptr(按 pointee 元素大小缩放索引,对齐 TPC ExprGen.emit_binary_op / HandlesAugAssign.py);数组 pointee([N x ty]*)先 decay 为元素指针(GEP 0,0),避免以整个数组为步长 - def translate_ptr_arith(self, pool: rowptr[memhub.MemBuddy], + def translate_ptr_arith(self, pool: rawptr[memhub.MemBuddy], builder: llvmlite.IRBuilder | t.CPtr, ptr_val: llvmlite.Value | t.CPtr, int_val: llvmlite.Value | t.CPtr, diff --git a/App/lib/core/Gen/Expr/ExprGenCdef.vp b/App/lib/core/Gen/Expr/ExprGenCdef.vp index 87cce03..d7f4e17 100644 --- a/App/lib/core/Gen/Expr/ExprGenCdef.vp +++ b/App/lib/core/Gen/Expr/ExprGenCdef.vp @@ -93,7 +93,7 @@ class ExprGenCdef(ExprGenBase.ExprGenBase): return None viperlib.snprintf(buf, path_len, "%s/%s", base_dir, rel_used) # 存在性检查:SourceDir 下不存在且 IncludesDir 不同 → 重试 IncludesDir - pf_chk: rowptr[fileio.File] = fileio.File(buf, fileio.MODE.R) + pf_chk: rawptr[fileio.File] = fileio.File(buf, fileio.MODE.R) if pf_chk.closed: pf_chk.close() if Config.IncludesDir is not None and base_dir != Config.IncludesDir: @@ -104,7 +104,7 @@ class ExprGenCdef(ExprGenBase.ExprGenBase): if buf is None: return None viperlib.snprintf(buf, path_len2, "%s/%s", Config.IncludesDir, rel_used) - pf_chk2: rowptr[fileio.File] = fileio.File(buf, fileio.MODE.R) + pf_chk2: rawptr[fileio.File] = fileio.File(buf, fileio.MODE.R) if pf_chk2.closed: pf_chk2.close() stdlib.free(buf) @@ -125,7 +125,7 @@ class ExprGenCdef(ExprGenBase.ExprGenBase): # # pyi 文件格式: "NAME: t.CDefine = value" # ============================================================ - def _lookup_cross_module_cdefine(self, pool: rowptr[memhub.MemBuddy], + def _lookup_cross_module_cdefine(self, pool: rawptr[memhub.MemBuddy], name: str, from_imports: str, imported_modules: str = None, @@ -289,7 +289,7 @@ class ExprGenCdef(ExprGenBase.ExprGenBase): if pyi_buf is None: stdlib.free(pyi_path) return -1 - pf: rowptr[fileio.File] = fileio.File(pyi_path, fileio.MODE.R) + pf: rawptr[fileio.File] = fileio.File(pyi_path, fileio.MODE.R) need_py_fallback: int = 0 bytes_read: LONG = 0 if pf.closed: @@ -1069,7 +1069,7 @@ class ExprGenCdef(ExprGenBase.ExprGenBase): # ============================================================ # 翻译变量引用(Name 节点)→ load # ============================================================ - def _const_int_for_cdefine(self, pool: rowptr[memhub.MemBuddy], + def _const_int_for_cdefine(self, pool: rawptr[memhub.MemBuddy], value: int64) -> llvmlite.Value | t.CPtr: """CDefine 整数常量 → LLVM 常量(对齐 TPC TypeConvert 的 64 位升级) diff --git a/App/lib/core/Gen/Expr/ExprGenCls.vp b/App/lib/core/Gen/Expr/ExprGenCls.vp index 9654749..a671dc3 100644 --- a/App/lib/core/Gen/Expr/ExprGenCls.vp +++ b/App/lib/core/Gen/Expr/ExprGenCls.vp @@ -299,7 +299,7 @@ class ExprGenCls(ExprGenBase.ExprGenBase): # Attribute → 字段注解类名(_resolve_attr_field_class) # 仅采用已注册结构体;无法精确推断返回 None(fail-fast 由调用方暴露)。 # ============================================================ - def infer_expr_class(self, pool: rowptr[memhub.MemBuddy], + def infer_expr_class(self, pool: rawptr[memhub.MemBuddy], mod: llvmlite.LLVMModule | t.CPtr, node: ast.AST | t.CPtr, trans: HT.Translator | t.CPtr) -> str: @@ -420,7 +420,7 @@ class ExprGenCls(ExprGenBase.ExprGenBase): # SHA1(stub 中声明)即视为存在。仅在确实存在时采用推断类名, # 避免把原生运算误标为类类型。 # ============================================================ - def _cls_has_dunder(self, pool: rowptr[memhub.MemBuddy], + def _cls_has_dunder(self, pool: rawptr[memhub.MemBuddy], mod: llvmlite.LLVMModule | t.CPtr, class_name: str, dunder: str) -> int: """类及其 MRO 祖先链中是否存在 dunder 方法,存在返回 1""" @@ -456,7 +456,7 @@ class ExprGenCls(ExprGenBase.ExprGenBase): # CFloat64T/t.CPtr 等均不注册 struct,天然过滤)。"A | B" 联合 # 多候选时取首个命中段。 # ============================================================ - def _extract_annot_class_name(self, pool: rowptr[memhub.MemBuddy], + def _extract_annot_class_name(self, pool: rawptr[memhub.MemBuddy], annot: str) -> str: """从返回注解文本提取已注册结构体类名,无命中返回 None""" if pool is None or annot is None: diff --git a/App/lib/core/Gen/Expr/ExprGenConst.vp b/App/lib/core/Gen/Expr/ExprGenConst.vp index dbbc95c..8a5f83d 100644 --- a/App/lib/core/Gen/Expr/ExprGenConst.vp +++ b/App/lib/core/Gen/Expr/ExprGenConst.vp @@ -28,7 +28,7 @@ class ExprGenConst(ExprGenBase.ExprGenBase): # 创建全局字符串常量 # ============================================================ def create_global_string(self, builder: llvmlite.IRBuilder | t.CPtr, - pool: rowptr[memhub.MemBuddy], + pool: rawptr[memhub.MemBuddy], mod: llvmlite.LLVMModule | t.CPtr, str_val: str, trans: HT.Translator | t.CPtr) -> llvmlite.Value | t.CPtr: @@ -83,7 +83,7 @@ class ExprGenConst(ExprGenBase.ExprGenBase): # 翻译常量表达式 # ============================================================ def translate_constant(self, builder: llvmlite.IRBuilder | t.CPtr, - pool: rowptr[memhub.MemBuddy], + pool: rawptr[memhub.MemBuddy], mod: llvmlite.LLVMModule | t.CPtr, node: ast.AST | t.CPtr, trans: HT.Translator | t.CPtr = None, @@ -152,7 +152,7 @@ class ExprGenConst(ExprGenBase.ExprGenBase): # # 用于 list 字面量 [a, b, c] 的元素类型推断 # ============================================================ - def _infer_elem_type_from_value(self, pool: rowptr[memhub.MemBuddy], + def _infer_elem_type_from_value(self, pool: rawptr[memhub.MemBuddy], value: llvmlite.Value | t.CPtr) -> str: """从 LLVM Value 的类型推断 list 元素类型名 @@ -216,7 +216,7 @@ class ExprGenConst(ExprGenBase.ExprGenBase): # 链接器合并同模板重复特化定义,zeroinitializer 保证编译链接通过。 # 运行时若该模块未在入口 main 赋值 _mbuddy(null pool 上动态建 list), # 由真实崩溃暴露(fail-fast 哲学,不掩盖上游未初始化)。 - pool: rowptr[memhub.MemBuddy] = trans.Pool + pool: rawptr[memhub.MemBuddy] = trans.Pool if pool is None or trans.Module is None or trans.SymTab is None: return None # 先检查是否已注册到模块作用域(避免重复创建全局变量) @@ -249,7 +249,7 @@ class ExprGenConst(ExprGenBase.ExprGenBase): return gv_ref_fb # translate_list_literal:把 list 字面量 [a, b, c] 翻译为 list[T](pool) 构造 + append 调用序列。elem_type_name 为元素类型名(如 "str"/"int"),None 表示从元素推断。返回 list 对象指针(Ptr(list[T] struct)),失败返回 None def translate_list_literal(self, builder: llvmlite.IRBuilder | t.CPtr, - pool: rowptr[memhub.MemBuddy], + pool: rawptr[memhub.MemBuddy], mod: llvmlite.LLVMModule | t.CPtr, node: ast.AST | t.CPtr, elem_type_name: str, diff --git a/App/lib/core/Gen/Expr/ExprGenFstr.vp b/App/lib/core/Gen/Expr/ExprGenFstr.vp index f7dacd6..737aa85 100644 --- a/App/lib/core/Gen/Expr/ExprGenFstr.vp +++ b/App/lib/core/Gen/Expr/ExprGenFstr.vp @@ -36,7 +36,7 @@ class ExprGenFstr(ExprGenBase.ExprGenBase): # ("(null)"输出 + printf("%s", 垃圾) 崩溃 0xC0000005)。 # ============================================================ def translate_joined_str(self, builder: llvmlite.IRBuilder | t.CPtr, - pool: rowptr[memhub.MemBuddy], + pool: rawptr[memhub.MemBuddy], mod: llvmlite.LLVMModule | t.CPtr, node: ast.AST | t.CPtr, trans: HT.Translator | t.CPtr = None) -> llvmlite.Value | t.CPtr: @@ -108,7 +108,7 @@ class ExprGenFstr(ExprGenBase.ExprGenBase): return self._fstr_finalize(builder, pool, mod, fmt_buf, arg_head, arg_tail, arg_count, trans) def translate_formatted_value(self, builder: llvmlite.IRBuilder | t.CPtr, - pool: rowptr[memhub.MemBuddy], + pool: rawptr[memhub.MemBuddy], mod: llvmlite.LLVMModule | t.CPtr, node: ast.AST | t.CPtr, trans: HT.Translator | t.CPtr = None) -> llvmlite.Value | t.CPtr: @@ -152,7 +152,7 @@ class ExprGenFstr(ExprGenBase.ExprGenBase): arg_count = 1 return self._fstr_finalize(builder, pool, mod, fmt_buf, arg_head, arg_tail, arg_count, trans) def _fstr_finalize(self, builder: llvmlite.IRBuilder | t.CPtr, - pool: rowptr[memhub.MemBuddy], + pool: rawptr[memhub.MemBuddy], mod: llvmlite.LLVMModule | t.CPtr, fmt_buf: str, arg_head: llvmlite.Value | t.CPtr, @@ -223,7 +223,7 @@ class ExprGenFstr(ExprGenBase.ExprGenBase): src_len: sizet = string.strlen(s) if cur_len + src_len < FSTR_BUF_SIZE: string.strcpy(fmt_buf + cur_len, s) - def _fstr_parse_format_spec(self, pool: rowptr[memhub.MemBuddy], + def _fstr_parse_format_spec(self, pool: rawptr[memhub.MemBuddy], spec_node: ast.AST | t.CPtr, val: llvmlite.Value | t.CPtr, arg_node: ast.AST | t.CPtr) -> str: @@ -406,7 +406,7 @@ class ExprGenFstr(ExprGenBase.ExprGenBase): else: return None return out - def _fstr_infer_c_fmt(self, pool: rowptr[memhub.MemBuddy], + def _fstr_infer_c_fmt(self, pool: rawptr[memhub.MemBuddy], val: llvmlite.Value | t.CPtr, arg_node: ast.AST | t.CPtr, trans: HT.Translator | t.CPtr) -> str: @@ -443,7 +443,7 @@ class ExprGenFstr(ExprGenBase.ExprGenBase): self.Gen.TypeGenErr.fatal_error(arg_node, "f-string 格式无法推断(值类型缺失)", "TypeError") return None def _fstr_cast_value(self, builder: llvmlite.IRBuilder | t.CPtr, - pool: rowptr[memhub.MemBuddy], + pool: rawptr[memhub.MemBuddy], val: llvmlite.Value | t.CPtr, c_fmt: str, arg_node: ast.AST | t.CPtr, diff --git a/App/lib/core/Gen/Expr/ExprGenMixin.vp b/App/lib/core/Gen/Expr/ExprGenMixin.vp index 6cdcfed..561d1ca 100644 --- a/App/lib/core/Gen/Expr/ExprGenMixin.vp +++ b/App/lib/core/Gen/Expr/ExprGenMixin.vp @@ -61,7 +61,7 @@ class ExprGenMixin(ExprGenBase.ExprGenBase): # 翻译值表达式(RHS 分派)— 模块级版本 # ============================================================ def translate_value(self, builder: llvmlite.IRBuilder | t.CPtr, - pool: rowptr[memhub.MemBuddy], + pool: rawptr[memhub.MemBuddy], mod: llvmlite.LLVMModule | t.CPtr, node: ast.AST | t.CPtr, funcs_ptr: t.CPtr = None, @@ -85,7 +85,7 @@ class ExprGenMixin(ExprGenBase.ExprGenBase): return rv def _translate_value_impl(self, builder: llvmlite.IRBuilder | t.CPtr, - pool: rowptr[memhub.MemBuddy], + pool: rawptr[memhub.MemBuddy], mod: llvmlite.LLVMModule | t.CPtr, node: ast.AST | t.CPtr, funcs_ptr: t.CPtr = None, diff --git a/App/lib/core/Gen/Expr/ExprGenName.vp b/App/lib/core/Gen/Expr/ExprGenName.vp index d854c9d..b32befd 100644 --- a/App/lib/core/Gen/Expr/ExprGenName.vp +++ b/App/lib/core/Gen/Expr/ExprGenName.vp @@ -25,7 +25,7 @@ import lib.core.Gen.GenApi as GenApi class ExprGenName(ExprGenBase.ExprGenBase): """Name/Subscript/下标访问""" - def _cut_from_import_mod(self, pool: rowptr[memhub.MemBuddy], + def _cut_from_import_mod(self, pool: rawptr[memhub.MemBuddy], raw: str) -> str: """截断 lookup_from_import 返回的模块名到独立缓冲 @@ -51,7 +51,7 @@ class ExprGenName(ExprGenBase.ExprGenBase): return buf_c def translate_name_value(self, builder: llvmlite.IRBuilder | t.CPtr, - pool: rowptr[memhub.MemBuddy], + pool: rawptr[memhub.MemBuddy], node: ast.AST | t.CPtr, trans: HT.Translator | t.CPtr = None) -> llvmlite.Value | t.CPtr: """翻译变量引用(Name 节点)→ load""" @@ -363,7 +363,7 @@ class ExprGenName(ExprGenBase.ExprGenBase): # 返回元素地址 (i8*),调用方根据元素类型 load 正确的值 # ============================================================ def list_getitem_inline(self, builder: llvmlite.IRBuilder | t.CPtr, - pool: rowptr[memhub.MemBuddy], + pool: rawptr[memhub.MemBuddy], lm_obj: llvmlite.Value | t.CPtr, idx_val: llvmlite.Value | t.CPtr, node: ast.AST | t.CPtr = None) -> llvmlite.Value | t.CPtr: @@ -403,7 +403,7 @@ class ExprGenName(ExprGenBase.ExprGenBase): # 支持: list[int]→i32, list[str]/list[bytes]→i8*, list[CInt]→i32 等 # 默认: i32 # ============================================================ - def _list_elem_type_from_name(self, pool: rowptr[memhub.MemBuddy], + def _list_elem_type_from_name(self, pool: rawptr[memhub.MemBuddy], struct_name: str) -> llvmlite.LLVMType | t.CPtr: """从 list 类型名提取元素 LLVM 类型""" if pool is None or struct_name is None: @@ -438,7 +438,7 @@ class ExprGenName(ExprGenBase.ExprGenBase): if string.strstr(struct_name, "list[CPtr]") is not None: return llvmlite.Ptr(pool, i8_ty_d) # 未知 list[T] 元素类型(自定义结构体元素,如 - # list[rowptr[7565e081d88517ac.AST]] / list[sha1.Foo|t.CPtr]): + # list[rawptr[7565e081d88517ac.AST]] / list[sha1.Foo|t.CPtr]): # 元素槽存对象指针(8 字节)。从元素类型文本还原对象指针 LLVM 类型 # Ptr(%Struct),使 list.get/__getitem__/pop 内联返回值的 LLVM 类型 # 携带元素原型类——链式方法调用(mod.children.get(0).kind())的接收者 @@ -456,15 +456,15 @@ class ExprGenName(ExprGenBase.ExprGenBase): # ============================================================ # _list_elem_obj_ty_from_struct_name — 从 list 特化类型名还原元素对象指针类型 # - # struct_name 形如 "{_list_sha1}.list[rowptr[{sha1}.AST]]" 或 + # struct_name 形如 "{_list_sha1}.list[rawptr[{sha1}.AST]]" 或 # "{_list_sha1}.list[{sha1}.AST|t.CPtr]"(联合元素)。取 '[' 与最后 ']' - # 之间的元素描述文本:剥 rowptr[...] 包装、按 '|' 联合分段、去首尾空白, + # 之间的元素描述文本:剥 rawptr[...] 包装、按 '|' 联合分段、去首尾空白, # 逐段按已注册结构体还原(元素类带模块 SHA1 前缀时 find_struct 走 # find_struct_by_module 精确匹配,规避跨模块同名歧义);命中返回 # llvmlite.Ptr(entry.Ty)(list 元素槽 8 字节存对象指针)。全部未命中 # 返回 None(调用方回退 Ptr(i8) 旧行为,不影响已支持的内置元素)。 # ============================================================ - def _list_elem_obj_ty_from_struct_name(self, pool: rowptr[memhub.MemBuddy], + def _list_elem_obj_ty_from_struct_name(self, pool: rawptr[memhub.MemBuddy], struct_name: str) -> llvmlite.LLVMType | t.CPtr: """从 list 特化类型名还原元素对象指针 LLVM 类型,失败返回 None""" if pool is None or struct_name is None: @@ -483,9 +483,9 @@ class ExprGenName(ExprGenBase.ExprGenBase): return None string.strncpy(elem_buf_e, lb_e + 1, elen_e) elem_buf_e[elen_e] = '\0' - # 剥 rowptr[...] 包装(元素声明为对象指针,如 rowptr[sha1.AST]) + # 剥 rawptr[...] 包装(元素声明为对象指针,如 rawptr[sha1.AST]) cur_e: str = elem_buf_e - if string.strncmp(cur_e, "rowptr[", 7) == 0: + if string.strncmp(cur_e, "rawptr[", 7) == 0: cur_e = cur_e + 7 # 按 '|' 联合分段(A|B),段内去首尾空白/尾部 ']'/引号;段文本直接 # 交给 find_struct(内置名 CPtr/str/int 等不注册 struct → 天然返回 @@ -532,7 +532,7 @@ class ExprGenName(ExprGenBase.ExprGenBase): # 直接存储 rhs_val 到元素地址 (coerce 为 i8* 后 store) # ============================================================ def list_setitem_inline(self, builder: llvmlite.IRBuilder | t.CPtr, - pool: rowptr[memhub.MemBuddy], + pool: rawptr[memhub.MemBuddy], lm_obj: llvmlite.Value | t.CPtr, idx_val: llvmlite.Value | t.CPtr, rhs_val: llvmlite.Value | t.CPtr, @@ -637,7 +637,7 @@ class ExprGenName(ExprGenBase.ExprGenBase): return llvmlite.build_load(builder, pointee, alloca) # _nonlocal_subscript_ptr:nonlocal 数组/指针的下标元素指针——嵌套(提升)函数体内访问 nonlocal 变量时,其实际存储是运行时共享堆(env[ni] 存堆地址),不能 lookup_var 找外层函数 alloca(其 SSA 编号属外层函数,当前函数引用会错乱崩溃)。正确路径:从 env 读堆地址(_load_raw_var_ptr)→ bitcast → GEP def _nonlocal_subscript_ptr(self, builder: llvmlite.IRBuilder | t.CPtr, - pool: rowptr[memhub.MemBuddy], + pool: rawptr[memhub.MemBuddy], trans: HT.Translator | t.CPtr, nm_id: str, idx_val: llvmlite.Value | t.CPtr) -> llvmlite.Value | t.CPtr: @@ -680,7 +680,7 @@ class ExprGenName(ExprGenBase.ExprGenBase): # list[T]: 泛型类不注册 struct,subscript 走 __getitem__ 内联路径 # ============================================================ def translate_subscript(self, builder: llvmlite.IRBuilder | t.CPtr, - pool: rowptr[memhub.MemBuddy], + pool: rawptr[memhub.MemBuddy], mod: llvmlite.LLVMModule | t.CPtr, node: ast.AST | t.CPtr, trans: HT.Translator | t.CPtr = None) -> llvmlite.Value | t.CPtr: @@ -1063,7 +1063,7 @@ class ExprGenName(ExprGenBase.ExprGenBase): return 0 def get_subscript_ptr(self, builder: llvmlite.IRBuilder | t.CPtr, - pool: rowptr[memhub.MemBuddy], + pool: rawptr[memhub.MemBuddy], mod: llvmlite.LLVMModule | t.CPtr, node: ast.AST | t.CPtr, trans: HT.Translator | t.CPtr = None) -> llvmlite.Value | t.CPtr: diff --git a/App/lib/core/Gen/Expr/ExprGenOps.vp b/App/lib/core/Gen/Expr/ExprGenOps.vp index 52ecb5f..894f3db 100644 --- a/App/lib/core/Gen/Expr/ExprGenOps.vp +++ b/App/lib/core/Gen/Expr/ExprGenOps.vp @@ -32,7 +32,7 @@ class ExprGenOps(ExprGenBase.ExprGenBase): # merge_blk: phi [body_val, then_blk], [orelse_val, else_blk] # ============================================================ def translate_ifexp(self, builder: llvmlite.IRBuilder | t.CPtr, - pool: rowptr[memhub.MemBuddy], + pool: rawptr[memhub.MemBuddy], mod: llvmlite.LLVMModule | t.CPtr, node: ast.AST | t.CPtr, trans: HT.Translator | t.CPtr = None) -> llvmlite.Value | t.CPtr: @@ -172,7 +172,7 @@ class ExprGenOps(ExprGenBase.ExprGenBase): # ============================================================ # 翻译比较表达式 Compare(left, ops, comparators) # ============================================================ - def should_zext_widen(self, pool: rowptr[memhub.MemBuddy], + def should_zext_widen(self, pool: rawptr[memhub.MemBuddy], narrow_val: llvmlite.Value | t.CPtr, wide_val: llvmlite.Value | t.CPtr, narrow_node: ast.AST | t.CPtr = None, @@ -240,7 +240,7 @@ class ExprGenOps(ExprGenBase.ExprGenBase): if cdv_zw > 0x7FFFFFFF: return 1 return 0 - def _node_type_unsigned(self, pool: rowptr[memhub.MemBuddy], + def _node_type_unsigned(self, pool: rawptr[memhub.MemBuddy], node: ast.AST | t.CPtr, trans: HT.Translator | t.CPtr = None) -> int: """轻量判断 AST 节点是否解析为无符号整数类型(1=是,0=否/未知) @@ -352,7 +352,7 @@ class ExprGenOps(ExprGenBase.ExprGenBase): fi_u += 1 return 0 return 0 - def _node_type_signed(self, pool: rowptr[memhub.MemBuddy], + def _node_type_signed(self, pool: rawptr[memhub.MemBuddy], node: ast.AST | t.CPtr, trans: HT.Translator | t.CPtr = None) -> int: """源节点是否**明确有符号**整数(独立真源的 SIGNED 分支;未知返回 0) @@ -465,7 +465,7 @@ class ExprGenOps(ExprGenBase.ExprGenBase): return 1 return 0 def translate_compare(self, builder: llvmlite.IRBuilder | t.CPtr, - pool: rowptr[memhub.MemBuddy], + pool: rawptr[memhub.MemBuddy], mod: llvmlite.LLVMModule | t.CPtr, node: ast.AST | t.CPtr, trans: HT.Translator | t.CPtr = None) -> llvmlite.Value | t.CPtr: @@ -780,7 +780,7 @@ class ExprGenOps(ExprGenBase.ExprGenBase): # 翻译一元运算表达式 UnaryOp(op, operand) # ============================================================ def translate_unaryop(self, builder: llvmlite.IRBuilder | t.CPtr, - pool: rowptr[memhub.MemBuddy], + pool: rawptr[memhub.MemBuddy], mod: llvmlite.LLVMModule | t.CPtr, node: ast.AST | t.CPtr, trans: HT.Translator | t.CPtr = None) -> llvmlite.Value | t.CPtr: @@ -954,7 +954,7 @@ class ExprGenOps(ExprGenBase.ExprGenBase): # merge 块用 phi 合并所有入边的 i1 # ============================================================ def translate_boolop(self, builder: llvmlite.IRBuilder | t.CPtr, - pool: rowptr[memhub.MemBuddy], + pool: rawptr[memhub.MemBuddy], mod: llvmlite.LLVMModule | t.CPtr, node: ast.AST | t.CPtr, funcs_ptr: t.CPtr = None, @@ -1121,7 +1121,7 @@ class ExprGenOps(ExprGenBase.ExprGenBase): # dunder 方法。找到则生成方法调用 lhs.__dunder__(rhs),返回 # 调用结果;未找到返回 None,调用方回退到原生运算。 # ============================================================ - def try_operator_overload(self, pool: rowptr[memhub.MemBuddy], + def try_operator_overload(self, pool: rawptr[memhub.MemBuddy], builder: llvmlite.IRBuilder | t.CPtr, mod: llvmlite.LLVMModule | t.CPtr, lhs: llvmlite.Value | t.CPtr, @@ -1230,7 +1230,7 @@ class ExprGenOps(ExprGenBase.ExprGenBase): # dunder 方法(__neg__/__pos__/__invert__)。找到则生成方法调用 # operand.__dunder__(),返回调用结果;未找到返回 None,调用方回退到原生运算。 # ============================================================ - def try_unary_operator_overload(self, pool: rowptr[memhub.MemBuddy], + def try_unary_operator_overload(self, pool: rawptr[memhub.MemBuddy], builder: llvmlite.IRBuilder | t.CPtr, mod: llvmlite.LLVMModule | t.CPtr, operand: llvmlite.Value | t.CPtr, @@ -1311,7 +1311,7 @@ class ExprGenOps(ExprGenBase.ExprGenBase): # ============================================================ # 翻译二元运算(自动类型提升) # ============================================================ - def translate_binop(self, pool: rowptr[memhub.MemBuddy], + def translate_binop(self, pool: rawptr[memhub.MemBuddy], builder: llvmlite.IRBuilder | t.CPtr, mod: llvmlite.LLVMModule | t.CPtr, node: ast.AST | t.CPtr, diff --git a/App/lib/core/Gen/Func/FuncGenBase.vp b/App/lib/core/Gen/Func/FuncGenBase.vp index 555ef03..e6e738a 100644 --- a/App/lib/core/Gen/Func/FuncGenBase.vp +++ b/App/lib/core/Gen/Func/FuncGenBase.vp @@ -31,7 +31,7 @@ class FuncGenBase(CallGenBase.CallGenBase): # # 返回 LLVM IR 属性字符串(如 "alwaysinline nounwind"),无属性返回 None # ============================================================ - def extract_func_attrs(self, pool: rowptr[memhub.MemBuddy], + def extract_func_attrs(self, pool: rawptr[memhub.MemBuddy], decorator_list: list[ast.AST | t.CPtr] | t.CPtr, imported_modules: str) -> str: """从 decorator_list 提取 c.Attribute 属性,返回 LLVM IR 属性字符串""" @@ -107,7 +107,7 @@ class FuncGenBase(CallGenBase.CallGenBase): if found_any == 0: return None return attrs_buf - def extract_func_section(self, pool: rowptr[memhub.MemBuddy], + def extract_func_section(self, pool: rawptr[memhub.MemBuddy], decorator_list: list[ast.AST | t.CPtr] | t.CPtr, imported_modules: str) -> str: """提取 @c.Attribute(t.attr.section("xxx")) 为属性组文本 '"section"="xxx"'。 @@ -366,7 +366,7 @@ class FuncGenBase(CallGenBase.CallGenBase): # 两阶段必须一致,否则 declare i32 + define {i64,i64,i64} → llc # "ret doesn't match function result type"。 # ============================================================ - def _resolve_creturn_ret_ty(self, pool: rowptr[memhub.MemBuddy], + def _resolve_creturn_ret_ty(self, pool: rawptr[memhub.MemBuddy], fd: ast.FunctionDef | t.CPtr, imported_modules: str, from_imports: str, @@ -411,7 +411,7 @@ class FuncGenBase(CallGenBase.CallGenBase): # ============================================================ # 创建 LLVM 函数(简单版本,仅声明) # ============================================================ - def create_function(self, pool: rowptr[memhub.MemBuddy], + def create_function(self, pool: rawptr[memhub.MemBuddy], mod: llvmlite.LLVMModule | t.CPtr, name: str, args_node: ast.AST | t.CPtr, diff --git a/App/lib/core/Gen/Func/FuncGenDef.vp b/App/lib/core/Gen/Func/FuncGenDef.vp index e0a85e6..a4faf92 100644 --- a/App/lib/core/Gen/Func/FuncGenDef.vp +++ b/App/lib/core/Gen/Func/FuncGenDef.vp @@ -36,7 +36,7 @@ class FuncGenDef(CallGenBase.CallGenBase): """预扫描所有顶层 FunctionDef,创建前向声明""" if trans is None or tree is None: return 0 - pool: rowptr[memhub.MemBuddy] = trans.Pool + pool: rawptr[memhub.MemBuddy] = trans.Pool mod: llvmlite.LLVMModule | t.CPtr = trans.Module if pool is None or mod is None: return 0 @@ -319,7 +319,7 @@ class FuncGenDef(CallGenBase.CallGenBase): if fd.flags is not None and (fd.flags & 1) != 0: return self.Gen.AsyncGen.translate_async_function(trans, node) - pool: rowptr[memhub.MemBuddy] = trans.Pool + pool: rawptr[memhub.MemBuddy] = trans.Pool mod: llvmlite.LLVMModule | t.CPtr = trans.Module imported_modules: str = trans._imported_modules from_imports: str = trans._from_imports @@ -1102,7 +1102,7 @@ class FuncGenDef(CallGenBase.CallGenBase): # 前置返回:0=跳过原函数,1=调用一次,N=循环 N 次 # ============================================================ def _gen_decor_wrapper(self, trans: HT.Translator | t.CPtr, - pool: rowptr[memhub.MemBuddy], + pool: rawptr[memhub.MemBuddy], mod: llvmlite.LLVMModule | t.CPtr, func: llvmlite.Function | t.CPtr, func_name: str, diff --git a/App/lib/core/Gen/Func/FuncGenMixin.vp b/App/lib/core/Gen/Func/FuncGenMixin.vp index c6430d6..f000535 100644 --- a/App/lib/core/Gen/Func/FuncGenMixin.vp +++ b/App/lib/core/Gen/Func/FuncGenMixin.vp @@ -81,7 +81,7 @@ class FuncGenMixin(CallGenBase.CallGenBase): if fd is None or fd.name is None: return 0 - pool: rowptr[memhub.MemBuddy] = trans.Pool + pool: rawptr[memhub.MemBuddy] = trans.Pool mod: llvmlite.LLVMModule | t.CPtr = trans.Module func_name: str = fd.name @@ -854,7 +854,7 @@ class FuncGenMixin(CallGenBase.CallGenBase): # 注:`case _`(Void/Struct/Func 等)仍返回 8——不是静默兜底,而是**算不出** # (结构体尺寸需查布局表,本函数只做 LLVMType 递归);改 fatal 会拒绝 # "nonlocal 结构体"这一合法用法,需先补布局查询能力。 - def _type_byte_size(self, pool: rowptr[memhub.MemBuddy], + def _type_byte_size(self, pool: rawptr[memhub.MemBuddy], ty: llvmlite.LLVMType | t.CPtr) -> int: """计算 LLVM 类型占用的字节大小(递归)""" if ty is None: @@ -888,7 +888,7 @@ class FuncGenMixin(CallGenBase.CallGenBase): # 变量名: nlheap_{sha1}.{name}(全局变量,跨函数可见;SSA 编号是函数 # 局部的,跨函数传递堆地址只能经全局变量/模块级映射)。 # ============================================================ - def _nl_heap_global_name(self, pool: rowptr[memhub.MemBuddy], + def _nl_heap_global_name(self, pool: rawptr[memhub.MemBuddy], trans: HT.Translator | t.CPtr, name: str) -> str: """构造 nonlocal 堆地址全局映射变量名 nlheap_{sha1}.{name}""" @@ -903,7 +903,7 @@ class FuncGenMixin(CallGenBase.CallGenBase): # ============================================================ # _nl_heap_global_ref - 全局映射变量引用 Value(i8**) # ============================================================ - def _nl_heap_global_ref(self, pool: rowptr[memhub.MemBuddy], + def _nl_heap_global_ref(self, pool: rawptr[memhub.MemBuddy], trans: HT.Translator | t.CPtr, name: str) -> llvmlite.Value | t.CPtr: """获取 nonlocal 堆地址全局映射变量的引用(@"..." 引号包裹)""" @@ -997,7 +997,7 @@ class FuncGenMixin(CallGenBase.CallGenBase): # ============================================================ def _prepare_chain_nonlocals(self, trans: HT.Translator | t.CPtr, node: ast.AST | t.CPtr, - pool: rowptr[memhub.MemBuddy], + pool: rawptr[memhub.MemBuddy], builder: llvmlite.IRBuilder | t.CPtr, mod: llvmlite.LLVMModule | t.CPtr, i8_ty: llvmlite.LLVMType | t.CPtr, @@ -1096,7 +1096,7 @@ class FuncGenMixin(CallGenBase.CallGenBase): # 赋值语句据此创建 i8** alloca,调用走 translate_closure_call # ============================================================ def translate_lambda(self, builder: llvmlite.IRBuilder | t.CPtr, - pool: rowptr[memhub.MemBuddy], + pool: rawptr[memhub.MemBuddy], mod: llvmlite.LLVMModule | t.CPtr, node: ast.AST | t.CPtr, trans: HT.Translator | t.CPtr = None) -> llvmlite.Value | t.CPtr: diff --git a/App/lib/core/Gen/GenApi.vp b/App/lib/core/Gen/GenApi.vp index bdb9348..e533673 100644 --- a/App/lib/core/Gen/GenApi.vp +++ b/App/lib/core/Gen/GenApi.vp @@ -18,7 +18,7 @@ import lib.core.Gen.Generator as Generator # 全局 gen 单例(main/BuildPipeline 创建 gen 后注入) -_g_gen: rowptr[Generator.Generator] = None +_g_gen: rawptr[Generator.Generator] = None # ---------------- set_temp_dir(委托 TypeGenBase.set_temp_dir) ---------------- @@ -71,7 +71,7 @@ def clear_ctypedefs() -> None: # ---------------- RegisterCTypedefFromSource(委托 TypeGenCType.register_ctypedef_from_source) ---------------- -def RegisterCTypedefFromSource(pool: rowptr[memhub.MemBuddy], src: str) -> int: +def RegisterCTypedefFromSource(pool: rawptr[memhub.MemBuddy], src: str) -> int: """委托到 gen.register_ctypedef_from_source(原 Handles 壳)""" if _g_gen is not None: _g_gen.TypeGenCType.register_ctypedef_from_source(pool, src) @@ -106,7 +106,7 @@ def fatal_error(node: ast.AST | t.CPtr, msg: str, # ---------------- map_t_type(委托 TypeGenResolve.map_t_type) ---------------- -def map_t_type(pool: rowptr[memhub.MemBuddy], type_name: str) -> llvmlite.LLVMType | t.CPtr: +def map_t_type(pool: rawptr[memhub.MemBuddy], type_name: str) -> llvmlite.LLVMType | t.CPtr: """委托到 gen.map_t_type(原 Handles 壳)""" if _g_gen is not None: _g_gen.TypeGenResolve.map_t_type(pool, type_name) @@ -114,7 +114,7 @@ def map_t_type(pool: rowptr[memhub.MemBuddy], type_name: str) -> llvmlite.LLVMTy # ---------------- resolve_typedef_or_map(委托 TypeGenResolve.resolve_typedef_or_map) ---------------- -def resolve_typedef_or_map(pool: rowptr[memhub.MemBuddy], +def resolve_typedef_or_map(pool: rawptr[memhub.MemBuddy], name: str, imported_modules: str, from_imports: str, @@ -126,7 +126,7 @@ def resolve_typedef_or_map(pool: rowptr[memhub.MemBuddy], # ---------------- infer_external_func_ret_ty(委托 CallGenLib._infer_external_func_ret_ty) ---------------- -def infer_external_func_ret_ty(pool: rowptr[memhub.MemBuddy], +def infer_external_func_ret_ty(pool: rawptr[memhub.MemBuddy], func_name: str) -> llvmlite.LLVMType | t.CPtr: """委托到 gen.CallGenLib._infer_external_func_ret_ty(外部函数返回类型白名单) @@ -158,7 +158,7 @@ def _is_ctypedef_annotation(annotation: ast.AST | t.CPtr) -> int: # ---------------- resolve_annotation_type(委托 TypeGenResolve.resolve_annotation_type) ---------------- -def resolve_annotation_type(pool: rowptr[memhub.MemBuddy], node: ast.AST | t.CPtr, imported_modules: str, from_imports: str, trans: HT.Translator | t.CPtr = None, depth: int = 0) -> llvmlite.LLVMType | t.CPtr: +def resolve_annotation_type(pool: rawptr[memhub.MemBuddy], node: ast.AST | t.CPtr, imported_modules: str, from_imports: str, trans: HT.Translator | t.CPtr = None, depth: int = 0) -> llvmlite.LLVMType | t.CPtr: """委托到 gen.resolve_annotation_type(原 Handles 壳)""" if _g_gen is not None: return _g_gen.TypeGenResolve.resolve_annotation_type(pool, node, imported_modules, from_imports, trans, depth) @@ -175,7 +175,7 @@ def has_decorator_marker(node: ast.AST | t.CPtr, marker_name: str, # ---------------- _get_type_name_from_annotation(委托 TypeGenResolve._get_type_name_from_annotation) ---------------- -def _get_type_name_from_annotation(pool: rowptr[memhub.MemBuddy], node: ast.AST | t.CPtr) -> str: +def _get_type_name_from_annotation(pool: rawptr[memhub.MemBuddy], node: ast.AST | t.CPtr) -> str: """委托到 gen._get_type_name_from_annotation(原 Handles 壳)""" if _g_gen is not None: return _g_gen.TypeGenResolve._get_type_name_from_annotation(pool, node) @@ -183,7 +183,7 @@ def _get_type_name_from_annotation(pool: rowptr[memhub.MemBuddy], node: ast.AST # ---------------- register_ctypedef(委托 TypeGenCType.register_ctypedef) ---------------- -def register_ctypedef(pool: rowptr[memhub.MemBuddy], name: str, type_str: str): +def register_ctypedef(pool: rawptr[memhub.MemBuddy], name: str, type_str: str): """委托到 gen.register_ctypedef(原 Handles 壳)""" if _g_gen is not None: _g_gen.TypeGenCType.register_ctypedef(pool, name, type_str) @@ -206,7 +206,7 @@ def is_cdefine_found() -> int: # ---------------- register_cdefine_constant(委托 TypeGenCDef.register_cdefine_constant) ---------------- -def register_cdefine_constant(pool: rowptr[memhub.MemBuddy], +def register_cdefine_constant(pool: rawptr[memhub.MemBuddy], name: str, value: int64): """委托到 gen.register_cdefine_constant(原 Handles 壳)""" if _g_gen is not None: @@ -214,7 +214,7 @@ def register_cdefine_constant(pool: rowptr[memhub.MemBuddy], # ---------------- register_cdefine_double(委托 TypeGenCDef.register_cdefine_double) ---------------- -def register_cdefine_double(pool: rowptr[memhub.MemBuddy], +def register_cdefine_double(pool: rawptr[memhub.MemBuddy], name: str, value: double): """委托到 gen.register_cdefine_double(原 Handles 壳)""" if _g_gen is not None: @@ -260,7 +260,7 @@ def get_temp_dir() -> str: # ---------------- reset_visible_structs(委托 StructGenMixin.reset_visible_structs) ---------------- -def reset_visible_structs(pool: rowptr[memhub.MemBuddy], strict: int): +def reset_visible_structs(pool: rawptr[memhub.MemBuddy], strict: int): """委托到 gen.reset_visible_structs(原 Handles 壳)""" if _g_gen is not None: _g_gen.StructGen.reset_visible_structs(pool, strict) @@ -312,7 +312,7 @@ def get_enum_base_type(enum_name: str) -> llvmlite.LLVMType | t.CPtr: # ---------------- add_visible_struct(委托 StructGenMixin.add_visible_struct) ---------------- -def add_visible_struct(pool: rowptr[memhub.MemBuddy], name: str): +def add_visible_struct(pool: rawptr[memhub.MemBuddy], name: str): """委托到 gen.add_visible_struct(原 Handles 壳)""" if _g_gen is not None: _g_gen.StructGen.add_visible_struct(pool, name) @@ -335,7 +335,7 @@ def find_struct_by_type(struct_ty: llvmlite.LLVMType | t.CPtr) -> GenTypes.Struc # ---------------- register_struct(委托 StructGenMixin.register_struct) ---------------- -def register_struct(pool: rowptr[memhub.MemBuddy], +def register_struct(pool: rawptr[memhub.MemBuddy], name: str, struct_ty: llvmlite.LLVMType | t.CPtr, sha1: str = None) -> GenTypes.StructEntry | t.CPtr: @@ -346,7 +346,7 @@ def register_struct(pool: rowptr[memhub.MemBuddy], # ---------------- add_field(委托 StructGenMixin.add_field) ---------------- -def add_field(pool: rowptr[memhub.MemBuddy], +def add_field(pool: rawptr[memhub.MemBuddy], struct_entry: GenTypes.StructEntry | t.CPtr, field_name: str, field_ty: llvmlite.LLVMType | t.CPtr) -> int: @@ -357,7 +357,7 @@ def add_field(pool: rowptr[memhub.MemBuddy], # ---------------- register_struct_alias(委托 StructGenMixin.register_struct_alias) ---------------- -def register_struct_alias(pool: rowptr[memhub.MemBuddy], +def register_struct_alias(pool: rawptr[memhub.MemBuddy], name: str, sha1: str, src_entry: GenTypes.StructEntry | t.CPtr) -> GenTypes.StructEntry | t.CPtr: @@ -377,7 +377,7 @@ def get_stdlib_alloc() -> int: # ---------------- compute_package_from_relpath(委托 ImportsGenMixin.compute_package_from_relpath) ---------------- -def compute_package_from_relpath(pool: rowptr[memhub.MemBuddy], rel_path: str) -> str: +def compute_package_from_relpath(pool: rawptr[memhub.MemBuddy], rel_path: str) -> str: """委托到 gen.compute_package_from_relpath(原 Handles 壳)""" if _g_gen is not None: return _g_gen.ImportsGen.compute_package_from_relpath(pool, rel_path) @@ -435,7 +435,7 @@ def is_sha1_hex16(seg: str) -> int: # ---------------- add_imported_module(委托 ImportsGenMixin.add_imported_module) ---------------- -def add_imported_module(pool: rowptr[memhub.MemBuddy], imported_modules: str, name: str) -> str: +def add_imported_module(pool: rawptr[memhub.MemBuddy], imported_modules: str, name: str) -> str: """委托到 gen.add_imported_module(原 Handles 壳)""" if _g_gen is not None: return _g_gen.ImportsGen.add_imported_module(pool, imported_modules, name) @@ -475,7 +475,7 @@ def _get_parent_class(cd: ast.ClassDef | t.CPtr, trans: HT.Translator | t.CPtr = # ---------------- _register_generic_template(委托 ClassGenGeneric._register_generic_template) ---------------- -def _register_generic_template(pool: rowptr[memhub.MemBuddy], cd: ast.ClassDef | t.CPtr, module_sha1: str): +def _register_generic_template(pool: rawptr[memhub.MemBuddy], cd: ast.ClassDef | t.CPtr, module_sha1: str): """委托到 gen._register_generic_template(原 Handles 壳)""" if _g_gen is not None: _g_gen.ClassGenGeneric._register_generic_template(pool, cd, module_sha1) @@ -522,7 +522,7 @@ def translate_children(trans: HT.Translator | t.CPtr, tree: ast.AST | t.CPtr) -> # ---------------- init_symbol_table(委托 VarGenMixin.init_symbol_table) ---------------- -def init_symbol_table(pool: rowptr[memhub.MemBuddy]) -> GenTypes.SymbolTable | t.CPtr: +def init_symbol_table(pool: rawptr[memhub.MemBuddy]) -> GenTypes.SymbolTable | t.CPtr: """委托到 gen.init_symbol_table(原 Handles 壳)""" if _g_gen is not None: return _g_gen.VarGen.init_symbol_table(pool) @@ -545,7 +545,7 @@ def find_func_in_module(mod: llvmlite.LLVMModule | t.CPtr, name: str) -> llvmlit # ---------------- add_func_to_table(委托 CallGenLeafKit.add_func_to_table) ---------------- -def add_func_to_table(funcs: GenTypes.FuncEntry | t.CPtr, func_count: int, name: str, func: llvmlite.Function | t.CPtr, max_count: int, defaults: t.CPtr = None, default_count: int = 0, param_count: int = 0, pool: rowptr[memhub.MemBuddy] = None, def_sha1: str = None) -> int: +def add_func_to_table(funcs: GenTypes.FuncEntry | t.CPtr, func_count: int, name: str, func: llvmlite.Function | t.CPtr, max_count: int, defaults: t.CPtr = None, default_count: int = 0, param_count: int = 0, pool: rawptr[memhub.MemBuddy] = None, def_sha1: str = None) -> int: """委托到 gen.add_func_to_table(原 Handles 壳) def_sha1:定义该函数的模块 SHA1(依赖注入路径必须传,避免默认值被挂到导入方名下) @@ -556,7 +556,7 @@ def add_func_to_table(funcs: GenTypes.FuncEntry | t.CPtr, func_count: int, name: # ---------------- init_func_table(委托 CallGenLeafKit.init_func_table) ---------------- -def init_func_table(pool: rowptr[memhub.MemBuddy], max_count: int) -> GenTypes.FuncEntry | t.CPtr: +def init_func_table(pool: rawptr[memhub.MemBuddy], max_count: int) -> GenTypes.FuncEntry | t.CPtr: """委托到 gen.init_func_table(原 Handles 壳)""" if _g_gen is not None: return _g_gen.CallGenLeafKit.init_func_table(pool, max_count) @@ -564,7 +564,7 @@ def init_func_table(pool: rowptr[memhub.MemBuddy], max_count: int) -> GenTypes.F # ---------------- translate_call(委托 CallGenMixin.translate_call) ---------------- -def translate_call(pool: rowptr[memhub.MemBuddy], builder: llvmlite.IRBuilder | t.CPtr, mod: llvmlite.LLVMModule | t.CPtr, node: ast.AST | t.CPtr, funcs_ptr: t.CPtr, func_count: int, trans: HT.Translator | t.CPtr = None) -> llvmlite.Value | t.CPtr: +def translate_call(pool: rawptr[memhub.MemBuddy], builder: llvmlite.IRBuilder | t.CPtr, mod: llvmlite.LLVMModule | t.CPtr, node: ast.AST | t.CPtr, funcs_ptr: t.CPtr, func_count: int, trans: HT.Translator | t.CPtr = None) -> llvmlite.Value | t.CPtr: """委托到 gen.translate_call(原 Handles 壳)""" if _g_gen is not None: return _g_gen.CallGen.translate_call(pool, builder, mod, node, funcs_ptr, func_count, trans) @@ -572,14 +572,14 @@ def translate_call(pool: rowptr[memhub.MemBuddy], builder: llvmlite.IRBuilder | # ---------------- translate_printf_call(委托 CallGenLeafKit.translate_printf_call) ---------------- -def translate_printf_call(pool: rowptr[memhub.MemBuddy], builder: llvmlite.IRBuilder | t.CPtr, mod: llvmlite.LLVMModule | t.CPtr, cl: ast.Call | t.CPtr, trans: HT.Translator | t.CPtr = None): +def translate_printf_call(pool: rawptr[memhub.MemBuddy], builder: llvmlite.IRBuilder | t.CPtr, mod: llvmlite.LLVMModule | t.CPtr, cl: ast.Call | t.CPtr, trans: HT.Translator | t.CPtr = None): """委托到 gen.translate_printf_call(原 Handles 壳)""" if _g_gen is not None: _g_gen.CallGenLeafKit.translate_printf_call(pool, builder, mod, cl, trans) # ---------------- translate_print_call(委托 CallGenLeafKit.translate_print_call) ---------------- -def translate_print_call(pool: rowptr[memhub.MemBuddy], builder: llvmlite.IRBuilder | t.CPtr, mod: llvmlite.LLVMModule | t.CPtr, cl: ast.Call | t.CPtr, trans: HT.Translator | t.CPtr = None): +def translate_print_call(pool: rawptr[memhub.MemBuddy], builder: llvmlite.IRBuilder | t.CPtr, mod: llvmlite.LLVMModule | t.CPtr, cl: ast.Call | t.CPtr, trans: HT.Translator | t.CPtr = None): """委托到 gen.translate_print_call(原 Handles 壳)""" if _g_gen is not None: _g_gen.CallGenLeafKit.translate_print_call(pool, builder, mod, cl, trans) diff --git a/App/lib/core/Gen/GenTypes.vp b/App/lib/core/Gen/GenTypes.vp index 650324c..638344a 100644 --- a/App/lib/core/Gen/GenTypes.vp +++ b/App/lib/core/Gen/GenTypes.vp @@ -92,7 +92,7 @@ class Scope: @t.NoVTable class SymbolTable: """嵌套作用域符号表""" - Pool: rowptr[memhub.MemBuddy] + Pool: rawptr[memhub.MemBuddy] Root: Scope | t.CPtr Current: Scope | t.CPtr diff --git a/App/lib/core/Gen/Generator.vp b/App/lib/core/Gen/Generator.vp index d081e6b..80bbc60 100644 --- a/App/lib/core/Gen/Generator.vp +++ b/App/lib/core/Gen/Generator.vp @@ -116,7 +116,7 @@ class Generator: VarGen: VarGenMixin.VarGenMixin | t.CPtr TranslatorGen: TranslatorGenMixin.TranslatorGenMixin | t.CPtr - def __init__(self, pool: rowptr[memhub.MemBuddy]): + def __init__(self, pool: rawptr[memhub.MemBuddy]): if self is None: return # ---- alloc 46 个子对象 + 回指(永久池,fail-fast) ---- diff --git a/App/lib/core/Gen/ImportsGenMixin.vp b/App/lib/core/Gen/ImportsGenMixin.vp index 53d6b19..b5f3182 100644 --- a/App/lib/core/Gen/ImportsGenMixin.vp +++ b/App/lib/core/Gen/ImportsGenMixin.vp @@ -73,7 +73,7 @@ class ImportsGenMixin: """增量更新 imported_modules 索引(复用旧索引或新建,失败则解除绑定)""" if new_ptr is None or name_ptr is None: return - perm: rowptr[memhub.MemBuddy] = CompilerFactory.factory.PermPool + perm: rawptr[memhub.MemBuddy] = CompilerFactory.factory.PermPool if perm is None: return idx: hashtable.HashTable | t.CPtr = None @@ -109,7 +109,7 @@ class ImportsGenMixin: """增量更新 from_imports 索引(复用旧索引或新建,失败则解除绑定)""" if new_ptr is None or local_name is None or module_name is None: return - perm: rowptr[memhub.MemBuddy] = CompilerFactory.factory.PermPool + perm: rawptr[memhub.MemBuddy] = CompilerFactory.factory.PermPool if perm is None: return idx_m: hashtable.HashTable | t.CPtr = None @@ -167,7 +167,7 @@ class ImportsGenMixin: # ============================================================ # 添加已导入模块名 # ============================================================ - def add_imported_module(self, pool: rowptr[memhub.MemBuddy], + def add_imported_module(self, pool: rawptr[memhub.MemBuddy], imported_modules: str, name: str) -> str: """记录已导入的模块名,返回新的 imported_modules 字符串指针""" @@ -276,7 +276,7 @@ class ImportsGenMixin: # ============================================================ # 添加 from-import 名称映射 # ============================================================ - def add_from_import(self, pool: rowptr[memhub.MemBuddy], + def add_from_import(self, pool: rawptr[memhub.MemBuddy], from_imports: str, local_name: str, module_name: str, @@ -563,7 +563,7 @@ class ImportsGenMixin: # 解析后的完整模块名;绝对导入(level<=0)直接返回 module; # 无法解析时返回 module(回退到原始值) # ============================================================ - def _resolve_relative_module(self, pool: rowptr[memhub.MemBuddy], + def _resolve_relative_module(self, pool: rawptr[memhub.MemBuddy], current_package: str, level: int, module: str) -> str: @@ -636,7 +636,7 @@ class ImportsGenMixin: # "ast/parser.vp" → "ast" # "ast.vp" → None(顶级文件) # ============================================================ - def compute_package_from_relpath(self, pool: rowptr[memhub.MemBuddy], + def compute_package_from_relpath(self, pool: rawptr[memhub.MemBuddy], rel_path: str) -> str: """从相对路径计算包名(目录部分,分隔符替换为 .)""" if rel_path is None: @@ -711,7 +711,7 @@ class ImportsGenMixin: stdio.printf(' File "%s", line %d\n', file_name, lineno) # 显示行内内容(读源文件第 lineno 行的实际代码,便于快速定位) if lineno > 0 and file_name is not None: - f_err: rowptr[fileio.File] = fileio.File(file_name, fileio.MODE.R) + f_err: rawptr[fileio.File] = fileio.File(file_name, fileio.MODE.R) if not f_err.closed: line_buf_err: bytes = stdlib.malloc(512) if line_buf_err is not None: @@ -764,7 +764,7 @@ class ImportsGenMixin: path_buf[sep_pos] = '\0' string.strcat(path_buf, mod_name) string.strcat(path_buf, ".vp") - fex: rowptr[fileio.File] = fileio.File(path_buf, fileio.MODE.R) + fex: rawptr[fileio.File] = fileio.File(path_buf, fileio.MODE.R) if not fex.closed: fex.close() stdlib.free(path_buf) @@ -831,7 +831,7 @@ class ImportsGenMixin: # 尚未包含后续才追加的模块(如 App 源文件),检查会造成误报。 if trans._declare_only == 0: self._check_import_sha1(node, alias.name) - pool_val: rowptr[memhub.MemBuddy] = trans.Pool + pool_val: rawptr[memhub.MemBuddy] = trans.Pool im_val: str = trans._imported_modules trans._imported_modules = self.add_imported_module( pool_val, im_val, alias.name) diff --git a/App/lib/core/Gen/MatchGenMixin.vp b/App/lib/core/Gen/MatchGenMixin.vp index 99ea873..8181875 100644 --- a/App/lib/core/Gen/MatchGenMixin.vp +++ b/App/lib/core/Gen/MatchGenMixin.vp @@ -79,7 +79,7 @@ class MatchGenMixin: node: ast.AST | t.CPtr) -> int: if node is None: return 0 - pool: rowptr[memhub.MemBuddy] = trans.Pool + pool: rawptr[memhub.MemBuddy] = trans.Pool builder: llvmlite.IRBuilder | t.CPtr = trans._cur_builder func: llvmlite.Function | t.CPtr = trans._cur_func if builder is None or func is None: @@ -267,7 +267,7 @@ class MatchGenMixin: node: ast.Match | t.CPtr, renum_name: str, subject_ptr: llvmlite.Value | t.CPtr) -> int: - pool: rowptr[memhub.MemBuddy] = trans.Pool + pool: rawptr[memhub.MemBuddy] = trans.Pool builder: llvmlite.IRBuilder | t.CPtr = trans._cur_builder func: llvmlite.Function | t.CPtr = trans._cur_func # 局部记录本 renum match 是否有 br 进入 end_bb,收尾时覆盖 @@ -666,7 +666,7 @@ class MatchGenMixin: renum_ty: llvmlite.LLVMType | t.CPtr, subject_ptr: llvmlite.Value | t.CPtr, trans: HT.Translator | t.CPtr, - pool: rowptr[memhub.MemBuddy], + pool: rawptr[memhub.MemBuddy], builder: llvmlite.IRBuilder | t.CPtr): if pat is None or renum_entry is None or renum_ty is None: return @@ -771,7 +771,7 @@ class MatchGenMixin: """对齐 lhs/rhs 后生成 icmp eq(指针统一 ptrtoint i64)""" if lhs is None or rhs is None or builder is None: return None - pool: rowptr[memhub.MemBuddy] = trans.Pool + pool: rawptr[memhub.MemBuddy] = trans.Pool if self.Gen.ExprGenBase.is_ptr_type(lhs.Ty) != 0 \ or self.Gen.ExprGenBase.is_ptr_type(rhs.Ty) != 0: i64_ty: llvmlite.LLVMType | t.CPtr = llvmlite.Int64(pool) @@ -812,7 +812,7 @@ class MatchGenMixin: def _handle_sequence_match(self, trans: HT.Translator | t.CPtr, node: ast.Match | t.CPtr, subject_node: ast.AST | t.CPtr) -> int: - pool: rowptr[memhub.MemBuddy] = trans.Pool + pool: rawptr[memhub.MemBuddy] = trans.Pool builder: llvmlite.IRBuilder | t.CPtr = trans._cur_builder func: llvmlite.Function | t.CPtr = trans._cur_func if builder is None or func is None: @@ -1157,7 +1157,7 @@ class MatchGenMixin: def _handle_simple_match(self, trans: HT.Translator | t.CPtr, node: ast.Match | t.CPtr, subject_val: llvmlite.Value | t.CPtr) -> int: - pool: rowptr[memhub.MemBuddy] = trans.Pool + pool: rawptr[memhub.MemBuddy] = trans.Pool builder: llvmlite.IRBuilder | t.CPtr = trans._cur_builder func: llvmlite.Function | t.CPtr = trans._cur_func # 同主路径:局部记录本 simple match 的 br end_bb,收尾覆盖 diff --git a/App/lib/core/Gen/Stmt/StmtGenCifMixin.vp b/App/lib/core/Gen/Stmt/StmtGenCifMixin.vp index 6f3ac6e..68cd5ab 100644 --- a/App/lib/core/Gen/Stmt/StmtGenCifMixin.vp +++ b/App/lib/core/Gen/Stmt/StmtGenCifMixin.vp @@ -121,7 +121,7 @@ class StmtGenCifMixin: if string.strcmp(name, "NDEBUG") == 0: self.CifEvalOk = 1; return 0 return 0 - def _cif_name_value(self, pool: rowptr[memhub.MemBuddy], + def _cif_name_value(self, pool: rawptr[memhub.MemBuddy], trans: HT.Translator | t.CPtr, name: str) -> int: """查宏名值: 本地 CDefine → 跨模块 CDefine → 平台宏。 @@ -145,7 +145,7 @@ class StmtGenCifMixin: return pv return 0 - def _cif_attr_value(self, pool: rowptr[memhub.MemBuddy], + def _cif_attr_value(self, pool: rawptr[memhub.MemBuddy], trans: HT.Translator | t.CPtr, at: ast.Attribute | t.CPtr) -> int: """Attribute 宏值: platmacro.IS_WINDOWS → 本地 CDefine(attr) → 跨模块 CDefine。 @@ -190,7 +190,7 @@ class StmtGenCifMixin: return v2 return 0 - def _cif_eval_node(self, pool: rowptr[memhub.MemBuddy], + def _cif_eval_node(self, pool: rawptr[memhub.MemBuddy], trans: HT.Translator | t.CPtr, node: ast.AST | t.CPtr) -> int: """递归常量求值 CIf 表达式。 @@ -347,7 +347,7 @@ class StmtGenCifMixin: return 1 return 0 - def _cif_eval_call(self, pool: rowptr[memhub.MemBuddy], + def _cif_eval_call(self, pool: rawptr[memhub.MemBuddy], trans: HT.Translator | t.CPtr, node: ast.AST | t.CPtr) -> int: """编译期函数调用求值:ctraits.isptr(x)。 @@ -392,7 +392,7 @@ class StmtGenCifMixin: self.CifEvalOk = 1 return r - def _evaluate_cif_test(self, pool: rowptr[memhub.MemBuddy], + def _evaluate_cif_test(self, pool: rawptr[memhub.MemBuddy], trans: HT.Translator | t.CPtr, test: ast.AST | t.CPtr) -> int: """求值 CIf 调用(test 必须是 c.CIf 系调用)。 @@ -464,7 +464,7 @@ class StmtGenCifMixin: if rt is None: return 0 - pool: rowptr[memhub.MemBuddy] = trans.Pool + pool: rawptr[memhub.MemBuddy] = trans.Pool builder: llvmlite.IRBuilder | t.CPtr = trans._cur_builder mod: llvmlite.LLVMModule | t.CPtr = trans.Module @@ -700,7 +700,7 @@ class StmtGenCifMixin: if node is None: return 0 - pool: rowptr[memhub.MemBuddy] = trans.Pool + pool: rawptr[memhub.MemBuddy] = trans.Pool builder: llvmlite.IRBuilder | t.CPtr = trans._cur_builder func: llvmlite.Function | t.CPtr = trans._cur_func @@ -872,7 +872,7 @@ class StmtGenCifMixin: if node is None: return 0 - pool: rowptr[memhub.MemBuddy] = trans.Pool + pool: rawptr[memhub.MemBuddy] = trans.Pool builder: llvmlite.IRBuilder | t.CPtr = trans._cur_builder func: llvmlite.Function | t.CPtr = trans._cur_func @@ -1043,7 +1043,7 @@ class StmtGenCifMixin: if node is None: return 0 - pool: rowptr[memhub.MemBuddy] = trans.Pool + pool: rawptr[memhub.MemBuddy] = trans.Pool builder: llvmlite.IRBuilder | t.CPtr = trans._cur_builder func: llvmlite.Function | t.CPtr = trans._cur_func @@ -1540,7 +1540,7 @@ class StmtGenCifMixin: 循环变量 alloca 自动创建或复用;元素类型由源类型决定 (RANGE→i32, STR→i8, LIST→i8*)。索引内部统一 i64。 """ - pool: rowptr[memhub.MemBuddy] = trans.Pool + pool: rawptr[memhub.MemBuddy] = trans.Pool builder: llvmlite.IRBuilder | t.CPtr = trans._cur_builder func: llvmlite.Function | t.CPtr = trans._cur_func @@ -1865,7 +1865,7 @@ class StmtGenCifMixin: for_node: ast.For | t.CPtr, var_name: str) -> int: """指针迭代: for x in ptr: 直到解引用为空""" - pool: rowptr[memhub.MemBuddy] = trans.Pool + pool: rawptr[memhub.MemBuddy] = trans.Pool builder: llvmlite.IRBuilder | t.CPtr = trans._cur_builder func: llvmlite.Function | t.CPtr = trans._cur_func @@ -2030,7 +2030,7 @@ class StmtGenCifMixin: var_name: str, array_val: llvmlite.Value | t.CPtr) -> int: """数组迭代: for x in arr: 按数组长度迭代""" - pool: rowptr[memhub.MemBuddy] = trans.Pool + pool: rawptr[memhub.MemBuddy] = trans.Pool builder: llvmlite.IRBuilder | t.CPtr = trans._cur_builder func: llvmlite.Function | t.CPtr = trans._cur_func @@ -2176,7 +2176,7 @@ class StmtGenCifMixin: var_name: str, list_node: ast.AST | t.CPtr) -> int: """列表字面量迭代: for x in [a, b, c]: 按元素顺序迭代""" - pool: rowptr[memhub.MemBuddy] = trans.Pool + pool: rawptr[memhub.MemBuddy] = trans.Pool builder: llvmlite.IRBuilder | t.CPtr = trans._cur_builder lst: ast.List | t.CPtr = (ast.List | t.CPtr)(list_node) @@ -2261,7 +2261,7 @@ class StmtGenCifMixin: var_name: str, list_val: llvmlite.Value | t.CPtr) -> int: """list[T] 容器迭代: for v in lst: 按 __count__ 动态长度迭代""" - pool: rowptr[memhub.MemBuddy] = trans.Pool + pool: rawptr[memhub.MemBuddy] = trans.Pool builder: llvmlite.IRBuilder | t.CPtr = trans._cur_builder func: llvmlite.Function | t.CPtr = trans._cur_func @@ -2374,7 +2374,7 @@ class StmtGenCifMixin: __iter__ 协议(__iter__ 重置 iter_index + __next__ 取 key)内联为 循环:iter_idx < __count__ → key = __keys__[iter_idx]。 """ - pool: rowptr[memhub.MemBuddy] = trans.Pool + pool: rawptr[memhub.MemBuddy] = trans.Pool builder: llvmlite.IRBuilder | t.CPtr = trans._cur_builder func: llvmlite.Function | t.CPtr = trans._cur_func @@ -2506,7 +2506,7 @@ class StmtGenCifMixin: class_name: str, obj_val: llvmlite.Value | t.CPtr) -> int: """OOP iter 协议: for x in obj: 调用 __iter__/__next__ 迭代""" - pool: rowptr[memhub.MemBuddy] = trans.Pool + pool: rawptr[memhub.MemBuddy] = trans.Pool builder: llvmlite.IRBuilder | t.CPtr = trans._cur_builder func: llvmlite.Function | t.CPtr = trans._cur_func mod: llvmlite.LLVMModule | t.CPtr = trans.Module diff --git a/App/lib/core/Gen/Stmt/StmtGenDeclMixin.vp b/App/lib/core/Gen/Stmt/StmtGenDeclMixin.vp index 1bc3eb2..7510cc2 100644 --- a/App/lib/core/Gen/Stmt/StmtGenDeclMixin.vp +++ b/App/lib/core/Gen/Stmt/StmtGenDeclMixin.vp @@ -244,7 +244,7 @@ class StmtGenDeclMixin(StmtGenCifMixin.StmtGenCifMixin): """翻译 break 语句:跳转到循环 end 块""" builder: llvmlite.IRBuilder | t.CPtr = trans._cur_builder func: llvmlite.Function | t.CPtr = trans._cur_func - pool: rowptr[memhub.MemBuddy] = trans.Pool + pool: rawptr[memhub.MemBuddy] = trans.Pool if builder is None or func is None: return 0 @@ -267,7 +267,7 @@ class StmtGenDeclMixin(StmtGenCifMixin.StmtGenCifMixin): """翻译 continue 语句:跳转到循环 cond/incr 块""" builder: llvmlite.IRBuilder | t.CPtr = trans._cur_builder func: llvmlite.Function | t.CPtr = trans._cur_func - pool: rowptr[memhub.MemBuddy] = trans.Pool + pool: rawptr[memhub.MemBuddy] = trans.Pool if builder is None or func is None: return 0 @@ -313,7 +313,7 @@ class StmtGenDeclMixin(StmtGenCifMixin.StmtGenCifMixin): if env_var is not None: return env_var # 创建 alloca 存储 env - pool: rowptr[memhub.MemBuddy] = trans.Pool + pool: rawptr[memhub.MemBuddy] = trans.Pool builder: llvmlite.IRBuilder | t.CPtr = trans._cur_builder i8_ty: llvmlite.LLVMType | t.CPtr = llvmlite.Int8(pool) i8_ptr_ty: llvmlite.LLVMType | t.CPtr = llvmlite.Ptr(pool, i8_ty) @@ -333,7 +333,7 @@ class StmtGenDeclMixin(StmtGenCifMixin.StmtGenCifMixin): if idx < 0: return None - pool: rowptr[memhub.MemBuddy] = trans.Pool + pool: rawptr[memhub.MemBuddy] = trans.Pool builder: llvmlite.IRBuilder | t.CPtr = trans._cur_builder i8_ty: llvmlite.LLVMType | t.CPtr = llvmlite.Int8(pool) i8_ptr_ty: llvmlite.LLVMType | t.CPtr = llvmlite.Ptr(pool, i8_ty) @@ -369,7 +369,7 @@ class StmtGenDeclMixin(StmtGenCifMixin.StmtGenCifMixin): if raw_ptr is None: return None - pool: rowptr[memhub.MemBuddy] = trans.Pool + pool: rawptr[memhub.MemBuddy] = trans.Pool builder: llvmlite.IRBuilder | t.CPtr = trans._cur_builder # 获取变量类型(从注册时存储的类型信息) @@ -395,7 +395,7 @@ class StmtGenDeclMixin(StmtGenCifMixin.StmtGenCifMixin): if raw_ptr is None: return None - pool: rowptr[memhub.MemBuddy] = trans.Pool + pool: rawptr[memhub.MemBuddy] = trans.Pool builder: llvmlite.IRBuilder | t.CPtr = trans._cur_builder # 获取变量类型 @@ -412,7 +412,7 @@ class StmtGenDeclMixin(StmtGenCifMixin.StmtGenCifMixin): # 簇 E:枚举注册表(迁移自 HandlesEnum.vp) # ============================================================ - def init_enum_table(self, pool: rowptr[memhub.MemBuddy]) -> int: + def init_enum_table(self, pool: rawptr[memhub.MemBuddy]) -> int: """初始化枚举注册表,返回 1 成功 表用 stdlib 分配(跨 Phase1 1b 的 mark/reset_to 存活——枚举表是 @@ -447,7 +447,7 @@ class StmtGenDeclMixin(StmtGenCifMixin.StmtGenCifMixin): addr: uint64 = uint64(enum_entry.Members) + i * member_size return (GenTypes.EnumMember | t.CPtr)(t.CVoid(addr, t.CPtr)) - def register_enum(self, pool: rowptr[memhub.MemBuddy], + def register_enum(self, pool: rawptr[memhub.MemBuddy], name: str, base_ty: llvmlite.LLVMType | t.CPtr) -> GenTypes.EnumEntry | t.CPtr: """注册枚举类型,返回 EnumEntry 指针""" @@ -500,7 +500,7 @@ class StmtGenDeclMixin(StmtGenCifMixin.StmtGenCifMixin): self.EnumCount += 1 return entry - def add_enum_member(self, pool: rowptr[memhub.MemBuddy], + def add_enum_member(self, pool: rawptr[memhub.MemBuddy], enum_entry: GenTypes.EnumEntry | t.CPtr, member_name: str, member_val: int64, diff --git a/App/lib/core/Gen/Stmt/StmtGenMixin.vp b/App/lib/core/Gen/Stmt/StmtGenMixin.vp index 025084b..a7dad45 100644 --- a/App/lib/core/Gen/Stmt/StmtGenMixin.vp +++ b/App/lib/core/Gen/Stmt/StmtGenMixin.vp @@ -115,7 +115,7 @@ class StmtGenMixin(StmtGenDeclMixin.StmtGenDeclMixin): dnode: ast.Delete | t.CPtr = (ast.Delete | t.CPtr)(node) if dnode is None or dnode.targets is None: return 0 - pool: rowptr[memhub.MemBuddy] = trans.Pool + pool: rawptr[memhub.MemBuddy] = trans.Pool mod: llvmlite.LLVMModule | t.CPtr = trans.Module builder: llvmlite.IRBuilder | t.CPtr = trans._cur_builder if pool is None or mod is None or builder is None: @@ -193,7 +193,7 @@ class StmtGenMixin(StmtGenDeclMixin.StmtGenDeclMixin): tr: ast.Try | t.CPtr = (ast.Try | t.CPtr)(node) if tr is None: return 0 - pool: rowptr[memhub.MemBuddy] = trans.Pool + pool: rawptr[memhub.MemBuddy] = trans.Pool builder: llvmlite.IRBuilder | t.CPtr = trans._cur_builder func: llvmlite.Function | t.CPtr = trans._cur_func if pool is None or builder is None or func is None: @@ -438,7 +438,7 @@ class StmtGenMixin(StmtGenDeclMixin.StmtGenDeclMixin): """ if trans is None or node is None: return 0 - pool: rowptr[memhub.MemBuddy] = trans.Pool + pool: rawptr[memhub.MemBuddy] = trans.Pool builder: llvmlite.IRBuilder | t.CPtr = trans._cur_builder mod: llvmlite.LLVMModule | t.CPtr = trans.Module if pool is None or builder is None or mod is None: @@ -538,7 +538,7 @@ class StmtGenMixin(StmtGenDeclMixin.StmtGenDeclMixin): # 终结(前一条是 raise/return)时跳过,避免在终止块后插指令。 # ============================================================ def _eh_ret_default(self, trans: HT.Translator | t.CPtr, - pool: rowptr[memhub.MemBuddy], + pool: rawptr[memhub.MemBuddy], builder: llvmlite.IRBuilder | t.CPtr) -> int: """异常路径返回当前函数默认零值,返回 0""" if trans is None or builder is None: @@ -592,7 +592,7 @@ class StmtGenMixin(StmtGenDeclMixin.StmtGenDeclMixin): wt: ast.With | t.CPtr = (ast.With | t.CPtr)(node) if wt is None: return 0 - pool: rowptr[memhub.MemBuddy] = trans.Pool + pool: rawptr[memhub.MemBuddy] = trans.Pool builder: llvmlite.IRBuilder | t.CPtr = trans._cur_builder mod: llvmlite.LLVMModule | t.CPtr = trans.Module if pool is None or builder is None or mod is None: @@ -732,7 +732,7 @@ class StmtGenMixin(StmtGenDeclMixin.StmtGenDeclMixin): return 0 def _with_ctx_call(self, trans: HT.Translator | t.CPtr, - pool: rowptr[memhub.MemBuddy], + pool: rawptr[memhub.MemBuddy], builder: llvmlite.IRBuilder | t.CPtr, mod: llvmlite.LLVMModule | t.CPtr, method_name: str) -> llvmlite.Value | t.CPtr: diff --git a/App/lib/core/Gen/StructGenMixin.vp b/App/lib/core/Gen/StructGenMixin.vp index f92c261..da54da8 100644 --- a/App/lib/core/Gen/StructGenMixin.vp +++ b/App/lib/core/Gen/StructGenMixin.vp @@ -131,7 +131,7 @@ class StructGenMixin: 避免跨 Mixin 直接读 self.StdlibAlloc——Mixin 方法体按自身块内索引编译)""" return self.StdlibAlloc - def reset_visible_structs(self, pool: rowptr[memhub.MemBuddy], strict: int) -> None: + def reset_visible_structs(self, pool: rawptr[memhub.MemBuddy], strict: int) -> None: """重置可见性状态(每个文件翻译前调用) pool: 内存分配器(严格模式下创建 HashTable) @@ -145,7 +145,7 @@ class StructGenMixin: # 宽松模式:全部可见,不需要 HashTable self.VisibleStructs = None - def add_visible_struct(self, pool: rowptr[memhub.MemBuddy], name: str) -> None: + def add_visible_struct(self, pool: rawptr[memhub.MemBuddy], name: str) -> None: """添加可见结构体名(类定义时和 from-import 时调用)""" if name is None: return @@ -167,7 +167,7 @@ class StructGenMixin: return 0 return self.VisibleStructs.__contains__(name) - def init_struct_table(self, pool: rowptr[memhub.MemBuddy]) -> int: + def init_struct_table(self, pool: rawptr[memhub.MemBuddy]) -> int: """初始化结构体注册表,返回 1 成功 StdlibAlloc=1 时表体分配在 perm_pool:1a 每文件 reset 后表本体 @@ -178,7 +178,7 @@ class StructGenMixin: return 1 entry_size: sizet = GenTypes.StructEntry.__sizeof__() - table_pool: rowptr[memhub.MemBuddy] = pool + table_pool: rawptr[memhub.MemBuddy] = pool if self.StdlibAlloc != 0: table_pool = CompilerFactory.factory.PermPool if table_pool is None: @@ -367,7 +367,7 @@ class StructGenMixin: addr: uint64 = uint64(struct_entry.Fields) + i * field_size return (GenTypes.FieldEntry | t.CPtr)(t.CVoid(addr, t.CPtr)) - def register_struct(self, pool: rowptr[memhub.MemBuddy], + def register_struct(self, pool: rawptr[memhub.MemBuddy], name: str, struct_ty: llvmlite.LLVMType | t.CPtr, sha1: str = None) -> GenTypes.StructEntry | t.CPtr: @@ -399,7 +399,7 @@ class StructGenMixin: # 分配字段数组(1b 阶段用永久池,避免 reset 回收后 Fields 悬空) field_size: sizet = GenTypes.FieldEntry.__sizeof__() if self.StdlibAlloc != 0: - perm_sg: rowptr[memhub.MemBuddy] = CompilerFactory.factory.PermPool + perm_sg: rawptr[memhub.MemBuddy] = CompilerFactory.factory.PermPool if perm_sg is None: perm_sg = pool entry.Fields = perm_sg.alloc(field_size * FIELD_MAX) @@ -411,7 +411,7 @@ class StructGenMixin: # 复制类名(1b/Phase2(StdlibAlloc=1)用永久池跨 reset 存活;1a 用主 pool, # mark1 前不回收同样存活)。不复制则 find_struct_by_module 的 strcmp 读悬空 Name。 - name_pool: rowptr[memhub.MemBuddy] = pool + name_pool: rawptr[memhub.MemBuddy] = pool if self.StdlibAlloc != 0: name_pool = CompilerFactory.factory.PermPool if name_pool is None: @@ -439,7 +439,7 @@ class StructGenMixin: self._struct_idx_add(self.StructCount - 1, entry) return entry - def register_struct_alias(self, pool: rowptr[memhub.MemBuddy], + def register_struct_alias(self, pool: rawptr[memhub.MemBuddy], name: str, sha1: str, src_entry: GenTypes.StructEntry | t.CPtr) -> GenTypes.StructEntry | t.CPtr: @@ -469,7 +469,7 @@ class StructGenMixin: if entry is None: return None # 复制类名与 SHA1(别名注册同样按 StdlibAlloc 选分配源,跨 1a/1b reset 存活) - alias_pool: rowptr[memhub.MemBuddy] = pool + alias_pool: rawptr[memhub.MemBuddy] = pool if self.StdlibAlloc != 0: alias_pool = CompilerFactory.factory.PermPool if alias_pool is None: @@ -509,7 +509,7 @@ class StructGenMixin: self._struct_idx_add(self.StructCount - 1, entry) return entry - def set_struct_sha1(self, pool: rowptr[memhub.MemBuddy], + def set_struct_sha1(self, pool: rawptr[memhub.MemBuddy], class_name: str, sha1: str) -> int: """设置结构体所属模块的 SHA1,返回 1=成功 / 0=失败""" if class_name is None or sha1 is None: @@ -519,7 +519,7 @@ class StructGenMixin: return 0 # 复制 SHA1 字符串(StdlibAlloc=1 用永久池,跨 1a/1b 存活防 strcmp 悬空) sha1_len: sizet = string.strlen(sha1) - sha1_pool: rowptr[memhub.MemBuddy] = pool + sha1_pool: rawptr[memhub.MemBuddy] = pool if self.StdlibAlloc != 0: sha1_pool = CompilerFactory.factory.PermPool if sha1_pool is None: @@ -540,7 +540,7 @@ class StructGenMixin: return None return entry.ModuleSha1 - def add_field(self, pool: rowptr[memhub.MemBuddy], + def add_field(self, pool: rawptr[memhub.MemBuddy], struct_entry: GenTypes.StructEntry | t.CPtr, field_name: str, field_ty: llvmlite.LLVMType | t.CPtr, @@ -565,7 +565,7 @@ class StructGenMixin: # 复制字段名(StdlibAlloc=1 用永久池跨 reset 存活);否则 lookup_field 的 # strcmp(fe.Name, ...) 读悬空越界。 - fname_pool: rowptr[memhub.MemBuddy] = pool + fname_pool: rawptr[memhub.MemBuddy] = pool if self.StdlibAlloc != 0: fname_pool = CompilerFactory.factory.PermPool if fname_pool is None: @@ -583,7 +583,7 @@ class StructGenMixin: # 悬空内存。 # 注:注解类名已并入 Spec.SourceName,Spec 一律 PermPool 分配 ⇒ 天然跨 reset 存活。 if self.StdlibAlloc != 0: - dp_pool_sg: rowptr[memhub.MemBuddy] = CompilerFactory.factory.PermPool + dp_pool_sg: rawptr[memhub.MemBuddy] = CompilerFactory.factory.PermPool if dp_pool_sg is None: dp_pool_sg = pool ty_copy: llvmlite.LLVMType | t.CPtr = llvmlite.DeepCopyType(dp_pool_sg, field_ty) @@ -620,7 +620,7 @@ class StructGenMixin: struct_entry.FieldCount = idx + 1 return idx - def _deep_copy_default_ast(self, pool: rowptr[memhub.MemBuddy], + def _deep_copy_default_ast(self, pool: rawptr[memhub.MemBuddy], default_val: ast.AST | t.CPtr) -> ast.AST | t.CPtr: """深拷贝字段默认值 AST 到永久池(仅常量节点),跨 1b reset 存活。 @@ -665,7 +665,7 @@ class StructGenMixin: dst_c.str_val = s_copy return (ast.AST | t.CPtr)(dst_c) - def _deep_copy_list_ast(self, pool: rowptr[memhub.MemBuddy], + def _deep_copy_list_ast(self, pool: rawptr[memhub.MemBuddy], default_val: ast.AST | t.CPtr) -> ast.AST | t.CPtr: """深拷贝 List 节点(列表字面量默认值)到永久池,跨 1b reset 存活。 @@ -1468,7 +1468,7 @@ class StructGenMixin: return 0 return entry.HasNew - def get_class_name_by_type(self, pool: rowptr[memhub.MemBuddy], + def get_class_name_by_type(self, pool: rawptr[memhub.MemBuddy], struct_ty: llvmlite.LLVMType | t.CPtr) -> str: """按类型指针查找类名,返回类名字符串或 None""" if struct_ty is None or self.StructTable is None: @@ -1574,7 +1574,7 @@ class StructGenMixin: entry.ParentName = parent_name return 1 - def set_parent_names(self, pool: rowptr[memhub.MemBuddy], + def set_parent_names(self, pool: rawptr[memhub.MemBuddy], name: str, names_ptr: sizet | t.CPtr, count: int) -> int: """设置结构体的父类名数组(永久池深拷贝,跨文件永久存活)""" @@ -1589,7 +1589,7 @@ class StructGenMixin: return 1 if count > PARENT_MAX: count = PARENT_MAX - pn_pool: rowptr[memhub.MemBuddy] = pool + pn_pool: rawptr[memhub.MemBuddy] = pool if self.StdlibAlloc != 0: pn_pool = CompilerFactory.factory.PermPool if pn_pool is None: @@ -1636,7 +1636,7 @@ class StructGenMixin: return None return (str | t.CPtr)(t.CVoid(addr, t.CPtr)) - def get_mro_chain(self, pool: rowptr[memhub.MemBuddy], + def get_mro_chain(self, pool: rawptr[memhub.MemBuddy], name: str) -> sizet | t.CPtr: """MRO 线性化类名数组(深度优先 + 声明顺序 + 去重,含自身)""" if pool is None or name is None: @@ -1766,7 +1766,7 @@ class StructGenMixin: return -1 return entry.FieldCount - def ensure_struct_def_in_module(self, pool: rowptr[memhub.MemBuddy], + def ensure_struct_def_in_module(self, pool: rawptr[memhub.MemBuddy], mod: llvmlite.LLVMModule | t.CPtr, ty: llvmlite.LLVMType | t.CPtr): """确保跨模块结构体的完整定义在当前模块中可用(供 alloca 使用) @@ -1837,7 +1837,7 @@ class StructGenMixin: # 也有完整定义。指针类型字段只需 opaque 声明(已由 module_ensure_opaque_for_type 处理)。 self._ensure_field_types_in_module(pool, mod, entry.Ty) - def _ensure_field_types_in_module(self, pool: rowptr[memhub.MemBuddy], + def _ensure_field_types_in_module(self, pool: rawptr[memhub.MemBuddy], mod: llvmlite.LLVMModule | t.CPtr, ty: llvmlite.LLVMType | t.CPtr): """递归扫描类型树,确保值类型子结构体有完整定义""" diff --git a/App/lib/core/Gen/Translator.vp b/App/lib/core/Gen/Translator.vp index 7db3eea..5d4a41f 100644 --- a/App/lib/core/Gen/Translator.vp +++ b/App/lib/core/Gen/Translator.vp @@ -72,7 +72,7 @@ class Translator: # LLVM 上下文(共享状态) Module: llvmlite.LLVMModule | t.CPtr - Pool: rowptr[memhub.MemBuddy] + Pool: rawptr[memhub.MemBuddy] # 函数表 _funcs: GenTypes.FuncEntry | t.CPtr @@ -337,7 +337,7 @@ class Translator: # ============================================================ # 状态初始化 # ============================================================ - def _init_state(self, pool: rowptr[memhub.MemBuddy]): + def _init_state(self, pool: rawptr[memhub.MemBuddy]): """初始化变量表、函数表和子 Handle""" self.Pool = pool if self._funcs is None: @@ -422,7 +422,7 @@ class Translator: if _mbuddy is None: return 1 - pool: rowptr[memhub.MemBuddy] = _mbuddy + pool: rawptr[memhub.MemBuddy] = _mbuddy # 初始化状态 self._init_state(pool) @@ -503,7 +503,7 @@ class Translator: # ============================================================ # 包装 main 函数(无用户 main 时)→ 委托 HandlesMain # ============================================================ - def _translate_wrapper_main(self, pool: rowptr[memhub.MemBuddy], + def _translate_wrapper_main(self, pool: rawptr[memhub.MemBuddy], mod: llvmlite.LLVMModule | t.CPtr, tree: ast.AST | t.CPtr, i32_ty: llvmlite.LLVMType | t.CPtr): @@ -513,7 +513,7 @@ class Translator: # ============================================================ # 模块级翻译(用户已定义 main)→ 委托 HandlesMain # ============================================================ - def _translate_module_level(self, pool: rowptr[memhub.MemBuddy], + def _translate_module_level(self, pool: rawptr[memhub.MemBuddy], mod: llvmlite.LLVMModule | t.CPtr, tree: ast.AST | t.CPtr): """委托 GenApi.translate_children() 翻译模块级语句(trans 单参)""" @@ -585,7 +585,7 @@ class Translator: # - AnnAssign 注解裸名 Name(list/dict):d: dict # - 构造调用 func 裸名 Name(list/dict):dict(bd) # - Subscript 的 value 裸名 Name(list/dict):list[int] - def _inject_auto_container_visibility(self, pool: rowptr[memhub.MemBuddy], + def _inject_auto_container_visibility(self, pool: rawptr[memhub.MemBuddy], tree: ast.AST | t.CPtr): """检测 list/dict 容器使用,注入容器类可见性""" if tree is None or tree.children is None: @@ -752,7 +752,7 @@ class Translator: sub_s: ast.Subscript | t.CPtr = (ast.Subscript | t.CPtr)(node) if sub_s.value is not None: self._check_container_type_node(sub_s.value, need_list_box, need_dict_box) - # rowptr[list[int]] / list[AST] 等:slice 里可能含 list,需下钻 + # rawptr[list[int]] / list[AST] 等:slice 里可能含 list,需下钻 if sub_s.slice is not None: self._check_container_type_node(sub_s.slice, need_list_box, need_dict_box) elif k == ast.ASTKind.BinOp: @@ -820,5 +820,5 @@ class Mixin: # ============================================================ # 全局 mbuddy 指针 -_mbuddy: rowptr[memhub.MemBuddy] +_mbuddy: rawptr[memhub.MemBuddy] diff --git a/App/lib/core/Gen/TranslatorGenMixin.vp b/App/lib/core/Gen/TranslatorGenMixin.vp index c3a400a..f2c0612 100644 --- a/App/lib/core/Gen/TranslatorGenMixin.vp +++ b/App/lib/core/Gen/TranslatorGenMixin.vp @@ -154,7 +154,7 @@ class TranslatorGenMixin: """预解析模块级函数签名的返回/参数类型,触发泛型类特化""" if trans is None or fd is None: return - pool: rowptr[memhub.MemBuddy] = trans.Pool + pool: rawptr[memhub.MemBuddy] = trans.Pool if pool is None: return imp: str = trans._imported_modules @@ -178,7 +178,7 @@ class TranslatorGenMixin: # 生成格式: [N x elem_ty] [elem_ty val0, elem_ty val1, ...] # 用于模块级 t.CArray 列表字面量初始化(不依赖 builder,直接生成常量初始化器) # ============================================================ - def _build_array_initializer_text(self, pool: rowptr[memhub.MemBuddy], + def _build_array_initializer_text(self, pool: rawptr[memhub.MemBuddy], var_ty: llvmlite.LLVMType | t.CPtr, list_node: ast.List | t.CPtr) -> str: """从 AST List 节点生成 LLVM IR 数组初始化器文本,None 失败""" @@ -369,7 +369,7 @@ class TranslatorGenMixin: # t.CArray[char, N] = "..." → [i8 b0, i8 b1, ..., i8 0, ...](字符串字节 + # 零填充到数组长度;空串返回 zeroinitializer)。 # 不能用字符串指针 GEP 初始化器:会导致 @g = global [N x i8] 类型不匹配。 - def _build_string_array_initializer_text(self, pool: rowptr[memhub.MemBuddy], + def _build_string_array_initializer_text(self, pool: rawptr[memhub.MemBuddy], var_ty: llvmlite.LLVMType | t.CPtr, str_val: str) -> str: """字符串字面量初始化数组全局,返回初始化器文本或 None""" @@ -411,7 +411,7 @@ class TranslatorGenMixin: # 返回 GEP 初始化器文本: getelementptr inbounds ([len+1 x i8], [len+1 x i8]* @.str.{var_name}, i32 0, i32 0) # 用于 b64_tab: t.CArray[char, None] = "ABC..." 等字符串初始化指针类型 # ============================================================ - def _build_string_ptr_initializer(self, pool: rowptr[memhub.MemBuddy], + def _build_string_ptr_initializer(self, pool: rawptr[memhub.MemBuddy], mod: llvmlite.LLVMModule | t.CPtr, var_name: str, str_val: str) -> str: @@ -441,7 +441,7 @@ class TranslatorGenMixin: str_len + 1, str_len + 1, str_name_buf) return init_buf - def _stg_field_zero_text(self, pool: rowptr[memhub.MemBuddy], + def _stg_field_zero_text(self, pool: rawptr[memhub.MemBuddy], fty: llvmlite.LLVMType | t.CPtr, ty_str: str) -> str: """按 LLVM 类型生成 storage struct 字段的零值初始化器文本 @@ -473,7 +473,7 @@ class TranslatorGenMixin: # 仅处理可常量折叠的整型默认值(CONST_INT/CONST_CHAR 及负号字面量); # 其余(浮点/字符串/None/名字/表达式)返回 None,由调用方按零值兜底。 # ============================================================ - def _default_val_const_text(self, pool: rowptr[memhub.MemBuddy], + def _default_val_const_text(self, pool: rawptr[memhub.MemBuddy], fty: llvmlite.LLVMType | t.CPtr, ty_str: str, dval: ast.AST | t.CPtr) -> str: @@ -511,7 +511,7 @@ class TranslatorGenMixin: # - _build_stg_struct_init_text:外包 "{ ... }" 作为完整初始化器; # - vtable 对象 storage:首元素为 vtable 指针,其后追加本函数结果(start_idx=1 跳过字段 0)。 # 无任何非零默认值时返回 None,调用方据此保持原零值路径(避免无谓文本)。 - def _build_stg_struct_body_text(self, pool: rowptr[memhub.MemBuddy], + def _build_stg_struct_body_text(self, pool: rawptr[memhub.MemBuddy], se: GenTypes.StructEntry | t.CPtr, start_idx: int) -> str: """按字段默认值生成 "e0, e1, ..." 元素文本;无非零默认值返回 None""" @@ -561,7 +561,7 @@ class TranslatorGenMixin: # 用于模块级对象全局 `X: T = T()`:按字段默认值生成完整 struct 常量 # (LLVM 要求列全每个字段);不生成则字段默认值全丢。 # 无任何非零默认值时返回 None,由调用方保持 zeroinitializer(避免无谓文本)。 - def _build_stg_struct_init_text(self, pool: rowptr[memhub.MemBuddy], + def _build_stg_struct_init_text(self, pool: rawptr[memhub.MemBuddy], se: GenTypes.StructEntry | t.CPtr, start_idx: int) -> str: """按字段默认值生成完整 struct 初始化器;无非零默认值返回 None""" @@ -585,7 +585,7 @@ class TranslatorGenMixin: def handle_module_level_var(self, trans: HT.Translator | t.CPtr, node: ast.AST | t.CPtr) -> int: """处理模块级变量声明,创建全局变量""" - pool: rowptr[memhub.MemBuddy] = trans.Pool + pool: rawptr[memhub.MemBuddy] = trans.Pool mod: llvmlite.LLVMModule | t.CPtr = trans.Module # CDefine 注解: 编译期常量,不创建全局变量 @@ -1061,7 +1061,7 @@ class TranslatorGenMixin: Returns: int: 新增的变量数 """ - pool: rowptr[memhub.MemBuddy] = trans.Pool + pool: rawptr[memhub.MemBuddy] = trans.Pool mod: llvmlite.LLVMModule | t.CPtr = trans.Module main_func: llvmlite.Function | t.CPtr = llvmlite.create_function( @@ -1129,7 +1129,7 @@ class TranslatorGenMixin: if self.is_global_name(trans, name) != 0: return if trans._global_name_count >= MAX_GLOBAL_NAMES: - pool_err: rowptr[memhub.MemBuddy] = trans.Pool + pool_err: rawptr[memhub.MemBuddy] = trans.Pool err_buf: str = None if pool_err is not None: err_buf = pool_err.alloc(256) @@ -1183,7 +1183,7 @@ class TranslatorGenMixin: ty_slot[0] = var_ty return if trans._nonlocal_name_count >= MAX_GLOBAL_NAMES: - pool_err_nl: rowptr[memhub.MemBuddy] = trans.Pool + pool_err_nl: rawptr[memhub.MemBuddy] = trans.Pool err_buf_nl: str = None if pool_err_nl is not None: err_buf_nl = pool_err_nl.alloc(256) diff --git a/App/lib/core/Gen/Type/TypeGenBase.vp b/App/lib/core/Gen/Type/TypeGenBase.vp index 0cbb502..00482cf 100644 --- a/App/lib/core/Gen/Type/TypeGenBase.vp +++ b/App/lib/core/Gen/Type/TypeGenBase.vp @@ -105,15 +105,15 @@ class TypeGenBase: # 引用按别名还原真实模块名(__stdint.size_t → stdint.size_t)。 # 用 malloc 而非 pool list——pool 每文件 reset_to 后 list 悬空;malloc 跨 pool # 生命周期存活,clear_ctypedefs 释放置空。 - ImportAliasBuf: bytes - - # --- 库 typedef 按模块一次性门禁(_lookup_library_typedef 性能优化) --- - # 库模块 typedef 缓存(PermPool 永久分配,跨文件/Phase 存活): - # LibTypedefScannedMods: key=库模块名 → 已扫描标记(命中=该模块源已读并入缓存); - # LibTypedefTypeMap: key="模块名|typedef 名" → 源中原始类型表达式。 - # 每次查询都读 64KB 库源全文扫描会使单文件 translate 耗时 7–12s;库源单次编译内 - # 不变,故缓存命中结果与逐次读源等价。 - LibTypedefScannedMods: hashtable.HashTable | t.CPtr + ImportAliasBuf: bytes + + # --- 库 typedef 按模块一次性门禁(_lookup_library_typedef 性能优化) --- + # 库模块 typedef 缓存(PermPool 永久分配,跨文件/Phase 存活): + # LibTypedefScannedMods: key=库模块名 → 已扫描标记(命中=该模块源已读并入缓存); + # LibTypedefTypeMap: key="模块名|typedef 名" → 源中原始类型表达式。 + # 每次查询都读 64KB 库源全文扫描会使单文件 translate 耗时 7–12s;库源单次编译内 + # 不变,故缓存命中结果与逐次读源等价。 + LibTypedefScannedMods: hashtable.HashTable | t.CPtr LibTypedefTypeMap: hashtable.HashTable | t.CPtr # --- 常量整数表达式计算成功标志(原 _g_const_eval_ok) --- @@ -164,9 +164,9 @@ class TypeGenBase: self.LastBuiltinsTypedefResult = None self.LastBuiltinsTypedefNameBuf = None self.LastBuiltinsTypedefResultBuf = None - self.ImportAliasBuf = None - # 库 typedef 持久缓存字段(不随 clear_ctypedefs 复位 → 跨文件/Phase 存活) - self.LibTypedefScannedMods = None + self.ImportAliasBuf = None + # 库 typedef 持久缓存字段(不随 clear_ctypedefs 复位 → 跨文件/Phase 存活) + self.LibTypedefScannedMods = None self.LibTypedefTypeMap = None self.ConstEvalOk = 0 self.CurrentFile = None @@ -260,7 +260,7 @@ class TypeGenBase: def set_current_module_sha1(self, sha1: str) -> None: """设置当前正在编译的模块 SHA1(Phase1 在模块开始翻译前调用)""" self.CurrentModuleSha1 = sha1 - def _dbg_check_ast_floats(self, mb: rowptr[memhub.MemBuddy], + def _dbg_check_ast_floats(self, mb: rawptr[memhub.MemBuddy], tree: ast.AST | t.CPtr, tag: str): """已移除调试插桩(占位保留签名,避免外部调用引用失败)""" pass diff --git a/App/lib/core/Gen/Type/TypeGenCDef.vp b/App/lib/core/Gen/Type/TypeGenCDef.vp index 31b508a..7833449 100644 --- a/App/lib/core/Gen/Type/TypeGenCDef.vp +++ b/App/lib/core/Gen/Type/TypeGenCDef.vp @@ -59,7 +59,7 @@ class TypeGenCDef(TypeGenBase.TypeGenBase): """取索引第 si 个槽(8 字节,存槽下标+1;0=空槽)""" return (sizet | t.CPtr)(t.CVoid(uint64(self.CDefineNameIdx) + uint64(si) * 8, t.CPtr)) - def _cdef_idx_init(self, pool: rowptr[memhub.MemBuddy]) -> None: + def _cdef_idx_init(self, pool: rawptr[memhub.MemBuddy]) -> None: """创建/清零名索引(与 CDefineNames 同池);失败则标记不可信""" idx: sizet | t.CPtr = pool.alloc(sizet(CDEFINE_IDX_CAP) * 8) if idx is None: @@ -120,7 +120,7 @@ class TypeGenCDef(TypeGenBase.TypeGenBase): else: self.CDefineNameIdxBuilt = -1 - def register_cdefine_constant(self, pool: rowptr[memhub.MemBuddy], + def register_cdefine_constant(self, pool: rawptr[memhub.MemBuddy], name: str, value: int64) -> None: """注册 CDefine 编译期常量到本地表 @@ -165,7 +165,7 @@ class TypeGenCDef(TypeGenBase.TypeGenBase): self.CDefineDoubleFlags.append(0) if self.CDefineStrFlags is not None: self.CDefineStrFlags.append(0) - def register_cdefine_double(self, pool: rowptr[memhub.MemBuddy], + def register_cdefine_double(self, pool: rawptr[memhub.MemBuddy], name: str, value: double) -> None: """注册浮点 CDefine 编译期常量(如 U_M_PI: t.CDefine = 3.14159...) @@ -206,7 +206,7 @@ class TypeGenCDef(TypeGenBase.TypeGenBase): if val_buf is None: VLogger.error("CDefine 浮点值缓冲区分配失败", "CDEF-DBG") self.Gen.TypeGenErr.fatal_error(None, "CDefine 浮点值缓冲区分配失败", "MemoryError") - def register_cdefine_string(self, pool: rowptr[memhub.MemBuddy], + def register_cdefine_string(self, pool: rawptr[memhub.MemBuddy], name: str, value: str) -> None: """注册字符串 CDefine 编译期常量(如 ZLIB_VERSION: t.CDefine = "1.3.2") @@ -272,7 +272,7 @@ class TypeGenCDef(TypeGenBase.TypeGenBase): x_nm: str = self.XmodCdefNames.get(x_i) if x_nm is not None and string.strcmp(x_nm, name) == 0: return - perm: rowptr[memhub.MemBuddy] = CompilerFactory.factory.PermPool + perm: rawptr[memhub.MemBuddy] = CompilerFactory.factory.PermPool if self.XmodCdefNames is None: self.XmodCdefNames = list[str](perm, 64) self.XmodCdefValues = list[str](perm, 64) diff --git a/App/lib/core/Gen/Type/TypeGenCType.vp b/App/lib/core/Gen/Type/TypeGenCType.vp index 84b85bc..a5ac659 100644 --- a/App/lib/core/Gen/Type/TypeGenCType.vp +++ b/App/lib/core/Gen/Type/TypeGenCType.vp @@ -60,7 +60,7 @@ class TypeGenCType(TypeGenBase.TypeGenBase): """取索引第 si 个槽(8 字节,存槽下标+1;0=空槽)""" return (sizet | t.CPtr)(t.CVoid(uint64(self.CTypedefNameIdx) + uint64(si) * 8, t.CPtr)) - def _ctypedef_idx_init(self, pool: rowptr[memhub.MemBuddy]) -> None: + def _ctypedef_idx_init(self, pool: rawptr[memhub.MemBuddy]) -> None: """创建/清零名索引(与 CTypedefNames 同池);失败则标记不可信""" idx: sizet | t.CPtr = pool.alloc(sizet(CTYPEDEF_IDX_CAP) * 8) if idx is None: @@ -121,7 +121,7 @@ class TypeGenCType(TypeGenBase.TypeGenBase): else: self.CTypedefNameIdxBuilt = -1 - def register_ctypedef(self, pool: rowptr[memhub.MemBuddy], + def register_ctypedef(self, pool: rawptr[memhub.MemBuddy], name: str, type_str: str) -> None: """注册 CTypedef 到本地表 @@ -132,10 +132,10 @@ class TypeGenCType(TypeGenBase.TypeGenBase): """ if name is None or type_str is None or pool is None: return - # rowptr 是编译器内置语法(TPC/TPV 双端),不可重定义: - # 忽略任何对 rowptr 的 typedef 注册,防止覆盖内置裸指针语义 - # (rowptr[T] 固定 = 指向原始类型 T 的裸指针)。 - if string.strcmp(name, "rowptr") == 0: + # rawptr 是编译器内置语法(TPC/TPV 双端),不可重定义: + # 忽略任何对 rawptr 的 typedef 注册,防止覆盖内置裸指针语义 + # (rawptr[T] 固定 = 指向原始类型 T 的裸指针)。 + if string.strcmp(name, "rawptr") == 0: return # 复制 name/type_str 到 pool:调用方可能传入零拷贝 AST 字符串 # (如 .vpi 读取缓冲区),缓冲区随后被 free 会导致表项悬空、 @@ -340,7 +340,7 @@ class TypeGenCType(TypeGenBase.TypeGenBase): # C 指针后缀 '*' → 指针,不表态(指针语义由 PtrLevel 表达) if text[e - 1] == '*': return TSpec.TS_SIGN_UNKNOWN - # 泛型/数组/rowptr 下标:IDENT[INNER, ...] → 取 INNER(元素决定值符号性) + # 泛型/数组/rawptr 下标:IDENT[INNER, ...] → 取 INNER(元素决定值符号性) bracket: sizet = 0 has_bracket: int = 0 k: sizet = s @@ -412,7 +412,7 @@ class TypeGenCType(TypeGenBase.TypeGenBase): if self.ImportAliasBuf is not None: stdlib.free(self.ImportAliasBuf) self.ImportAliasBuf = None - def _ctypedef_push_visiting(self, pool: rowptr[memhub.MemBuddy], name: str) -> int: + def _ctypedef_push_visiting(self, pool: rawptr[memhub.MemBuddy], name: str) -> int: """将 CTypedef 名加入正在解析列表(循环检测) Returns: @@ -483,7 +483,7 @@ class TypeGenCType(TypeGenBase.TypeGenBase): and sep_ch_m != '\r' and sep_ch_m != '\t' and sep_ch_m != '|': return 0 return 1 - def ScanCTypedefDeclarations(self, pool: rowptr[memhub.MemBuddy], + def ScanCTypedefDeclarations(self, pool: rawptr[memhub.MemBuddy], tree: ast.AST | t.CPtr) -> int: """扫描 AST 顶层节点,注册所有 NAME: t.CTypedef = Type 声明 @@ -534,7 +534,7 @@ class TypeGenCType(TypeGenBase.TypeGenBase): self.register_ctypedef(pool, tgt_id_v, type_str) count += 1 return count - def register_ctypedef_from_source(self, pool: rowptr[memhub.MemBuddy], + def register_ctypedef_from_source(self, pool: rawptr[memhub.MemBuddy], src: str) -> int: """从源码文本逐行扫描注册 CTypedef(NAME: t.CTypedef = TYPE) @@ -608,7 +608,7 @@ class TypeGenCType(TypeGenBase.TypeGenBase): i += 1 return count def _eval_const_int_expr(self, node: ast.AST | t.CPtr, - pool: rowptr[memhub.MemBuddy] = None, + pool: rawptr[memhub.MemBuddy] = None, from_imports: str = None, imported_modules: str = None, depth: int = 0) -> int: diff --git a/App/lib/core/Gen/Type/TypeGenErr.vp b/App/lib/core/Gen/Type/TypeGenErr.vp index c4a8e9f..dc68325 100644 --- a/App/lib/core/Gen/Type/TypeGenErr.vp +++ b/App/lib/core/Gen/Type/TypeGenErr.vp @@ -34,7 +34,7 @@ class TypeGenErr(TypeGenBase.TypeGenBase): """从源文件读取第 lineno 行内容""" if file_path is None or lineno <= 0: return None - f: rowptr[fileio.File] = fileio.File(file_path, fileio.MODE.R) + f: rawptr[fileio.File] = fileio.File(file_path, fileio.MODE.R) if f.closed: return None # 按文件实际大小分配缓冲区:固定 256KB 会截断大源文件,末尾行号读不到 → @@ -185,7 +185,7 @@ class TypeGenErr(TypeGenBase.TypeGenBase): col_start: int = 0, col_end: int = 0): """以 Python 风格报错并退出(TypeError 版本)""" self.fatal_error(node, msg, "TypeError", col_start, col_end) - def try_extract_callable_ret(self, pool: rowptr[memhub.MemBuddy], + def try_extract_callable_ret(self, pool: rawptr[memhub.MemBuddy], annot: ast.AST | t.CPtr, imported_modules: str, from_imports: str, @@ -259,7 +259,7 @@ class TypeGenErr(TypeGenBase.TypeGenBase): def get_llvm_type_bits(self, ty: llvmlite.LLVMType | t.CPtr) -> int: """获取 LLVM 整数类型的位宽,非整数类型返回 0(委托 SpecTypeBits)""" return TSpec.SpecTypeBits(ty) - def infer_expr_type(self, pool: rowptr[memhub.MemBuddy], + def infer_expr_type(self, pool: rawptr[memhub.MemBuddy], node: ast.AST | t.CPtr, param_types: str) -> llvmlite.LLVMType | t.CPtr: """推断表达式的 LLVM 类型 @@ -318,7 +318,7 @@ class TypeGenErr(TypeGenBase.TypeGenBase): return rhs_ty return llvmlite.Int32(pool) - def infer_return_type(self, pool: rowptr[memhub.MemBuddy], + def infer_return_type(self, pool: rawptr[memhub.MemBuddy], body: list[ast.AST | t.CPtr] | t.CPtr, param_types: str) -> llvmlite.LLVMType | t.CPtr: """扫描函数体中的 return 语句,推断返回类型""" @@ -340,7 +340,7 @@ class TypeGenErr(TypeGenBase.TypeGenBase): if new_bits > cur_bits: ret_ty = expr_ty return ret_ty - def body_has_value_return(self, pool: rowptr[memhub.MemBuddy], + def body_has_value_return(self, pool: rawptr[memhub.MemBuddy], body: list[ast.AST | t.CPtr] | t.CPtr) -> int: """扫描函数体,判断是否存在返回非 None 值的 return @@ -378,7 +378,7 @@ class TypeGenErr(TypeGenBase.TypeGenBase): if self.body_has_value_return(pool, sub) != 0: return 1 return 0 - def build_param_types_str(self, pool: rowptr[memhub.MemBuddy], + def build_param_types_str(self, pool: rawptr[memhub.MemBuddy], args_node: ast.AST | t.CPtr) -> str: """构建参数类型编码字符串 "name:bits,name:bits,..." diff --git a/App/lib/core/Gen/Type/TypeGenResolve.vp b/App/lib/core/Gen/Type/TypeGenResolve.vp index 279ec27..df0ddb7 100644 --- a/App/lib/core/Gen/Type/TypeGenResolve.vp +++ b/App/lib/core/Gen/Type/TypeGenResolve.vp @@ -35,7 +35,7 @@ import w32.fileio as fileio class TypeGenResolve(TypeGenBase.TypeGenBase): """类型映射/注解解析(map_t_type/resolve_annotation_type 等)""" - def _get_type_name_from_annotation(self, pool: rowptr[memhub.MemBuddy], + def _get_type_name_from_annotation(self, pool: rawptr[memhub.MemBuddy], node: ast.AST | t.CPtr) -> str: """从类型注解节点提取类型名(支持 Name/Attribute/BinOp)""" if node is None: @@ -117,7 +117,7 @@ class TypeGenResolve(TypeGenBase.TypeGenBase): return buf2 return None return None - def _subscript_slice_to_str(self, pool: rowptr[memhub.MemBuddy], + def _subscript_slice_to_str(self, pool: rawptr[memhub.MemBuddy], node: ast.AST | t.CPtr) -> str: """Subscript slice 节点转类型字符串(递归,支持 Name/Attribute/BinOp/Constant/List/Tuple/Subscript)""" if node is None: @@ -150,7 +150,7 @@ class TypeGenResolve(TypeGenBase.TypeGenBase): tup: ast.Tuple | t.CPtr = (ast.Tuple | t.CPtr)(node) return self._list_elts_to_type_str(pool, tup.elts, "", "") return None - def _list_elts_to_type_str(self, pool: rowptr[memhub.MemBuddy], + def _list_elts_to_type_str(self, pool: rawptr[memhub.MemBuddy], elts: list[ast.AST | t.CPtr] | t.CPtr, open_ch: str, close_ch: str) -> str: """元素列表转逗号分隔字符串(List/Tuple 共用),包上 open/close 括号 @@ -216,7 +216,7 @@ class TypeGenResolve(TypeGenBase.TypeGenBase): 此处只做委托:保留本方法是因 `@t.NoVTable` 静态绑定下大量调用点依赖它存在。 """ return GenApi.sha1_prefix_len(s) - def _concat_sha1_class(self, pool: rowptr[memhub.MemBuddy], + def _concat_sha1_class(self, pool: rawptr[memhub.MemBuddy], sha1: str, cls_name: str) -> str: """拼接 "{sha1}.{cls_name}"(pool 分配),失败返回 None""" if pool is None or sha1 is None or cls_name is None: @@ -230,7 +230,7 @@ class TypeGenResolve(TypeGenBase.TypeGenBase): string.strcat(buf, ".") string.strcat(buf, cls_name) return buf - def _norm_type_arg_name(self, pool: rowptr[memhub.MemBuddy], + def _norm_type_arg_name(self, pool: rawptr[memhub.MemBuddy], type_name: str, from_imports: str) -> str: """泛型类型参数名 SHA1 规范化:统一为 "{定义模块SHA1}.{Class}" 形式 @@ -493,7 +493,7 @@ class TypeGenResolve(TypeGenBase.TypeGenBase): return 1 return 0 - def _parse_type_string(self, pool: rowptr[memhub.MemBuddy], + def _parse_type_string(self, pool: rawptr[memhub.MemBuddy], type_str: str, ctx: int) -> ast.AST | t.CPtr: """将类型名字符串解析为 AST 节点 @@ -556,10 +556,10 @@ class TypeGenResolve(TypeGenBase.TypeGenBase): break bi += 1 if bracket_idx < seg_len: - # 内层以数字开头(如 rowptr[7565e081d88517ac.AST],_norm_type_arg_name + # 内层以数字开头(如 rawptr[7565e081d88517ac.AST],_norm_type_arg_name # 的 "{16hex}.Class" 规范化产物)时,完整 lexer 会把数字开头的令牌当 # 数值扫描(7565e081d88517ac 含字母 → 坏数/占位)→ slice 变 Constant - # 占位 → 解析失败(SlotsBugTest list[rowptr[sha.AST]] 特化方法参数 + # 占位 → 解析失败(SlotsBugTest list[rawptr[sha.AST]] 特化方法参数 # 注解根因)。单实参且无嵌套/无逗号时手工拆 base+slice 递归解析, # 避开 lexer 的数字扫描。 first_inner_ch: int = type_str[bracket_idx + 1] if (bracket_idx + 1) < seg_len else 0 @@ -669,7 +669,7 @@ class TypeGenResolve(TypeGenBase.TypeGenBase): def get_current_file(self) -> str: """获取当前编译的文件名(供报错归因使用)""" return self.CurrentFile - def resolve_typedef_or_map(self, pool: rowptr[memhub.MemBuddy], + def resolve_typedef_or_map(self, pool: rawptr[memhub.MemBuddy], name: str, imported_modules: str, from_imports: str, @@ -696,7 +696,7 @@ class TypeGenResolve(TypeGenBase.TypeGenBase): if ity_rt is not None: return ity_rt # [builtins 最后匹配] 常规 typedef 表 + map_t_type 均 miss 后查 - # includes/builtins.vp(如 rowptr: t.CTypedef = t.CPtr),命中展开递归解析。 + # includes/builtins.vp(如 rawptr: t.CTypedef = t.CPtr),命中展开递归解析。 # 与 resolve_annotation_type 的 Name/Subscript 兜底同一口径,保证 # __sizeof__/REnum 等旁路查表(get_type_size_bytes 等)也能命中 builtins。 btd_r: str = self._lookup_builtins_typedef(pool, name) @@ -728,7 +728,7 @@ class TypeGenResolve(TypeGenBase.TypeGenBase): if lib_ty is not None: return lib_ty return self.map_t_type(pool, name) - def get_type_size_bytes(self, pool: rowptr[memhub.MemBuddy], + def get_type_size_bytes(self, pool: rawptr[memhub.MemBuddy], name: str, imported_modules: str, from_imports: str) -> int: @@ -857,14 +857,14 @@ class TypeGenResolve(TypeGenBase.TypeGenBase): if string.strncmp(buf + al_start, mod, mod_len) == 0: return buf + tg_start return None - def _lookup_builtins_typedef(self, pool: rowptr[memhub.MemBuddy], + def _lookup_builtins_typedef(self, pool: rawptr[memhub.MemBuddy], name: str) -> str: """builtins 最后匹配:查 includes/builtins.vp 的 CTypedef 声明 所有常规解析路径 miss 后("没有匹配到前面模式的注解")的最终兜底: builtins 始终纳入编译链(StubMerger 预加入),但其 typedef 不随当前 文件 from_imports 注入(builtins 不在 import 闭包),如 - `rowptr: t.CTypedef = t.CPtr`(main2.vp `k: rowptr[int] = &i` 根因)。 + `rawptr: t.CTypedef = t.CPtr`(main2.vp `k: rawptr[int] = &i` 根因)。 定位 builtins 源文件按 "NAME: t.CTypedef = TYPE" 逐行扫描,命中即 注册到本地 CTypedef 表并返回类型表达式;表内已注册直接返回。 """ @@ -878,10 +878,10 @@ class TypeGenResolve(TypeGenBase.TypeGenBase): self.Gen.TypeGenCType.LastBuiltinsTypedefName = \ self.Gen.TypeGenCType.store_builtins_diag(0, name) self.Gen.TypeGenCType.LastBuiltinsTypedefResult = None - # rowptr 已内置于编译器(TPC/TPV 双端语法保留字,不可重定义): + # rawptr 已内置于编译器(TPC/TPV 双端语法保留字,不可重定义): # 优先于一切外部声明(builtins.vp 已不再声明,用户自行 typedef 也会被 # register_ctypedef 拒绝),始终返回内置类型表达式 t.CPtr。 - if string.strcmp(name, "rowptr") == 0: + if string.strcmp(name, "rawptr") == 0: self.Gen.TypeGenCType.LastBuiltinsTypedefResult = "t.CPtr" return "t.CPtr" ts_b: str = self.Gen.TypeGenCType.lookup_ctypedef(name) @@ -906,7 +906,7 @@ class TypeGenResolve(TypeGenBase.TypeGenBase): if b_buf is None: stdlib.free(b_path) return None - bf: rowptr[fileio.File] = fileio.File(b_path, fileio.MODE.R) + bf: rawptr[fileio.File] = fileio.File(b_path, fileio.MODE.R) stdlib.free(b_path) if bf.closed: stdlib.free(b_buf) @@ -1066,7 +1066,7 @@ class TypeGenResolve(TypeGenBase.TypeGenBase): """ if mod is None or name_src is None or type_str is None or name_len == 0: return - perm: rowptr[memhub.MemBuddy] = CompilerFactory.factory.PermPool + perm: rawptr[memhub.MemBuddy] = CompilerFactory.factory.PermPool if perm is None: return if self.LibTypedefTypeMap is None: @@ -1099,7 +1099,7 @@ class TypeGenResolve(TypeGenBase.TypeGenBase): # 会误返回 None(改变语义);此时不标记、留待下次重试读源。 if self.LibTypedefTypeMap is None: return - perm: rowptr[memhub.MemBuddy] = CompilerFactory.factory.PermPool + perm: rawptr[memhub.MemBuddy] = CompilerFactory.factory.PermPool if perm is None: return if self.LibTypedefScannedMods is None: @@ -1133,7 +1133,7 @@ class TypeGenResolve(TypeGenBase.TypeGenBase): if v is None: return None return (str | t.CPtr)(v) - def _lookup_library_typedef(self, pool: rowptr[memhub.MemBuddy], + def _lookup_library_typedef(self, pool: rawptr[memhub.MemBuddy], mod: str, attr: str) -> str: """查库模块源文件中 "attr: t.CTypedef = TYPE" 并注册,返回 TYPE 或 None @@ -1172,7 +1172,7 @@ class TypeGenResolve(TypeGenBase.TypeGenBase): if m_buf is None: stdlib.free(m_path) return None - mf: rowptr[fileio.File] = fileio.File(m_path, fileio.MODE.R) + mf: rawptr[fileio.File] = fileio.File(m_path, fileio.MODE.R) stdlib.free(m_path) if mf.closed: stdlib.free(m_buf) @@ -1251,7 +1251,7 @@ class TypeGenResolve(TypeGenBase.TypeGenBase): self.Gen.TypeGenCType.register_ctypedef(pool, attr, m_res) stdlib.free(m_buf) return m_res - def _expand_typedef_ref(self, pool: rowptr[memhub.MemBuddy], + def _expand_typedef_ref(self, pool: rawptr[memhub.MemBuddy], type_str: str, depth: int = 0) -> str: """展开类型表达式中的模块限定 typedef 引用(stdint.size_t → sizet) @@ -1291,7 +1291,7 @@ class TypeGenResolve(TypeGenBase.TypeGenBase): and string.strcmp(ts_x, type_str) != 0: return self._expand_typedef_ref(pool, ts_x, depth + 1) return type_str - def _long_llvm_ty(self, pool: rowptr[memhub.MemBuddy]) -> llvmlite.LLVMType | t.CPtr: + def _long_llvm_ty(self, pool: rawptr[memhub.MemBuddy]) -> llvmlite.LLVMType | t.CPtr: """C 的 long / unsigned long 的目标平台 LLVM 类型 Windows 目标(LLP64)下 long = 32 位——对齐 TPC @@ -1311,7 +1311,7 @@ class TypeGenResolve(TypeGenBase.TypeGenBase): or string.strstr(triple, "msvc") is not None: return llvmlite.Int32(pool) return llvmlite.Int64(pool) - def map_t_type(self, pool: rowptr[memhub.MemBuddy], + def map_t_type(self, pool: rawptr[memhub.MemBuddy], type_name: str) -> llvmlite.LLVMType | t.CPtr: """将 t.CXxx / c.CXxx 类型名映射到 LLVMType @@ -1601,7 +1601,7 @@ class TypeGenResolve(TypeGenBase.TypeGenBase): def extract_class_name_from_annotation(self, node: ast.AST | t.CPtr, imported_modules: str, - pool: rowptr[memhub.MemBuddy] = None, + pool: rawptr[memhub.MemBuddy] = None, from_imports: str = None) -> str: """从类型注解 AST 中提取类名,返回 None=无法提取 @@ -1737,13 +1737,13 @@ class TypeGenResolve(TypeGenBase.TypeGenBase): sub: ast.Subscript | t.CPtr = (ast.Subscript | t.CPtr)(node) if sub.value is None: return None - # rowptr[T] 是内建裸指针(等价 t.CPtr[T]),AnnotClassName 应取 pointee - # 类名 T(字段访问按 T 查结构体),而非 "rowptr" / "rowptr[T]"——否则 - # lookup_field_by_class 报"类 'rowptr' 未注册"(json.__parser _peek - # 参数 s: rowptr[ParseState] 根因)。 + # rawptr[T] 是内建裸指针(等价 t.CPtr[T]),AnnotClassName 应取 pointee + # 类名 T(字段访问按 T 查结构体),而非 "rawptr" / "rawptr[T]"——否则 + # lookup_field_by_class 报"类 'rawptr' 未注册"(json.__parser _peek + # 参数 s: rawptr[ParseState] 根因)。 if sub.value.kind() == ast.ASTKind.Name: rp_nm: ast.Name | t.CPtr = (ast.Name | t.CPtr)(sub.value) - if rp_nm.id is not None and string.strcmp(rp_nm.id, "rowptr") == 0: + if rp_nm.id is not None and string.strcmp(rp_nm.id, "rawptr") == 0: if sub.slice is not None: return self.extract_class_name_from_annotation( sub.slice, imported_modules, pool, from_imports) @@ -1812,7 +1812,7 @@ class TypeGenResolve(TypeGenBase.TypeGenBase): return mangled_buf return None - def _resolve_generic_subscript_ty(self, pool: rowptr[memhub.MemBuddy], + def _resolve_generic_subscript_ty(self, pool: rawptr[memhub.MemBuddy], sub: ast.Subscript | t.CPtr, gen_cls_name: str, trans: HT.Translator | t.CPtr, @@ -1963,7 +1963,7 @@ class TypeGenResolve(TypeGenBase.TypeGenBase): # Phase B(declare_only==0)全量翻译时,泛型模板类的下标仍解析不出特化结构体 # ⇒ 上游注解必然退化(BinOp 分支落到 Ptr(i8) 丢类型,或退化到裸基类 list*), # 后续 .get() 按错误元素类型分派 → inttoptr 截断崩溃。禁止静默退化:报出查表键 - # 与实际模板名。仅当基名确为泛型模板时才触发(避免误伤 rowptr/CArray 等 builtin)。 + # 与实际模板名。仅当基名确为泛型模板时才触发(避免误伤 rawptr/CArray 等 builtin)。 if trans is not None and trans._declare_only == 0 \ and self.Gen.ClassGenGeneric._find_generic_template(gen_cls_name) is not None: self.Gen.TypeGenErr.fatal_error( @@ -1973,7 +1973,7 @@ class TypeGenResolve(TypeGenBase.TypeGenBase): "TypeError") # 未特化:返回 None(不报错,让后续流程处理) return None - def resolve_annotation_type(self, pool: rowptr[memhub.MemBuddy], + def resolve_annotation_type(self, pool: rawptr[memhub.MemBuddy], node: ast.AST | t.CPtr, imported_modules: str, from_imports: str, @@ -2065,11 +2065,11 @@ class TypeGenResolve(TypeGenBase.TypeGenBase): if gp_sub_node is not None: return self.resolve_annotation_type(pool, gp_sub_node, imported_modules, from_imports, trans, depth + 1) # 已规范化 sha1 前缀名 "{16hex}.Class"(_norm_type_arg_name 产物,如泛型 - # 实参 rowptr[7565e081d88517ac.AST] 的括号内层):模块段即 SHA1(天然 + # 实参 rawptr[7565e081d88517ac.AST] 的括号内层):模块段即 SHA1(天然 # 已编译),无需 import 检查。解析器把 "a.b" 折叠为单 Name(int 同款), - # 与 Attribute 形态(L1978-1992)都要支持;否则 rowptr[sha.AST] 解析失败 + # 与 Attribute 形态(L1978-1992)都要支持;否则 rawptr[sha.AST] 解析失败 # → 特化方法参数类型退化 → "方法 'list[...].append' 参数 'item' 类型解析 - # 失败"(SlotsBugTest ast 包 rowptr[list[rowptr[AST]]] 根因)。 + # 失败"(SlotsBugTest ast 包 rawptr[list[rawptr[AST]]] 根因)。 sp_pre2: int = self._is_sha1_prefixed(nm.id) if sp_pre2 != 0: # [D3 收敛] 前缀长度取自唯一真源(不再硬编码 17/16): @@ -2213,7 +2213,7 @@ class TypeGenResolve(TypeGenBase.TypeGenBase): if alias_ty is not None: return alias_ty # [builtins 最后匹配] 常规路径全部 miss 后的最终兜底:查 - # includes/builtins.vp 的 CTypedef 声明(如 rowptr: t.CTypedef = + # includes/builtins.vp 的 CTypedef 声明(如 rawptr: t.CTypedef = # t.CPtr)。命中展开类型表达式后递归解析,仍失败才由调用方报错。 btd_n: str = self._lookup_builtins_typedef(pool, nm.id) if btd_n is not None: @@ -2655,10 +2655,10 @@ class TypeGenResolve(TypeGenBase.TypeGenBase): if self.Gen.TypeGenCType.ConstEvalOk == 0 or count_n <= 0: return None return llvmlite.Array(pool, elem_ty_n, count_n) - # rowptr[T] 内建裸指针:等价 t.CPtr[T] → Ptr(T)(T 自身可含指针层级)。 + # rawptr[T] 内建裸指针:等价 t.CPtr[T] → Ptr(T)(T 自身可含指针层级)。 # 与 t.CPtr[T] 语义一致;不处理则泛型特化/builtins 兜底失败 → # "函数返回类型解析失败:注解不可解析"。 - if string.strcmp(gen_nm.id, "rowptr") == 0: + if string.strcmp(gen_nm.id, "rawptr") == 0: if sub.slice.kind() != ast.ASTKind.Tuple: rp_elem: llvmlite.LLVMType | t.CPtr = self.resolve_annotation_type( pool, sub.slice, imported_modules, from_imports, trans, depth + 1) @@ -2672,7 +2672,7 @@ class TypeGenResolve(TypeGenBase.TypeGenBase): if gen_ty_nm is not None: return gen_ty_nm # 泛型特化 miss 时不能 return None 直接退出——否则下面的 - # [builtins 最后匹配] 兜底永远不可达(rowptr[int] 根因)。 + # [builtins 最后匹配] 兜底永远不可达(rawptr[int] 根因)。 # 下方 builtins 兜底若也未命中,仍按旧行为返回 None(多遍 # 收敛/上层报错),不落到"仅支持 t.CArray/t.Callable"fatal。 if sub.value.kind() == ast.ASTKind.Name: diff --git a/App/lib/core/Gen/Type/TypeSpec.vp b/App/lib/core/Gen/Type/TypeSpec.vp index a54a4d5..3b23633 100644 --- a/App/lib/core/Gen/Type/TypeSpec.vp +++ b/App/lib/core/Gen/Type/TypeSpec.vp @@ -351,7 +351,7 @@ def SpecArenaInit(arena: TypeSpecArena | t.CPtr, cap: int) -> int: use_cap: int = cap if use_cap <= 0: use_cap = SPEC_INTERN_MAX - pp: rowptr[memhub.MemBuddy] = CompilerFactory.factory.PermPool + pp: rawptr[memhub.MemBuddy] = CompilerFactory.factory.PermPool keys: bytes = pp.alloc(use_cap * SPEC_TEXT_MAX) if keys is None: return 1 @@ -386,7 +386,7 @@ def SpecArenaInit(arena: TypeSpecArena | t.CPtr, cap: int) -> int: # ============================================================ def _spec_alloc() -> TypeSpec | t.CPtr: """分配并清零一个 TypeSpec(PermPool)""" - pp: rowptr[memhub.MemBuddy] = CompilerFactory.factory.PermPool + pp: rawptr[memhub.MemBuddy] = CompilerFactory.factory.PermPool size: sizet = TypeSpec.__sizeof__() sp: TypeSpec | t.CPtr = (TypeSpec | t.CPtr)(t.CVoid(pp.alloc(size), t.CPtr)) if sp is None: diff --git a/App/lib/core/Gen/VarGenMixin.vp b/App/lib/core/Gen/VarGenMixin.vp index 1f0c0ff..7b95a48 100644 --- a/App/lib/core/Gen/VarGenMixin.vp +++ b/App/lib/core/Gen/VarGenMixin.vp @@ -47,7 +47,7 @@ class VarGenMixin: # init_vars — 分配并清零 VarEntry 数组 # ============================================================ Gen: Generator.Generator | t.CPtr - def init_vars(self, pool: rowptr[memhub.MemBuddy]) -> GenTypes.VarEntry | t.CPtr: + def init_vars(self, pool: rawptr[memhub.MemBuddy]) -> GenTypes.VarEntry | t.CPtr: """分配并清零变量表数组""" size: sizet = MAX_VARS * GenTypes.VarEntry.__sizeof__() vars_ptr: GenTypes.VarEntry | t.CPtr = pool.alloc(size) @@ -272,7 +272,7 @@ class VarGenMixin: return llvmlite.build_alloca_at_entry(builder, ty) # get_or_create_var — 查找或创建变量 alloca(旧版兼容) - def get_or_create_var(self, pool: rowptr[memhub.MemBuddy], + def get_or_create_var(self, pool: rawptr[memhub.MemBuddy], builder: llvmlite.IRBuilder | t.CPtr, vars_ptr: GenTypes.VarEntry | t.CPtr, var_count: int, @@ -292,7 +292,7 @@ class VarGenMixin: # ============================================================ # _create_scope — 创建新作用域节点(内部辅助函数) # ============================================================ - def _create_scope(self, pool: rowptr[memhub.MemBuddy], + def _create_scope(self, pool: rawptr[memhub.MemBuddy], parent: GenTypes.Scope | t.CPtr, kind: int) -> GenTypes.Scope | t.CPtr: """创建并初始化作用域节点""" @@ -311,7 +311,7 @@ class VarGenMixin: # ============================================================ # init_symbol_table — 创建符号表(含模块级根作用域) # ============================================================ - def init_symbol_table(self, pool: rowptr[memhub.MemBuddy]) -> GenTypes.SymbolTable | t.CPtr: + def init_symbol_table(self, pool: rawptr[memhub.MemBuddy]) -> GenTypes.SymbolTable | t.CPtr: """创建并初始化符号表,包含模块级根作用域""" if pool is None: return None @@ -338,7 +338,7 @@ class VarGenMixin: """进入新作用域,返回新创建的作用域""" if symtab is None: return None - pool: rowptr[memhub.MemBuddy] = symtab.Pool + pool: rawptr[memhub.MemBuddy] = symtab.Pool scope: GenTypes.Scope | t.CPtr = self._create_scope(pool, symtab.Current, kind) if scope is None: return None @@ -479,7 +479,7 @@ class VarGenMixin: # get_or_create_sym — 查找或创建变量(在当前作用域) # ============================================================ def get_or_create_sym(self, symtab: GenTypes.SymbolTable | t.CPtr, - pool: rowptr[memhub.MemBuddy], + pool: rawptr[memhub.MemBuddy], builder: llvmlite.IRBuilder | t.CPtr, name: str, ty: llvmlite.LLVMType | t.CPtr) -> llvmlite.Value | t.CPtr: diff --git a/App/lib/core/IncludesScanner.vp b/App/lib/core/IncludesScanner.vp index 0a0fd48..3f5f7cf 100644 --- a/App/lib/core/IncludesScanner.vp +++ b/App/lib/core/IncludesScanner.vp @@ -18,7 +18,7 @@ import lib.core.VLogger as VLogger # ============================================================ # 全局 mbuddy 指针 -_mbuddy: rowptr[memhub.MemBuddy] +_mbuddy: rawptr[memhub.MemBuddy] # 文件路径最大长度 MAX_PATH_LEN: t.CDefine = 512 @@ -53,7 +53,7 @@ class ScanResult: # ============================================================ # create_scan_result - 创建扫描结果容器 # ============================================================ -def create_scan_result(pool: rowptr[memhub.MemBuddy]) -> ScanResult | t.CPtr: +def create_scan_result(pool: rawptr[memhub.MemBuddy]) -> ScanResult | t.CPtr: """创建扫描结果容器,预分配 MAX_FILES 个槽位""" if pool is None: return None @@ -78,7 +78,7 @@ def create_scan_result(pool: rowptr[memhub.MemBuddy]) -> ScanResult | t.CPtr: # add_file_entry - 向扫描结果添加文件条目 # ============================================================ def add_file_entry(result: ScanResult | t.CPtr, - pool: rowptr[memhub.MemBuddy], + pool: rawptr[memhub.MemBuddy], abs_path: str, rel_path: str, sha1: str, inc_dir: str) -> int: """添加文件条目到扫描结果,返回 0 成功(inc_dir 为所属 includes 根目录)""" @@ -140,7 +140,7 @@ def add_file_entry(result: ScanResult | t.CPtr, # ============================================================ # compute_file_sha1 - 读取文件内容并计算 SHA1(CRLF→LF 后计算,与 Projectrans.py 一致) # ============================================================ -def compute_file_sha1(pool: rowptr[memhub.MemBuddy], +def compute_file_sha1(pool: rawptr[memhub.MemBuddy], file_path: str) -> str: """读取文件内容并计算 SHA1 前16字符(CRLF→LF 后计算,与 Projectrans.py 一致)""" if pool is None or file_path is None: @@ -186,7 +186,7 @@ def compute_file_sha1(pool: rowptr[memhub.MemBuddy], # ============================================================ # scan_directory_recursive - 递归扫描目录(FindFirstFileA/FindNextFileA 遍历目录树) # ============================================================ -def scan_directory_recursive(pool: rowptr[memhub.MemBuddy], +def scan_directory_recursive(pool: rawptr[memhub.MemBuddy], root_dir: str, rel_prefix: str, result: ScanResult | t.CPtr, @@ -300,7 +300,7 @@ def scan_directory_recursive(pool: rowptr[memhub.MemBuddy], # ============================================================ # scan_includes - 扫描 includes 目录入口(返回所有 .vp 文件路径与 SHA1) # ============================================================ -def scan_includes(pool: rowptr[memhub.MemBuddy], +def scan_includes(pool: rawptr[memhub.MemBuddy], includes_dirs: str) -> ScanResult | t.CPtr: """扫描 includes 目录(支持空格分隔的多目录),返回所有 .vp/.py 文件的扫描结果""" if pool is None or includes_dirs is None: diff --git a/App/lib/core/VLogger.vp b/App/lib/core/VLogger.vp index 5fa3d9c..248dbe9 100644 --- a/App/lib/core/VLogger.vp +++ b/App/lib/core/VLogger.vp @@ -47,7 +47,7 @@ class Logger: _level: int _console_handle: win32base.HANDLE _use_color: int - __mbuddy__: rowptr[memhub.MemBuddy] + __mbuddy__: rawptr[memhub.MemBuddy] def __init__(self, level: int = 1): self._level = level @@ -171,7 +171,7 @@ class Logger: # 全局 mbuddy 指针(由 lib.InitLib 注入) -_mbuddy: rowptr[memhub.MemBuddy] +_mbuddy: rawptr[memhub.MemBuddy] # 全局 logger 指针 logger: Logger | t.CPtr diff --git a/App/main.vp b/App/main.vp index 9b29611..8eec716 100644 --- a/App/main.vp +++ b/App/main.vp @@ -77,12 +77,12 @@ def main() -> int: stdio.printf("FAIL: malloc for perm_pool arena failed\n") return 1 - mb: rowptr[memhub.MemBuddy] = memhub.MemBuddy(arena, POOL_SIZE, detect_flag, deep_detect_flag) + mb: rawptr[memhub.MemBuddy] = memhub.MemBuddy(arena, POOL_SIZE, detect_flag, deep_detect_flag) if mb is None: stdio.printf("FAIL: MemBuddy init failed\n") return 1 - perm_pool: rowptr[memhub.MemBuddy] = memhub.MemBuddy(perm_arena, PERM_POOL_SIZE, detect_flag, deep_detect_flag) + perm_pool: rawptr[memhub.MemBuddy] = memhub.MemBuddy(perm_arena, PERM_POOL_SIZE, detect_flag, deep_detect_flag) if perm_pool is None: stdio.printf("FAIL: perm_pool init failed\n") @@ -109,7 +109,7 @@ def main() -> int: lib._mbuddy = mb # P2: 创建项目级 Generator 单例(Phase1/Phase2/BuildPipeline 全程复用; - gen: rowptr[GenGenerator.Generator] = mb.alloc(GenGenerator.Generator.__sizeof__()) + gen: rawptr[GenGenerator.Generator] = mb.alloc(GenGenerator.Generator.__sizeof__()) if gen is None: stdio.printf("FAIL: Generator alloc failed\n") return 1 @@ -534,7 +534,7 @@ Target: %s sf_stub_len: sizet = string.strlen(sf_stub_buf) sf_stub_path: str = StubMergerCollect._sliced_path(temp_dir, td_len_sf, module_name, "stub.ll") if sf_stub_path is not None: - sf_f: rowptr[fileio.File] = fileio.File(sf_stub_path, fileio.MODE.W) + sf_f: rawptr[fileio.File] = fileio.File(sf_stub_path, fileio.MODE.W) if not sf_f.closed: sf_f.write(sf_stub_buf, sf_stub_len) sf_f.close() @@ -547,7 +547,7 @@ Target: %s sf_text_len: sizet = string.strlen(sf_text_buf) sf_text_path: str = StubMergerCollect._sliced_path(temp_dir, td_len_sf, module_name, "text.ll") if sf_text_path is not None: - sf_tf: rowptr[fileio.File] = fileio.File(sf_text_path, fileio.MODE.W) + sf_tf: rawptr[fileio.File] = fileio.File(sf_text_path, fileio.MODE.W) if not sf_tf.closed: sf_tf.write(sf_text_buf, sf_text_len) sf_tf.close() diff --git a/Test/App/nested_match_test.vp b/Test/App/nested_match_test.vp index 21d6b63..4e0e504 100644 --- a/Test/App/nested_match_test.vp +++ b/Test/App/nested_match_test.vp @@ -17,7 +17,7 @@ import string # ============================================================ # 内存池(测试内部使用) -_mbuddy: rowptr[memhub.MemBuddy] +_mbuddy: rawptr[memhub.MemBuddy] # 测试用内存大小(64KB,足够构造 LLVMType 值) _NMATCH_POOL_SIZE: t.CDefine = 65536 @@ -30,7 +30,7 @@ def _init_mbuddy() -> int: if arena is None: stdio.printf("FAIL: malloc for arena failed\n") return 1 - mb: rowptr[memhub.MemBuddy] = stdlib.malloc(memhub.MemBuddy.__sizeof__()) + mb: rawptr[memhub.MemBuddy] = stdlib.malloc(memhub.MemBuddy.__sizeof__()) if mb is None: stdio.printf("FAIL: MemBuddy init failed\n") return 1 diff --git a/Test/Sha1Test/App/main.vp b/Test/Sha1Test/App/main.vp index 37ea838..96d0f5d 100644 --- a/Test/Sha1Test/App/main.vp +++ b/Test/Sha1Test/App/main.vp @@ -14,7 +14,7 @@ def main() -> int: arena: bytes = stdlib.malloc(POOL_SIZE) if arena is None: return 1 - mb: rowptr[memhub.MemBuddy] = memhub.MemBuddy(arena, POOL_SIZE) + mb: rawptr[memhub.MemBuddy] = memhub.MemBuddy(arena, POOL_SIZE) if mb is None: return 1 hashlib._mbuddy = (memhub.MemManager | t.CPtr)(mb)