diff --git a/lang/bytecode.c b/lang/bytecode.c index e9c6eaf..e3d0dcc 100644 --- a/lang/bytecode.c +++ b/lang/bytecode.c @@ -25,7 +25,7 @@ OP_NULL, OP_GET, 0x4, OP_GET, 0x4, - OP_CALL, 'A', 'd', 'd', '\0', + OP_CALL, 0x2, 'A', 'd', 'd', '\0', OP_DROP, 0x1, OP_SET, 0x0, OP_RET @@ -51,10 +51,11 @@ break; } case OP_CALL: { + int arg_count = *pos_code++; const char *dispatch = (const char *)pos_code; struct object *obj = *(--pos_stack); - struct object **args = pos_stack - 2; - dispatch_call(obj, dispatch, 2, args); + struct object **args = pos_stack - arg_count; + dispatch_call(obj, dispatch, arg_count, args); break; } case OP_NULL: {