From 6c801fbb92a7dd172bdcca7d5980c0e954bbf544 Mon Sep 17 00:00:00 2001 From: zzy <2450266535@qq.com> Date: Sat, 10 Jan 2026 17:43:31 +0800 Subject: [PATCH] =?UTF-8?q?refactor(lexer):=20=E7=A7=BB=E9=99=A4=E6=9C=AA?= =?UTF-8?q?=E4=BD=BF=E7=94=A8=E7=9A=84=E6=9C=9F=E6=9C=9B=E5=87=BD=E6=95=B0?= =?UTF-8?q?=E5=B9=B6=E4=BF=AE=E5=A4=8D=E5=86=85=E5=AD=98=E5=88=86=E9=85=8D?= =?UTF-8?q?=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 移除了 scc_lexer_tok_expect 函数,因为它不再被使用。 在 lexer_stream_extend 函数中添加了返回语句,以在内存重新分配失败时正确处理错误。 BREAKING CHANGE: 移除了 scc_lexer_tok_expect 函数 --- libs/lexer/include/lexer_token.h | 9 --------- libs/lexer/src/lexer_stream.c | 1 + tools/cbuild/cbuild.py | 31 ++++++++++++++++++++++--------- 3 files changed, 23 insertions(+), 18 deletions(-) diff --git a/libs/lexer/include/lexer_token.h b/libs/lexer/include/lexer_token.h index 0a52b5d..920ff44 100644 --- a/libs/lexer/include/lexer_token.h +++ b/libs/lexer/include/lexer_token.h @@ -148,13 +148,4 @@ static inline cbool scc_lexer_tok_match(const scc_lexer_tok_t *tok, return tok->type == type; } -static inline cbool scc_lexer_tok_expect(const scc_lexer_tok_t *tok, - scc_tok_type_t type) { - if (!scc_lexer_tok_match(tok, type)) { - LOG_ERROR("expected token %d, got %d\n", type, tok->type); - return false; - } - return true; -} - #endif /* __SCC_LEXER_TOKEN_H__ */ diff --git a/libs/lexer/src/lexer_stream.c b/libs/lexer/src/lexer_stream.c index d05d830..87deb3f 100644 --- a/libs/lexer/src/lexer_stream.c +++ b/libs/lexer/src/lexer_stream.c @@ -14,6 +14,7 @@ static void lexer_stream_extend(scc_lexer_stream_t *stream, usize n) { scc_realloc(null, new_cap * sizeof(scc_lexer_tok_t)); if (!new_data) { LOG_FATAL("lexer_stream_extend: realloc failed\n"); + return; } // 将旧缓冲区中的数据拷贝到新缓冲区,保持顺序 diff --git a/tools/cbuild/cbuild.py b/tools/cbuild/cbuild.py index 77414a8..c8b8d51 100644 --- a/tools/cbuild/cbuild.py +++ b/tools/cbuild/cbuild.py @@ -610,8 +610,6 @@ class GccCompiler(Compiler): "-DTEST_MODE", "-O0", "-g", - "--coverage", - "-fprofile-update=atomic", "-Wall", "-Wextra", ], @@ -650,8 +648,8 @@ class ClangCompiler(Compiler): "-DTEST_MODE", "-O0", "-g", - "--coverage", - "-fprofile-update=atomic", + "-fsanitize=address", + "-fno-omit-frame-pointer", "-Wall", "-Wextra", ], @@ -832,15 +830,23 @@ class PackageBuilder: "完成 %s 目标,耗时 %s (使用 %d 线程)", self.mode.value, time_str, self.jobs ) - def run(self): + def run(self, args: list[str] | None = None): """运行主程序""" + if args is None: + args = [] + targets = [ t for t in self.context.get_targets() if t.type == TargetType.MAIN_EXEC ] if len(targets) != 1: - logger.error("没有可运行的目标") + logger.error(translator.translate("no_targets")) return - subprocess.run(targets[0].output, check=False) + + # 过滤掉 '--' 分隔符 + filtered_args = [arg for arg in args if arg != "--"] + + logger.info("运行程序: %s %s", targets[0].output, " ".join(filtered_args)) + subprocess.run([targets[0].output] + filtered_args, check=False) def clean(self): """清理构建产物""" @@ -1058,9 +1064,14 @@ def create_parser(): add_common_args(build_parser) build_parser.set_defaults(mode=BuildMode.DEV) - # run 命令 + # run 命令 - 添加剩余参数支持 run_parser = subparsers.add_parser("run", help="运行项目") add_common_args(run_parser) + run_parser.add_argument( + "args", + nargs=argparse.REMAINDER, # 收集所有剩余参数 + help="传递给程序的参数", + ) run_parser.set_defaults(mode=BuildMode.DEV) # test 命令 @@ -1133,7 +1144,9 @@ def main(): ) elif args.command == "run": builder.build([TargetType.MAIN_EXEC]) - builder.run() + # 传递参数给 run 方法 + program_args = getattr(args, "args", []) + builder.run(program_args) elif args.command == "test": builder.build([TargetType.TEST_EXEC]) builder.tests(args.filter, args.timeout)