From 8f9a84345c147da5d398331548753d1e350ce846 Mon Sep 17 00:00:00 2001 From: Bad Diode Date: Sun, 24 Oct 2021 12:04:06 +0200 Subject: Add globals and OP_DEF operation --- src/bytecode/vm.h | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'src/bytecode/vm.h') diff --git a/src/bytecode/vm.h b/src/bytecode/vm.h index f1886ec..23370bb 100755 --- a/src/bytecode/vm.h +++ b/src/bytecode/vm.h @@ -6,6 +6,7 @@ #include "chunk.h" #include "ops.h" #include "debug.h" +#include "hashtable.h" #define VM_STACK_CAP 1024 @@ -16,6 +17,8 @@ typedef struct VM { u8 *pc; // Stack. Object *stack; + // Global variables. + HashTable *globals; } VM; void vm_init(VM *vm); @@ -27,11 +30,13 @@ void vm_init(VM *vm) { *vm = (VM){0}; array_init(vm->stack, VM_STACK_CAP); + vm->globals = ht_init(); } void vm_free(VM *vm) { array_free(vm->stack); + ht_free(vm->globals); } void @@ -142,6 +147,11 @@ vm_interpret(VM *vm, Chunk *chunk) { Object obj = vm->chunk->constants[constant]; array_push(vm->stack, obj); } break; + case OP_DEF: { + Object value = array_pop(vm->stack); + Object name = array_pop(vm->stack); + ht_insert(vm->globals, name, value); + } break; case OP_SUM: { FIXNUM_ARITHMETIC_OP(+); } break; case OP_SUB: { FIXNUM_ARITHMETIC_OP(-); } break; case OP_MUL: { FIXNUM_ARITHMETIC_OP(*); } break; -- cgit v1.2.1