|  | @@ -5,6 +5,10 @@
 | 
											
												
													
														|  |  #include <map>
 |  |  #include <map>
 | 
											
												
													
														|  |  #include "Util.h"
 |  |  #include "Util.h"
 | 
											
												
													
														|  |  #include "Ast.h"
 |  |  #include "Ast.h"
 | 
											
												
													
														|  | 
 |  | +#include "Visitor.h"
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +#include <llvm/IR/Value.h>
 | 
											
												
													
														|  | 
 |  | +#include <llvm/IR/IRBuilder.h>
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  namespace qlow
 |  |  namespace qlow
 | 
											
												
													
														|  |  {
 |  |  {
 | 
											
										
											
												
													
														|  | @@ -46,6 +50,8 @@ namespace qlow
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |          class SemanticException;
 |  |          class SemanticException;
 | 
											
												
													
														|  |      }
 |  |      }
 | 
											
												
													
														|  | 
 |  | +    
 | 
											
												
													
														|  | 
 |  | +    class CodegenVisitor;
 | 
											
												
													
														|  |  }
 |  |  }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  
 |  |  
 | 
											
										
											
												
													
														|  | @@ -134,7 +140,7 @@ struct qlow::sem::AssignmentStatement : public Statement
 | 
											
												
													
														|  |  };
 |  |  };
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -struct qlow::sem::Expression : public SemanticObject
 |  | 
 | 
											
												
													
														|  | 
 |  | +struct qlow::sem::Expression : public SemanticObject, public Visitable<llvm::Value*, llvm::IRBuilder<>, qlow::CodegenVisitor>
 | 
											
												
													
														|  |  {
 |  |  {
 | 
											
												
													
														|  |  };
 |  |  };
 | 
											
												
													
														|  |  
 |  |  
 | 
											
										
											
												
													
														|  | @@ -149,6 +155,8 @@ struct qlow::sem::BinaryOperation : public Operation
 | 
											
												
													
														|  |  {
 |  |  {
 | 
											
												
													
														|  |      std::unique_ptr<Expression> left;
 |  |      std::unique_ptr<Expression> left;
 | 
											
												
													
														|  |      std::unique_ptr<Expression> right;
 |  |      std::unique_ptr<Expression> right;
 | 
											
												
													
														|  | 
 |  | +    
 | 
											
												
													
														|  | 
 |  | +    virtual llvm::Value* accept(CodegenVisitor& visitor, llvm::IRBuilder<>& arg2);
 | 
											
												
													
														|  |  };
 |  |  };
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  
 |  |  
 | 
											
										
											
												
													
														|  | @@ -156,12 +164,14 @@ struct qlow::sem::UnaryOperation : public Operation
 | 
											
												
													
														|  |  {
 |  |  {
 | 
											
												
													
														|  |      qlow::ast::UnaryOperation::Side side;
 |  |      qlow::ast::UnaryOperation::Side side;
 | 
											
												
													
														|  |      std::unique_ptr<Expression> arg;
 |  |      std::unique_ptr<Expression> arg;
 | 
											
												
													
														|  | 
 |  | +    virtual llvm::Value* accept(CodegenVisitor& visitor, llvm::IRBuilder<>& arg2);
 | 
											
												
													
														|  |  };
 |  |  };
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  struct qlow::sem::FeatureCallExpression : public Expression
 |  |  struct qlow::sem::FeatureCallExpression : public Expression
 | 
											
												
													
														|  |  {
 |  |  {
 | 
											
												
													
														|  |      Method* callee;
 |  |      Method* callee;
 | 
											
												
													
														|  |      OwningList<Expression> arguments;
 |  |      OwningList<Expression> arguments;
 | 
											
												
													
														|  | 
 |  | +    virtual llvm::Value* accept(CodegenVisitor& visitor, llvm::IRBuilder<>& arg2);
 | 
											
												
													
														|  |  };
 |  |  };
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  
 |  |  
 | 
											
										
											
												
													
														|  | @@ -173,6 +183,8 @@ struct qlow::sem::IntConst : public Expression
 | 
											
												
													
														|  |          value{ value }
 |  |          value{ value }
 | 
											
												
													
														|  |      {
 |  |      {
 | 
											
												
													
														|  |      }
 |  |      }
 | 
											
												
													
														|  | 
 |  | +    
 | 
											
												
													
														|  | 
 |  | +    virtual llvm::Value* accept(CodegenVisitor& visitor, llvm::IRBuilder<>& arg2);
 | 
											
												
													
														|  |  };
 |  |  };
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  
 |  |  
 |