diff options
| -rw-r--r-- | include/ast_node.hpp | 4 | ||||
| -rw-r--r-- | src/semantic_analyzer.cpp | 11 |
2 files changed, 10 insertions, 5 deletions
diff --git a/include/ast_node.hpp b/include/ast_node.hpp index 76b7bb5..96300c2 100644 --- a/include/ast_node.hpp +++ b/include/ast_node.hpp @@ -17,9 +17,9 @@ public: class ProgramNode : ASTNode { public: - std::vector<FunctionDeclarationNode> function_declarations; + std::vector<FunctionDeclarationNode*> function_declarations; - ProgramNode(std::vector<FunctionDeclarationNode> function_declarations, int line, int col) : function_declarations(function_declarations), line(line), col(col) { } + ProgramNode(std::vector<FunctionDeclarationNode*> function_declarations, int line, int col) : function_declarations(function_declarations), line(line), col(col) { } }; class FunctionDeclarationNode : public ASTNode { diff --git a/src/semantic_analyzer.cpp b/src/semantic_analyzer.cpp index e097e4f..f6d3d2a 100644 --- a/src/semantic_analyzer.cpp +++ b/src/semantic_analyzer.cpp @@ -95,9 +95,13 @@ std::string visitProgram(ProgramNode* node){ // visit each function // return + std::vector<FunctionDeclarationNode*> functions = node->function_declarations; + for (auto element : functions) { + visitFunctionDeclaration(element); + }; } -std::string visitFunctionDecl(FunctionDeclNode* node){ +std::string visitFunctionDeclaration(FunctionDeclarationNode* node){ // check for dupe name // create function symbol and insert into global scope // check if main function @@ -107,6 +111,7 @@ std::string visitFunctionDecl(FunctionDeclNode* node){ // verify non-void functions have return statements // exit function scope and clear context // return + } @@ -119,7 +124,7 @@ std::string visitParameter(ParameterNode*){ } -std::string visitVarDeclaration(VarDeclNode* node){ +std::string visitVariableDeclaration(VariableDeclarationNode* node){ // get variable information // check for dupes // if initializer exists, check type @@ -177,7 +182,7 @@ std::string visitReturnStatement(ReturnStatementNode* node){ } -std::String visitExpressionStatement(ExpressionStatementNode* node){ +std::string visitExpressionStatement(ExpressionStatementNode* node){ // get the expression // analyze expression // return |
