Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(258)

Side by Side Diff: tools/clang/blink_gc_plugin/tests/trace_after_dispatch_impl.h

Issue 2655933002: blink_gc_plugin: retire overloaded traceImpl detection and handling. (Closed)
Patch Set: Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef TRACE_AFTER_DISPATCH_IMPL_H_ 5 #ifndef TRACE_AFTER_DISPATCH_IMPL_H_
6 #define TRACE_AFTER_DISPATCH_IMPL_H_ 6 #define TRACE_AFTER_DISPATCH_IMPL_H_
7 7
8 #include "heap/stubs.h" 8 #include "heap/stubs.h"
9 9
10 namespace blink { 10 namespace blink {
11 11
12 class X : public GarbageCollected<X> { 12 class X : public GarbageCollected<X> {
13 public: 13 public:
14 void Trace(Visitor*) {} 14 void Trace(Visitor*) {}
15 }; 15 };
16 16
17 enum ClassTag { 17 enum ClassTag {
18 BASE, DERIVED 18 BASE, DERIVED
19 }; 19 };
20 20
21 class TraceAfterDispatchInlinedBase 21 class TraceAfterDispatchInlinedBase
22 : public GarbageCollected<TraceAfterDispatchInlinedBase> { 22 : public GarbageCollected<TraceAfterDispatchInlinedBase> {
23 public: 23 public:
24 explicit TraceAfterDispatchInlinedBase(ClassTag tag) : tag_(tag) {} 24 explicit TraceAfterDispatchInlinedBase(ClassTag tag) : tag_(tag) {}
25 25
26 void Trace(Visitor* visitor) { TraceImpl(visitor); } 26 void Trace(Visitor*);
27 void Trace(InlinedGlobalMarkingVisitor visitor) { TraceImpl(visitor); }
28 27
29 void TraceAfterDispatch(Visitor* visitor) { TraceAfterDispatchImpl(visitor); } 28 void TraceAfterDispatch(Visitor* visitor) { visitor->Trace(x_base_); }
30 void TraceAfterDispatch(InlinedGlobalMarkingVisitor visitor) {
31 TraceAfterDispatchImpl(visitor);
32 }
33 29
34 private: 30 private:
35 template <typename VisitorDispatcher>
36 void TraceImpl(VisitorDispatcher visitor);
37
38 template <typename VisitorDispatcher>
39 void TraceAfterDispatchImpl(VisitorDispatcher visitor) {
40 visitor->Trace(x_base_);
41 }
42
43 ClassTag tag_; 31 ClassTag tag_;
44 Member<X> x_base_; 32 Member<X> x_base_;
45 }; 33 };
46 34
47 class TraceAfterDispatchInlinedDerived : public TraceAfterDispatchInlinedBase { 35 class TraceAfterDispatchInlinedDerived : public TraceAfterDispatchInlinedBase {
48 public: 36 public:
49 TraceAfterDispatchInlinedDerived() : TraceAfterDispatchInlinedBase(DERIVED) {} 37 TraceAfterDispatchInlinedDerived() : TraceAfterDispatchInlinedBase(DERIVED) {}
50 38
51 void TraceAfterDispatch(Visitor* visitor) { TraceAfterDispatchImpl(visitor); } 39 void TraceAfterDispatch(Visitor* visitor) {
52 void TraceAfterDispatch(InlinedGlobalMarkingVisitor visitor) {
53 TraceAfterDispatchImpl(visitor);
54 }
55
56 private:
57 template <typename VisitorDispatcher>
58 void TraceAfterDispatchImpl(VisitorDispatcher visitor) {
59 visitor->Trace(x_derived_); 40 visitor->Trace(x_derived_);
60 TraceAfterDispatchInlinedBase::TraceAfterDispatch(visitor); 41 TraceAfterDispatchInlinedBase::TraceAfterDispatch(visitor);
61 } 42 }
62 43
44 private:
63 Member<X> x_derived_; 45 Member<X> x_derived_;
64 }; 46 };
65 47
66 class TraceAfterDispatchExternBase 48 class TraceAfterDispatchExternBase
67 : public GarbageCollected<TraceAfterDispatchExternBase> { 49 : public GarbageCollected<TraceAfterDispatchExternBase> {
68 public: 50 public:
69 explicit TraceAfterDispatchExternBase(ClassTag tag) : tag_(tag) {} 51 explicit TraceAfterDispatchExternBase(ClassTag tag) : tag_(tag) {}
70 52
71 void Trace(Visitor* visitor); 53 void Trace(Visitor* visitor);
72 void Trace(InlinedGlobalMarkingVisitor visitor);
73 54
74 void TraceAfterDispatch(Visitor* visitor); 55 void TraceAfterDispatch(Visitor* visitor);
75 void TraceAfterDispatch(InlinedGlobalMarkingVisitor visitor);
76 56
77 private: 57 private:
78 template <typename VisitorDispatcher>
79 void TraceImpl(VisitorDispatcher visitor);
80
81 template <typename VisitorDispatcher>
82 void TraceAfterDispatchImpl(VisitorDispatcher visitor);
83
84 ClassTag tag_; 58 ClassTag tag_;
85 Member<X> x_base_; 59 Member<X> x_base_;
86 }; 60 };
87 61
88 class TraceAfterDispatchExternDerived : public TraceAfterDispatchExternBase { 62 class TraceAfterDispatchExternDerived : public TraceAfterDispatchExternBase {
89 public: 63 public:
90 TraceAfterDispatchExternDerived() : TraceAfterDispatchExternBase(DERIVED) {} 64 TraceAfterDispatchExternDerived() : TraceAfterDispatchExternBase(DERIVED) {}
91 65
92 void TraceAfterDispatch(Visitor* visitor); 66 void TraceAfterDispatch(Visitor* visitor);
93 void TraceAfterDispatch(InlinedGlobalMarkingVisitor visitor);
94 67
95 private: 68 private:
96 template <typename VisitorDispatcher>
97 void TraceAfterDispatchImpl(VisitorDispatcher visitor);
98
99 Member<X> x_derived_; 69 Member<X> x_derived_;
100 }; 70 };
101 71
102 } 72 }
103 73
104 #endif // TRACE_AFTER_DISPATCH_IMPL_H_ 74 #endif // TRACE_AFTER_DISPATCH_IMPL_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698