chore(messages): TransPyV 运行时中文字符串英文化
把 TransPyV/App 下 57 个文件的运行时中文字符串(编译器报错/告警/日志、CLI 帮助与横幅、REPL 提示、Phase1/Phase2 流程日志、Codegen 各 Mixin 的类型与调用报错、Stub/Vpi 诊断等)共 1091 行译为英文。 口径:只改字符串字面量内部文字,行数零变化(+1092/-1092);printf 格式符与转义序列多重集合校验不变(_strcheck 异常 0);译文不引入撇号以免干扰单引号字面量解析。验证:三重重编 SUCCESS(136.20s)+ 全量 77/77 顺序回归通过 + VET 编译 SUCCESS / --search-paths 7 条 exit 0;新产物 help/日志输出已为英文。
This commit is contained in:
1 parent
0cf80632c1
commit
7a9bc5ae75
57 files changed
+1092
-1092
No files matched your search
@@ -473,16 +473,16 @@ def _ApplyCtorArgs(cl: ast.Call*) -> int:
|
||||
if cl.args is not None:
|
||||
an: sizet = cl.args.__len__()
|
||||
if an > 2:
|
||||
VLogger.error("viperbuild: Project(...) 位置参数最多 2 个(name, version)", "viperbuild")
|
||||
VLogger.error("viperbuild: Project(...) accepts at most 2 positional arguments (name, version)", "viperbuild")
|
||||
return 1
|
||||
if an >= 1:
|
||||
if _EvalStr(cl.args.get(0)) == 0:
|
||||
VLogger.error("viperbuild: Project(name) 必须是字符串常量", "viperbuild")
|
||||
VLogger.error("viperbuild: Project(name) must be a string constant", "viperbuild")
|
||||
return 1
|
||||
_c_name = _DupStd(_g_out_str)
|
||||
if an >= 2:
|
||||
if _EvalStr(cl.args.get(1)) == 0:
|
||||
VLogger.error("viperbuild: Project(version) 必须是字符串常量", "viperbuild")
|
||||
VLogger.error("viperbuild: Project(version) must be a string constant", "viperbuild")
|
||||
return 1
|
||||
_c_version = _DupStd(_g_out_str)
|
||||
if cl.keywords is None: return 0
|
||||
@@ -492,16 +492,16 @@ def _ApplyCtorArgs(cl: ast.Call*) -> int:
|
||||
if kw is not None and kw.arg is not None and kw.value is not None:
|
||||
if string.strcmp(kw.arg, "name") == 0:
|
||||
if _EvalStr(kw.value) == 0:
|
||||
VLogger.error("viperbuild: Project(name=...) 必须是字符串常量", "viperbuild")
|
||||
VLogger.error("viperbuild: Project(name=...) must be a string constant", "viperbuild")
|
||||
return 1
|
||||
_c_name = _DupStd(_g_out_str)
|
||||
elif string.strcmp(kw.arg, "version") == 0:
|
||||
if _EvalStr(kw.value) == 0:
|
||||
VLogger.error("viperbuild: Project(version=...) 必须是字符串常量", "viperbuild")
|
||||
VLogger.error("viperbuild: Project(version=...) must be a string constant", "viperbuild")
|
||||
return 1
|
||||
_c_version = _DupStd(_g_out_str)
|
||||
else:
|
||||
VLogger.error(f"viperbuild: Project(...) 不支持的关键字 {kw.arg}", "viperbuild")
|
||||
VLogger.error(f"viperbuild: unsupported keyword {kw.arg} for Project(...)", "viperbuild")
|
||||
return 1
|
||||
return 0
|
||||
|
||||
@@ -514,31 +514,31 @@ def _SetField(fname: str, vnode: ast.AST*) -> int:
|
||||
# ---- String fields ----
|
||||
if string.strcmp(fname, "source") == 0:
|
||||
if _EvalStr(vnode) == 0:
|
||||
VLogger.error("viperbuild: source 必须是字符串常量表达式", "viperbuild")
|
||||
VLogger.error("viperbuild: source must be a string constant expression", "viperbuild")
|
||||
return 1
|
||||
_c_source = _DupStd(_g_out_str)
|
||||
return 0
|
||||
if string.strcmp(fname, "buildroot") == 0:
|
||||
if _EvalStr(vnode) == 0:
|
||||
VLogger.error("viperbuild: buildroot 必须是字符串常量表达式", "viperbuild")
|
||||
VLogger.error("viperbuild: buildroot must be a string constant expression", "viperbuild")
|
||||
return 1
|
||||
_c_buildroot = _DupStd(_g_out_str)
|
||||
return 0
|
||||
if string.strcmp(fname, "output") == 0:
|
||||
if _EvalStr(vnode) == 0:
|
||||
VLogger.error("viperbuild: output 必须是字符串常量表达式", "viperbuild")
|
||||
VLogger.error("viperbuild: output must be a string constant expression", "viperbuild")
|
||||
return 1
|
||||
_c_output = _DupStd(_g_out_str)
|
||||
return 0
|
||||
if string.strcmp(fname, "name") == 0:
|
||||
if _EvalStr(vnode) == 0:
|
||||
VLogger.error("viperbuild: name 必须是字符串常量表达式", "viperbuild")
|
||||
VLogger.error("viperbuild: name must be a string constant expression", "viperbuild")
|
||||
return 1
|
||||
_c_name = _DupStd(_g_out_str)
|
||||
return 0
|
||||
if string.strcmp(fname, "version") == 0:
|
||||
if _EvalStr(vnode) == 0:
|
||||
VLogger.error("viperbuild: version 必须是字符串常量表达式", "viperbuild")
|
||||
VLogger.error("viperbuild: version must be a string constant expression", "viperbuild")
|
||||
return 1
|
||||
_c_version = _DupStd(_g_out_str)
|
||||
return 0
|
||||
@@ -548,7 +548,7 @@ def _SetField(fname: str, vnode: ast.AST*) -> int:
|
||||
if string.strcmp(fname, "linker") == 0: return _SetListField(2, vnode)
|
||||
if string.strcmp(fname, "static_libs") == 0: return _SetListField(3, vnode)
|
||||
if string.strcmp(fname, "dynamic_libs") == 0: return _SetListField(4, vnode)
|
||||
VLogger.error(f"viperbuild: 未知字段 proj.{fname}", "viperbuild")
|
||||
VLogger.error(f"viperbuild: unknown field proj.{fname}", "viperbuild")
|
||||
return 1
|
||||
|
||||
|
||||
@@ -559,7 +559,7 @@ def _SetListField(slot: int, vnode: ast.AST*) -> int:
|
||||
tmp: list[str]* = list[str](_scratch, 8)
|
||||
if tmp is None: return 1
|
||||
if _EvalList(vnode, tmp) == 0:
|
||||
VLogger.error("viperbuild: 列表字段必须是 list[str] 常量表达式", "viperbuild")
|
||||
VLogger.error("viperbuild: list fields must be list[str] constant expressions", "viperbuild")
|
||||
return 1
|
||||
joined: str = _JoinSpace(tmp)
|
||||
if slot == 0: _c_includes = joined
|
||||
@@ -595,12 +595,12 @@ def _HandleNameBind(tgt: ast.Name*, vnode: ast.AST*) -> int:
|
||||
if tgt is None or vnode is None or tgt.id is None: return 0
|
||||
# Reading a Project macro object on the RHS is fatal (reading forbidden)
|
||||
if _IsProjRef(vnode) != 0:
|
||||
VLogger.error(f"viperbuild: 禁止读取 Project 宏对象({tgt.id} = proj ...)", "viperbuild")
|
||||
VLogger.error(f"viperbuild: reading the Project macro object is forbidden ({tgt.id} = proj ...)", "viperbuild")
|
||||
return 1
|
||||
# Project instance binding
|
||||
if _IsProjectCtor(vnode) != 0:
|
||||
if _c_has_project != 0:
|
||||
VLogger.error("viperbuild: 一个依赖闭包内只允许一个 Project 对象", "viperbuild")
|
||||
VLogger.error("viperbuild: only one Project object is allowed per dependency closure", "viperbuild")
|
||||
return 1
|
||||
_c_has_project = 1
|
||||
_proj_vars.append(_DupScratch(tgt.id))
|
||||
@@ -631,7 +631,7 @@ def _HandleAttrAssign(tgt: ast.Attribute*, vnode: ast.AST*) -> int:
|
||||
if bn is None or bn.id is None: return 0
|
||||
if _FindInList(_proj_vars, bn.id) < 0: return 0
|
||||
if _IsProjRef(vnode) != 0:
|
||||
VLogger.error("viperbuild: 禁止读取 Project 宏对象", "viperbuild")
|
||||
VLogger.error("viperbuild: reading the Project macro object is forbidden", "viperbuild")
|
||||
return 1
|
||||
return _SetField(tgt.attr, vnode)
|
||||
|
||||
@@ -652,7 +652,7 @@ def _HandleBuildCall(cl: ast.Call*) -> int:
|
||||
global _c_triple, _c_datalayout, _c_selfmachine, _c_has_build
|
||||
if cl is None: return 1
|
||||
if _c_has_build != 0:
|
||||
VLogger.error("viperbuild: proj.build() 只能调用一次", "viperbuild")
|
||||
VLogger.error("viperbuild: proj.build() may be called only once", "viperbuild")
|
||||
return 1
|
||||
_c_has_build = 1
|
||||
if cl.keywords is None: return 0
|
||||
@@ -662,22 +662,22 @@ def _HandleBuildCall(cl: ast.Call*) -> int:
|
||||
if kw is not None and kw.arg is not None and kw.value is not None:
|
||||
if string.strcmp(kw.arg, "triple") == 0:
|
||||
if _EvalStr(kw.value) == 0:
|
||||
VLogger.error("viperbuild: build(triple=...) 必须是字符串常量", "viperbuild")
|
||||
VLogger.error("viperbuild: build(triple=...) must be a string constant", "viperbuild")
|
||||
return 1
|
||||
_c_triple = _DupStd(_g_out_str)
|
||||
elif string.strcmp(kw.arg, "datalayout") == 0:
|
||||
if _EvalStr(kw.value) == 0:
|
||||
VLogger.error("viperbuild: build(datalayout=...) 必须是字符串常量", "viperbuild")
|
||||
VLogger.error("viperbuild: build(datalayout=...) must be a string constant", "viperbuild")
|
||||
return 1
|
||||
_c_datalayout = _DupStd(_g_out_str)
|
||||
elif string.strcmp(kw.arg, "selfmachine") == 0:
|
||||
b: int = _EvalBool(kw.value)
|
||||
if b < 0:
|
||||
VLogger.error("viperbuild: build(selfmachine=...) 必须是布尔常量", "viperbuild")
|
||||
VLogger.error("viperbuild: build(selfmachine=...) must be a boolean constant", "viperbuild")
|
||||
return 1
|
||||
_c_selfmachine = b
|
||||
else:
|
||||
VLogger.error(f"viperbuild: build(...) 不支持的关键字 {kw.arg}", "viperbuild")
|
||||
VLogger.error(f"viperbuild: unsupported keyword {kw.arg} for build(...)", "viperbuild")
|
||||
return 1
|
||||
return 0
|
||||
|
||||
@@ -708,26 +708,26 @@ def _HandleExprStmt(stmt: ast.Expr*) -> int:
|
||||
# Non-Project method call: if an argument reads the macro object -> fatal (reading forbidden)
|
||||
if cl.func.kind() != ast.ASTKind.Attribute:
|
||||
if _CallArgsHaveProjRef(cl) != 0:
|
||||
VLogger.error("viperbuild: 禁止读取 Project 宏对象", "viperbuild")
|
||||
VLogger.error("viperbuild: reading the Project macro object is forbidden", "viperbuild")
|
||||
return 1
|
||||
return 0
|
||||
at: ast.Attribute* = ast.Attribute*(cl.func)
|
||||
if at is None or at.attr is None or at.value is None: return 0
|
||||
if at.value.kind() != ast.ASTKind.Name:
|
||||
if _CallArgsHaveProjRef(cl) != 0:
|
||||
VLogger.error("viperbuild: 禁止读取 Project 宏对象", "viperbuild")
|
||||
VLogger.error("viperbuild: reading the Project macro object is forbidden", "viperbuild")
|
||||
return 1
|
||||
return 0
|
||||
bn: ast.Name* = ast.Name*(at.value)
|
||||
if bn is None or bn.id is None: return 0
|
||||
if _FindInList(_proj_vars, bn.id) < 0:
|
||||
if _CallArgsHaveProjRef(cl) != 0:
|
||||
VLogger.error("viperbuild: 禁止读取 Project 宏对象", "viperbuild")
|
||||
VLogger.error("viperbuild: reading the Project macro object is forbidden", "viperbuild")
|
||||
return 1
|
||||
return 0
|
||||
if string.strcmp(at.attr, "config") == 0: return _HandleConfigCall(cl)
|
||||
if string.strcmp(at.attr, "build") == 0: return _HandleBuildCall(cl)
|
||||
VLogger.error(f"viperbuild: Project 对象不支持的方法 {at.attr}()", "viperbuild")
|
||||
VLogger.error(f"viperbuild: unsupported method {at.attr}() on Project object", "viperbuild")
|
||||
return 1
|
||||
|
||||
|
||||
@@ -742,12 +742,12 @@ def _ScanFile(pool: memhub.MemBuddy*, path: str) -> int:
|
||||
|
||||
src_buf: bytes = Utils.read_file_to_buf(path, VB_SRC_CAP)
|
||||
if src_buf is None:
|
||||
VLogger.warning(f"viperbuild: 无法读取依赖文件 {path}", "viperbuild")
|
||||
VLogger.warning(f"viperbuild: cannot read dependency file {path}", "viperbuild")
|
||||
return 2
|
||||
|
||||
if _ResetFileTables(pool) != 0:
|
||||
stdlib.free(src_buf)
|
||||
VLogger.error("viperbuild: 常量表分配失败", "viperbuild")
|
||||
VLogger.error("viperbuild: constant table allocation failed", "viperbuild")
|
||||
return 1
|
||||
|
||||
mark: sizet = pool.mark()
|
||||
@@ -755,20 +755,20 @@ def _ScanFile(pool: memhub.MemBuddy*, path: str) -> int:
|
||||
if lx is None:
|
||||
pool.reset_to(mark)
|
||||
stdlib.free(src_buf)
|
||||
VLogger.error("viperbuild: lexer 分配失败", "viperbuild")
|
||||
VLogger.error("viperbuild: lexer allocation failed", "viperbuild")
|
||||
return 1
|
||||
ast._lexer_init(lx, src_buf, pool)
|
||||
tokens: ast.Token* = ast.tokenize(lx)
|
||||
if tokens is None:
|
||||
pool.reset_to(mark)
|
||||
stdlib.free(src_buf)
|
||||
VLogger.error(f"viperbuild: 词法失败 {path}", "viperbuild")
|
||||
VLogger.error(f"viperbuild: tokenization failed {path}", "viperbuild")
|
||||
return 1
|
||||
tree: ast.AST* = ast.parse_tokens(pool, tokens)
|
||||
if tree is None:
|
||||
pool.reset_to(mark)
|
||||
stdlib.free(src_buf)
|
||||
VLogger.error(f"viperbuild: 语法失败 {path}", "viperbuild")
|
||||
VLogger.error(f"viperbuild: parsing failed {path}", "viperbuild")
|
||||
return 1
|
||||
|
||||
body: list[ast.AST*]* = tree.children
|
||||
@@ -841,13 +841,13 @@ def _RunBfs(pool: memhub.MemBuddy*, entry_path: str) -> int:
|
||||
if cur is None: continue
|
||||
if _FindInList(_visited, cur) >= 0: continue
|
||||
if _visited.__len__() >= VB_MAX_VISIT:
|
||||
VLogger.error(f"viperbuild: 依赖闭包超过 {VB_MAX_VISIT} 个文件,疑似成环", "viperbuild")
|
||||
VLogger.error(f"viperbuild: dependency closure exceeds {VB_MAX_VISIT} files, likely a cycle", "viperbuild")
|
||||
return 1
|
||||
_visited.append(_DupScratch(cur))
|
||||
|
||||
_pending = list[str](_scratch, 8)
|
||||
if _pending is None:
|
||||
VLogger.error("viperbuild: BFS 队列分配失败", "viperbuild")
|
||||
VLogger.error("viperbuild: BFS queue allocation failed", "viperbuild")
|
||||
return 1
|
||||
rc: int = _ScanFile(pool, cur)
|
||||
if rc == 1: return 1
|
||||
@@ -867,13 +867,13 @@ def _DetectHost() -> int:
|
||||
global _c_triple, _c_datalayout
|
||||
buf: CHARPTR = stdlib.malloc(64)
|
||||
if buf is None:
|
||||
VLogger.error("viperbuild: selfmachine 探测缓冲分配失败", "viperbuild")
|
||||
VLogger.error("viperbuild: selfmachine probe buffer allocation failed", "viperbuild")
|
||||
return 1
|
||||
buf[0] = char(0)
|
||||
n: DWORD = GetEnvironmentVariableA("PROCESSOR_ARCHITECTURE", buf, DWORD(64))
|
||||
if n == 0 or n >= DWORD(64):
|
||||
stdlib.free(buf)
|
||||
VLogger.error("viperbuild: selfmachine 探测失败(PROCESSOR_ARCHITECTURE 不可用)", "viperbuild")
|
||||
VLogger.error("viperbuild: selfmachine probe failed (PROCESSOR_ARCHITECTURE unavailable)", "viperbuild")
|
||||
return 1
|
||||
buf[int(n)] = char(0)
|
||||
# "AMD64\0" (A=65 M=77 D=68 6=54 4=52)
|
||||
@@ -885,7 +885,7 @@ def _DetectHost() -> int:
|
||||
stdlib.free(buf)
|
||||
return 0
|
||||
stdlib.free(buf)
|
||||
VLogger.error("viperbuild: selfmachine 暂不支持本机架构(当前仅支持 AMD64)", "viperbuild")
|
||||
VLogger.error("viperbuild: selfmachine does not support the host architecture yet (currently only AMD64)", "viperbuild")
|
||||
return 1
|
||||
|
||||
|
||||
@@ -941,10 +941,10 @@ def _FinalizeCfg(entry_path: str) -> int:
|
||||
global _c_selfmachine
|
||||
|
||||
if _c_has_project == 0:
|
||||
VLogger.error("viperbuild: 依赖闭包内未找到 vb.Project(...) 定义", "viperbuild")
|
||||
VLogger.error("viperbuild: no vb.Project(...) definition found in the dependency closure", "viperbuild")
|
||||
return 1
|
||||
if _c_has_build == 0:
|
||||
VLogger.error("viperbuild: 未调用 proj.build(...),无法确定构建目标", "viperbuild")
|
||||
VLogger.error("viperbuild: proj.build(...) was not called, cannot determine the build target", "viperbuild")
|
||||
return 1
|
||||
|
||||
# ---- Defaults ----
|
||||
@@ -953,7 +953,7 @@ def _FinalizeCfg(entry_path: str) -> int:
|
||||
if _c_includes is None:
|
||||
probed: str = _ProbeIncludes()
|
||||
if probed is None:
|
||||
VLogger.error("viperbuild: 未能探测到 includes 目录(exe 目录向上 0..3 层均无 includes)", "viperbuild")
|
||||
VLogger.error("viperbuild: could not probe an includes directory (no includes up to 0..3 levels above the exe directory)", "viperbuild")
|
||||
return 1
|
||||
_c_includes = probed
|
||||
if _c_compiler is None: _c_compiler = _DupStd("llc -filetype=obj -relocation-model=pic")
|
||||
@@ -965,18 +965,18 @@ def _FinalizeCfg(entry_path: str) -> int:
|
||||
|
||||
# ---- Entry file must be under source ----
|
||||
if _HasPrefix(entry_path, _c_source) == 0:
|
||||
VLogger.error(f"viperbuild: 入口文件不在 source 目录之下\n 入口: {entry_path}\n source: {_c_source}", "viperbuild")
|
||||
VLogger.error(f"viperbuild: entry file is not under the source directory\n entry: {entry_path}\n source: {_c_source}", "viperbuild")
|
||||
return 1
|
||||
|
||||
# ---- Target platform ----
|
||||
explicit_triple: int = 0
|
||||
if _c_triple is not None or _c_datalayout is not None: explicit_triple = 1
|
||||
if _c_selfmachine != 0 and explicit_triple != 0:
|
||||
VLogger.error("viperbuild: build(selfmachine=True) 与显式 triple/datalayout 互斥", "viperbuild")
|
||||
VLogger.error("viperbuild: build(selfmachine=True) is mutually exclusive with an explicit triple/datalayout", "viperbuild")
|
||||
return 1
|
||||
if explicit_triple != 0:
|
||||
if _c_triple is None or _c_datalayout is None:
|
||||
VLogger.error("viperbuild: build() 的 triple 与 datalayout 必须成对给出", "viperbuild")
|
||||
VLogger.error("viperbuild: build() triple and datalayout must be given as a pair", "viperbuild")
|
||||
return 1
|
||||
else:
|
||||
# Neither given, or selfmachine=True: detect the host at runtime
|
||||
@@ -1065,7 +1065,7 @@ def DiscoverAndApply(mb: memhub.MemBuddy*, entry_path: str) -> int:
|
||||
global _search_dirs
|
||||
|
||||
if mb is None or entry_path is None:
|
||||
VLogger.error("viperbuild: 参数为空", "viperbuild")
|
||||
VLogger.error("viperbuild: argument is null", "viperbuild")
|
||||
return 1
|
||||
|
||||
_ResetAll()
|
||||
@@ -1073,7 +1073,7 @@ def DiscoverAndApply(mb: memhub.MemBuddy*, entry_path: str) -> int:
|
||||
# Entry dir (default source + closure search root)
|
||||
_entry_dir = _DirOf(entry_path)
|
||||
if _entry_dir is None:
|
||||
VLogger.error(f"viperbuild: 无法解析入口文件目录 {entry_path}", "viperbuild")
|
||||
VLogger.error(f"viperbuild: cannot resolve the entry file directory {entry_path}", "viperbuild")
|
||||
return 1
|
||||
# Bare filename (no separator) -> _DirOf returns ""; must normalize to ".", otherwise
|
||||
# ResolveModuleToPath("") tries no candidate and same-dir deps (often the viperbuild config) never resolve.
|
||||
@@ -1084,11 +1084,11 @@ def DiscoverAndApply(mb: memhub.MemBuddy*, entry_path: str) -> int:
|
||||
# Scratch pool (BFS working set; not affected by main-pool reset)
|
||||
arena: bytes = stdlib.malloc(VB_SCRATCH)
|
||||
if arena is None:
|
||||
VLogger.error("viperbuild: scratch 内存分配失败", "viperbuild")
|
||||
VLogger.error("viperbuild: scratch memory allocation failed", "viperbuild")
|
||||
return 1
|
||||
_scratch = memhub.MemBuddy(arena, VB_SCRATCH, 0, 0)
|
||||
if _scratch is None:
|
||||
VLogger.error("viperbuild: scratch 池初始化失败", "viperbuild")
|
||||
VLogger.error("viperbuild: scratch pool initialization failed", "viperbuild")
|
||||
return 1
|
||||
|
||||
_work = list[str](_scratch, 8)
|
||||
@@ -1096,7 +1096,7 @@ def DiscoverAndApply(mb: memhub.MemBuddy*, entry_path: str) -> int:
|
||||
_pending = list[str](_scratch, 8)
|
||||
_proj_vars = list[str](_scratch, 8)
|
||||
if _work is None or _visited is None or _pending is None or _proj_vars is None:
|
||||
VLogger.error("viperbuild: 工作集分配失败", "viperbuild")
|
||||
VLogger.error("viperbuild: working set allocation failed", "viperbuild")
|
||||
return 1
|
||||
|
||||
# Keyword/operator tables must be built before the main-pool reset window (else freed -> dangling crash)
|
||||
@@ -1105,8 +1105,8 @@ def DiscoverAndApply(mb: memhub.MemBuddy*, entry_path: str) -> int:
|
||||
if _RunBfs(mb, entry_path) != 0: return 1
|
||||
|
||||
if _proj_vars.__len__() == 0:
|
||||
if _saw_viperbuild == 0: VLogger.error(f"viperbuild: 入口文件依赖闭包内未找到 `import viperbuild`(入口: {entry_path};已扫描 {_visited.__len__()} 个文件)", "viperbuild")
|
||||
else: VLogger.error(f"viperbuild: 找到 `import viperbuild` 但依赖闭包内没有 `proj = vb.Project(...)` 绑定(入口: {entry_path})", "viperbuild")
|
||||
if _saw_viperbuild == 0: VLogger.error(f"viperbuild: `import viperbuild` not found in the entry file dependency closure (entry: {entry_path}; scanned {_visited.__len__()} files)", "viperbuild")
|
||||
else: VLogger.error(f"viperbuild: found `import viperbuild` but the dependency closure has no `proj = vb.Project(...)` binding (entry: {entry_path})", "viperbuild")
|
||||
return 1
|
||||
|
||||
if _FinalizeCfg(entry_path) != 0: return 1
|
||||
|
||||
Reference in new issue
Block a user