aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorA404M <ahmadmahmoudiprogrammer@gmail.com>2025-06-03 21:32:03 +0330
committerA404M <ahmadmahmoudiprogrammer@gmail.com>2025-06-03 21:32:03 +0330
commita6abc8734563ba8a1920c760dcb3c0147cb458b9 (patch)
treee2aa1f627b6952793f17f6ff3460070b37d99daf /src
parent7296f70ccb33fa7a2b34b0a0332bac7b93d21e0d (diff)
fixing some bugs
Diffstat (limited to 'src')
-rw-r--r--src/compiler/ast-tree.c18
-rw-r--r--src/compiler/lexer.h1
-rw-r--r--src/compiler/parser.c5
-rw-r--r--src/runner/runner.c5
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);