IncrementalParser::IncrementalParser(Interpreter* interp, const char* llvmdir) : m_Interpreter(interp), m_CI(CIFactory::createCI("", interp->getOptions(), llvmdir, m_Consumer = new cling::DeclCollector())), m_ModuleNo(0) { if (!m_CI) { cling::errs() << "Compiler instance could not be created.\n"; return; } // Is the CompilerInstance being used to generate output only? if (m_Interpreter->getOptions().CompilerOpts.HasOutput) return; if (!m_Consumer) { cling::errs() << "No AST consumer available.\n"; return; } DiagnosticsEngine& Diag = m_CI->getDiagnostics(); if (m_CI->getFrontendOpts().ProgramAction != frontend::ParseSyntaxOnly) { m_CodeGen.reset(CreateLLVMCodeGen( Diag, makeModuleName(), m_CI->getHeaderSearchOpts(), m_CI->getPreprocessorOpts(), m_CI->getCodeGenOpts(), *m_Interpreter->getLLVMContext())); } // Initialize the DeclCollector and add callbacks keeping track of macros. m_Consumer->Setup(this, m_CodeGen.get(), m_CI->getPreprocessor()); m_DiagConsumer.reset(new FilteringDiagConsumer(Diag, false)); initializeVirtualFile(); }
/** * Initialises basic variables. * * \param c core module. * \param prefix module name's prefix. * \param seq sequence number */ Module(Core &c, const std::string &prefix, unsigned long seq) : moduleName(makeModuleName(prefix, seq)), core(c) { }
llvm::Module* IncrementalParser::StartModule() { return getCodeGenerator()->StartModule(makeModuleName(), *m_Interpreter->getLLVMContext(), getCI()->getCodeGenOpts()); }