diff --git a/include/evaluator.h b/include/evaluator.h index 0e63307..7ee78ce 100644 --- a/include/evaluator.h +++ b/include/evaluator.h @@ -7,6 +7,7 @@ typedef enum { EVALUATOR_OK, EVALUATOR_MATH_ERR, + EVALUATOR_DIVISION_BY_ZERO, EVALUATOR_INVALID_PARSING, EVALUATOR_INVALID_TREE, // just to shut up the compiler with the swithces } EvaluatorErr; diff --git a/include/parser.h b/include/parser.h index 3a6b197..f4b4219 100644 --- a/include/parser.h +++ b/include/parser.h @@ -45,7 +45,7 @@ typedef struct { union { ParserErr err; struct { - Arena arena; + Arena *arena; Node *tree; }; }; diff --git a/src/lexer.c b/src/lexer.c index 23803c3..367c4c2 100644 --- a/src/lexer.c +++ b/src/lexer.c @@ -15,7 +15,8 @@ typedef enum { TokenizeResult tokenize(const char *input) { - ArrayList *arr = arraylist_init(64, sizeof(Token)); + ArrayList *arr; + arraylist_init(&arr, 64, sizeof(Token)); size_t offset = 0; while (input[offset] != '\0') { diff --git a/src/parser.c b/src/parser.c index 82d04a9..5722a10 100644 --- a/src/parser.c +++ b/src/parser.c @@ -296,10 +296,12 @@ ParserResult parse(TokenizeResult tokens) { }; } - ArraySlice *context = arraylist_slice(tokens.arr, 0, arraylist_size(tokens.arr)); - Arena arena = arena_init(sizeof(Node) * arraylist_size(tokens.arr)).arena; + ArraySlice *context; + arraylist_slice(&context, tokens.arr, 0, arraylist_size(tokens.arr)); + Arena *arena; + arena_init(&arena, sizeof(Node) * arraylist_size(tokens.arr)); - TreeResult result = parse_expr(context, &arena, 0); + TreeResult result = parse_expr(context, arena, 0); if (!result.is_valid) { arena_destroy(&arena); arraylist_destroy(&tokens.arr);