diff --git a/lang/number.c b/lang/number.c index fc01c3d..6d96478 100644 --- a/lang/number.c +++ b/lang/number.c @@ -22,6 +22,7 @@ } static void number_cleanup(Object obj) { + abort_if(obj == NULL, "number_cleanup obj is NULL"); abort_if(obj->class_data != &num_class, "number_cleanup obj is not a number"); struct number *num = (struct number *)obj; @@ -39,32 +40,20 @@ int arg_count = vm_stack_depth(state); abort_if(arg_count != 2, "number_add called without 2 arguments"); Object arg1 = vm_stack_get(state, 1); - abort_if(!arg1, "number_add arg is NULL"); - abort_if(arg1->class_data != &num_class, - "number_add arg is not a number"); - struct number *numA = (struct number *)obj; - struct number *numB = (struct number *)arg1; - int added = numA->value + numB->value; + int added = number_value(obj) + number_value(arg1); vm_stack_set(state, 0, number_create(added)); vm_stack_drop(state, 1); object_drop(&arg1); - numB = NULL; } static void number_minus(VmState state, Object obj) { int arg_count = vm_stack_depth(state); abort_if(arg_count != 2, "number_minus called without 2 arguments"); Object arg1 = vm_stack_get(state, 1); - abort_if(!arg1, "number_minus arg is NULL"); - abort_if(arg1->class_data != &num_class, - "number_minus arg is not a number"); - struct number *numA = (struct number *)obj; - struct number *numB = (struct number *)arg1; - int subbed = numA->value - numB->value; + int subbed = number_value(obj) - number_value(arg1); 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},