当前位置: 首页>>代码示例>>C++>>正文


C++ ModuleMap::isHeaderInUnavailableModule方法代码示例

本文整理汇总了C++中ModuleMap::isHeaderInUnavailableModule方法的典型用法代码示例。如果您正苦于以下问题:C++ ModuleMap::isHeaderInUnavailableModule方法的具体用法?C++ ModuleMap::isHeaderInUnavailableModule怎么用?C++ ModuleMap::isHeaderInUnavailableModule使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在ModuleMap的用法示例。


在下文中一共展示了ModuleMap::isHeaderInUnavailableModule方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: collectModuleHeaderIncludes

/// \brief Collect the set of header includes needed to construct the given
/// module and update the TopHeaders file set of the module.
///
/// \param Module The module we're collecting includes from.
///
/// \param Includes Will be augmented with the set of \#includes or \#imports
/// needed to load all of the named headers.
static void collectModuleHeaderIncludes(const LangOptions &LangOpts,
                                        FileManager &FileMgr,
                                        ModuleMap &ModMap,
                                        clang::Module *Module,
                                        SmallVectorImpl<char> &Includes) {
    // Don't collect any headers for unavailable modules.
    if (!Module->isAvailable())
        return;

    // Add includes for each of these headers.
    for (unsigned I = 0, N = Module->NormalHeaders.size(); I != N; ++I) {
        const FileEntry *Header = Module->NormalHeaders[I];
        Module->addTopHeader(Header);
        addHeaderInclude(Header, Includes, LangOpts);
    }
    // Note that Module->PrivateHeaders will not be a TopHeader.

    if (const FileEntry *UmbrellaHeader = Module->getUmbrellaHeader()) {
        Module->addTopHeader(UmbrellaHeader);
        if (Module->Parent) {
            // Include the umbrella header for submodules.
            addHeaderInclude(UmbrellaHeader, Includes, LangOpts);
        }
    } else if (const DirectoryEntry *UmbrellaDir = Module->getUmbrellaDir()) {
        // Add all of the headers we find in this subdirectory.
        llvm::error_code EC;
        SmallString<128> DirNative;
        llvm::sys::path::native(UmbrellaDir->getName(), DirNative);
        for (llvm::sys::fs::recursive_directory_iterator Dir(DirNative.str(), EC),
                DirEnd;
                Dir != DirEnd && !EC; Dir.increment(EC)) {
            // Check whether this entry has an extension typically associated with
            // headers.
            if (!llvm::StringSwitch<bool>(llvm::sys::path::extension(Dir->path()))
                    .Cases(".h", ".H", ".hh", ".hpp", true)
                    .Default(false))
                continue;

            // If this header is marked 'unavailable' in this module, don't include
            // it.
            if (const FileEntry *Header = FileMgr.getFile(Dir->path())) {
                if (ModMap.isHeaderInUnavailableModule(Header))
                    continue;
                Module->addTopHeader(Header);
            }

            // Include this header umbrella header for submodules.
            addHeaderInclude(Dir->path(), Includes, LangOpts);
        }
    }

    // Recurse into submodules.
    for (clang::Module::submodule_iterator Sub = Module->submodule_begin(),
            SubEnd = Module->submodule_end();
            Sub != SubEnd; ++Sub)
        collectModuleHeaderIncludes(LangOpts, FileMgr, ModMap, *Sub, Includes);
}
开发者ID:kgrizzle,项目名称:clang,代码行数:64,代码来源:FrontendActions.cpp


注:本文中的ModuleMap::isHeaderInUnavailableModule方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。