CodegenVisitor.h 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. #ifndef QLOW_CODEGEN_VISITOR_H
  2. #define QLOW_CODEGEN_VISITOR_H
  3. #include <llvm/IR/Value.h>
  4. #include <llvm/IR/IRBuilder.h>
  5. #include <llvm/IR/BasicBlock.h>
  6. #include "Visitor.h"
  7. #include "Semantic.h"
  8. #include "Scope.h"
  9. #include <memory>
  10. namespace qlow
  11. {
  12. namespace gen
  13. {
  14. class FunctionGenerator;
  15. }
  16. }
  17. namespace qlow
  18. {
  19. class ExpressionVisitor;
  20. class StatementVisitor;
  21. }
  22. class qlow::ExpressionVisitor :
  23. public Visitor<
  24. llvm::Value*,
  25. llvm::IRBuilder<>,
  26. sem::LocalVariableExpression,
  27. sem::BinaryOperation,
  28. sem::UnaryOperation,
  29. sem::FeatureCallExpression,
  30. sem::IntConst
  31. >
  32. {
  33. public:
  34. llvm::Value* visit(sem::LocalVariableExpression& node, llvm::IRBuilder<>&) override;
  35. llvm::Value* visit(sem::BinaryOperation& node, llvm::IRBuilder<>&) override;
  36. llvm::Value* visit(sem::UnaryOperation& node, llvm::IRBuilder<>&) override;
  37. llvm::Value* visit(sem::FeatureCallExpression& node, llvm::IRBuilder<>&) override;
  38. llvm::Value* visit(sem::IntConst& node, llvm::IRBuilder<>&) override;
  39. };
  40. class qlow::StatementVisitor :
  41. public Visitor<
  42. llvm::Value*,
  43. gen::FunctionGenerator,
  44. sem::AssignmentStatement,
  45. sem::FeatureCallStatement
  46. >
  47. {
  48. public:
  49. llvm::Value* visit(sem::AssignmentStatement& node, gen::FunctionGenerator&) override;
  50. llvm::Value* visit(sem::FeatureCallStatement& node, gen::FunctionGenerator&) override;
  51. };
  52. #endif // QLOW_CODEGEN_VISITOR_H