Esempio n. 1
0
  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();
  }
Esempio n. 2
0
	/**
	 * 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) { }
Esempio n. 3
0
 llvm::Module* IncrementalParser::StartModule() {
   return getCodeGenerator()->StartModule(makeModuleName(),
                                          *m_Interpreter->getLLVMContext(),
                                          getCI()->getCodeGenOpts());
 }