Index: tools/clang/blink_gc_plugin/CollectVisitor.h |
diff --git a/tools/clang/blink_gc_plugin/CollectVisitor.h b/tools/clang/blink_gc_plugin/CollectVisitor.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..a3ccdd8a3311ac605add4fe09e05527b5846c1b2 |
--- /dev/null |
+++ b/tools/clang/blink_gc_plugin/CollectVisitor.h |
@@ -0,0 +1,35 @@ |
+// Copyright 2015 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#ifndef TOOLS_BLINK_GC_PLUGIN_COLLECT_VISITOR_H_ |
+#define TOOLS_BLINK_GC_PLUGIN_COLLECT_VISITOR_H_ |
+ |
+#include <vector> |
+ |
+#include "clang/AST/AST.h" |
+#include "clang/AST/RecursiveASTVisitor.h" |
+ |
+// This visitor collects the entry points for the checker. |
+class CollectVisitor : public clang::RecursiveASTVisitor<CollectVisitor> { |
+ public: |
+ typedef std::vector<clang::CXXRecordDecl*> RecordVector; |
+ typedef std::vector<clang::CXXMethodDecl*> MethodVector; |
+ |
+ CollectVisitor(); |
+ |
+ RecordVector& record_decls(); |
+ MethodVector& trace_decls(); |
+ |
+ // Collect record declarations, including nested declarations. |
+ bool VisitCXXRecordDecl(clang::CXXRecordDecl* record); |
+ |
+ // Collect tracing method definitions, but don't traverse method bodies. |
+ bool VisitCXXMethodDecl(clang::CXXMethodDecl* method); |
+ |
+ private: |
+ RecordVector record_decls_; |
+ MethodVector trace_decls_; |
+}; |
+ |
+#endif // TOOLS_BLINK_GC_PLUGIN_COLLECT_VISITOR_H_ |