From 162d143cbc17696b3fb10ea1da856ca746a4eb6c Mon Sep 17 00:00:00 2001 From: A404M Date: Thu, 13 Feb 2025 17:28:16 +0330 Subject: add parenthesis for ordering --- src/compiler/ast-tree.c | 15 ++++++++++++++- src/compiler/ast-tree.h | 3 +++ test/main.felan | 2 +- 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/compiler/ast-tree.c b/src/compiler/ast-tree.c index d50d0f6..b201c57 100644 --- a/src/compiler/ast-tree.c +++ b/src/compiler/ast-tree.c @@ -889,8 +889,9 @@ AstTree *astTreeParse(ParserNode *parserNode, AstTreeHelper *helper) { helper); case PARSER_TOKEN_SYMBOL_CURLY_BRACKET: return astTreeParseCurlyBracket(parserNode, helper); - case PARSER_TOKEN_CONSTANT: case PARSER_TOKEN_SYMBOL_PARENTHESIS: + return astTreeParseParenthesis(parserNode, helper); + case PARSER_TOKEN_CONSTANT: case PARSER_TOKEN_SYMBOL_COMMA: case PARSER_TOKEN_NONE: case PARSER_TOKEN_ROOT: @@ -1454,6 +1455,18 @@ RETURN_ERROR: return NULL; } +AstTree *astTreeParseParenthesis(ParserNode *parserNode, + AstTreeHelper *helper) { + ParserNodeArray *metadata = parserNode->metadata; + + if (metadata->size != 1) { + printError(parserNode->str_begin, parserNode->str_end, "Bad parenthesis"); + return NULL; + } else { + return astTreeParse(metadata->data[0], helper); + } +} + AstTreeFunction *getFunction(AstTree *value) { switch (value->token) { case AST_TREE_TOKEN_FUNCTION: diff --git a/src/compiler/ast-tree.h b/src/compiler/ast-tree.h index 798a6b4..921bc89 100644 --- a/src/compiler/ast-tree.h +++ b/src/compiler/ast-tree.h @@ -174,6 +174,9 @@ AstTree *astTreeParseVariable(ParserNode *parserNode, AstTreeHelper *helper); AstTree *astTreeParseIf(ParserNode *parserNode, AstTreeHelper *helper); AstTree *astTreeParseCurlyBracket(ParserNode *parserNode, AstTreeHelper *helper); +AstTree *astTreeParseParenthesis(ParserNode *parserNode, + AstTreeHelper *helper); + AstTreeFunction *getFunction(AstTree *value); bool isConst(AstTree *value); diff --git a/test/main.felan b/test/main.felan index ed76449..c0414ec 100644 --- a/test/main.felan +++ b/test/main.felan @@ -3,7 +3,7 @@ main :: () -> void { b := a; c : u64 = 5; if a == b - print_u64 2; + print_u64 (2 + 4)*2; else print_u64 c; }; -- cgit v1.2.3