summaryrefslogtreecommitdiff
path: root/comp/lucas-standen-NEA/code/execution
diff options
context:
space:
mode:
Diffstat (limited to 'comp/lucas-standen-NEA/code/execution')
-rw-r--r--comp/lucas-standen-NEA/code/execution/Makefile2
-rw-r--r--comp/lucas-standen-NEA/code/execution/builtin.c20
-rwxr-xr-xcomp/lucas-standen-NEA/code/execution/execbin30040 -> 33904 bytes
-rw-r--r--comp/lucas-standen-NEA/code/execution/exec.c8
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
index ca6eb33..e1cfbf1 100755
--- a/comp/lucas-standen-NEA/code/execution/exec
+++ b/comp/lucas-standen-NEA/code/execution/exec
Binary files differ
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();