|  | @@ -1,23 +1,46 @@
 | 
											
												
													
														|  |  #include "CodeGeneration.h"
 |  |  #include "CodeGeneration.h"
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | 
 |  | +#include <llvm/IR/LLVMContext.h>
 | 
											
												
													
														|  | 
 |  | +#include <llvm/IR/PassManager.h>
 | 
											
												
													
														|  | 
 |  | +#include <llvm/IR/Verifier.h>
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  |  using namespace qlow;
 |  |  using namespace qlow;
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | 
 |  | +static llvm::LLVMContext context;
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -void generateModule(const sem::SymbolTable<sem::Class>& classes)
 |  | 
 | 
											
												
													
														|  | 
 |  | +std::unique_ptr<llvm::Module> generateModule(const sem::SymbolTable<sem::Class>& classes)
 | 
											
												
													
														|  |  {
 |  |  {
 | 
											
												
													
														|  | 
 |  | +    using llvm::Module;
 | 
											
												
													
														|  | 
 |  | +    std::unique_ptr<Module> module = llvm::make_unique<Module>("qlow_module", context);
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | 
 |  | +    return module;
 | 
											
												
													
														|  |  }
 |  |  }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -void gen::generateObjectFile(const std::string& name, const sem::SymbolTable<sem::Class>& classes)
 |  | 
 | 
											
												
													
														|  | 
 |  | +void gen::generateObjectFile(const std::string& name, std::unique_ptr<llvm::Module> module,
 | 
											
												
													
														|  | 
 |  | +        const sem::SymbolTable<sem::Class>& classes)
 | 
											
												
													
														|  |  {
 |  |  {
 | 
											
												
													
														|  | 
 |  | +    using llvm::PassManager;
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +    llvm::verifyModule(*module);
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +    PassManager<llvm::Module> pm;
 | 
											
												
													
														|  | 
 |  | +    //pm.add(createPrintModulePass(&outs()));
 | 
											
												
													
														|  | 
 |  | +    //pm.run(module);
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  |      const char cpu[] = "generic";
 |  |      const char cpu[] = "generic";
 | 
											
												
													
														|  |      const char features[] = "";
 |  |      const char features[] = "";
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +    /*
 | 
											
												
													
														|  | 
 |  | +    auto RM = llvm::Optional<llvm::Reloc::Model>();
 | 
											
												
													
														|  |      auto targetMachine =
 |  |      auto targetMachine =
 | 
											
												
													
														|  |          target->createTargetMachine(TargetTriple, CPU, Features, opt, RM);
 |  |          target->createTargetMachine(TargetTriple, CPU, Features, opt, RM);
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -  TargetOptions opt;
 |  | 
 | 
											
												
													
														|  | 
 |  | +        */
 | 
											
												
													
														|  | 
 |  | +/*  TargetOptions opt;
 | 
											
												
													
														|  |    auto RM = Optional<Reloc::Model>();
 |  |    auto RM = Optional<Reloc::Model>();
 | 
											
												
													
														|  |    auto TheTargetMachine =
 |  |    auto TheTargetMachine =
 | 
											
												
													
														|  |        Target->createTargetMachine(TargetTriple, CPU, Features, opt, RM);
 |  |        Target->createTargetMachine(TargetTriple, CPU, Features, opt, RM);
 | 
											
										
											
												
													
														|  | @@ -46,7 +69,7 @@ void gen::generateObjectFile(const std::string& name, const sem::SymbolTable<sem
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |    outs() << "Wrote " << Filename << "\n";
 |  |    outs() << "Wrote " << Filename << "\n";
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -  return 0;
 |  | 
 | 
											
												
													
														|  | 
 |  | +  return 0;*/
 | 
											
												
													
														|  |  }
 |  |  }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  
 |  |  
 |