#ifndef PORYGONLANG_BINDER_HPP #define PORYGONLANG_BINDER_HPP #include "../Parser/ParsedStatements/ParsedStatement.hpp" #include "BoundStatements/BoundStatement.hpp" #include "../Script.hpp" #include "BoundVariables/BoundScope.hpp" #include "../Parser/ParsedExpressions/ParsedTableExpression.hpp" using namespace std; using namespace Porygon::Parser; namespace Porygon::Binder { class Binder { Porygon::Script *_scriptData; BoundScope *_scope; shared_ptr _currentFunction; ~Binder(); // Statements BoundStatement *BindStatement(const ParsedStatement *statement); BoundStatement *BindBlockStatement(const ParsedStatement *statement); BoundStatement *BindExpressionStatement(const ParsedStatement *statement); BoundStatement *BindAssignmentStatement(const ParsedStatement *statement); BoundStatement *BindIndexAssignmentStatement(const ParsedStatement *statement); BoundStatement *BindFunctionDeclarationStatement(const ParsedStatement *statement); BoundStatement *BindReturnStatement(const ParsedStatement *statement); BoundStatement *BindConditionalStatement(const ParsedStatement *statement); BoundStatement *BindNumericalForStatement(const ParsedStatement *statement); // Expressions BoundExpression *BindExpression(const ParsedExpression *expression); BoundExpression *BindVariableExpression(const VariableExpression *expression); BoundExpression *BindBinaryOperator(const BinaryExpression *expression); BoundExpression *BindUnaryOperator(const UnaryExpression *expression); BoundExpression *BindFunctionCall(const FunctionCallExpression *expression); BoundExpression *BindIndexExpression(const IndexExpression *expression, bool setter); BoundExpression *BindNumericalTableExpression(const ParsedNumericalTableExpression *expression); BoundExpression *BindTableExpression(const ParsedTableExpression *expression); public: static BoundScriptStatement * Bind(Porygon::Script *script, const ParsedScriptStatement *s, BoundScope *scriptScope); BoundExpression *BindPeriodIndexExpression(const PeriodIndexExpression *expression, bool setter); }; } #endif //PORYGONLANG_BINDER_HPP