From df2de5ecfae591669170145d81af5546ed6cf9fd Mon Sep 17 00:00:00 2001 From: TermiNexus Date: Mon, 5 Oct 2026 17:55:52 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E5=8E=BB=20t.CPtr(&a)=20=E5=86=97?= =?UTF-8?q?=E4=BD=99=E5=8C=85=E8=A3=85=EF=BC=88R15=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit TransPyV 4 文件 / 7 行:Phase/BuildPipeline.vp、core/Gen/AssignGenMixin.vp、core/Gen/TranslatorGenMixin.vp。验证:自举三重重编 SUCCESS + 全量 77 项顺序回归通过。 --- App/lib/Phase/BuildPipeline.vp | 10 +++++----- App/lib/__init__.vp | 3 --- App/lib/core/Gen/AssignGenMixin.vp | 2 +- App/lib/core/Gen/TranslatorGenMixin.vp | 2 +- 4 files changed, 7 insertions(+), 10 deletions(-) diff --git a/App/lib/Phase/BuildPipeline.vp b/App/lib/Phase/BuildPipeline.vp index b3eb2e3..677d89c 100644 --- a/App/lib/Phase/BuildPipeline.vp +++ b/App/lib/Phase/BuildPipeline.vp @@ -570,16 +570,16 @@ def _run_cmd_wait(cmd: str) -> int: pi: win32process.PROCESS_INFORMATION = win32process.PROCESS_INFORMATION() # T() only allocas, no memset: unset STARTUPINFOA fields are stack garbage, so concurrent # threads get random dwFlags and CreateProcessA uses junk stdio handles. Clear si/sa/pi. - string.memset(t.CPtr(&si), 0, win32process.STARTUPINFOA.__sizeof__()) - string.memset(t.CPtr(&sa), 0, w32.win32base.SECURITY_ATTRIBUTES.__sizeof__()) - string.memset(t.CPtr(&pi), 0, win32process.PROCESS_INFORMATION.__sizeof__()) + string.memset(&si, 0, win32process.STARTUPINFOA.__sizeof__()) + string.memset(&sa, 0, w32.win32base.SECURITY_ATTRIBUTES.__sizeof__()) + string.memset(&pi, 0, win32process.PROCESS_INFORMATION.__sizeof__()) sa.nLength = w32.win32base.SECURITY_ATTRIBUTES.__sizeof__() sa.lpSecurityDescriptor = t.CPtr(0) sa.bInheritHandle = 1 si.cb = win32process.STARTUPINFOA.__sizeof__() # create_flags=0: the child inherits the parent console (output shown, like system); # si.dwFlags stays 0 after memset (no STARTF_USESTDHANDLES, no std handles). - ok: int = win32process.CreateProcessA(t.CPtr(0), cmd_line, t.CPtr(0), t.CPtr(0), 1, 0, t.CPtr(0), t.CPtr(0), t.CPtr(&si), t.CPtr(&pi)) + ok: int = win32process.CreateProcessA(t.CPtr(0), cmd_line, t.CPtr(0), t.CPtr(0), 1, 0, t.CPtr(0), t.CPtr(0), &si, &pi) # CreateProcessA failure diagnostics: read GetLastError immediately (later calls overwrite # it). Use warning, not error (error would sys.exit in a worker thread). if ok == 0: @@ -589,7 +589,7 @@ def _run_cmd_wait(cmd: str) -> int: if ok == 0: return -1 win32sync.WaitForSingleObject(pi.hProcess, w32.win32base.INFINITE) exit_code: uint32 = 0 - win32process.GetExitCodeProcess(pi.hProcess, t.CPtr(&exit_code)) + win32process.GetExitCodeProcess(pi.hProcess, &exit_code) w32.win32base.CloseHandle(pi.hProcess) w32.win32base.CloseHandle(pi.hThread) return int(exit_code) diff --git a/App/lib/__init__.vp b/App/lib/__init__.vp index 57fb433..5480f13 100644 --- a/App/lib/__init__.vp +++ b/App/lib/__init__.vp @@ -1,7 +1,4 @@ -import t, c -from stdint import * import memhub -import lib.core.VLogger as VLogger # lib package entry - declares the global _mbuddy memory-pool pointer. diff --git a/App/lib/core/Gen/AssignGenMixin.vp b/App/lib/core/Gen/AssignGenMixin.vp index 015ff49..5d318d1 100644 --- a/App/lib/core/Gen/AssignGenMixin.vp +++ b/App/lib/core/Gen/AssignGenMixin.vp @@ -370,7 +370,7 @@ novirtual class AssignGenMixin: # Recover the float value from the source file (AST float_val may be overwritten) use_val: double = cn_fp.float_val rec_d: double = 0.0 - if self._recover_cdefine_float(name, t.CPtr(&rec_d)) != 0: use_val = rec_d + if self._recover_cdefine_float(name, &rec_d) != 0: use_val = rec_d else: # Source recovery failed: fail fast to avoid registering a corrupted float self.Gen.TypeGenErr.fatal_error(val_node, "CDefine 浮点值源文件恢复失败", "InternalCompilerError") diff --git a/App/lib/core/Gen/TranslatorGenMixin.vp b/App/lib/core/Gen/TranslatorGenMixin.vp index fc7ecf9..317d0ba 100644 --- a/App/lib/core/Gen/TranslatorGenMixin.vp +++ b/App/lib/core/Gen/TranslatorGenMixin.vp @@ -632,7 +632,7 @@ novirtual class TranslatorGenMixin: if is_fty_g == 0: self.Gen.TypeGenErr.fatal_error(node, f"模块级变量 '{var_name}' 用浮点字面量初始化,但注解不是浮点类型", "TypeError") return 0 - if self.Gen.AssignGen._recover_float_literal(var_name, t.CPtr(&init_fval), 0) != 1: + if self.Gen.AssignGen._recover_float_literal(var_name, &init_fval, 0) != 1: self.Gen.TypeGenErr.fatal_error(node, f"模块级浮点变量 '{var_name}' 初始化值源文件恢复失败", "InternalCompilerError") return 0