stage1 修改部分测试 完成17-19测试

This commit is contained in:
zzy
2026-07-07 12:11:49 +08:00
parent 1df3e3bcb4
commit 463177d3be
7 changed files with 262 additions and 71 deletions

View File

@@ -207,7 +207,7 @@ int spl_prog_load_from_file(const char *fname, spl_prog_t *prog) {
int spl_prog_store_to_file(const char *fname, spl_prog_t *prog) {
unsigned char *buf, *p;
int i;
spl_val_t i;
size_t total;
spl_val_t nfuncs, ninsns, nnatives, nstrs, ndata;
usize nlen, pad;

View File

@@ -180,7 +180,7 @@ static spl_val_t vm_printf(int nargs, spl_val_t *args) {
int arg_idx = 0;
char tmp_buf[32];
memset(tmp_buf, 0, sizeof(tmp_buf));
for (int i = 0; i < fmt_len; ++i) {
for (usize i = 0; i < fmt_len; ++i) {
if (fmt[i] != '%') {
vec_push(buffer, fmt[i]);
continue;
@@ -192,7 +192,7 @@ static spl_val_t vm_printf(int nargs, spl_val_t *args) {
switch (fmt[i]) {
case 'd':
snprintf(tmp_buf, sizeof(tmp_buf), "%zd", args[arg_idx]);
for (int j = 0; j < strlen(tmp_buf); ++j) {
for (usize j = 0; j < strlen(tmp_buf); ++j) {
vec_push(buffer, tmp_buf[j]);
}
break;
@@ -200,7 +200,7 @@ static spl_val_t vm_printf(int nargs, spl_val_t *args) {
vec_push(buffer, (char)args[arg_idx]);
break;
case 's':
for (int j = 0; j < strlen((const char *)args[arg_idx]); ++j) {
for (usize j = 0; j < strlen((const char *)args[arg_idx]); ++j) {
vec_push(buffer, ((const char *)args[arg_idx])[j]);
}
break;

View File

@@ -76,10 +76,10 @@ static int spl_type_size(spl_type_t t) {
do { \
if (vm->sp >= vm->config.max_stack_depth) \
VM_ERROR("stack overflow"); \
vm->stacks.data[vm->sp++] = (spl_val_t)(v); \
vm->stacks.data[(vm->sp)++] = (spl_val_t)(v); \
} while (0)
#define POP() vm->stacks.data[--vm->sp]
#define POP() vm->stacks.data[--(vm->sp)]
/* ================================================================
* Type-dispatch macros for arithmetic / comparison
@@ -641,7 +641,7 @@ int spl_vm_run_once(spl_vm_t *vm) {
return -1;
prog = vm->prog;
if (vm->ip < 0 || vm->ip >= vec_size(prog->insns)) {
if (vm->ip >= vec_size(prog->insns)) {
fprintf(stderr, "vm: ip=%zd out of bounds\n", vm->ip);
vm->exit_code = 1;
return -1;
@@ -687,7 +687,7 @@ int spl_vm_run_once(spl_vm_t *vm) {
case SPL_PICK: {
isize _idx = ins->imm;
if (_idx >= vm->sp)
if ((usize)_idx >= vm->sp)
VM_ERROR("PICK: index out of range");
PUSH(vm->stacks.data[vm->sp - 1 - _idx]);
break;