summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/compiler/ast-tree.c15
-rw-r--r--src/compiler/ast-tree.h3
-rw-r--r--test/main.felan2
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;
};