diff options
author | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2011-10-28 22:54:31 +0000 |
---|---|---|
committer | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2011-10-28 22:54:31 +0000 |
commit | 407ef9a9286a05bd286174471889295f6615c1b2 (patch) | |
tree | 99887168e39a51e7a90e01fb06efd1c9598ea478 /lib/Frontend/FrontendAction.cpp | |
parent | 6ee54925f709176a33aab4727bc35bea2d05aca4 (diff) |
Make -error-on-deserialized-decl work correctly by correctly delegating to
the previous ASTDeserializationListener.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@143241 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Frontend/FrontendAction.cpp')
-rw-r--r-- | lib/Frontend/FrontendAction.cpp | 52 |
1 files changed, 42 insertions, 10 deletions
diff --git a/lib/Frontend/FrontendAction.cpp b/lib/Frontend/FrontendAction.cpp index ba2d63b026..b5284d8022 100644 --- a/lib/Frontend/FrontendAction.cpp +++ b/lib/Frontend/FrontendAction.cpp @@ -30,37 +30,70 @@ using namespace clang; namespace { -/// \brief Dumps deserialized declarations. -class DeserializedDeclsDumper : public ASTDeserializationListener { +class DelegatingDeserializationListener : public ASTDeserializationListener { ASTDeserializationListener *Previous; public: - DeserializedDeclsDumper(ASTDeserializationListener *Previous) + explicit DelegatingDeserializationListener( + ASTDeserializationListener *Previous) : Previous(Previous) { } + virtual void ReaderInitialized(ASTReader *Reader) { + if (Previous) + Previous->ReaderInitialized(Reader); + } + virtual void IdentifierRead(serialization::IdentID ID, + IdentifierInfo *II) { + if (Previous) + Previous->IdentifierRead(ID, II); + } + virtual void TypeRead(serialization::TypeIdx Idx, QualType T) { + if (Previous) + Previous->TypeRead(Idx, T); + } + virtual void DeclRead(serialization::DeclID ID, const Decl *D) { + if (Previous) + Previous->DeclRead(ID, D); + } + virtual void SelectorRead(serialization::SelectorID ID, Selector Sel) { + if (Previous) + Previous->SelectorRead(ID, Sel); + } + virtual void MacroDefinitionRead(serialization::PreprocessedEntityID PPID, + MacroDefinition *MD) { + if (Previous) + Previous->MacroDefinitionRead(PPID, MD); + } +}; + +/// \brief Dumps deserialized declarations. +class DeserializedDeclsDumper : public DelegatingDeserializationListener { +public: + explicit DeserializedDeclsDumper(ASTDeserializationListener *Previous) + : DelegatingDeserializationListener(Previous) { } + virtual void DeclRead(serialization::DeclID ID, const Decl *D) { llvm::outs() << "PCH DECL: " << D->getDeclKindName(); if (const NamedDecl *ND = dyn_cast<NamedDecl>(D)) llvm::outs() << " - " << ND->getNameAsString(); llvm::outs() << "\n"; - if (Previous) - Previous->DeclRead(ID, D); + DelegatingDeserializationListener::DeclRead(ID, D); } }; /// \brief Checks deserialized declarations and emits error if a name /// matches one given in command-line using -error-on-deserialized-decl. - class DeserializedDeclsChecker : public ASTDeserializationListener { + class DeserializedDeclsChecker : public DelegatingDeserializationListener { ASTContext &Ctx; std::set<std::string> NamesToCheck; - ASTDeserializationListener *Previous; public: DeserializedDeclsChecker(ASTContext &Ctx, const std::set<std::string> &NamesToCheck, ASTDeserializationListener *Previous) - : Ctx(Ctx), NamesToCheck(NamesToCheck), Previous(Previous) { } + : DelegatingDeserializationListener(Previous), + Ctx(Ctx), NamesToCheck(NamesToCheck) { } virtual void DeclRead(serialization::DeclID ID, const Decl *D) { if (const NamedDecl *ND = dyn_cast<NamedDecl>(D)) @@ -72,8 +105,7 @@ public: << ND->getNameAsString(); } - if (Previous) - Previous->DeclRead(ID, D); + DelegatingDeserializationListener::DeclRead(ID, D); } }; |