| Index: tools/clang/blink_gc_plugin/Edge.h
|
| diff --git a/tools/clang/blink_gc_plugin/Edge.h b/tools/clang/blink_gc_plugin/Edge.h
|
| index 91e569867d8fe0ec448a9eb4acb52a5287ae3522..79aa409ca1db5cea3c804aeaa8e9f89efe85e6c9 100644
|
| --- a/tools/clang/blink_gc_plugin/Edge.h
|
| +++ b/tools/clang/blink_gc_plugin/Edge.h
|
| @@ -14,14 +14,16 @@
|
| class RecordInfo;
|
|
|
| class Edge;
|
| -class Value;
|
| +class Collection;
|
| +class CrossThreadPersistent;
|
| +class Member;
|
| +class OwnPtr;
|
| +class Persistent;
|
| class RawPtr;
|
| class RefPtr;
|
| -class OwnPtr;
|
| -class Member;
|
| +class UniquePtr;
|
| +class Value;
|
| class WeakMember;
|
| -class Persistent;
|
| -class Collection;
|
|
|
| // Bare-bones visitor.
|
| class EdgeVisitor {
|
| @@ -31,9 +33,11 @@ class EdgeVisitor {
|
| virtual void VisitRawPtr(RawPtr*) {}
|
| virtual void VisitRefPtr(RefPtr*) {}
|
| virtual void VisitOwnPtr(OwnPtr*) {}
|
| + virtual void VisitUniquePtr(UniquePtr*) {}
|
| virtual void VisitMember(Member*) {}
|
| virtual void VisitWeakMember(WeakMember*) {}
|
| virtual void VisitPersistent(Persistent*) {}
|
| + virtual void VisitCrossThreadPersistent(CrossThreadPersistent*) {}
|
| virtual void VisitCollection(Collection*) {}
|
| };
|
|
|
| @@ -45,9 +49,11 @@ class RecursiveEdgeVisitor : public EdgeVisitor {
|
| void VisitRawPtr(RawPtr*) override;
|
| void VisitRefPtr(RefPtr*) override;
|
| void VisitOwnPtr(OwnPtr*) override;
|
| + void VisitUniquePtr(UniquePtr*) override;
|
| void VisitMember(Member*) override;
|
| void VisitWeakMember(WeakMember*) override;
|
| void VisitPersistent(Persistent*) override;
|
| + void VisitCrossThreadPersistent(CrossThreadPersistent*) override;
|
| void VisitCollection(Collection*) override;
|
|
|
| protected:
|
| @@ -62,9 +68,11 @@ class RecursiveEdgeVisitor : public EdgeVisitor {
|
| virtual void AtRawPtr(RawPtr*);
|
| virtual void AtRefPtr(RefPtr*);
|
| virtual void AtOwnPtr(OwnPtr*);
|
| + virtual void AtUniquePtr(UniquePtr*);
|
| virtual void AtMember(Member*);
|
| virtual void AtWeakMember(WeakMember*);
|
| virtual void AtPersistent(Persistent*);
|
| + virtual void AtCrossThreadPersistent(CrossThreadPersistent*);
|
| virtual void AtCollection(Collection*);
|
|
|
| private:
|
| @@ -89,9 +97,9 @@ class Edge {
|
| virtual bool IsRawPtr() { return false; }
|
| virtual bool IsRefPtr() { return false; }
|
| virtual bool IsOwnPtr() { return false; }
|
| + virtual bool IsUniquePtr() { return false; }
|
| virtual bool IsMember() { return false; }
|
| virtual bool IsWeakMember() { return false; }
|
| - virtual bool IsPersistent() { return false; }
|
| virtual bool IsCollection() { return false; }
|
| };
|
|
|
| @@ -135,7 +143,7 @@ class RawPtr : public PtrEdge {
|
| LivenessKind Kind() { return kWeak; }
|
| bool NeedsFinalization() { return false; }
|
| TracingStatus NeedsTracing(NeedsTracingOption) {
|
| - return TracingStatus::Unneeded();
|
| + return TracingStatus::Illegal();
|
| }
|
| void Accept(EdgeVisitor* visitor) { visitor->VisitRawPtr(this); }
|
|
|
| @@ -151,7 +159,7 @@ class RefPtr : public PtrEdge {
|
| LivenessKind Kind() { return kStrong; }
|
| bool NeedsFinalization() { return true; }
|
| TracingStatus NeedsTracing(NeedsTracingOption) {
|
| - return TracingStatus::Unneeded();
|
| + return TracingStatus::Illegal();
|
| }
|
| void Accept(EdgeVisitor* visitor) { visitor->VisitRefPtr(this); }
|
| };
|
| @@ -163,11 +171,23 @@ class OwnPtr : public PtrEdge {
|
| LivenessKind Kind() { return kStrong; }
|
| bool NeedsFinalization() { return true; }
|
| TracingStatus NeedsTracing(NeedsTracingOption) {
|
| - return TracingStatus::Unneeded();
|
| + return TracingStatus::Illegal();
|
| }
|
| void Accept(EdgeVisitor* visitor) { visitor->VisitOwnPtr(this); }
|
| };
|
|
|
| +class UniquePtr : public PtrEdge {
|
| + public:
|
| + explicit UniquePtr(Edge* ptr) : PtrEdge(ptr) { }
|
| + bool IsUniquePtr() { return true; }
|
| + LivenessKind Kind() { return kStrong; }
|
| + bool NeedsFinalization() { return true; }
|
| + TracingStatus NeedsTracing(NeedsTracingOption) {
|
| + return TracingStatus::Illegal();
|
| + }
|
| + void Accept(EdgeVisitor* visitor) { visitor->VisitUniquePtr(this); }
|
| +};
|
| +
|
| class Member : public PtrEdge {
|
| public:
|
| explicit Member(Edge* ptr) : PtrEdge(ptr) { }
|
| @@ -195,7 +215,6 @@ class WeakMember : public PtrEdge {
|
| class Persistent : public PtrEdge {
|
| public:
|
| explicit Persistent(Edge* ptr) : PtrEdge(ptr) { }
|
| - bool IsPersistent() { return true; }
|
| LivenessKind Kind() { return kRoot; }
|
| bool NeedsFinalization() { return true; }
|
| TracingStatus NeedsTracing(NeedsTracingOption) {
|
| @@ -204,6 +223,19 @@ class Persistent : public PtrEdge {
|
| void Accept(EdgeVisitor* visitor) { visitor->VisitPersistent(this); }
|
| };
|
|
|
| +class CrossThreadPersistent : public PtrEdge {
|
| + public:
|
| + explicit CrossThreadPersistent(Edge* ptr) : PtrEdge(ptr) { }
|
| + LivenessKind Kind() { return kRoot; }
|
| + bool NeedsFinalization() { return true; }
|
| + TracingStatus NeedsTracing(NeedsTracingOption) {
|
| + return TracingStatus::Illegal();
|
| + }
|
| + void Accept(EdgeVisitor* visitor) {
|
| + visitor->VisitCrossThreadPersistent(this);
|
| + }
|
| +};
|
| +
|
| class Collection : public Edge {
|
| public:
|
| typedef std::vector<Edge*> Members;
|
|
|