diff options
author | A404M <ahmadmahmoudiprogrammer@gmail.com> | 2025-05-16 15:09:41 +0330 |
---|---|---|
committer | A404M <ahmadmahmoudiprogrammer@gmail.com> | 2025-05-16 16:24:06 +0330 |
commit | 0375ec4478101337ff1a30f583262a38055f9103 (patch) | |
tree | d50b9580b2e41a80c2cd1ab3af7714e4cf771e21 /src/compiler/ast-tree.h | |
parent | 42eb5e5d3f10c3a9187dcf8edd7c023a3ea10dcd (diff) |
break now works
removed unused helper in ast to make code cleaner
now you can't define variables everywhere
Diffstat (limited to 'src/compiler/ast-tree.h')
-rw-r--r-- | src/compiler/ast-tree.h | 70 |
1 files changed, 28 insertions, 42 deletions
diff --git a/src/compiler/ast-tree.h b/src/compiler/ast-tree.h index 7d6dd5f..fd1f123 100644 --- a/src/compiler/ast-tree.h +++ b/src/compiler/ast-tree.h @@ -27,6 +27,7 @@ typedef enum AstTreeToken { AST_TREE_TOKEN_KEYWORD_PUTC, AST_TREE_TOKEN_KEYWORD_RETURN, + AST_TREE_TOKEN_KEYWORD_BREAK, AST_TREE_TOKEN_KEYWORD_IF, AST_TREE_TOKEN_KEYWORD_WHILE, AST_TREE_TOKEN_KEYWORD_COMPTIME, @@ -247,16 +248,13 @@ typedef struct AstTreeWhile { AstTree *body; } AstTreeWhile; -typedef struct AstTreeHelper { - AstTreeVariables **variables; - size_t variables_size; -} AstTreeHelper; - typedef struct AstTreeSetTypesHelper { AstTree *lookingType; AstTreeVariables dependencies; AstTreeVariables variables; AstTreeRoot *root; + AstTreeWhile **loops; + size_t loops_size; } AstTreeSetTypesHelper; typedef struct AstTreeStruct { @@ -349,53 +347,40 @@ AstTreeRoot *getAstTreeRoot(char *filePath, AstTreeRoots *roots ); AstTreeRoot *makeAstRoot(const ParserNode *parsedRoot, char *filePath); -bool pushVariable(AstTreeHelper *helper, AstTreeVariables *variables, - AstTreeVariable *variable); - -AstTree *astTreeParse(const ParserNode *parserNode, AstTreeHelper *helper); -AstTree *astTreeParseFunction(const ParserNode *parserNode, - AstTreeHelper *helper); -AstTree *astTreeParseTypeFunction(const ParserNode *parserNode, - AstTreeHelper *helper); -AstTree *astTreeParseFunctionCall(const ParserNode *parserNode, - AstTreeHelper *helper); -AstTree *astTreeParseIdentifier(const ParserNode *parserNode, - AstTreeHelper *helper); +bool pushVariable(AstTreeVariables *variables, AstTreeVariable *variable); + +AstTree *astTreeParse(const ParserNode *parserNode); +AstTree *astTreeParseFunction(const ParserNode *parserNode); +AstTree *astTreeParseTypeFunction(const ParserNode *parserNode); +AstTree *astTreeParseFunctionCall(const ParserNode *parserNode); +AstTree *astTreeParseIdentifier(const ParserNode *parserNode); AstTree *astTreeParseValue(const ParserNode *parserNode, AstTreeToken token, size_t metadata_size, AstTree *type); -AstTree *astTreeParseString(const ParserNode *parserNode, - AstTreeHelper *helper); +AstTree *astTreeParseString(const ParserNode *parserNode); AstTree *astTreeParseKeyword(const ParserNode *parserNode, AstTreeToken token); -AstTree *astTreeParsePutc(const ParserNode *parserNode, AstTreeHelper *helper); -AstTree *astTreeParseReturn(const ParserNode *parserNode, - AstTreeHelper *helper); +AstTree *astTreeParsePutc(const ParserNode *parserNode); +AstTree *astTreeParseReturn(const ParserNode *parserNode); AstTree *astTreeParseBinaryOperator(const ParserNode *parserNode, - AstTreeHelper *helper, AstTreeToken token); + AstTreeToken token); AstTree *astTreeParseUnaryOperator(const ParserNode *parserNode, - AstTreeHelper *helper, AstTreeToken token); + AstTreeToken token); AstTree *astTreeParseUnaryOperatorSingleChild(const ParserNode *parserNode, - AstTreeHelper *helper, AstTreeToken token); AstTree *astTreeParseOperateAssignOperator(const ParserNode *parserNode, - AstTreeHelper *helper, AstTreeToken token); -bool astTreeParseConstant(const ParserNode *parserNode, AstTreeHelper *helper); +bool astTreeParseConstant(const ParserNode *parserNode, + AstTreeVariables *variables); AstTree *astTreeParseVariable(const ParserNode *parserNode, - AstTreeHelper *helper); -AstTree *astTreeParseIf(const ParserNode *parserNode, AstTreeHelper *helper); -AstTree *astTreeParseWhile(const ParserNode *parserNode, AstTreeHelper *helper); -AstTree *astTreeParseComptime(const ParserNode *parserNode, - AstTreeHelper *helper); -AstTree *astTreeParseCurlyBracket(const ParserNode *parserNode, - AstTreeHelper *helper); -AstTree *astTreeParseParenthesis(const ParserNode *parserNode, - AstTreeHelper *helper); -AstTree *astTreeParseStruct(const ParserNode *parserNode, - AstTreeHelper *helper); + AstTreeVariables *variables); +AstTree *astTreeParseIf(const ParserNode *parserNode); +AstTree *astTreeParseWhile(const ParserNode *parserNode); +AstTree *astTreeParseComptime(const ParserNode *parserNode); +AstTree *astTreeParseCurlyBracket(const ParserNode *parserNode); +AstTree *astTreeParseParenthesis(const ParserNode *parserNode); +AstTree *astTreeParseStruct(const ParserNode *parserNode); AstTree *astTreeParseAccessOperator(const ParserNode *parserNode, - AstTreeHelper *helper, AstTreeToken token); -AstTree *astTreeParseBracket(const ParserNode *parserNode, - AstTreeHelper *helper, AstTreeToken token); + AstTreeToken token); +AstTree *astTreeParseBracket(const ParserNode *parserNode, AstTreeToken token); bool isFunction(AstTree *value); bool isShapeShifter(AstTreeFunction *function); @@ -405,7 +390,7 @@ AstTree *makeTypeOfFunction(AstTreeFunction *function, const char *str_begin, const char *str_end); bool typeIsEqual(AstTree *type0, AstTree *type1); bool typeIsEqualBack(const AstTree *type0, const AstTree *type1); -AstTree *getValue(AstTree *tree,bool copy); +AstTree *getValue(AstTree *tree, bool copy); bool isIntType(AstTree *type); bool isEqual(AstTree *left, AstTree *right); bool isEqualVariable(AstTreeVariable *left, AstTreeVariable *right); @@ -425,6 +410,7 @@ bool setTypesFunction(AstTree *tree, AstTreeSetTypesHelper helper); bool setTypesPutc(AstTree *tree, AstTreeSetTypesHelper helper); bool setTypesReturn(AstTree *tree, AstTreeSetTypesHelper helper, AstTreeFunction *function); +bool setTypesBreak(AstTree *tree, AstTreeSetTypesHelper helper); bool setTypesTypeFunction(AstTree *tree, AstTreeSetTypesHelper helper); bool setTypesFunctionCall(AstTree *tree, AstTreeSetTypesHelper helper); bool setTypesVariable(AstTree *tree, AstTreeSetTypesHelper helper, |