From 1460877dca47ab740eef3a5529cd30008e1a27a5 Mon Sep 17 00:00:00 2001 From: A404M Date: Sat, 8 Feb 2025 02:16:05 +0330 Subject: add const check fix some bugs --- src/compiler/ast-tree.c | 8 ++++---- src/compiler/parser.c | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) (limited to 'src/compiler') 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; -- cgit v1.2.3