示例#1
0
// Create the internal module tree representation.
static Module *loadModuleDescriptions(
    llvm::StringRef RootModuleName, llvm::ArrayRef<std::string> HeaderFileNames,
    DependencyMap &Dependencies, llvm::StringRef HeaderPrefix) {

    // Create root module.
    Module *RootModule = new Module(RootModuleName);

    llvm::SmallString<256> CurrentDirectory;
    llvm::sys::fs::current_path(CurrentDirectory);

    // If no header prefix, use current directory.
    if (HeaderPrefix.size() == 0)
        HeaderPrefix = CurrentDirectory;

    // Walk the header file names and output the module map.
    for (llvm::ArrayRef<std::string>::iterator I = HeaderFileNames.begin(),
            E = HeaderFileNames.end();
            I != E; ++I) {
        // Add as a module.
        if (!addModuleDescription(RootModule, *I, HeaderPrefix, Dependencies))
            return nullptr;
    }

    return RootModule;
}
// Create the internal module tree representation.
static Module *loadModuleDescriptions(
    llvm::StringRef RootModuleName, llvm::ArrayRef<std::string> HeaderFileNames,
    llvm::ArrayRef<std::string> ProblemFileNames,
    DependencyMap &Dependencies, llvm::StringRef HeaderPrefix) {

  // Create root module.
  auto *RootModule = new Module(RootModuleName, false);

  llvm::SmallString<256> CurrentDirectory;
  llvm::sys::fs::current_path(CurrentDirectory);

  // If no header prefix, use current directory.
  if (HeaderPrefix.size() == 0)
    HeaderPrefix = CurrentDirectory;

  // Walk the header file names and output the module map.
  for (llvm::ArrayRef<std::string>::iterator I = HeaderFileNames.begin(),
                                             E = HeaderFileNames.end();
       I != E; ++I) {
    std::string Header(*I);
    bool IsProblemFile = false;
    for (auto &ProblemFile : ProblemFileNames) {
      if (ProblemFile == Header) {
        IsProblemFile = true;
        break;
      }
    }
    // Add as a module.
    if (!addModuleDescription(RootModule, Header, HeaderPrefix, Dependencies, IsProblemFile))
      return nullptr;
  }

  return RootModule;
}