From ca004156cbb1c525900f444994112fc17b71d63d Mon Sep 17 00:00:00 2001 From: iamcheeseman Date: Tue, 14 Apr 2026 12:44:25 -0400 Subject: microscript: add globals --- uscript/vm.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'uscript/vm.c') diff --git a/uscript/vm.c b/uscript/vm.c index 7c2d85e..363912a 100644 --- a/uscript/vm.c +++ b/uscript/vm.c @@ -12,6 +12,7 @@ struct vm vm; void init_vm(void) { vm.objs = da_create(struct us_val, 128); + vm.gstack = da_create(struct global, 128); vm.cf = vm.cf_stack; vm.stacktop = vm.stack; } @@ -23,6 +24,8 @@ void deinit_vm(void) } da_clear(vm.objs); // not needed, but makes me feel better :) da_free(vm.objs); + + da_free(vm.gstack); } static @@ -154,6 +157,12 @@ void us_exec(struct us_func *func) case BC_SET_LOCAL: vm.cf->stackbot[read_byte()] = vm_peek(); break; + case BC_GET_GLOBAL: + vm_push(vm.gstack[read_short(func->proto, &i)].val); + break; + case BC_SET_GLOBAL: + vm.gstack[read_short(func->proto, &i)].val = vm_peek(); + break; case BC_GET_UPVAL: vm_push(*func->upvals[read_byte()]->loc); break; @@ -366,3 +375,13 @@ void us_exec(struct us_func *func) } } } + +int declare_global(struct us_str *name) +{ + int idx = da_len(vm.gstack); + struct global global; + global.name = name; + global.val = create_zilch(); + da_append(struct global, &vm.gstack, global); + return idx; +} -- cgit v1.3-2-g0d8e