#ifndef QLOW_SEM_TYPEVISITOR_H #define QLOW_SEM_TYPEVISITOR_H #include "Visitor.h" #include "Semantic.h" namespace qlow { namespace sem { class TypeVisitor; } } class qlow::sem::TypeVisitor : public Visitor< std::unique_ptr, const sem::SymbolTable, sem::Expression, sem::UnaryOperation, sem::BinaryOperation, sem::FeatureCallExpression, sem::IntConst > { public: std::unique_ptr visit(sem::Expression& expr, const sem::SymbolTable& classes) override; std::unique_ptr visit(sem::UnaryOperation& expr, const sem::SymbolTable& classes) override; std::unique_ptr visit(sem::BinaryOperation& expr, const sem::SymbolTable& classes) override; std::unique_ptr visit(sem::FeatureCallExpression& expr, const sem::SymbolTable& classes) override; std::unique_ptr visit(sem::IntConst& expr, const sem::SymbolTable& classes) override; }; #endif // QLOW_SEM_TYPEVISITOR_H