aboutsummaryrefslogtreecommitdiffstats
path: root/src/vm.c
diff options
context:
space:
mode:
authorBad Diode <bd@badd10de.dev>2024-07-04 20:45:27 +0200
committerBad Diode <bd@badd10de.dev>2024-07-04 20:45:27 +0200
commit1ea4d6f2aab4157dbe7da328b11ef6bb0a1fc5a0 (patch)
treeb66d3ca5237426a100dc8688e2aefee82ef21723 /src/vm.c
parent81aca08fa680c8747ad3afff0594c4e8830b0ec8 (diff)
downloadbdl-1ea4d6f2aab4157dbe7da328b11ef6bb0a1fc5a0.tar.gz
bdl-1ea4d6f2aab4157dbe7da328b11ef6bb0a1fc5a0.zip
Add storage of Str values on locals/globals
Diffstat (limited to 'src/vm.c')
-rw-r--r--src/vm.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/src/vm.c b/src/vm.c
index f363e26..404f410 100644
--- a/src/vm.c
+++ b/src/vm.c
@@ -196,8 +196,14 @@ vm_run(VM *vm) {
196 Variable var = vm->chunk->vars[src]; 196 Variable var = vm->chunk->vars[src];
197 vm->regs[dst].i = (ptrsize)&vm->fp[var.offset / 8]; 197 vm->regs[dst].i = (ptrsize)&vm->fp[var.offset / 8];
198 } break; 198 } break;
199 case OP_LDSTR: {
200 u8 dst = instruction.dst;
201 u8 src = instruction.a;
202 Str *str = &vm->chunk->strings[src];
203 vm->regs[dst].ptr = (ptrsize)str;
204 } break;
199 case OP_ST64I: { 205 case OP_ST64I: {
200 sz value = vm->regs[instruction.dst].i; 206 sz value = vm->regs[instruction.dst].ptr;
201 s64 *addr = (s64 *)vm->regs[instruction.a].ptr; 207 s64 *addr = (s64 *)vm->regs[instruction.a].ptr;
202 sz offset = vm->chunk->constants[instruction.b].i; 208 sz offset = vm->chunk->constants[instruction.b].i;
203 addr[offset] = value; 209 addr[offset] = value;
@@ -293,6 +299,11 @@ vm_run(VM *vm) {
293 } break; 299 } break;
294 case OP_PRINTSTR: { 300 case OP_PRINTSTR: {
295 u8 idx = instruction.dst; 301 u8 idx = instruction.dst;
302 Str *string = (Str*)vm->regs[idx].ptr;
303 print("%s", *string);
304 } break;
305 case OP_PRINTSTRI: {
306 u8 idx = instruction.dst;
296 Str string = vm->chunk->strings[idx]; 307 Str string = vm->chunk->strings[idx];
297 print("%s", string); 308 print("%s", string);
298 } break; 309 } break;