aboutsummaryrefslogtreecommitdiff
path: root/src/compiler/ast-tree.c
diff options
context:
space:
mode:
authorA404M <ahmadmahmoudiprogrammer@gmail.com>2025-06-09 17:50:46 +0330
committerA404M <ahmadmahmoudiprogrammer@gmail.com>2025-06-09 17:50:46 +0330
commit03e9e1708eada3985529949302f214a223a297c2 (patch)
treed9682cf0880934c3f384ec6c335808303f73a285 /src/compiler/ast-tree.c
parent922b6c51fbcdabd3823e311c46fe55af193196e1 (diff)
fix bug in shape shifter matching
Diffstat (limited to 'src/compiler/ast-tree.c')
-rw-r--r--src/compiler/ast-tree.c16
1 files changed, 9 insertions, 7 deletions
diff --git a/src/compiler/ast-tree.c b/src/compiler/ast-tree.c
index ca79136..416e6fc 100644
--- a/src/compiler/ast-tree.c
+++ b/src/compiler/ast-tree.c
@@ -3906,6 +3906,9 @@ bool hasAnyTypeInside(AstTree *type) {
}
return false;
}
+ case AST_TREE_TOKEN_OPERATOR_ARRAY_ACCESS:
+ case AST_TREE_TOKEN_OPERATOR_ARRAY_ACCESS_ASSIGN:
+ case AST_TREE_TOKEN_OPERATOR_ARRAY_ACCESS_ADDRESS:
case AST_TREE_TOKEN_FUNCTION_CALL: {
AstTreeFunctionCall *metadata = type->metadata;
for (size_t i = 0; i < metadata->parameters.size; ++i) {
@@ -3916,6 +3919,8 @@ bool hasAnyTypeInside(AstTree *type) {
return false;
}
case AST_TREE_TOKEN_VARIABLE:
+ case AST_TREE_TOKEN_OPERATOR_ADDRESS:
+ case AST_TREE_TOKEN_OPERATOR_DEREFERENCE:
return false;
case AST_TREE_TOKEN_FUNCTION:
case AST_TREE_TOKEN_KEYWORD_RETURN:
@@ -3944,15 +3949,10 @@ bool hasAnyTypeInside(AstTree *type) {
case AST_TREE_TOKEN_OPERATOR_SMALLER:
case AST_TREE_TOKEN_OPERATOR_GREATER_OR_EQUAL:
case AST_TREE_TOKEN_OPERATOR_SMALLER_OR_EQUAL:
- case AST_TREE_TOKEN_OPERATOR_ADDRESS:
- case AST_TREE_TOKEN_OPERATOR_DEREFERENCE:
case AST_TREE_TOKEN_OPERATOR_ACCESS:
case AST_TREE_TOKEN_OPERATOR_LOGICAL_NOT:
case AST_TREE_TOKEN_OPERATOR_LOGICAL_AND:
case AST_TREE_TOKEN_OPERATOR_LOGICAL_OR:
- case AST_TREE_TOKEN_OPERATOR_ARRAY_ACCESS:
- case AST_TREE_TOKEN_OPERATOR_ARRAY_ACCESS_ASSIGN:
- case AST_TREE_TOKEN_OPERATOR_ARRAY_ACCESS_ADDRESS:
case AST_TREE_TOKEN_OPERATOR_BITWISE_NOT:
case AST_TREE_TOKEN_OPERATOR_BITWISE_AND:
case AST_TREE_TOKEN_OPERATOR_BITWISE_XOR:
@@ -8215,8 +8215,6 @@ AstTree *getShapeShifterElement(AstTreeFunctionCall *metadata,
AstTreeFunction *newFunction =
copyAstTreeFunction(shapeShifter->function, NULL, NULL, 0, true);
- newFunction->isMacro = shapeShifter->function->isMacro;
-
AstTreeFunctionCallParam initedArguments[newFunction->arguments.size];
size_t initedArguments_size = newFunction->arguments.size;
@@ -8531,6 +8529,8 @@ bool doesShapeShifterMatch(AstTreeShapeShifter *shapeShifter,
goto RETURN_FALSE;
}
arg->value = copyAstTree(param.value);
+ astTreeDelete(arg->type);
+ arg->type = copyAstTree(param.value->type);
initedArguments[j] = param;
goto END_OF_NAMED_FOR1;
} else {
@@ -8560,6 +8560,8 @@ bool doesShapeShifterMatch(AstTreeShapeShifter *shapeShifter,
goto RETURN_FALSE;
}
arg->value = copyAstTree(param.value);
+ astTreeDelete(arg->type);
+ arg->type = copyAstTree(param.value->type);
initedArguments[j] = param;
goto END_OF_UNNAMED_FOR1;
}