[clang] [clang] Implement some missing interfaces for DelegatingDeserializationListener (PR #133424)

via cfe-commits cfe-commits at lists.llvm.org
Fri Mar 28 04:10:01 PDT 2025


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-clang-modules

Author: Haojian Wu (hokein)

<details>
<summary>Changes</summary>

Split from the https://github.com/llvm/llvm-project/pull/133395 per the review comment.

This patch also moves the `DelegatingDeserializationListener` close to `ASTDeserializationListener`.

---
Full diff: https://github.com/llvm/llvm-project/pull/133424.diff


2 Files Affected:

- (modified) clang/include/clang/Serialization/ASTDeserializationListener.h (+67-1) 
- (modified) clang/lib/Frontend/FrontendAction.cpp (-46) 


``````````diff
diff --git a/clang/include/clang/Serialization/ASTDeserializationListener.h b/clang/include/clang/Serialization/ASTDeserializationListener.h
index ea96faa07c191..a6abc1e694810 100644
--- a/clang/include/clang/Serialization/ASTDeserializationListener.h
+++ b/clang/include/clang/Serialization/ASTDeserializationListener.h
@@ -27,6 +27,8 @@ class MacroInfo;
 class Module;
 class SourceLocation;
 
+// IMPORTANT: when you add a new interface to this class, please update the
+// DelegatingDeserializationListener below.
 class ASTDeserializationListener {
 public:
   virtual ~ASTDeserializationListener();
@@ -58,6 +60,70 @@ class ASTDeserializationListener {
   virtual void ModuleImportRead(serialization::SubmoduleID ID,
                                 SourceLocation ImportLoc) {}
 };
-}
+
+class DelegatingDeserializationListener : public ASTDeserializationListener {
+  ASTDeserializationListener *Previous;
+  bool DeletePrevious;
+
+public:
+  explicit DelegatingDeserializationListener(
+      ASTDeserializationListener *Previous, bool DeletePrevious)
+      : Previous(Previous), DeletePrevious(DeletePrevious) {}
+  ~DelegatingDeserializationListener() override {
+    if (DeletePrevious)
+      delete Previous;
+  }
+
+  DelegatingDeserializationListener(const DelegatingDeserializationListener &) =
+      delete;
+  DelegatingDeserializationListener &
+  operator=(const DelegatingDeserializationListener &) = delete;
+
+  void ReaderInitialized(ASTReader *Reader) override {
+    if (Previous)
+      Previous->ReaderInitialized(Reader);
+  }
+  void IdentifierRead(serialization::IdentifierID ID,
+                      IdentifierInfo *II) override {
+    if (Previous)
+      Previous->IdentifierRead(ID, II);
+  }
+  void MacroRead(serialization::MacroID ID, MacroInfo *MI) override {
+    if (Previous)
+      Previous->MacroRead(ID, MI);
+  }
+  void TypeRead(serialization::TypeIdx Idx, QualType T) override {
+    if (Previous)
+      Previous->TypeRead(Idx, T);
+  }
+  void DeclRead(GlobalDeclID ID, const Decl *D) override {
+    if (Previous)
+      Previous->DeclRead(ID, D);
+  }
+  void PredefinedDeclBuilt(PredefinedDeclIDs ID, const Decl *D) override {
+    if (Previous)
+      Previous->PredefinedDeclBuilt(ID, D);
+  }
+  void SelectorRead(serialization::SelectorID ID, Selector Sel) override {
+    if (Previous)
+      Previous->SelectorRead(ID, Sel);
+  }
+  void MacroDefinitionRead(serialization::PreprocessedEntityID PPID,
+                           MacroDefinitionRecord *MD) override {
+    if (Previous)
+      Previous->MacroDefinitionRead(PPID, MD);
+  }
+  void ModuleRead(serialization::SubmoduleID ID, Module *Mod) override {
+    if (Previous)
+      Previous->ModuleRead(ID, Mod);
+  }
+  void ModuleImportRead(serialization::SubmoduleID ID,
+                        SourceLocation ImportLoc) override {
+    if (Previous)
+      Previous->ModuleImportRead(ID, ImportLoc);
+  }
+};
+
+} // namespace clang
 
 #endif
diff --git a/clang/lib/Frontend/FrontendAction.cpp b/clang/lib/Frontend/FrontendAction.cpp
index 9f789f093f55d..f6ad7c8dbd7ca 100644
--- a/clang/lib/Frontend/FrontendAction.cpp
+++ b/clang/lib/Frontend/FrontendAction.cpp
@@ -49,52 +49,6 @@ LLVM_INSTANTIATE_REGISTRY(FrontendPluginRegistry)
 
 namespace {
 
-class DelegatingDeserializationListener : public ASTDeserializationListener {
-  ASTDeserializationListener *Previous;
-  bool DeletePrevious;
-
-public:
-  explicit DelegatingDeserializationListener(
-      ASTDeserializationListener *Previous, bool DeletePrevious)
-      : Previous(Previous), DeletePrevious(DeletePrevious) {}
-  ~DelegatingDeserializationListener() override {
-    if (DeletePrevious)
-      delete Previous;
-  }
-
-  DelegatingDeserializationListener(const DelegatingDeserializationListener &) =
-      delete;
-  DelegatingDeserializationListener &
-  operator=(const DelegatingDeserializationListener &) = delete;
-
-  void ReaderInitialized(ASTReader *Reader) override {
-    if (Previous)
-      Previous->ReaderInitialized(Reader);
-  }
-  void IdentifierRead(serialization::IdentifierID ID,
-                      IdentifierInfo *II) override {
-    if (Previous)
-      Previous->IdentifierRead(ID, II);
-  }
-  void TypeRead(serialization::TypeIdx Idx, QualType T) override {
-    if (Previous)
-      Previous->TypeRead(Idx, T);
-  }
-  void DeclRead(GlobalDeclID ID, const Decl *D) override {
-    if (Previous)
-      Previous->DeclRead(ID, D);
-  }
-  void SelectorRead(serialization::SelectorID ID, Selector Sel) override {
-    if (Previous)
-      Previous->SelectorRead(ID, Sel);
-  }
-  void MacroDefinitionRead(serialization::PreprocessedEntityID PPID,
-                           MacroDefinitionRecord *MD) override {
-    if (Previous)
-      Previous->MacroDefinitionRead(PPID, MD);
-  }
-};
-
 /// Dumps deserialized declarations.
 class DeserializedDeclsDumper : public DelegatingDeserializationListener {
 public:

``````````

</details>


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


More information about the cfe-commits mailing list