From 9744909a126ead515c433097c0b5f76c98e9a5b4 Mon Sep 17 00:00:00 2001 From: Chuanqi Xu Date: Thu, 28 Sep 2023 14:02:05 +0800 Subject: [NFC] [C++20] [Modules] Refactor Module::getGlobalModuleFragment and Module::getPrivateModuleFragment The original implementation of `Module::getGlobalModuleFragment` and `Module::getPrivateModuleFragment` tried to find the global module fragment and the private module fragment by comparing strings, which smells bad. This patch tries to improve this. --- clang/lib/Basic/Module.cpp | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) (limited to 'clang/lib/Basic/Module.cpp') diff --git a/clang/lib/Basic/Module.cpp b/clang/lib/Basic/Module.cpp index 4ffdb6a..4e6fbfc 100644 --- a/clang/lib/Basic/Module.cpp +++ b/clang/lib/Basic/Module.cpp @@ -370,6 +370,28 @@ Module *Module::findOrInferSubmodule(StringRef Name) { return Result; } +Module *Module::getGlobalModuleFragment() const { + assert(isNamedModuleUnit() && "We should only query the global module " + "fragment from the C++ 20 Named modules"); + + for (auto *SubModule : SubModules) + if (SubModule->isExplicitGlobalModule()) + return SubModule; + + return nullptr; +} + +Module *Module::getPrivateModuleFragment() const { + assert(isNamedModuleUnit() && "We should only query the private module " + "fragment from the C++ 20 Named modules"); + + for (auto *SubModule : SubModules) + if (SubModule->isPrivateModule()) + return SubModule; + + return nullptr; +} + void Module::getExportedModules(SmallVectorImpl &Exported) const { // All non-explicit submodules are exported. for (std::vector::const_iterator I = SubModules.begin(), -- cgit v1.1