[Libreoffice-commits] dev-tools.git: clang/find-unprefixed-members.cxx clang/test.hxx

Miklos Vajna vmiklos at collabora.co.uk
Mon Oct 12 00:10:37 PDT 2015


 clang/find-unprefixed-members.cxx |   23 +++++++++++++----------
 clang/test.hxx                    |    4 ++++
 2 files changed, 17 insertions(+), 10 deletions(-)

New commits:
commit 5b813f18f23a34fcc4855d3cc46934cbf06aada4
Author: Miklos Vajna <vmiklos at 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();
 


More information about the Libreoffice-commits mailing list