summaryrefslogtreecommitdiff
path: root/src/compiler/ast-tree.h
diff options
context:
space:
mode:
authorA404M <ahmadmahmoudiprogrammer@gmail.com>2025-02-12 09:19:32 +0330
committerA404M <ahmadmahmoudiprogrammer@gmail.com>2025-02-12 09:19:32 +0330
commit217b2c70adfd60756591dd6b06b60279f805a596 (patch)
treec3855291e212b6beb990fa128968fc1a95e00d42 /src/compiler/ast-tree.h
parentdecaf9321cbf119d1efea0c4667f49b0ab2e8c96 (diff)
fix circular dependency problem
Diffstat (limited to 'src/compiler/ast-tree.h')
-rw-r--r--src/compiler/ast-tree.h54
1 files changed, 23 insertions, 31 deletions
diff --git a/src/compiler/ast-tree.h b/src/compiler/ast-tree.h
index 00e8c75..579d919 100644
--- a/src/compiler/ast-tree.h
+++ b/src/compiler/ast-tree.h
@@ -106,6 +106,13 @@ typedef struct AstTreeReturn {
AstTree *value;
} AstTreeReturn;
+typedef struct AstTreeHelper {
+ AstTreeVariables **variables;
+ size_t variables_size;
+ AstTreeVariable *variable;
+ AstTreeVariables *globalDeps;
+} AstTreeHelper;
+
void astTreePrint(const AstTree *tree, int indent);
void astTreeRootPrint(const AstTreeRoot *root);
@@ -122,58 +129,43 @@ AstTreeVariables copyAstTreeVariables(AstTreeVariables variables);
AstTreeRoot *makeAstTree(ParserNode *parsedRoot);
-bool pushVariable(AstTreeVariables *variables, AstTreeVariable *variable);
-AstTreeVariable *getVariable(AstTreeVariables **variables,
- size_t variables_size, char *name_begin,
+bool pushVariable(AstTreeHelper *helper,AstTreeVariables *variables, AstTreeVariable *variable);
+AstTreeVariable *getVariable(AstTreeHelper *helper, char *name_begin,
char *name_end);
-AstTree *astTreeParse(ParserNode *parserNode, AstTreeVariables **variables,
- size_t variables_size);
+AstTree *astTreeParse(ParserNode *parserNode, AstTreeHelper *helper);
-AstTree *astTreeParseFunction(ParserNode *parserNode,
- AstTreeVariables **variables,
- size_t variables_size);
+AstTree *astTreeParseFunction(ParserNode *parserNode, AstTreeHelper *helper);
AstTree *astTreeParseTypeFunction(ParserNode *parserNode,
- AstTreeVariables **variables,
- size_t variables_size);
+ AstTreeHelper *helper);
AstTree *astTreeParseFunctionCall(ParserNode *parserNode,
- AstTreeVariables **variables,
- size_t variables_size);
+ AstTreeHelper *helper);
-AstTree *astTreeParseIdentifier(ParserNode *parserNode,
- AstTreeVariables **variables,
- size_t variables_size);
+AstTree *astTreeParseIdentifier(ParserNode *parserNode, AstTreeHelper *helper);
-AstTree *astTreeParsePrintU64(ParserNode *parserNode,
- AstTreeVariables **variables,
- size_t variables_size);
-AstTree *astTreeParseReturn(ParserNode *parserNode,
- AstTreeVariables **variables,
- size_t variables_size);
+AstTree *astTreeParsePrintU64(ParserNode *parserNode, AstTreeHelper *helper);
+AstTree *astTreeParseReturn(ParserNode *parserNode, AstTreeHelper *helper);
AstTree *astTreeParseBinaryOperator(ParserNode *parserNode,
- AstTreeVariables **variables,
- size_t variables_size, AstTreeToken token);
+ AstTreeHelper *helper, AstTreeToken token);
AstTree *astTreeParseUnaryOperator(ParserNode *parserNode,
- AstTreeVariables **variables,
- size_t variables_size, AstTreeToken token);
+ AstTreeHelper *helper, AstTreeToken token);
-bool astTreeParseConstant(ParserNode *parserNode, AstTreeVariables **variables,
- size_t variables_size);
+bool astTreeParseConstant(ParserNode *parserNode, AstTreeHelper *helper);
-AstTree *astTreeParseVariable(ParserNode *parserNode,
- AstTreeVariables **variables,
- size_t variables_size);
+AstTree *astTreeParseVariable(ParserNode *parserNode, AstTreeHelper *helper);
AstTreeFunction *getFunction(AstTree *value);
bool isConst(AstTree *value);
AstTree *makeTypeOf(AstTree *value);
bool typeIsEqual(const AstTree *type0, const AstTree *type1);
-bool setAllTypesRoot(AstTreeRoot *root);
+bool isCircularDependencies(AstTreeHelper *helper,AstTreeVariable *variable,AstTree *tree);
+
+bool setAllTypesRoot(AstTreeRoot *root,AstTreeHelper *helper);
bool setAllTypes(AstTree *tree, AstTreeFunction *function);
bool setTypesFunction(AstTree *tree);
bool setTypesPrintU64(AstTree *tree);