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.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;