diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/compiler/ast-tree.c | 18 | ||||
-rw-r--r-- | src/compiler/lexer.h | 1 | ||||
-rw-r--r-- | src/compiler/parser.c | 5 | ||||
-rw-r--r-- | src/runner/runner.c | 5 |
4 files changed, 17 insertions, 12 deletions
diff --git a/src/compiler/ast-tree.c b/src/compiler/ast-tree.c index 28741bd..ac6801d 100644 --- a/src/compiler/ast-tree.c +++ b/src/compiler/ast-tree.c @@ -6031,6 +6031,7 @@ bool setTypesFunctionCall(AstTree *tree, AstTreeSetTypesHelper _helper) { if (metadata->function->token == AST_TREE_TOKEN_BUILTIN_INSERT) { char *code = u8ArrayToCString(metadata->parameters[0].value); + filePush("", code); LexerNodeArray lexerArray = lexer(code); if (lexerNodeArrayIsError(lexerArray)) { UNREACHABLE; @@ -6065,8 +6066,12 @@ bool setTypesFunctionCall(AstTree *tree, AstTreeSetTypesHelper _helper) { }; AstTree *astNodes[nodeArray->size]; for (size_t i = 0; i < nodeArray->size; ++i) { - AstTree *tree = astTreeParse(nodeArray->data[i]); - if (tree == NULL || !setAllTypes(tree, newHelper, NULL, NULL)) { + ParserNode *node = nodeArray->data[i]; + while (node->token == PARSER_TOKEN_SYMBOL_EOL) { + node = (ParserNodeSingleChildMetadata *)node->metadata; + } + AstTree *tree = astTreeParse(node); + if (tree == NULL) { return false; } astNodes[i] = tree; @@ -6074,6 +6079,9 @@ bool setTypesFunctionCall(AstTree *tree, AstTreeSetTypesHelper _helper) { astTreeDestroy(*tree); *tree = *astNodes[0]; free(astNodes[0]); + if (!setAllTypes(tree, newHelper, NULL, NULL)) { + return false; + } size_t parentIndex = _helper.scope->expressions_size; for (size_t i = 0; i < _helper.scope->expressions_size; ++i) { if (_helper.scope->expressions[i] == tree) { @@ -6092,21 +6100,18 @@ bool setTypesFunctionCall(AstTree *tree, AstTreeSetTypesHelper _helper) { _helper.scope->expressions_size + nodeArray->size - 1; if (expression_capacity < newSize) { - UNREACHABLE; expression_capacity = newSize; _helper.scope->expressions = a404m_realloc( _helper.scope->expressions, expression_capacity * sizeof(*_helper.scope->expressions)); } - for (size_t i = _helper.scope->expressions_size - 1; i > parentIndex; - --i) { + for (size_t i = newSize - 1; i > parentIndex; --i) { _helper.scope->expressions[i] = _helper.scope->expressions[i - nodeArray->size + 1]; } for (size_t i = 1; i < nodeArray->size; ++i) { - UNREACHABLE; _helper.scope->expressions[i + parentIndex] = astNodes[i]; } @@ -6115,7 +6120,6 @@ bool setTypesFunctionCall(AstTree *tree, AstTreeSetTypesHelper _helper) { } parserNodeDelete(rootParser); lexerNodeArrayDestroy(lexerArray); - free(code); } return true; diff --git a/src/compiler/lexer.h b/src/compiler/lexer.h index 202b041..2e9807d 100644 --- a/src/compiler/lexer.h +++ b/src/compiler/lexer.h @@ -2,7 +2,6 @@ #include "utils/type.h" #include <stddef.h> -#include <stdio.h> typedef enum LexerToken { LEXER_TOKEN_SYMBOL_CLOSE_CURLY_BRACKET, diff --git a/src/compiler/parser.c b/src/compiler/parser.c index 2f36289..ed51742 100644 --- a/src/compiler/parser.c +++ b/src/compiler/parser.c @@ -1404,8 +1404,9 @@ ParserNode *parserString(LexerNode *node, ParserNode *parent) { metadata->end += 1; } - size_t size = metadata->end - metadata->begin; - metadata->begin = a404m_realloc(metadata->begin, size * (*metadata->begin)); + const size_t size = metadata->end - metadata->begin; + metadata->begin = + a404m_realloc(metadata->begin, size * sizeof(*metadata->begin)); metadata->end = metadata->begin + size; return node->parserNode = diff --git a/src/runner/runner.c b/src/runner/runner.c index 23b6d7e..012c84a 100644 --- a/src/runner/runner.c +++ b/src/runner/runner.c @@ -303,8 +303,8 @@ AstTree *runAstTreeBuiltin(AstTree *tree, AstTreeScope *scope, default: UNREACHABLE; } - return newAstTree(AST_TREE_TOKEN_RAW_VALUE, ret, copyAstTree(left->type), NULL, - NULL); + return newAstTree(AST_TREE_TOKEN_RAW_VALUE, ret, copyAstTree(left->type), + NULL, NULL); } case AST_TREE_TOKEN_BUILTIN_ADD: { AstTree *left = arguments[0]; @@ -1473,6 +1473,7 @@ AstTree *runExpression(AstTree *expr, AstTreeScope *scope, bool *shouldRet, astTreeDelete(l); return copyAstTree(left->value); } else if (l->token == AST_TREE_TOKEN_RAW_VALUE) { + UNREACHABLE; AstTree *right = runExpression(metadata->right, scope, shouldRet, false, isComptime, breakCount, shouldContinue, false); |