clang/find-unprefixed-members.cxx | 23 +++++++++++++---------- clang/test.hxx | 4 ++++ 2 files changed, 17 insertions(+), 10 deletions(-)
New commits: commit 5b813f18f23a34fcc4855d3cc46934cbf06aada4 Author: Miklos Vajna <vmik...@collabora.co.uk> Date: Mon Oct 12 09:09:21 2015 +0200 clang: avoid prefixing members of unnamed unions/structs E.g. suggesting SwTOXBase::(anonymous)::nLevel -> m_nLevel is pointless, as it's always accessed as m_aData->nLevel. Problem was that an SwTOXBase ctor whitelisted all SwTOXBase::(anonymouse) members as well. diff --git a/clang/find-unprefixed-members.cxx b/clang/find-unprefixed-members.cxx index 1d5c67f..d8c609c 100644 --- a/clang/find-unprefixed-members.cxx +++ b/clang/find-unprefixed-members.cxx @@ -34,7 +34,9 @@ public: class Visitor : public clang::RecursiveASTVisitor<Visitor> { const Context m_rContext; - std::vector<std::string> m_aResults; + /// List of qualified class name -- member name pairs. + std::vector<std::pair<std::string, std::string>> m_aResults; + /// List of qualified class names which have ctors/dtors/member functions. std::set<std::string> m_aFunctions; public: @@ -43,7 +45,7 @@ public: { } - const std::vector<std::string>& getResults() + const std::vector<std::pair<std::string, std::string>>& getResults() { return m_aResults; } @@ -71,8 +73,8 @@ public: { aName.insert(0, "m_"); std::stringstream ss; - ss << pRecord->getQualifiedNameAsString() << "::" << pDecl->getNameAsString() << "," << aName; - m_aResults.push_back(ss.str()); + ss << pDecl->getNameAsString() << "," << aName; + m_aResults.push_back(std::make_pair(pRecord->getQualifiedNameAsString(), ss.str())); } } @@ -100,8 +102,8 @@ public: { aName.insert(0, "m_"); std::stringstream ss; - ss << pRecord->getQualifiedNameAsString() << "::" << pDecl->getNameAsString() << "," << aName; - m_aResults.push_back(ss.str()); + ss << pDecl->getNameAsString() << "," << aName; + m_aResults.push_back(std::make_pair(pRecord->getQualifiedNameAsString(), ss.str())); } } @@ -148,15 +150,16 @@ public: Visitor aVisitor(m_rContext); aVisitor.TraverseDecl(rContext.getTranslationUnitDecl()); const std::set<std::string>& rFunctions = aVisitor.getFunctions(); - const std::vector<std::string>& rResults = aVisitor.getResults(); + const std::vector<std::pair<std::string, std::string>>& rResults = aVisitor.getResults(); + // Ignore missing prefixes in structs without ctors/dtors/member functions. bool bFound = false; for (const std::string& rFunction : rFunctions) { - for (const std::string& rResult : rResults) + for (const std::pair<std::string, std::string>& rResult : rResults) { - if (rResult.find(rFunction) == 0) + if (rResult.first == rFunction) { - std::cerr << rResult << std::endl; + std::cerr << rResult.first << "::" << rResult.second << std::endl; bFound = true; } } diff --git a/clang/test.hxx b/clang/test.hxx index 78ae7c2..1669b9d 100644 --- a/clang/test.hxx +++ b/clang/test.hxx @@ -10,6 +10,10 @@ public: static const int aS[]; // This is intentionally not initialized explicitly in C::C(). A aA; + union { + int nFoo; + int nBar; + } aUnion; C(); ~C(); _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits