From 3dad2f4c5ce7fd44015cbd921318b3512c36326e Mon Sep 17 00:00:00 2001 From: thing1 Date: Thu, 4 Jul 2024 13:11:04 +0100 Subject: zippy supports arrays! --- comp/lucas-standen-NEA/code/execution/builtin.c | 33 ++++++++++++++---------- comp/lucas-standen-NEA/code/execution/exec | Bin 33904 -> 39376 bytes comp/lucas-standen-NEA/code/execution/exec.c | 8 +++--- 3 files changed, 22 insertions(+), 19 deletions(-) (limited to 'comp/lucas-standen-NEA/code/execution') 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 index e1cfbf1..744535a 100755 Binary files a/comp/lucas-standen-NEA/code/execution/exec and b/comp/lucas-standen-NEA/code/execution/exec differ 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 #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; } -- cgit v1.2.3