diff --git a/src/test.c b/src/test.c index 1c2d031..c86028e 100644 --- a/src/test.c +++ b/src/test.c @@ -2,6 +2,27 @@ #include "vm.h" #include +uint32_t real_alloc(VM *vm, float v) { + uint32_t addr = vm->mp; + vm->memory[vm->mp++].f = v; + vm->frames[vm->fp].allocated.end++; + return addr; +} + +uint32_t nat_alloc(VM *vm, uint32_t v) { + uint32_t addr = vm->mp; + vm->memory[vm->mp++].u = v; + vm->frames[vm->fp].allocated.end++; + return addr; +} + +uint32_t int_alloc(VM *vm, int32_t v) { + uint32_t addr = vm->mp; + vm->memory[vm->mp++].i = v; + vm->frames[vm->fp].allocated.end++; + return addr; +} + /* Array of test mappings */ struct TestMapping internal_tests[] = { {"simple.ul", test_simple_compile}, diff --git a/src/vm.c b/src/vm.c index 25711c4..a70ccae 100644 --- a/src/vm.c +++ b/src/vm.c @@ -54,27 +54,6 @@ uint32_t str_alloc(VM *vm, const char *str, uint32_t length) { return str_addr; } -uint32_t real_alloc(VM *vm, float v) { - uint32_t addr = vm->mp; - vm->memory[vm->mp++].f = v; - vm->frames[vm->fp].allocated.end++; - return addr; -} - -uint32_t nat_alloc(VM *vm, uint32_t v) { - uint32_t addr = vm->mp; - vm->memory[vm->mp++].u = v; - vm->frames[vm->fp].allocated.end++; - return addr; -} - -uint32_t int_alloc(VM *vm, int32_t v) { - uint32_t addr = vm->mp; - vm->memory[vm->mp++].i = v; - vm->frames[vm->fp].allocated.end++; - return addr; -} - /** * Step to the next opcode in the vm. */ @@ -462,21 +441,21 @@ bool step_vm(VM *vm) { uint32_t src_addr = (uint32_t)vm->frames[vm->fp].registers[src1].u; uint32_t dest_addr = (uint32_t)vm->frames[vm->fp].registers[dest].u; char *endptr; - int32_t value = (int32_t)strtol((char*)&vm->memory[src_addr], &endptr, 10); + int32_t value = (int32_t)strtol((char*)&vm->memory[src_addr + 1], &endptr, 10); vm->memory[dest_addr].i = value; return true; } case OP_STRING_TO_UINT: { uint32_t src_addr = (uint32_t)vm->frames[vm->fp].registers[src1].u; uint32_t dest_addr = (uint32_t)vm->frames[vm->fp].registers[dest].u; - long value = atol((char*)&vm->memory[src_addr]); + long value = atol((char*)&vm->memory[src_addr + 1]); vm->memory[dest_addr].u = value; return true; } case OP_STRING_TO_REAL: { uint32_t src_addr = (uint32_t)vm->frames[vm->fp].registers[src1].u; uint32_t dest_addr = (uint32_t)vm->frames[vm->fp].registers[dest].u; - float value = atof((char*)&vm->memory[src_addr]); + float value = atof((char*)&vm->memory[src_addr + 1]); vm->memory[dest_addr].u = value; return true; } diff --git a/src/vm.h b/src/vm.h index d9a4caa..6e96586 100644 --- a/src/vm.h +++ b/src/vm.h @@ -3,11 +3,7 @@ #include "opcodes.h" -VM* init_vm(); bool step_vm(VM *vm); uint32_t str_alloc(VM *vm, const char *str, uint32_t length); -uint32_t real_alloc(VM *vm, float v); -uint32_t nat_alloc(VM *vm, uint32_t v); -uint32_t int_alloc(VM *vm, int32_t v); #endif