diff options
author | thing1 <thing1@seacrossedlovers.xyz> | 2024-07-04 13:11:04 +0100 |
---|---|---|
committer | thing1 <thing1@seacrossedlovers.xyz> | 2024-07-04 13:11:04 +0100 |
commit | 3dad2f4c5ce7fd44015cbd921318b3512c36326e (patch) | |
tree | e43f3b1d0080e9de96c2866743e521ecbd2770f5 /comp/lucas-standen-NEA/code/execution/builtin.c | |
parent | 478eed4ef9ece1b86b2fed7bfe57d62180b12c92 (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.c | 33 |
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; } |