diff options
author | A404M <ahmadmahmoudiprogrammer@gmail.com> | 2025-06-10 18:03:32 +0330 |
---|---|---|
committer | A404M <ahmadmahmoudiprogrammer@gmail.com> | 2025-06-10 18:03:32 +0330 |
commit | d523a165aee75e038a4ae4985de08443f4037b9c (patch) | |
tree | 76fb711ffc6524bd23259b449e34a8414e4fa425 /src/compiler | |
parent | 71b4af57bdcc91d948d436a459a223c402a6e17d (diff) |
fixing some parse order
Diffstat (limited to 'src/compiler')
-rw-r--r-- | src/compiler/ast-tree.c | 10 | ||||
-rw-r--r-- | src/compiler/lexer.h | 5 | ||||
-rw-r--r-- | src/compiler/parser.c | 9 |
3 files changed, 13 insertions, 11 deletions
diff --git a/src/compiler/ast-tree.c b/src/compiler/ast-tree.c index f010067..8cea6f7 100644 --- a/src/compiler/ast-tree.c +++ b/src/compiler/ast-tree.c @@ -3750,6 +3750,11 @@ AstTree *astTreeParseBracket(const ParserNode *parserNode, AstTreeToken token) { metadata->operand = astTreeParse(node_metadata->operand); + if (metadata->operand == NULL) { + free(metadata); + return NULL; + } + metadata->parameters.size = node_metadata->params->size; metadata->parameters.data = a404m_malloc(sizeof(*metadata->parameters.data) * metadata->parameters.size); @@ -3762,6 +3767,11 @@ AstTree *astTreeParseBracket(const ParserNode *parserNode, AstTreeToken token) { } metadata->parameters.data[i] = astTreeParse(node_param); + + if (metadata->parameters.data[i] == NULL) { + free(metadata); + return NULL; + } } return newAstTree(token, metadata, NULL, parserNode->str_begin, diff --git a/src/compiler/lexer.h b/src/compiler/lexer.h index 1802e41..568fabc 100644 --- a/src/compiler/lexer.h +++ b/src/compiler/lexer.h @@ -136,18 +136,15 @@ typedef enum LexerToken { LEXER_TOKEN_KEYWORD_BREAK, LEXER_TOKEN_KEYWORD_CONTINUE, LEXER_TOKEN_KEYWORD_COMPTIME, - LEXER_TOKEN_SYMBOL_EOL, - LEXER_TOKEN_ORDER14 = LEXER_TOKEN_SYMBOL_EOL, LEXER_TOKEN_SYMBOL_COMMA, LEXER_TOKEN_KEYWORD_IF, - LEXER_TOKEN_ORDER15 = LEXER_TOKEN_KEYWORD_IF, + LEXER_TOKEN_ORDER14 = LEXER_TOKEN_KEYWORD_IF, LEXER_TOKEN_KEYWORD_WHILE, LEXER_TOKEN_KEYWORD_ELSE, LEXER_TOKEN_END_ORDERS = LEXER_TOKEN_KEYWORD_ELSE, - LEXER_TOKEN_SYMBOL, LEXER_TOKEN_SYMBOL_OPEN_PARENTHESIS, LEXER_TOKEN_SYMBOL_OPEN_BRACKET, diff --git a/src/compiler/parser.c b/src/compiler/parser.c index 1becd88..ea54e52 100644 --- a/src/compiler/parser.c +++ b/src/compiler/parser.c @@ -201,18 +201,13 @@ static const ParserOrder PARSER_ORDER[] = { .end = LEXER_TOKEN_ORDER13, }, { - .ltr = false, + .ltr = true, .begin = LEXER_TOKEN_ORDER13, .end = LEXER_TOKEN_ORDER14, }, { - .ltr = true, - .begin = LEXER_TOKEN_ORDER14, - .end = LEXER_TOKEN_ORDER15, - }, - { .ltr = false, - .begin = LEXER_TOKEN_ORDER15, + .begin = LEXER_TOKEN_ORDER14, .end = LEXER_TOKEN_END_ORDERS, }, }; |