aboutsummaryrefslogtreecommitdiff
path: root/interpreter
diff options
context:
space:
mode:
authorCamil Staps2016-08-26 12:21:10 +0200
committerCamil Staps2016-08-26 12:21:10 +0200
commitf899f1b9d4ccd792dfc92c840e7e3d355cf858fe (patch)
tree8e09c474fc775112f04fad3bd91f7d409c9ae32f /interpreter
parentAdded code construct to grammar (diff)
Added eval_main
Diffstat (limited to 'interpreter')
-rw-r--r--interpreter/eval.c14
-rw-r--r--interpreter/eval.h2
-rw-r--r--interpreter/fuspelc.c21
3 files changed, 24 insertions, 13 deletions
diff --git a/interpreter/eval.c b/interpreter/eval.c
index 7349c28..1b28200 100644
--- a/interpreter/eval.c
+++ b/interpreter/eval.c
@@ -374,3 +374,17 @@ expression* eval(fuspel* rules, expression* expr) {
return result;
}
+
+expression* eval_main(fuspel* rules) {
+ expression to_eval, *evaled;
+
+ to_eval.kind = EXPR_NAME;
+ to_eval.var1 = my_calloc(1, 5);
+ strcpy(to_eval.var1, "main");
+
+ evaled = eval(rules, &to_eval);
+
+ free_expression(&to_eval);
+
+ return evaled;
+}
diff --git a/interpreter/eval.h b/interpreter/eval.h
index 3acd1d0..ca2741f 100644
--- a/interpreter/eval.h
+++ b/interpreter/eval.h
@@ -3,6 +3,8 @@
#include "syntax.h"
+expression* eval_main(fuspel*);
+
expression* eval_rnf(fuspel*, expression*);
expression* eval(fuspel*, expression*);
diff --git a/interpreter/fuspelc.c b/interpreter/fuspelc.c
index 4450486..c885e06 100644
--- a/interpreter/fuspelc.c
+++ b/interpreter/fuspelc.c
@@ -10,7 +10,7 @@
int main(void) {
token_list* tokens;
fuspel* pgm;
- expression to_eval, *evaled;
+ expression* result;
tokens = NULL;
@@ -32,7 +32,7 @@ int main(void) {
pgm = parse(tokens);
free_token_list(tokens);
- free(tokens);
+ my_free(tokens);
if (!pgm) {
fprintf(stderr, "Couldn't parse program.");
@@ -43,22 +43,17 @@ int main(void) {
print_fuspel(pgm);
printf("\n\n");
- to_eval.kind = EXPR_NAME;
- to_eval.var1 = my_calloc(1, 5);
- strcpy(to_eval.var1, "main");
-
- evaled = eval(pgm, &to_eval);
- free_expression(&to_eval);
- if (evaled) {
- print_expression(evaled);
+ result = eval_main(pgm);
+ if (result) {
+ print_expression(result);
printf("\n");
- free_expression(evaled);
- free(evaled);
+ free_expression(result);
+ my_free(result);
}
free_fuspel(pgm);
- free(pgm);
+ my_free(pgm);
return 0;
}