diff options
Diffstat (limited to 'src/compiler/ast-tree.c')
-rw-r--r-- | src/compiler/ast-tree.c | 27 |
1 files changed, 14 insertions, 13 deletions
diff --git a/src/compiler/ast-tree.c b/src/compiler/ast-tree.c index 299f989..f077f0d 100644 --- a/src/compiler/ast-tree.c +++ b/src/compiler/ast-tree.c @@ -6004,8 +6004,6 @@ bool setTypesFunctionCall(AstTree *tree, AstTreeSetTypesHelper _helper) { LexerNodeArray lexerArray = lexer(code); if (lexerNodeArrayIsError(lexerArray)) { UNREACHABLE; - } else if (lexerArray.size == 0) { - UNREACHABLE; } ParserNode *rootParser = parser(lexerArray); if (rootParser == NULL) { @@ -6025,7 +6023,20 @@ bool setTypesFunctionCall(AstTree *tree, AstTreeSetTypesHelper _helper) { *tree = *ast; free(ast); } else { - if (nodeArray->size != 0) { + size_t parentIndex = _helper.scope->expressions_size; + for (size_t i = 0; i < _helper.scope->expressions_size; ++i) { + if (_helper.scope->expressions[i] == tree) { + parentIndex = i; + break; + } + } + if (parentIndex == _helper.scope->expressions_size) { + UNREACHABLE; + } + if (nodeArray->size == 0) { + astTreeDestroy(*tree); + *tree = AST_TREE_VOID_VALUE; + } else { AstTree *astNodes[nodeArray->size]; for (size_t i = 0; i < nodeArray->size; ++i) { ParserNode *node = nodeArray->data[i]; @@ -6044,16 +6055,6 @@ bool setTypesFunctionCall(AstTree *tree, AstTreeSetTypesHelper _helper) { if (!setAllTypes(tree, _helper, 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) { - parentIndex = i; - break; - } - } - if (parentIndex == _helper.scope->expressions_size) { - UNREACHABLE; - } size_t expression_capacity = a404m_malloc_usable_size(_helper.scope->expressions) / sizeof(*_helper.scope->expressions); |