Skip to content

Commit

Permalink
first part for local variable declaration implemented
Browse files Browse the repository at this point in the history
  • Loading branch information
michael.burzan committed Jan 6, 2025
1 parent 778a5f9 commit 9cc3633
Show file tree
Hide file tree
Showing 7 changed files with 210 additions and 18 deletions.
42 changes: 39 additions & 3 deletions include/Codegeneration.h
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
#ifndef PALLADIUM_CODEGENERATION_H
#define PALLADIUM_CODEGENERATION_H
#include <memory>
#include "ast/AstNode.h"
#include "ast/VariableDeclarationNode.h"
#include "ast/FunctionNode.h"
#include "ast/StatementsNode.h"
#include "VMPolicy.h"
Expand All @@ -9,10 +11,19 @@

using VMPtr = std::shared_ptr<VirtualMachine<AggresivPolicy>>;
using Code = std::vector<InstructionType<VirtualMachine<AggresivPolicy>>>;

struct LocalVariableContainer {
std::string name;
VMType type;
std::size_t index;
AstPtr expression;
};
using LocalVarContainerPtr = std::shared_ptr<std::vector<LocalVariableContainer>>;
//------------------FORWARD DECLARATION--------------------
class FunctionVisitor;
class StatementsVisitor;
class StatementVisitor;
class VariableDeclarationVisitor;
class ReturnStatementVisitor;
class ExpressionVisitor;
//---------------------------------------------------------
Expand Down Expand Up @@ -75,13 +86,15 @@ class StatementsVisitor : public Visitor {

private:
Code _block;
LocalVarContainerPtr _local_variables;
std::shared_ptr<StatementVisitor> _statement_visitor;
};

//-----------------------------------------------------
class StatementVisitor : public Visitor {
public:
StatementVisitor() = default;
StatementVisitor(const LocalVarContainerPtr& local_variables) : _local_variables(local_variables) {
}
auto begin(const std::shared_ptr<StatementNode>& node) -> VisitResult override;
auto visit(const std::shared_ptr<StatementNode>& node) -> std::shared_ptr<Visitor> override;
auto end(const std::shared_ptr<StatementNode>& node) -> VisitResult override;
Expand All @@ -98,12 +111,32 @@ class StatementVisitor : public Visitor {
private:
Code _code;
std::shared_ptr<ReturnStatementVisitor> _return_statement_visitor;
std::shared_ptr<VariableDeclarationVisitor> _var_dec_visitor;
LocalVarContainerPtr _local_variables;
};

//-----------------------------------------------------
class VariableDeclarationVisitor : public Visitor {
public:
VariableDeclarationVisitor(const LocalVarContainerPtr& local_variables) : _local_variables(local_variables) {
}
auto begin(const std::shared_ptr<VariableDeclarationNode>& node) -> VisitResult override;
auto visit(const std::shared_ptr<VariableDeclarationNode>& node) -> std::shared_ptr<Visitor> override;
auto end(const std::shared_ptr<VariableDeclarationNode>& node) -> VisitResult override;

using Visitor::begin;
using Visitor::end;
using Visitor::visit;

private:
LocalVarContainerPtr _local_variables;
};

//-----------------------------------------------------
class ReturnStatementVisitor : public Visitor {
public:
ReturnStatementVisitor() = default;
ReturnStatementVisitor(const LocalVarContainerPtr& local_variables) : _local_variables(local_variables) {
}
auto begin(const std::shared_ptr<ReturnStatementNode>& node) -> VisitResult override;
auto visit(const std::shared_ptr<ReturnStatementNode>& node) -> std::shared_ptr<Visitor> override;
auto end(const std::shared_ptr<ReturnStatementNode>& node) -> VisitResult override;
Expand All @@ -120,12 +153,14 @@ class ReturnStatementVisitor : public Visitor {
private:
Code _code;
std::shared_ptr<ExpressionVisitor> _expression_visitor;
LocalVarContainerPtr _local_variables;
};

//-----------------------------------------------------
class ExpressionVisitor : public Visitor {
public:
ExpressionVisitor() = default;
ExpressionVisitor(const LocalVarContainerPtr& local_variables) : _local_variables(local_variables) {
}
auto begin(const std::shared_ptr<ExpressionNode>& node) -> VisitResult override;
auto visit(const std::shared_ptr<ExpressionNode>& node) -> std::shared_ptr<Visitor> override;
auto end(const std::shared_ptr<ExpressionNode>& node) -> VisitResult override;
Expand All @@ -141,6 +176,7 @@ class ExpressionVisitor : public Visitor {

private:
Code _code;
LocalVarContainerPtr _local_variables;
};

#endif
Loading

0 comments on commit 9cc3633

Please sign in to comment.