aboutsummaryrefslogtreecommitdiffstats
path: root/clox/src/vm.c
diff options
context:
space:
mode:
Diffstat (limited to 'clox/src/vm.c')
-rw-r--r--clox/src/vm.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/clox/src/vm.c b/clox/src/vm.c
index 5e35abd..80e11c3 100644
--- a/clox/src/vm.c
+++ b/clox/src/vm.c
@@ -119,8 +119,8 @@ static InterpretResult run() {
ObjString *name = READ_STRING();
Value value;
if (!tableGet(&vm.globals, name, &value)) {
- runtimeError("Undefined variable '%s'.", name->chars);
- return INTERPRET_RUNTIME_ERROR;
+ runtimeError("Undefined variable '%s'.", name->chars);
+ return INTERPRET_RUNTIME_ERROR;
}
push(value);
break;
@@ -131,6 +131,15 @@ static InterpretResult run() {
pop();
break;
}
+ case OP_SET_GLOBAL: {
+ ObjString *name = READ_STRING();
+ if (tableSet(&vm.globals, name, peek(0))) {
+ tableDelete(&vm.globals, name);
+ runtimeError("Undefined variable '%s'.", name->chars);
+ return INTERPRET_RUNTIME_ERROR;
+ }
+ break;
+ }
case OP_EQUAL: {
Value b = pop();
Value a = pop();