From a6e28c71f5f77b54f4a004efbbf0e1756139167d Mon Sep 17 00:00:00 2001 From: TermiNexus Date: Sun, 23 Aug 2026 00:21:17 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B0=86=E9=83=A8=E5=88=86=20while=20=E7=AE=80?= =?UTF-8?q?=E5=8C=96=E4=B8=BA=20for?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- App/lib/Phase/Phase2/__init__.vp | 10 +++++----- App/lib/Stub/StubMerger/StubMergerStore.vp | 8 ++++---- App/lib/core/Gen/AssignGenMixin.vp | 4 +--- App/lib/core/Gen/CallGenBase.vp | 7 ++++--- App/lib/core/Gen/CallGenCBuiltin.vp | 8 +------- App/lib/core/Gen/CallGenCtor.vp | 4 +--- App/lib/core/Gen/CallGenLeafKit.vp | 17 ++++++----------- App/lib/core/Gen/CallGenMixin.vp | 4 +--- App/lib/core/Gen/ClassGenGeneric.vp | 2 +- App/lib/core/Gen/ExprGenCdef.vp | 4 ++-- App/lib/core/Gen/ExprGenCls.vp | 4 ++-- App/lib/core/Gen/StmtGenCifMixin.vp | 2 +- App/lib/core/Gen/StructGenMixin.vp | 7 +++---- App/lib/core/Gen/TypeGenBase.vp | 6 +++--- App/lib/core/Gen/TypeGenErr.vp | 2 +- App/lib/core/Gen/TypeGenResolve.vp | 2 +- App/lib/core/Handles/HandlesExpr.vp | 4 ++-- App/lib/core/VLogger.vp | 18 ++++++------------ App/main.vp | 11 +++++------ 19 files changed, 50 insertions(+), 74 deletions(-) diff --git a/App/lib/Phase/Phase2/__init__.vp b/App/lib/Phase/Phase2/__init__.vp index 7f85b8c..e89a19f 100644 --- a/App/lib/Phase/Phase2/__init__.vp +++ b/App/lib/Phase/Phase2/__init__.vp @@ -408,9 +408,9 @@ def RunMultiFileProject(mb: memhub.MemBuddy | t.CPtr, if includes_dir is not None and includes_binary_dir is not None: store_count_inc_pre: int = StubMergerStore.GetSha1StoreCount() if store_count_inc_pre > 0: - store_sha1_inc_pre: bytes | t.CPtr = StubMergerStore.GetSha1StoreArrPtr() - store_rel_inc_pre: bytes | t.CPtr = StubMergerStore.GetSha1StoreRelArrPtr() - store_incdir_inc_pre: bytes | t.CPtr = StubMergerStore.GetSha1StoreIncdirArrPtr() + store_sha1_inc_pre: bytes = StubMergerStore.GetSha1StoreArrPtr() + store_rel_inc_pre: bytes = StubMergerStore.GetSha1StoreRelArrPtr() + store_incdir_inc_pre: bytes = StubMergerStore.GetSha1StoreIncdirArrPtr() deps_filled_pre: int = 0 PHASE_A_INC_MAX_PASSES: t.CInt = 3 # [修复] 记录预注册失败的 includes:多遍后仍失败 → 报错终止编译。 @@ -923,8 +923,8 @@ def RunMultiFileProject(mb: memhub.MemBuddy | t.CPtr, if store_sha1_arr_mi is not None and store_mod_arr_mi is not None: store_count_mi = StubMergerIR._BuildIncludesSha1Map( temp_dir, td_len_pb, store_sha1_arr_mi, store_mod_arr_mi) - store_rel_arr_mi: bytes | t.CPtr = StubMergerStore.GetSha1StoreRelArrPtr() - store_incdir_arr_mi: bytes | t.CPtr = StubMergerStore.GetSha1StoreIncdirArrPtr() + store_rel_arr_mi: bytes = StubMergerStore.GetSha1StoreRelArrPtr() + store_incdir_arr_mi: bytes = StubMergerStore.GetSha1StoreIncdirArrPtr() if store_count_mi > 0: # 拓扑排序可达 includes:被依赖模块先完整翻译。跨模块 vtable 生成 diff --git a/App/lib/Stub/StubMerger/StubMergerStore.vp b/App/lib/Stub/StubMerger/StubMergerStore.vp index bd9f237..4e6a8f0 100644 --- a/App/lib/Stub/StubMerger/StubMergerStore.vp +++ b/App/lib/Stub/StubMerger/StubMergerStore.vp @@ -341,16 +341,16 @@ def LookupIncludesDeps(sha1: str) -> str: idx2: t.CSizeT = t.CSizeT(i) * StubMerger.MAX_DEPS_STR_LEN return StubMerger._includes_deps_str + idx2 return None -def GetSha1StoreArrPtr() -> bytes | t.CPtr: +def GetSha1StoreArrPtr() -> bytes: """返回 SHA1 数组指针(每个条目 17 字节)""" return StubMerger._sha1_store_arr -def GetSha1StoreModArrPtr() -> bytes | t.CPtr: +def GetSha1StoreModArrPtr() -> bytes: """返回模块名数组指针(每个条目 64 字节)""" return StubMerger._sha1_store_mod -def GetSha1StoreRelArrPtr() -> bytes | t.CPtr: +def GetSha1StoreRelArrPtr() -> bytes: """返回相对路径数组指针(每个条目 StubMerger.MAX_REL_PATH_LEN 字节)""" return StubMerger._sha1_store_rel -def GetSha1StoreIncdirArrPtr() -> bytes | t.CPtr: +def GetSha1StoreIncdirArrPtr() -> bytes: """返回所属 includes 根目录数组指针(每个条目 StubMerger.MAX_INC_DIR_LEN 字节,空串表示不属于任何 includes 目录)""" return StubMerger._sha1_store_incdir # ============================================================ diff --git a/App/lib/core/Gen/AssignGenMixin.vp b/App/lib/core/Gen/AssignGenMixin.vp index 20567d3..1cd7494 100644 --- a/App/lib/core/Gen/AssignGenMixin.vp +++ b/App/lib/core/Gen/AssignGenMixin.vp @@ -596,8 +596,7 @@ class AssignGenMixin: elts_count: t.CSizeT = len(elts) # 为每个元素生成 GEP + store - i: t.CSizeT = 0 - while i < elts_count: + for i in range(elts_count): elem_node: ast.AST | t.CPtr = elts.get(i) elem_val: llvmlite.Value | t.CPtr = self.Gen.ExprGen.translate_value( builder, pool, mod, elem_node, None, 0, trans) @@ -614,7 +613,6 @@ class AssignGenMixin: store_val = self.Gen.ExprGenBase.coerce_to_type( builder, elem_val, elem_ptr.Ty.Pointee, elem_node) llvmlite.build_store(builder, store_val, elem_ptr) - i += 1 return 0 diff --git a/App/lib/core/Gen/CallGenBase.vp b/App/lib/core/Gen/CallGenBase.vp index 189423a..be007ca 100644 --- a/App/lib/core/Gen/CallGenBase.vp +++ b/App/lib/core/Gen/CallGenBase.vp @@ -145,8 +145,8 @@ class CallGenBase: """从 SHA1 存储器的 rel_path 计算模块所属包名(目录部分,'/' → '.')""" if pool is None or mod_sha1 is None: return None - rel_arr_ptr: bytes | t.CPtr = StubMergerStore.GetSha1StoreRelArrPtr() - sha1_arr_ptr: bytes | t.CPtr = StubMergerStore.GetSha1StoreArrPtr() + rel_arr_ptr: bytes = StubMergerStore.GetSha1StoreRelArrPtr() + sha1_arr_ptr: bytes = StubMergerStore.GetSha1StoreArrPtr() count: int = StubMergerStore.GetSha1StoreCount() if rel_arr_ptr is None or sha1_arr_ptr is None or count <= 0: return None @@ -651,7 +651,7 @@ class CallGenBase: # ============================================================ # ============================================================ - def SetTempDir(self, temp_dir: str): + def SetTempDir(self, temp_dir: str) -> None: """设置 temp 目录路径(统一写入 Gen.CallGenBase 真源,跨子对象共享)""" if self.Gen is None: return @@ -699,6 +699,7 @@ class CallGenBase: if c != ' ' and c != '\t': break s += 1 + # 去除尾部空白 e: t.CSizeT = end while e > s: diff --git a/App/lib/core/Gen/CallGenCBuiltin.vp b/App/lib/core/Gen/CallGenCBuiltin.vp index bad0411..83a6a6e 100644 --- a/App/lib/core/Gen/CallGenCBuiltin.vp +++ b/App/lib/core/Gen/CallGenCBuiltin.vp @@ -22,13 +22,7 @@ import lib.core.Gen.CallGenBase as CallGenBase # ============================================================ -# CallGenCBuiltin - CallGenMixin 拆分 2/9:c.* 内建 + asm + llvmir -# -# 按功能域从 CallGenMixin.vp 拆出(500~1500 行/文件架构重构): -# translate_c_deref/derefas/set/addr/load + c.Asm 全套 + c.LLVMIR。 -# 继承 CallGenBase。 -# -# @t.NoVTable:静态绑定(方法沿 MRO 直接调用 + this 调整)。 +# CallGenCBuiltin # ============================================================ diff --git a/App/lib/core/Gen/CallGenCtor.vp b/App/lib/core/Gen/CallGenCtor.vp index 4fb553e..bd94e02 100644 --- a/App/lib/core/Gen/CallGenCtor.vp +++ b/App/lib/core/Gen/CallGenCtor.vp @@ -930,8 +930,7 @@ class CallGenCtor(CallGenBase.CallGenBase): return None string.memset(extra_args, 0, 8 * 32) - ai: t.CSizeT = 0 - while ai < can: + for ai in range(can): if ai >= 32: # 定长 8*32 槽:超过 32 个实参继续写会越界污染 pool 相邻块,fail-fast self.Gen.TypeGenErr.fatal_error( @@ -943,7 +942,6 @@ class CallGenCtor(CallGenBase.CallGenBase): builder, pool, mod, arg_node, None, 0, trans) if arg_val is not None: extra_args[ai] = t.CSizeT(arg_val) - ai += 1 # 存储指针:默认用 alloca,如果有 __new__ 则用 __new__ 返回的指针 # __new__ 是可选的,仅当泛型类模板定义了 __new__ 方法时才调用 diff --git a/App/lib/core/Gen/CallGenLeafKit.vp b/App/lib/core/Gen/CallGenLeafKit.vp index 032a1a4..5f4fb98 100644 --- a/App/lib/core/Gen/CallGenLeafKit.vp +++ b/App/lib/core/Gen/CallGenLeafKit.vp @@ -369,11 +369,10 @@ class CallGenLeafKit(CallGenCBuiltin.CallGenCBuiltin): string.memset(names, 0, 8 * (ISINSTANCE_CLASS_MAX + 1)) string.memset(queue, 0, 8 * ISINSTANCE_CLASS_MAX) string.memset(visited, 0, 8 * ISINSTANCE_CLASS_MAX) - qcount: int = 0 + qcount: int = 1 outcount: int = 0 vcount: int = 0 - queue[0] = t.CSizeT(class_name) - qcount = 1 + queue[0] = t.CSizeT(class_name) # 存疑 while qcount > 0: qcount -= 1 cur_addr: t.CSizeT = queue[qcount] @@ -751,7 +750,7 @@ class CallGenLeafKit(CallGenCBuiltin.CallGenCBuiltin): builder: llvmlite.IRBuilder | t.CPtr, mod: llvmlite.LLVMModule | t.CPtr, cl: ast.Call | t.CPtr, - trans: HT.Translator | t.CPtr = None): + trans: HT.Translator | t.CPtr = None) -> None: """翻译 printf 调用(特殊处理格式字符串)""" cargs: list[ast.AST | t.CPtr] | t.CPtr = cl.args if cargs is None: @@ -812,7 +811,7 @@ class CallGenLeafKit(CallGenCBuiltin.CallGenCBuiltin): builder: llvmlite.IRBuilder | t.CPtr, mod: llvmlite.LLVMModule | t.CPtr, cl: ast.Call | t.CPtr, - trans: HT.Translator | t.CPtr = None): + trans: HT.Translator | t.CPtr = None) -> None: """翻译 print 调用(类型感知格式化 + 默认换行)""" cargs: list[ast.AST | t.CPtr] | t.CPtr = cl.args if cargs is None: @@ -1231,14 +1230,12 @@ class CallGenLeafKit(CallGenCBuiltin.CallGenCBuiltin): if name is None or self.GlobalDefaults is None: return None entry_size: t.CSizeT = GenTypes.FuncDefaultsEntry.__sizeof__() - i: int = 0 - while i < self.GlobalDefaultsCount: + for i in range(self.GlobalDefaultsCount): entry_addr: t.CUInt64T = t.CUInt64T(self.GlobalDefaults) + i * entry_size entry: GenTypes.FuncDefaultsEntry | t.CPtr = (GenTypes.FuncDefaultsEntry | t.CPtr)(t.CVoid(entry_addr, t.CPtr)) if entry.Name is not None: if string.strcmp(entry.Name, name) == 0: return entry - i += 1 return None @@ -1282,14 +1279,12 @@ class CallGenLeafKit(CallGenCBuiltin.CallGenCBuiltin): if name is None or funcs is None: return None entry_size: t.CSizeT = GenTypes.FuncEntry.__sizeof__() - i: int = 0 - while i < func_count: + for i in range(func_count): entry_addr: t.CUInt64T = t.CUInt64T(funcs) + i * entry_size entry: GenTypes.FuncEntry | t.CPtr = (GenTypes.FuncEntry | t.CPtr)(t.CVoid(entry_addr, t.CPtr)) if entry.Name is not None: if string.strcmp(entry.Name, name) == 0: return entry - i += 1 return None diff --git a/App/lib/core/Gen/CallGenMixin.vp b/App/lib/core/Gen/CallGenMixin.vp index b2e3423..924e189 100644 --- a/App/lib/core/Gen/CallGenMixin.vp +++ b/App/lib/core/Gen/CallGenMixin.vp @@ -850,8 +850,7 @@ class CallGenMixin(CallGenBase.CallGenBase): # 填充缺失参数 if df_defaults is not None and df_default_count > 0 and can < df_param_count: df_offset: int = df_param_count - df_default_count - df_di: int = 0 - while df_di < df_default_count: + for df_di in range(df_default_count): df_param_idx: int = df_offset + df_di if df_param_idx >= can: # 优先用 stdlib 常量快照重建(gd_entry.Defaults 的 pool 内 AST 可能已被 reset 回收) @@ -872,7 +871,6 @@ class CallGenMixin(CallGenBase.CallGenBase): else: tail.Next = df_arg_val tail = df_arg_val - df_di += 1 # 使用模块中的实际函数名(可能带 SHA1 前缀,如 "83210a72e829a086.atoi") # t.CExtern/t.State/t.CExport 函数不加 SHA1 前缀,使用裸名 diff --git a/App/lib/core/Gen/ClassGenGeneric.vp b/App/lib/core/Gen/ClassGenGeneric.vp index 17a6db0..ccba23b 100644 --- a/App/lib/core/Gen/ClassGenGeneric.vp +++ b/App/lib/core/Gen/ClassGenGeneric.vp @@ -59,7 +59,7 @@ class ClassGenGeneric(ClassGenBase.ClassGenBase): return 1 def _register_generic_template(self, pool: memhub.MemBuddy | t.CPtr, cd: ast.ClassDef | t.CPtr, - module_sha1: str): + module_sha1: str) -> None: """注册泛型类模板(类名 + ClassDef 节点 + 来源模块 SHA1)""" if self.GenericClassNames is None: self.GenericClassNames = list[str](pool, 8) diff --git a/App/lib/core/Gen/ExprGenCdef.vp b/App/lib/core/Gen/ExprGenCdef.vp index 5e54783..8d361b5 100644 --- a/App/lib/core/Gen/ExprGenCdef.vp +++ b/App/lib/core/Gen/ExprGenCdef.vp @@ -53,11 +53,11 @@ class ExprGenCdef(ExprGenBase.ExprGenBase): if Config.IncludesDir is None: return None # 从 StubMerger 全局存储器获取相对路径数组 - rel_arr_ptr: bytes | t.CPtr = StubMergerStore.GetSha1StoreRelArrPtr() + rel_arr_ptr: bytes = StubMergerStore.GetSha1StoreRelArrPtr() count: int = StubMergerStore.GetSha1StoreCount() if rel_arr_ptr is None or count <= 0: return None - sha1_arr_ptr: bytes | t.CPtr = StubMergerStore.GetSha1StoreArrPtr() + sha1_arr_ptr: bytes = StubMergerStore.GetSha1StoreArrPtr() if sha1_arr_ptr is None: return None # 遍历查找匹配的 SHA1 diff --git a/App/lib/core/Gen/ExprGenCls.vp b/App/lib/core/Gen/ExprGenCls.vp index 1d91679..9c6fbe2 100644 --- a/App/lib/core/Gen/ExprGenCls.vp +++ b/App/lib/core/Gen/ExprGenCls.vp @@ -167,7 +167,7 @@ class ExprGenCls(ExprGenBase.ExprGenBase): self.register_docstring(module_sha1, sym_buf, mdoc) stdlib.free(sym_buf) def _resolve_doc_symbol_name(self, trans: HT.Translator | t.CPtr, name_id: str, - out_mod: str | t.CPtr, out_sym: str | t.CPtr) -> int: + out_mod: str, out_sym: str) -> int: """解析 Name 符号的 docstring 归属,写入 out_mod/out_sym,成功返回 1 判定顺序:本地变量(函数变量)→ 结构体类(含跨模块预注册)→ 模块名。 @@ -205,7 +205,7 @@ class ExprGenCls(ExprGenBase.ExprGenBase): return 1 def _resolve_doc_symbol_attr(self, trans: HT.Translator | t.CPtr, at: ast.Attribute | t.CPtr, - out_mod: str | t.CPtr, out_sym: str | t.CPtr) -> int: + out_mod: str, out_sym: str) -> int: """解析嵌套 Attribute 链的 docstring 归属,写入 out_mod/out_sym 支持形态:remote.remote_func / remote.RemoteClass / diff --git a/App/lib/core/Gen/StmtGenCifMixin.vp b/App/lib/core/Gen/StmtGenCifMixin.vp index 3e64e00..c3e01cd 100644 --- a/App/lib/core/Gen/StmtGenCifMixin.vp +++ b/App/lib/core/Gen/StmtGenCifMixin.vp @@ -1345,7 +1345,7 @@ class StmtGenCifMixin: # zip(a, b) → for x, y in zip(a, b):任一源耗尽即终止 # ============================================================ def _extract_tuple_names(self, tup: ast.Tuple | t.CPtr, - out1: str | t.CPtr, out2: str | t.CPtr) -> int: + out1: str, out2: str) -> int: """从 Tuple target 提取前两个 Name 变量名,写入 out1/out2,成功返回 1""" if tup is None or tup.elts is None or out1 is None or out2 is None: return 0 diff --git a/App/lib/core/Gen/StructGenMixin.vp b/App/lib/core/Gen/StructGenMixin.vp index f05a402..a0e7643 100644 --- a/App/lib/core/Gen/StructGenMixin.vp +++ b/App/lib/core/Gen/StructGenMixin.vp @@ -82,7 +82,7 @@ class StructGenMixin: # 同模块函数调用改 self.方法;签名与 HandlesStruct 原函数一致) # ============================================================ - def set_stdlib_alloc(self, flag: int): + def set_stdlib_alloc(self, flag: int) -> None: """设置 OOM 回收分配模式:1=1b 阶段(新条目用 stdlib),0=注册阶段(用 pool)""" self.StdlibAlloc = flag @@ -91,7 +91,7 @@ class StructGenMixin: 避免跨 Mixin 直接读 self.StdlibAlloc——Mixin 方法体按自身块内索引编译)""" return self.StdlibAlloc - def reset_visible_structs(self, pool: memhub.MemBuddy | t.CPtr, strict: int): + def reset_visible_structs(self, pool: memhub.MemBuddy | t.CPtr, strict: int) -> None: """重置可见性状态(每个文件翻译前调用) pool: 内存分配器(严格模式下创建 HashTable) @@ -105,7 +105,7 @@ class StructGenMixin: # 宽松模式:全部可见,不需要 HashTable self.VisibleStructs = None - def add_visible_struct(self, pool: memhub.MemBuddy | t.CPtr, name: str): + def add_visible_struct(self, pool: memhub.MemBuddy | t.CPtr, name: str) -> None: """添加可见结构体名(类定义时和 from-import 时调用)""" if name is None: return @@ -694,7 +694,6 @@ class StructGenMixin: # 必须传 entry.Name(register_struct 复制 + _update_renum_alias_class_ptr # 统一后的池指针),传调用方 class_name(AnnotClassName 等不同指针) # 恒不匹配 → 返回 -1 → 回退失效。 - import lib.core.Handles.HandlesClassDef as HandlesClassDef rn_cls_l: str = entry.Name if rn_cls_l is None: rn_cls_l = class_name diff --git a/App/lib/core/Gen/TypeGenBase.vp b/App/lib/core/Gen/TypeGenBase.vp index f0f796b..13e172b 100644 --- a/App/lib/core/Gen/TypeGenBase.vp +++ b/App/lib/core/Gen/TypeGenBase.vp @@ -127,7 +127,7 @@ class TypeGenBase: entry_size: t.CSizeT = GenTypes.TraceFrame.__sizeof__() addr: t.CUInt64T = t.CUInt64T(self.TraceFrames) + i * entry_size return (GenTypes.TraceFrame | t.CPtr)(t.CVoid(addr, t.CPtr)) - def push_trace(self, file_name: str, lineno: int, col_start: int = 0, col_end: int = 0): + def push_trace(self, file_name: str, lineno: int, col_start: int = 0, col_end: int = 0) -> None: """压入一个翻译上下文帧(进入新的翻译作用域时调用)""" if self._ensure_trace_init() == 0: return @@ -141,7 +141,7 @@ class TypeGenBase: frame.col_start = col_start frame.col_end = col_end self.TraceCount += 1 - def pop_trace(self): + def pop_trace(self) -> None: """弹出栈顶帧(退出翻译作用域时调用)""" if self.TraceCount <= 0: return @@ -152,7 +152,7 @@ class TypeGenBase: frame.lineno = 0 frame.col_start = 0 frame.col_end = 0 - def clear_trace(self): + def clear_trace(self) -> None: """清空调用栈(每个文件翻译开始前调用)""" i: int for i in range(self.TraceCount): diff --git a/App/lib/core/Gen/TypeGenErr.vp b/App/lib/core/Gen/TypeGenErr.vp index 146086d..d94834f 100644 --- a/App/lib/core/Gen/TypeGenErr.vp +++ b/App/lib/core/Gen/TypeGenErr.vp @@ -78,7 +78,7 @@ class TypeGenErr(TypeGenBase.TypeGenBase): def read_source_line(self, file_path: str, lineno: int) -> str: """公开包装:从源文件读取第 lineno 行内容(供 traceback 展示)""" return self._read_source_line(file_path, lineno) - def dump_parse_traceback(self, file_path: str): + def dump_parse_traceback(self, file_path: str) -> None: """解析失败时以 Python 风格输出 traceback(仿 fatal_error)""" err_line: int = ast.get_parse_err_line() err_col: int = ast.get_parse_err_col() diff --git a/App/lib/core/Gen/TypeGenResolve.vp b/App/lib/core/Gen/TypeGenResolve.vp index 007b471..392bf41 100644 --- a/App/lib/core/Gen/TypeGenResolve.vp +++ b/App/lib/core/Gen/TypeGenResolve.vp @@ -180,7 +180,7 @@ class TypeGenResolve(TypeGenBase.TypeGenBase): name_node: ast.AST | t.CPtr = ast.Name(pool, name_buf, ctx) stdlib.free(name_buf) return name_node - def set_current_file(self, file_path: str): + def set_current_file(self, file_path: str) -> None: """设置当前编译的文件名(供报错使用)""" self.CurrentFile = file_path def get_current_file(self) -> str: diff --git a/App/lib/core/Handles/HandlesExpr.vp b/App/lib/core/Handles/HandlesExpr.vp index 960ff53..5d15e0b 100644 --- a/App/lib/core/Handles/HandlesExpr.vp +++ b/App/lib/core/Handles/HandlesExpr.vp @@ -800,7 +800,7 @@ def _const_int_for_cdefine(pool: memhub.MemBuddy | t.CPtr, # ============================================================ def _resolve_doc_symbol_attr(trans: HT.Translator | t.CPtr, at: ast.Attribute | t.CPtr, - out_mod: str | t.CPtr, out_sym: str | t.CPtr) -> int: + out_mod: str, out_sym: str) -> int: """解析嵌套 Attribute 链的 docstring 归属(委托到 gen._resolve_doc_symbol_attr,定义于 ExprGenCls)""" g: Generator.Generator | t.CPtr = (Generator.Generator | t.CPtr)(t.CVoid(_g_gen, t.CPtr)) if g is not None: @@ -812,7 +812,7 @@ def _resolve_doc_symbol_attr(trans: HT.Translator | t.CPtr, # 解析 Name 符号的 docstring 归属 — 模块级委托 # ============================================================ def _resolve_doc_symbol_name(trans: HT.Translator | t.CPtr, name_id: str, - out_mod: str | t.CPtr, out_sym: str | t.CPtr) -> int: + out_mod: str, out_sym: str) -> int: """解析 Name 符号的 docstring 归属(委托到 gen._resolve_doc_symbol_name,定义于 ExprGenCls)""" g: Generator.Generator | t.CPtr = (Generator.Generator | t.CPtr)(t.CVoid(_g_gen, t.CPtr)) if g is not None: diff --git a/App/lib/core/VLogger.vp b/App/lib/core/VLogger.vp index 7c7f71a..3393e39 100644 --- a/App/lib/core/VLogger.vp +++ b/App/lib/core/VLogger.vp @@ -264,24 +264,21 @@ def nowarn_register() -> int: def info(msg: str, category: str = "") -> int: """输出 INFO 级别日志。""" log: Logger | t.CPtr = get_logger() - if log is not None: - return log.info(msg, category) + if log is not None: return log.info(msg, category) return 0 def warning(msg: str, category: str = "") -> int: """输出 WARN 级别日志。""" log: Logger | t.CPtr = get_logger() - if log is not None: - return log.warning(msg, category) + if log is not None: return log.warning(msg, category) return 0 def error(msg: str, category: str = "") -> int: """输出 ERROR 级别日志并立即终止进程。""" log: Logger | t.CPtr = get_logger() - if log is not None: - return log.error(msg, category) + if log is not None: return log.error(msg, category) # logger 不可用时也直接退出 sys.exit(1) return 0 @@ -290,22 +287,19 @@ def error(msg: str, category: str = "") -> int: def success(msg: str, category: str = "") -> int: """输出 SUCCESS 级别日志。""" log: Logger | t.CPtr = get_logger() - if log is not None: - return log.success(msg, category) + if log is not None: return log.success(msg, category) return 0 def critical(msg: str, category: str = "") -> int: """输出 CRITICAL 级别日志(致命错误,红底白字)。""" log: Logger | t.CPtr = get_logger() - if log is not None: - return log.critical(msg, category) + if log is not None: return log.critical(msg, category) return 0 def debug(msg: str, category: str = "") -> int: """输出 DEBUG 级别日志。""" log: Logger | t.CPtr = get_logger() - if log is not None: - return log.debug(msg, category) + if log is not None: return log.debug(msg, category) return 0 diff --git a/App/main.vp b/App/main.vp index 40de0c9..7fc2e3e 100644 --- a/App/main.vp +++ b/App/main.vp @@ -99,7 +99,6 @@ def main() -> int: lib._mbuddy = mb # P2: 创建项目级 Generator 单例(Phase1/Phase2/BuildPipeline 全程复用; - # HandlesType 等旧模块函数经延迟 import 委托到 gen 方法,实现对象化过渡) gen: GenGenerator.Generator | t.CPtr = mb.alloc(GenGenerator.Generator.__sizeof__()) if gen is None: stdio.printf("FAIL: Generator alloc failed\n") @@ -133,11 +132,11 @@ def main() -> int: parser.add_argument("--clean", None, argparse.BOOL, 0, None, False, argparse.STORE_TRUE, "Clean output and temp directories") parser.add_argument("--run", None, argparse.BOOL, 0, None, False, argparse.STORE_TRUE, "Run the generated executable after compilation") parser.add_argument("--rebuild-includes", None, argparse.BOOL, 0, None, False, argparse.STORE_TRUE, "Delete the includes.binary precompiled cache and rebuild all the includes") - parser.add_argument("--clear-cache", None, argparse.BOOL, 0, None, False, argparse.STORE_TRUE, "Clear .transpyc_cache global cache") - parser.add_argument("--asan", None, argparse.BOOL, 0, None, False, argparse.STORE_TRUE, "ASan mode: .ll first opt -passes=asan then link -fsanitize=address") - parser.add_argument("--nowarn-register", None, argparse.BOOL, 0, None, False, argparse.STORE_TRUE, "Suppress Phase A dependency WARN") - parser.add_argument("--version", "-v", argparse.BOOL, 0, None, False, argparse.STORE_TRUE, "Show version and exit") - parser.add_argument("--help", "-h", argparse.BOOL, 0, None, False, argparse.STORE_TRUE, "Show help and exit") + parser.add_argument("--clear-cache", None, argparse.BOOL, 0, None, False, argparse.STORE_TRUE, "Clear .transpyc_cache global cache") + parser.add_argument("--asan", None, argparse.BOOL, 0, None, False, argparse.STORE_TRUE, "ASan mode: .ll first opt -passes=asan then link -fsanitize=address") + parser.add_argument("--nowarn-register", None, argparse.BOOL, 0, None, False, argparse.STORE_TRUE, "Suppress Phase A dependency WARN") + parser.add_argument("--version", "-v", argparse.BOOL, 0, None, False, argparse.STORE_TRUE, "Show version and exit") + parser.add_argument("--help", "-h", argparse.BOOL, 0, None, False, argparse.STORE_TRUE, "Show help and exit") # 解析命令行参数 args: argparse.ParsedArgs | t.CPtr = parser.parse_args(sys._argc, sys._argv)