summaryrefslogtreecommitdiff
path: root/comp/lucas-standen-NEA/code/execution/builtin.c
diff options
context:
space:
mode:
authorthing1 <thing1@seacrossedlovers.xyz>2024-07-04 13:11:04 +0100
committerthing1 <thing1@seacrossedlovers.xyz>2024-07-04 13:11:04 +0100
commit3dad2f4c5ce7fd44015cbd921318b3512c36326e (patch)
treee43f3b1d0080e9de96c2866743e521ecbd2770f5 /comp/lucas-standen-NEA/code/execution/builtin.c
parent478eed4ef9ece1b86b2fed7bfe57d62180b12c92 (diff)
zippy supports arrays!
Diffstat (limited to 'comp/lucas-standen-NEA/code/execution/builtin.c')
-rw-r--r--comp/lucas-standen-NEA/code/execution/builtin.c33
1 files changed, 19 insertions, 14 deletions
diff --git a/comp/lucas-standen-NEA/code/execution/builtin.c b/comp/lucas-standen-NEA/code/execution/builtin.c
index 99aca8c..12441cd 100644
--- a/comp/lucas-standen-NEA/code/execution/builtin.c
+++ b/comp/lucas-standen-NEA/code/execution/builtin.c
@@ -13,32 +13,37 @@ void *doCall(ast_node *node){
}
}
- I64 *outi64 = CheckedMalloc(sizeof(I64));
+ literal *out = CheckedMalloc(sizeof(literal));
switch (id){
case ADD:
- outi64->data = node->literalArgs[0]->i64->data + node->literalArgs[1]->i64->data;
- return outi64;
+ out->i64 = CheckedMalloc(sizeof(I64));
+ out->i64->data = node->literalArgs[0]->i64->data + node->literalArgs[1]->i64->data;
+ return out;
break;
- case SUB:
- outi64->data = node->literalArgs[0]->i64->data - node->literalArgs[1]->i64->data;
- return outi64;
+
+ case SUB:
+ out->i64 = CheckedMalloc(sizeof(I64));
+ out->i64->data = node->literalArgs[0]->i64->data - node->literalArgs[1]->i64->data;
+ return out;
break;
case DIV:
- outi64->data = node->literalArgs[0]->i64->data / node->literalArgs[1]->i64->data;
- return outi64;
+ out->i64 = CheckedMalloc(sizeof(I64));
+ out->i64->data = node->literalArgs[0]->i64->data / node->literalArgs[1]->i64->data;
+ return out;
break;
case MUL:
- outi64->data = node->literalArgs[0]->i64->data * node->literalArgs[1]->i64->data;
- return outi64;
+ out->i64 = CheckedMalloc(sizeof(I64));
+ out->i64->data = node->literalArgs[0]->i64->data * node->literalArgs[1]->i64->data;
+ return out;
break;
case WRITE:
- fputs(node->literalArgs[0], stdout);
+ for (int i = 0; i < node->literalArgs[0]->arr->len; i++)
+ fputc(node->literalArgs[0]->arr->arr[i].ch->data, stdout);
break;
-
+
case EXIT:
- int returnValue = node->literalArgs[0]->i64->data;
- CheckedFreeALL();
+ int returnValue = (int)node->literalArgs[0]->i64->data;
exit(returnValue);
break;
}