diff options
Diffstat (limited to 'comp/lucas-standen-NEA/code/execution')
-rw-r--r-- | comp/lucas-standen-NEA/code/execution/Makefile | 2 | ||||
-rw-r--r-- | comp/lucas-standen-NEA/code/execution/builtin.c | 20 | ||||
-rwxr-xr-x | comp/lucas-standen-NEA/code/execution/exec | bin | 30040 -> 33904 bytes | |||
-rw-r--r-- | comp/lucas-standen-NEA/code/execution/exec.c | 8 |
4 files changed, 13 insertions, 17 deletions
diff --git a/comp/lucas-standen-NEA/code/execution/Makefile b/comp/lucas-standen-NEA/code/execution/Makefile index 405f9de..00c18b6 100644 --- a/comp/lucas-standen-NEA/code/execution/Makefile +++ b/comp/lucas-standen-NEA/code/execution/Makefile @@ -4,3 +4,5 @@ exec: exec.c builtin cc exec.c builtin.o ../tokenizer/tokenizer.o ../global/util.o -o exec -ggdb builtin: builtin.c cc builtin.c -c -o builtin.o -ggdb +clean: + rm -rf *.o exec diff --git a/comp/lucas-standen-NEA/code/execution/builtin.c b/comp/lucas-standen-NEA/code/execution/builtin.c index df3ca03..99aca8c 100644 --- a/comp/lucas-standen-NEA/code/execution/builtin.c +++ b/comp/lucas-standen-NEA/code/execution/builtin.c @@ -13,23 +13,23 @@ void *doCall(ast_node *node){ } } - char *str = CheckedMalloc(20); + I64 *outi64 = CheckedMalloc(sizeof(I64)); switch (id){ case ADD: - snprintf(str, 20, "%d", atoi(node->literalArgs[0]) + atoi(node->literalArgs[1])); - return str; + outi64->data = node->literalArgs[0]->i64->data + node->literalArgs[1]->i64->data; + return outi64; break; case SUB: - snprintf(str, 20, "%d", atoi(node->literalArgs[0]) - atoi(node->literalArgs[1])); - return str; + outi64->data = node->literalArgs[0]->i64->data - node->literalArgs[1]->i64->data; + return outi64; break; case DIV: - snprintf(str, 20, "%d", atoi(node->literalArgs[0]) / atoi(node->literalArgs[1])); - return str; + outi64->data = node->literalArgs[0]->i64->data / node->literalArgs[1]->i64->data; + return outi64; break; case MUL: - snprintf(str, 20, "%d", atoi(node->literalArgs[0]) * atoi(node->literalArgs[1])); - return str; + outi64->data = node->literalArgs[0]->i64->data * node->literalArgs[1]->i64->data; + return outi64; break; case WRITE: @@ -37,7 +37,7 @@ void *doCall(ast_node *node){ break; case EXIT: - int returnValue = atoi(node->literalArgs[0]); + int returnValue = node->literalArgs[0]->i64->data; CheckedFreeALL(); exit(returnValue); break; diff --git a/comp/lucas-standen-NEA/code/execution/exec b/comp/lucas-standen-NEA/code/execution/exec Binary files differindex ca6eb33..e1cfbf1 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 fb85d3f..adb6f25 100644 --- a/comp/lucas-standen-NEA/code/execution/exec.c +++ b/comp/lucas-standen-NEA/code/execution/exec.c @@ -8,15 +8,9 @@ #include "../tokenizer/tokenizer.h" int main(){ - char *sample = "(write (* 2 5))"; + char *sample = "(exit (+ 1 1))"; ast_node *root = tokenize(sample); doCall(root); - sample = "(write \n)"; - root = tokenize(sample); - doCall(root); - sample = "(exit 0)"; - root = tokenize(sample); - doCall(root); CheckedFreeALL(); |