aboutsummaryrefslogtreecommitdiffstats
path: root/clox/src/vm.c
diff options
context:
space:
mode:
authorGravatar Tom Willemse2022-08-14 20:14:43 -0700
committerGravatar Tom Willemse2022-08-14 20:14:43 -0700
commit726803c9d0c84bccc1d82d1c8aeadfc711752622 (patch)
tree2f90b75390ceb2a66133cbebce805086175fbeda /clox/src/vm.c
parent62858b60e43803477e898c7993e109a94701ce70 (diff)
downloadcrafting-interpreters-726803c9d0c84bccc1d82d1c8aeadfc711752622.tar.gz
crafting-interpreters-726803c9d0c84bccc1d82d1c8aeadfc711752622.zip
Chapter 29.1
Diffstat (limited to 'clox/src/vm.c')
-rw-r--r--clox/src/vm.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/clox/src/vm.c b/clox/src/vm.c
index b5cb1cc..8a6847e 100644
--- a/clox/src/vm.c
+++ b/clox/src/vm.c
@@ -496,6 +496,17 @@ static InterpretResult run() {
case OP_CLASS:
push(OBJ_VAL(newClass(READ_STRING())));
break;
+ case OP_INHERIT: {
+ Value superclass = peek(1);
+ if (!IS_CLASS(superclass)) {
+ runtimeError("Superclass must be a class.");
+ return INTERPRET_RUNTIME_ERROR;
+ }
+ ObjClass *subclass = AS_CLASS(peek(0));
+ tableAddAll(&AS_CLASS(superclass)->methods, &subclass->methods);
+ pop(); /* Subclass. */
+ break;
+ }
case OP_METHOD:
defineMethod(READ_STRING());
break;