aboutsummaryrefslogtreecommitdiffstats
path: root/clox/src/vm.c
diff options
context:
space:
mode:
authorGravatar Tom Willemse2022-08-13 12:20:00 -0700
committerGravatar Tom Willemse2022-08-13 12:20:00 -0700
commit07f691425c95a53323229accd8a907c5dea7e530 (patch)
treef19d102a75daa1ac1d73208cbd19e5fbe471c300 /clox/src/vm.c
parent4e77cfa61262a03055aeb273108fd9a49e8dfa4f (diff)
downloadcrafting-interpreters-07f691425c95a53323229accd8a907c5dea7e530.tar.gz
crafting-interpreters-07f691425c95a53323229accd8a907c5dea7e530.zip
Chapter 28.1
Diffstat (limited to 'clox/src/vm.c')
-rw-r--r--clox/src/vm.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/clox/src/vm.c b/clox/src/vm.c
index 1d82dd1..fb359c2 100644
--- a/clox/src/vm.c
+++ b/clox/src/vm.c
@@ -163,6 +163,13 @@ static void closeUpvalues(Value *last) {
}
}
+static void defineMethod(ObjString *name) {
+ Value method = peek(0);
+ ObjClass *klass = AS_CLASS(peek(1));
+ tableSet(&klass->methods, name, method);
+ pop();
+}
+
static bool isFalsey(Value value) {
return IS_NIL(value) || (IS_BOOL(value) && !AS_BOOL(value));
}
@@ -422,6 +429,9 @@ static InterpretResult run() {
case OP_CLASS:
push(OBJ_VAL(newClass(READ_STRING())));
break;
+ case OP_METHOD:
+ defineMethod(READ_STRING());
+ break;
}
}