lang: Add Minus operation for numbers

This commit is contained in:
Jookia 2023-06-22 03:11:39 +10:00
parent 134abfccaf
commit 3ff9dc0ca1

View file

@ -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,