diff options
-rw-r--r-- | src/compiler/ast-tree.c | 8 | ||||
-rw-r--r-- | src/compiler/parser.c | 2 | ||||
-rw-r--r-- | src/runner/runner.c | 6 | ||||
-rw-r--r-- | src/utils/log.h | 2 | ||||
-rw-r--r-- | test/main.felan | 2 |
5 files changed, 11 insertions, 9 deletions
diff --git a/src/compiler/ast-tree.c b/src/compiler/ast-tree.c index 3ea860e..f5867cc 100644 --- a/src/compiler/ast-tree.c +++ b/src/compiler/ast-tree.c @@ -554,6 +554,7 @@ AstTree *astTreeParse(ParserNode *parserNode, AstTreeVariables **variables, case PARSER_TOKEN_OPERATOR_SUM: return astTreeParseSum(parserNode, variables, variables_size); case PARSER_TOKEN_VARIABLE: + return astTreeParseVariable(parserNode, variables, variables_size); case PARSER_TOKEN_CONSTANT: case PARSER_TOKEN_SYMBOL_EOL: case PARSER_TOKEN_SYMBOL_PARENTHESIS: @@ -638,10 +639,6 @@ AstTree *astTreeParseFunction(ParserNode *parserNode, if (!astTreeParseConstant(node, variables, variables_size)) { goto RETURN_ERROR; } - } else if (node->token == PARSER_TOKEN_VARIABLE) { - if (!astTreeParseConstant(node, variables, variables_size)) { - goto RETURN_ERROR; - } } else { AstTree *tree = astTreeParse(node, variables, variables_size); @@ -1263,6 +1260,9 @@ bool setTypesOperatorAssign(AstTree *tree) { } else if (!typeIsEqual(infix->left.type, infix->right.type)) { printLog("Type mismatch"); return false; + } else if(isConst(&infix->left)){ + printLog("Constants can't be assigned"); + return false; } else { tree->type = copyAstTree(infix->left.type); return true; diff --git a/src/compiler/parser.c b/src/compiler/parser.c index d5f61c5..d54b6de 100644 --- a/src/compiler/parser.c +++ b/src/compiler/parser.c @@ -837,7 +837,7 @@ ParserNode *parserVariable(LexerNode *node, LexerNode *begin, LexerNode *end, if (node1 < end && node1->token == LEXER_TOKEN_SYMBOL_COLON) { node1->parserNode = variableNode; token = PARSER_TOKEN_CONSTANT; - } else if (node1 < end && node1->token == LEXER_TOKEN_SYMBOL_COLON) { + } else if (node1 < end && node1->token == LEXER_TOKEN_SYMBOL_ASSIGN) { node1->parserNode = variableNode; } else { node1 = NULL; diff --git a/src/runner/runner.c b/src/runner/runner.c index 902dd93..23cbca0 100644 --- a/src/runner/runner.c +++ b/src/runner/runner.c @@ -63,6 +63,11 @@ AstTree *runAstTreeFunction(AstTreeFunction *function) { } } continue; + case AST_TREE_TOKEN_VARIABLE_DEFINE: { + AstTreeVariable *variable = expr.metadata; + variable->value = calcAstTreeValue(variable->value); + } + continue; case AST_TREE_TOKEN_OPERATOR_SUM: case AST_TREE_TOKEN_FUNCTION: case AST_TREE_TOKEN_TYPE_TYPE: @@ -70,7 +75,6 @@ AstTree *runAstTreeFunction(AstTreeFunction *function) { case AST_TREE_TOKEN_TYPE_VOID: case AST_TREE_TOKEN_TYPE_U64: case AST_TREE_TOKEN_VARIABLE: - case AST_TREE_TOKEN_VARIABLE_DEFINE: case AST_TREE_TOKEN_VALUE_U64: case AST_TREE_TOKEN_NONE: } diff --git a/src/utils/log.h b/src/utils/log.h index 6e6bea9..620b2a3 100644 --- a/src/utils/log.h +++ b/src/utils/log.h @@ -1,7 +1,5 @@ #pragma once -#include <stdlib.h> - #define printLog(format,...) _printLogBack(format, __FILE_NAME__, __LINE__, ## __VA_ARGS__) #define UNREACHABLE printLog("Unreachable");exit(1) diff --git a/test/main.felan b/test/main.felan index a3aea7a..3afe119 100644 --- a/test/main.felan +++ b/test/main.felan @@ -1,5 +1,5 @@ main :: () -> void { - a := fun(); + a : u64 = fun(); a = a + 3; print_u64 a + 5; }; |