lang: Add Minus operation for numbers
This commit is contained in:
parent
134abfccaf
commit
3ff9dc0ca1
1 changed files with 18 additions and 4 deletions
|
@ -37,8 +37,7 @@ int number_value(struct object *obj) {
|
|||
|
||||
static void number_add(
|
||||
struct object *obj, int arg_count, struct object **args) {
|
||||
abort_if(
|
||||
arg_count != 2, "number_add called with more than 2 arguments");
|
||||
abort_if(arg_count != 2, "number_add called without 2 arguments");
|
||||
abort_if(args[0] != NULL, "number_add return is not NULL");
|
||||
abort_if(!args[1], "number_add arg is NULL");
|
||||
abort_if(obj->class_data != &num_class,
|
||||
|
@ -51,8 +50,23 @@ static void number_add(
|
|||
args[0] = number_create(added);
|
||||
}
|
||||
|
||||
static struct object_call calls[] = {
|
||||
{.name = "Add", .handler = number_add}, {.name = NULL, /* end */}};
|
||||
static void number_minus(
|
||||
struct object *obj, int arg_count, struct object **args) {
|
||||
abort_if(arg_count != 2, "number_minus called without 2 arguments");
|
||||
abort_if(args[0] != NULL, "number_minus return is not NULL");
|
||||
abort_if(!args[1], "number_minus arg is NULL");
|
||||
abort_if(obj->class_data != &num_class,
|
||||
"number_minus obj is not a number");
|
||||
abort_if(args[1]->class_data != &num_class,
|
||||
"number_minus arg is not a number");
|
||||
struct number *numA = (struct number *)obj;
|
||||
struct number *numB = (struct number *)args[1];
|
||||
int subbed = numA->value - numB->value;
|
||||
args[0] = number_create(subbed);
|
||||
}
|
||||
|
||||
static struct object_call calls[] = {{.name = "Add", .handler = number_add},
|
||||
{.name = "Minus", .handler = number_minus}, {.name = NULL, /* end */}};
|
||||
|
||||
static struct object_class num_class = {
|
||||
.cleanup = number_cleanup,
|
||||
|
|
Loading…
Add table
Reference in a new issue