aboutsummaryrefslogtreecommitdiffstats
path: root/clox/src/vm.c
diff options
context:
space:
mode:
authorGravatar Tom Willemse2021-10-21 19:51:01 -0700
committerGravatar Tom Willemse2021-10-21 19:51:01 -0700
commit26b418d25485f67b06fa70f3c32c151c26572f13 (patch)
tree01ebd410985d88a4a3aaec9267d6519da2ffa35b /clox/src/vm.c
parent7bd9934a4be7c22b8f464ab7a1cc243801b5957c (diff)
downloadcrafting-interpreters-26b418d25485f67b06fa70f3c32c151c26572f13.tar.gz
crafting-interpreters-26b418d25485f67b06fa70f3c32c151c26572f13.zip
Chapter 21
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();