From 7bff3208a05263ade69b1e4c4877718f83f7757e Mon Sep 17 00:00:00 2001 From: zongor Date: Sat, 5 Jul 2025 16:38:42 -0400 Subject: [PATCH] fix str --- src/compiler.c | 4 ++-- src/main.c | 3 +-- src/vm.c | 10 +++++----- 3 files changed, 8 insertions(+), 9 deletions(-) diff --git a/src/compiler.c b/src/compiler.c index 2e83685..15465a4 100644 --- a/src/compiler.c +++ b/src/compiler.c @@ -20,11 +20,11 @@ uint32_t demo_add_compile(Value *memory) { memory[i++].u = OP(OP_SUB_UINT, 1, 1, 2); memory[i++].u = OP(OP_JGT_UINT, 5, 1, 0); memory[i++].u = OP(OP_REAL_TO_STRING, 6, 4, 0); - memory[i++].u = OP(OP_PRINT_STRING, 0, 6, 0); memory[i++].u = OP(OP_REAL_TO_UINT, 1, 4, 4); memory[i++].u = OP(OP_UINT_TO_STRING, 7, 1, 0); - memory[i++].u = OP(OP_PRINT_STRING, 0, 7, 0); memory[i++].u = OP(OP_READ_STRING, 8, 0, 0); + memory[i++].u = OP(OP_PRINT_STRING, 0, 6, 0); + memory[i++].u = OP(OP_PRINT_STRING, 0, 7, 0); memory[i++].u = OP(OP_PRINT_STRING, 0, 8, 0); memory[i++].u = OP(OP_HALT, 0, 0, 0); /* explicit halt */ return i; diff --git a/src/main.c b/src/main.c index 3e2123c..95a5a37 100644 --- a/src/main.c +++ b/src/main.c @@ -54,8 +54,7 @@ int main(int argc, char **argv) { vm.frame_stack_size = FRAME_STACK_SIZE; vm.return_stack_size = RETURN_STACK_SIZE; vm.memory_size = MEMORY_SIZE; - uint32_t i = demo_add_compile(vm.memory); - vm.frame_stack[vm.fp].allocated.end = i + 1; + vm.frame_stack[vm.fp].allocated.end = demo_add_compile(vm.memory); #ifdef __EMSCRIPTEN__ emscripten_set_main_loop(mainloop, 0, 1); diff --git a/src/vm.c b/src/vm.c index 0e2266c..96006d4 100644 --- a/src/vm.c +++ b/src/vm.c @@ -5,8 +5,8 @@ do { \ type value = vm->frame_stack[vm->fp].registers[src1].accessor; \ type value2 = vm->frame_stack[vm->fp].registers[src2].accessor; \ - vm->pc = \ - (value op value2) ? vm->frame_stack[vm->fp].registers[dest].u : vm->pc; \ + vm->pc = (value op value2) ? vm->frame_stack[vm->fp].registers[dest].u \ + : vm->pc; \ return true; \ } while (0) @@ -197,7 +197,7 @@ bool step_vm(VM *vm) { int len = sprintf(buffer, "%d", a); mem_strcpy(vm->memory, buffer, len, str_dest); /* copy buffer to dest */ vm->frame_stack[vm->fp].allocated.end += - len + 1; /* increment to end of allocated */ + ((len / 4) + (len % 4) + 1); /* increment to end of allocated */ return true; } case OP_UINT_TO_STRING: { @@ -211,7 +211,7 @@ bool step_vm(VM *vm) { int len = sprintf(buffer, "%d", a); mem_strcpy(vm->memory, buffer, len, str_dest); /* copy buffer to dest */ vm->frame_stack[vm->fp].allocated.end += - len + 1; /* increment to end of allocated */ + ((len / 4) + (len % 4) + 1); /* increment to end of allocated */ return true; } case OP_REAL_TO_STRING: { @@ -224,7 +224,7 @@ bool step_vm(VM *vm) { int len = sprintf(buffer, "%f", a); mem_strcpy(vm->memory, buffer, len, str_dest); /* copy buffer to dest */ vm->frame_stack[vm->fp].allocated.end += - len + 1; /* increment to end of allocated */ + ((len / 4) + (len % 4) + 1); /* increment to end of allocated */ return true; } case OP_READ_STRING: {