TypeVisitor.h 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. #ifndef QLOW_SEM_TYPEVISITOR_H
  2. #define QLOW_SEM_TYPEVISITOR_H
  3. #include "Visitor.h"
  4. #include "Semantic.h"
  5. namespace qlow
  6. {
  7. namespace sem
  8. {
  9. class TypeVisitor;
  10. }
  11. }
  12. class qlow::sem::TypeVisitor :
  13. public Visitor<
  14. std::unique_ptr<qlow::sem::Type>,
  15. const sem::SymbolTable<sem::Class>,
  16. sem::Expression,
  17. sem::UnaryOperation,
  18. sem::BinaryOperation,
  19. sem::FeatureCallExpression,
  20. sem::IntConst
  21. >
  22. {
  23. public:
  24. std::unique_ptr<qlow::sem::Type> visit(sem::Expression& expr, const sem::SymbolTable<sem::Class>& classes) override;
  25. std::unique_ptr<qlow::sem::Type> visit(sem::UnaryOperation& expr, const sem::SymbolTable<sem::Class>& classes) override;
  26. std::unique_ptr<qlow::sem::Type> visit(sem::BinaryOperation& expr, const sem::SymbolTable<sem::Class>& classes) override;
  27. std::unique_ptr<qlow::sem::Type> visit(sem::FeatureCallExpression& expr, const sem::SymbolTable<sem::Class>& classes) override;
  28. std::unique_ptr<qlow::sem::Type> visit(sem::IntConst& expr, const sem::SymbolTable<sem::Class>& classes) override;
  29. };
  30. #endif // QLOW_SEM_TYPEVISITOR_H