This commit is contained in:
zzy
2026-07-03 22:27:50 +08:00
parent 93a1b87f82
commit 50b07074fb
14 changed files with 6047 additions and 0 deletions

55
stage0/spl_cli.c Normal file
View File

@@ -0,0 +1,55 @@
/* spl_cli.c — SIR VM launcher
*
* Loads a compiled .sir binary and runs it via the SIR VM.
* Built-in syscalls are auto-registered via spl_syscall_register().
*
* Usage:
* spl_cli <file.sir> [entry_point]
*/
#include "spl_ir.h"
#include "spl_syscall.h"
#include "spl_vm.h"
#include <stdio.h>
int main(int argc, const char **argv) {
if (argc < 2) {
fprintf(stderr, "Usage: spl_cli <file.sir> [entry_point]\n");
return 1;
}
const char *path = argv[1];
const char *entry = argc >= 3 ? argv[2] : "main";
spl_prog_t prog;
if (spl_prog_load_from_file(path, &prog) != 0) {
fprintf(stderr, "spl_cli: cannot load '%s'\n", path);
return 1;
}
spl_syscall_register(&prog);
spl_vm_t vm;
spl_vm_init(&vm);
if (spl_vm_load_prog(&vm, &prog) != 0) {
fprintf(stderr, "vm: prog '%s' not found\n", entry);
spl_prog_drop(&prog);
return 1;
}
if (spl_vm_prepare(&vm, entry, argc, argv, NULL) != 0) {
fprintf(stderr, "vm: entry point '%s' not found\n", entry);
spl_prog_drop(&prog);
return 1;
}
int ret = spl_vm_run_until(&vm, 0);
spl_vm_drop(&vm);
spl_prog_drop(&prog);
if (ret < 0) {
fprintf(stderr, "spl_cli: VM error (exit_code=%d)\n", vm.exit_code);
return (int)vm.exit_code;
}
return (int)vm.exit_code;
}