[clang-tools-extra] [clangd] [Modules] Support Reusable Modules Builder (PR #106683)

kadir çetinkaya via cfe-commits cfe-commits at lists.llvm.org
Mon Nov 4 05:18:07 PST 2024


================
@@ -228,54 +223,30 @@ class StandalonePrerequisiteModules : public PrerequisiteModules {
     return BuiltModuleNames.contains(ModuleName);
   }
 
-  void addModuleFile(llvm::StringRef ModuleName,
-                     llvm::StringRef ModuleFilePath) {
-    RequiredModules.emplace_back(ModuleName, ModuleFilePath);
-    BuiltModuleNames.insert(ModuleName);
+  void addModuleFile(std::shared_ptr<ModuleFile> BMI) {
+    BuiltModuleNames.insert(BMI->ModuleName);
+    RequiredModules.emplace_back(std::move(BMI));
   }
 
 private:
-  llvm::SmallVector<ModuleFile, 8> RequiredModules;
+  mutable llvm::SmallVector<std::shared_ptr<ModuleFile>, 8> RequiredModules;
----------------
kadircet wrote:

> I add the data members of ModuleFile  to be private and we can only access them by the getters. I think this has the same effect.

i don't think it has the same affect. It makes sure code today is adhering to those standards because you and me have context and very careful about the interaction. Tomorrow someone might end up mutating ModuleFiles because the interfaces in builder didn't enforce that and they didn't pay as much attention to subtle shared ownership model.

https://github.com/llvm/llvm-project/pull/106683


More information about the cfe-commits mailing list