aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/ast_node.hpp4
-rw-r--r--src/semantic_analyzer.cpp11
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