refactor(lexer): 移除未使用的期望函数并修复内存分配错误
移除了 scc_lexer_tok_expect 函数,因为它不再被使用。 在 lexer_stream_extend 函数中添加了返回语句,以在内存重新分配失败时正确处理错误。 BREAKING CHANGE: 移除了 scc_lexer_tok_expect 函数
This commit is contained in:
@@ -148,13 +148,4 @@ static inline cbool scc_lexer_tok_match(const scc_lexer_tok_t *tok,
|
|||||||
return tok->type == type;
|
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__ */
|
#endif /* __SCC_LEXER_TOKEN_H__ */
|
||||||
|
|||||||
@@ -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));
|
scc_realloc(null, new_cap * sizeof(scc_lexer_tok_t));
|
||||||
if (!new_data) {
|
if (!new_data) {
|
||||||
LOG_FATAL("lexer_stream_extend: realloc failed\n");
|
LOG_FATAL("lexer_stream_extend: realloc failed\n");
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 将旧缓冲区中的数据拷贝到新缓冲区,保持顺序
|
// 将旧缓冲区中的数据拷贝到新缓冲区,保持顺序
|
||||||
|
|||||||
@@ -610,8 +610,6 @@ class GccCompiler(Compiler):
|
|||||||
"-DTEST_MODE",
|
"-DTEST_MODE",
|
||||||
"-O0",
|
"-O0",
|
||||||
"-g",
|
"-g",
|
||||||
"--coverage",
|
|
||||||
"-fprofile-update=atomic",
|
|
||||||
"-Wall",
|
"-Wall",
|
||||||
"-Wextra",
|
"-Wextra",
|
||||||
],
|
],
|
||||||
@@ -650,8 +648,8 @@ class ClangCompiler(Compiler):
|
|||||||
"-DTEST_MODE",
|
"-DTEST_MODE",
|
||||||
"-O0",
|
"-O0",
|
||||||
"-g",
|
"-g",
|
||||||
"--coverage",
|
"-fsanitize=address",
|
||||||
"-fprofile-update=atomic",
|
"-fno-omit-frame-pointer",
|
||||||
"-Wall",
|
"-Wall",
|
||||||
"-Wextra",
|
"-Wextra",
|
||||||
],
|
],
|
||||||
@@ -832,15 +830,23 @@ class PackageBuilder:
|
|||||||
"完成 %s 目标,耗时 %s (使用 %d 线程)", self.mode.value, time_str, self.jobs
|
"完成 %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 = [
|
targets = [
|
||||||
t for t in self.context.get_targets() if t.type == TargetType.MAIN_EXEC
|
t for t in self.context.get_targets() if t.type == TargetType.MAIN_EXEC
|
||||||
]
|
]
|
||||||
if len(targets) != 1:
|
if len(targets) != 1:
|
||||||
logger.error("没有可运行的目标")
|
logger.error(translator.translate("no_targets"))
|
||||||
return
|
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):
|
def clean(self):
|
||||||
"""清理构建产物"""
|
"""清理构建产物"""
|
||||||
@@ -1058,9 +1064,14 @@ def create_parser():
|
|||||||
add_common_args(build_parser)
|
add_common_args(build_parser)
|
||||||
build_parser.set_defaults(mode=BuildMode.DEV)
|
build_parser.set_defaults(mode=BuildMode.DEV)
|
||||||
|
|
||||||
# run 命令
|
# run 命令 - 添加剩余参数支持
|
||||||
run_parser = subparsers.add_parser("run", help="运行项目")
|
run_parser = subparsers.add_parser("run", help="运行项目")
|
||||||
add_common_args(run_parser)
|
add_common_args(run_parser)
|
||||||
|
run_parser.add_argument(
|
||||||
|
"args",
|
||||||
|
nargs=argparse.REMAINDER, # 收集所有剩余参数
|
||||||
|
help="传递给程序的参数",
|
||||||
|
)
|
||||||
run_parser.set_defaults(mode=BuildMode.DEV)
|
run_parser.set_defaults(mode=BuildMode.DEV)
|
||||||
|
|
||||||
# test 命令
|
# test 命令
|
||||||
@@ -1133,7 +1144,9 @@ def main():
|
|||||||
)
|
)
|
||||||
elif args.command == "run":
|
elif args.command == "run":
|
||||||
builder.build([TargetType.MAIN_EXEC])
|
builder.build([TargetType.MAIN_EXEC])
|
||||||
builder.run()
|
# 传递参数给 run 方法
|
||||||
|
program_args = getattr(args, "args", [])
|
||||||
|
builder.run(program_args)
|
||||||
elif args.command == "test":
|
elif args.command == "test":
|
||||||
builder.build([TargetType.TEST_EXEC])
|
builder.build([TargetType.TEST_EXEC])
|
||||||
builder.tests(args.filter, args.timeout)
|
builder.tests(args.filter, args.timeout)
|
||||||
|
|||||||
Reference in New Issue
Block a user