[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