summaryrefslogtreecommitdiff
path: root/src/compiler
diff options
context:
space:
mode:
authorA404M <ahmadmahmoudiprogrammer@gmail.com>2025-04-01 12:54:56 +0330
committerA404M <ahmadmahmoudiprogrammer@gmail.com>2025-04-01 12:54:56 +0330
commit052ff9cc03544f29e1c3c79f09b6b0f3fb989532 (patch)
tree31c21a99336c6bde18aaabb3efb2a69ace833174 /src/compiler
parenta0a1b0e555526fa0dc7628b921c5ffa3f391b2c3 (diff)
trying to fix functions as argument and more dynamically calling
functions
Diffstat (limited to 'src/compiler')
-rw-r--r--src/compiler/ast-tree.c8
-rw-r--r--src/compiler/ast-tree.h1
2 files changed, 9 insertions, 0 deletions
diff --git a/src/compiler/ast-tree.c b/src/compiler/ast-tree.c
index 2f9c27c..a0bc974 100644
--- a/src/compiler/ast-tree.c
+++ b/src/compiler/ast-tree.c
@@ -2103,6 +2103,10 @@ AstTreeFunction *getFunction(AstTree *value) {
UNREACHABLE;
}
+bool isFunction(AstTree *value) {
+ return value->type->token == AST_TREE_TOKEN_TYPE_FUNCTION;
+}
+
bool isConst(AstTree *tree, AstTreeHelper *helper) {
switch (tree->token) {
case AST_TREE_TOKEN_TYPE_TYPE:
@@ -2954,6 +2958,10 @@ bool setTypesFunctionCall(AstTree *tree, AstTreeSetTypesHelper helper) {
if (!setAllTypes(metadata->function, helper, NULL)) {
return false;
+ } else if (!isFunction(metadata->function)) {
+ printError(metadata->function->str_begin, metadata->function->str_end,
+ "Object is not a function");
+ return false;
}
AstTreeFunction *function = getFunction(metadata->function);
diff --git a/src/compiler/ast-tree.h b/src/compiler/ast-tree.h
index d6c2523..e12daec 100644
--- a/src/compiler/ast-tree.h
+++ b/src/compiler/ast-tree.h
@@ -235,6 +235,7 @@ AstTree *astTreeParseCurlyBracket(ParserNode *parserNode,
AstTree *astTreeParseParenthesis(ParserNode *parserNode, AstTreeHelper *helper);
AstTreeFunction *getFunction(AstTree *value);
+bool isFunction(AstTree *value);
bool isConst(AstTree *tree, AstTreeHelper *helper);
AstTree *makeTypeOf(AstTree *value);
bool typeIsEqual(const AstTree *type0, const AstTree *type1);