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 | |
parent | 478eed4ef9ece1b86b2fed7bfe57d62180b12c92 (diff) |
zippy supports arrays!
Diffstat (limited to 'comp/lucas-standen-NEA/code/execution')
-rw-r--r-- | comp/lucas-standen-NEA/code/execution/builtin.c | 33 | ||||
-rwxr-xr-x | comp/lucas-standen-NEA/code/execution/exec | bin | 33904 -> 39376 bytes | |||
-rw-r--r-- | comp/lucas-standen-NEA/code/execution/exec.c | 8 |
3 files changed, 22 insertions, 19 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; } diff --git a/comp/lucas-standen-NEA/code/execution/exec b/comp/lucas-standen-NEA/code/execution/exec Binary files differindex e1cfbf1..744535a 100755 --- a/comp/lucas-standen-NEA/code/execution/exec +++ b/comp/lucas-standen-NEA/code/execution/exec diff --git a/comp/lucas-standen-NEA/code/execution/exec.c b/comp/lucas-standen-NEA/code/execution/exec.c index adb6f25..8775526 100644 --- a/comp/lucas-standen-NEA/code/execution/exec.c +++ b/comp/lucas-standen-NEA/code/execution/exec.c @@ -2,17 +2,15 @@ #include <stdlib.h> #include "./builtin.h" - #include "../global/util.h" - #include "../tokenizer/tokenizer.h" int main(){ - char *sample = "(exit (+ 1 1))"; + char *sample = "(write ['h','e','l','l','o','\n'])"; ast_node *root = tokenize(sample); doCall(root); - CheckedFreeALL(); - + free(root); + return 0; } |