Index: tools/clang/blink_gc_plugin/CheckGCRootsVisitor.h |
diff --git a/tools/clang/blink_gc_plugin/CheckGCRootsVisitor.h b/tools/clang/blink_gc_plugin/CheckGCRootsVisitor.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..b3cede16f9109ad7cd2554cd6be228b4c786804b |
--- /dev/null |
+++ b/tools/clang/blink_gc_plugin/CheckGCRootsVisitor.h |
@@ -0,0 +1,38 @@ |
+// 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_CHECK_GC_ROOTS_VISITOR_H_ |
+#define TOOLS_BLINK_GC_PLUGIN_CHECK_GC_ROOTS_VISITOR_H_ |
+ |
+#include <set> |
+#include <vector> |
+ |
+#include "Edge.h" |
+#include "RecordInfo.h" |
+ |
+// This visitor checks that the fields of a class and the fields of |
+// its part objects don't define GC roots. |
+class CheckGCRootsVisitor : public RecursiveEdgeVisitor { |
+ public: |
+ typedef std::vector<FieldPoint*> RootPath; |
+ typedef std::set<RecordInfo*> VisitingSet; |
+ typedef std::vector<RootPath> Errors; |
+ |
+ CheckGCRootsVisitor(); |
+ |
+ Errors& gc_roots(); |
+ |
+ bool ContainsGCRoots(RecordInfo* info); |
+ |
+ void VisitValue(Value* edge) override; |
+ void VisitPersistent(Persistent* edge) override; |
+ void AtCollection(Collection* edge) override; |
+ |
+ private: |
+ RootPath current_; |
+ VisitingSet visiting_set_; |
+ Errors gc_roots_; |
+}; |
+ |
+#endif // TOOLS_BLINK_GC_PLUGIN_CHECK_GC_ROOTS_VISITOR_H_ |