summaryrefslogtreecommitdiff
path: root/compilerplugins/clang/selfinit.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'compilerplugins/clang/selfinit.cxx')
-rw-r--r--compilerplugins/clang/selfinit.cxx41
1 files changed, 31 insertions, 10 deletions
diff --git a/compilerplugins/clang/selfinit.cxx b/compilerplugins/clang/selfinit.cxx
index 35ce37278f2a..3891a5fc724f 100644
--- a/compilerplugins/clang/selfinit.cxx
+++ b/compilerplugins/clang/selfinit.cxx
@@ -7,6 +7,8 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
+#ifndef LO_CLANG_SHARED_PLUGINS
+
#include <vector>
#include "plugin.hxx"
@@ -24,28 +26,45 @@ public:
{
}
- bool TraverseVarDecl(VarDecl* decl)
+ bool PreTraverseVarDecl(VarDecl* decl)
{
decls_.push_back({ decl, decl->getCanonicalDecl() });
- auto const ret = FilteringPlugin::TraverseVarDecl(decl);
+ return true;
+ }
+ bool PostTraverseVarDecl(VarDecl*, bool)
+ {
decls_.pop_back();
+ return true;
+ }
+ bool TraverseVarDecl(VarDecl* decl)
+ {
+ PreTraverseVarDecl(decl);
+ auto const ret = FilteringPlugin::TraverseVarDecl(decl);
+ PostTraverseVarDecl(decl, ret);
return ret;
}
- bool TraverseUnaryExprOrTypeTraitExpr(UnaryExprOrTypeTraitExpr* expr)
+ bool PreTraverseUnaryExprOrTypeTraitExpr(UnaryExprOrTypeTraitExpr* expr)
{
if (expr->getKind() == UETT_SizeOf)
- {
- return true;
- }
- return FilteringPlugin::TraverseUnaryExprOrTypeTraitExpr(expr);
+ return false;
+ return true;
+ }
+ bool TraverseUnaryExprOrTypeTraitExpr(UnaryExprOrTypeTraitExpr* expr)
+ {
+ if (PreTraverseUnaryExprOrTypeTraitExpr(expr))
+ return FilteringPlugin::TraverseUnaryExprOrTypeTraitExpr(expr);
+ return true;
}
- bool TraverseCXXTypeidExpr(CXXTypeidExpr const*) { return true; }
+ bool TraverseCXXTypeidExpr(CXXTypeidExpr*) { return true; }
+ bool PreTraverseCXXTypeidExpr(CXXTypeidExpr*) { return false; }
- bool TraverseCXXNoexceptExpr(CXXNoexceptExpr const*) { return true; }
+ bool TraverseCXXNoexceptExpr(CXXNoexceptExpr*) { return true; }
+ bool PreTraverseCXXNoexceptExpr(CXXNoexceptExpr*) { return false; }
bool TraverseDecltypeTypeLoc(DecltypeTypeLoc) { return true; }
+ bool PreTraverseDecltypeTypeLoc(DecltypeTypeLoc) { return false; }
bool VisitDeclRefExpr(DeclRefExpr const* expr)
{
@@ -82,7 +101,9 @@ private:
std::vector<Decl> decls_;
};
-loplugin::Plugin::Registration<SelfInit> X("selfinit");
+loplugin::Plugin::Registration<SelfInit> selfinit("selfinit");
}
+#endif // LO_CLANG_SHARED_PLUGINS
+
/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */