stage1 重构代码

This commit is contained in:
zzy
2026-08-01 21:15:47 +08:00
parent a77eade06f
commit b43042c88d
30 changed files with 1211 additions and 6502 deletions

View File

@@ -1,9 +1,8 @@
/* spc_vm.c VM launcher for stage 1 */
/* spc_vm.c 鈥?VM launcher for stage 1 */
#include "../stage0/spl_ir.h"
#include "../stage0/spl_mcode.h"
#include "../stage0/spl_syscall.h"
#include "../stage0/spl_vm.h"
#include "spl_comp.h"
#include <stdio.h>
#include <string.h>
@@ -11,28 +10,31 @@
int main(int argc, const char **argv) {
int argi = 1;
if (argi >= argc) {
fprintf(stderr, "Usage: spc_vm <file.sir> [entry] [--trace]\n");
return 1;
}
const char *path = argv[argi++];
/* Parse flags: --entry <name>, --trace */
/* Parse flags: --entry <name>, --trace, -d */
const char *entry = "main";
int trace = 0;
int debug_addr = 0;
for (int i = argi; i < argc; i += 1) {
if (strcmp(argv[i], "--entry") == 0 && i + 1 < argc) {
entry = argv[++i];
} else if (strcmp(argv[i], "--trace") == 0) {
trace = 1;
} else if (strcmp(argv[i], "-d") == 0) {
debug_addr = 1;
} else if (argv[i][0] != '-') {
argi = i;
break;
}
}
/* Adjust argv so the SPL program sees path as argv[0] and
* remaining positional args as argv[1..], just like a native exe. */
int spl_argc = argc - (argi - 1);
if (argi >= argc) {
fprintf(stderr, "Usage: spc_vm [-d] [--trace] <file.sir> [args...]\n");
return 1;
}
const char *path = argv[argi++];
const char **spl_argv = argv + (argi - 1);
int spl_argc = (int)(argc - (argi - 1));
spl_prog_t prog;
if (spl_prog_load_from_file(path, &prog) != 0) {
@@ -41,7 +43,6 @@ int main(int argc, const char **argv) {
}
spl_syscall_register(&prog);
spl_comp_register(&prog);
spl_vm_t vm;
spl_vm_init(&vm);
@@ -56,6 +57,7 @@ int main(int argc, const char **argv) {
return 1;
}
spl_vm_set_trace(&vm, trace);
if (debug_addr) spl_vm_set_debug(&vm, 1);
int ret = spl_vm_run_until(&vm, 0);
spl_vm_drop(&vm);