diff --git a/lang/bytecode.c b/lang/bytecode.c index d97167f..d4eda79 100644 --- a/lang/bytecode.c +++ b/lang/bytecode.c @@ -20,10 +20,9 @@ static const unsigned char bytecode[] = { 0x05, 0x05, 0x05, 0x01, 0x6a, 0x02, 0x00, 0x00, 0x07, 0x01, 0x05, 0x06, 0x01, 0x06, 0x01, 0x04, 0x02, 0x41, 0x64, 0x64, -0x00, 0x08, 0x01, 0x07, 0x02, 0x05, 0x01, 0x02, 0x00, 0x00, -0x00, 0x06, 0x02, 0x04, 0x02, 0x4d, 0x69, 0x6e, 0x75, 0x73, -0x00, 0x08, 0x01, 0x07, 0x03, 0x06, 0x03, 0x07, 0x00, 0x08, -0x03, 0x03, +0x00, 0x07, 0x02, 0x05, 0x01, 0x02, 0x00, 0x00, 0x00, 0x06, +0x02, 0x04, 0x02, 0x4d, 0x69, 0x6e, 0x75, 0x73, 0x00, 0x07, +0x03, 0x06, 0x03, 0x07, 0x00, 0x08, 0x03, 0x03, }; // clang-format on diff --git a/lang/compile.py b/lang/compile.py index 1c6b55a..fe5efc4 100755 --- a/lang/compile.py +++ b/lang/compile.py @@ -250,12 +250,10 @@ args_count = len(ast.args) alloc_ir = [IRAllocate(1)] call_ir = [IRCall(ast.verb, args_count)] - drop_ir = [IRDrop(args_count)] final_ir = final_ir + alloc_ir final_ir = final_ir + args_ir final_ir = final_ir + subject_ir final_ir = final_ir + call_ir - final_ir = final_ir + drop_ir return final_ir def generate_ir_set(ast): diff --git a/lang/main.c b/lang/main.c index cff9e86..ead53a2 100644 --- a/lang/main.c +++ b/lang/main.c @@ -13,9 +13,8 @@ vm_stack_push(state, numB); numB = NULL; vm_call(numA, "Add", 2, state); - struct object *numC = vm_stack_get(state, 0); + struct object *numC = vm_stack_pop(state); printf("numC value is %i\n", number_value(numC)); - vm_stack_drop(state, 2); object_drop(&numA); object_drop(&numC); } diff --git a/lang/number.c b/lang/number.c index bb5f439..8dde5ca 100644 --- a/lang/number.c +++ b/lang/number.c @@ -46,8 +46,8 @@ struct number *numB = (struct number *)arg1; int added = numA->value + numB->value; vm_stack_set(state, 0, number_create(added)); + vm_stack_drop(state, 1); object_drop(&arg1); - numB = NULL; } static void number_minus( @@ -61,8 +61,8 @@ struct number *numB = (struct number *)arg1; int subbed = numA->value - numB->value; vm_stack_set(state, 0, number_create(subbed)); + vm_stack_drop(state, 1); object_drop(&arg1); - numB = NULL; } static struct object_call calls[] = {{.name = "Add", .handler = number_add},