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

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

Issue 2655933002: blink_gc_plugin: retire overloaded traceImpl detection and handling. (Closed)
Patch Set: Created 3 years, 11 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_ERROR_H_ 5 #ifndef TRACE_AFTER_DISPATCH_IMPL_ERROR_H_
6 #define TRACE_AFTER_DISPATCH_IMPL_ERROR_H_ 6 #define TRACE_AFTER_DISPATCH_IMPL_ERROR_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) {
30 void TraceAfterDispatch(InlinedGlobalMarkingVisitor visitor) { 29 // No Trace call; should get a warning.
31 TraceAfterDispatchImpl(visitor);
32 } 30 }
33 31
34 private: 32 private:
35 template <typename VisitorDispatcher>
36 void TraceImpl(VisitorDispatcher visitor);
37
38 template <typename VisitorDispatcher>
39 void TraceAfterDispatchImpl(VisitorDispatcher visitor) {
40 // No Trace call; should get a warning.
41 }
42
43 ClassTag tag_; 33 ClassTag tag_;
44 Member<X> x_base_; 34 Member<X> x_base_;
45 }; 35 };
46 36
47 class TraceAfterDispatchInlinedDerived : public TraceAfterDispatchInlinedBase { 37 class TraceAfterDispatchInlinedDerived : public TraceAfterDispatchInlinedBase {
48 public: 38 public:
49 TraceAfterDispatchInlinedDerived() : TraceAfterDispatchInlinedBase(DERIVED) {} 39 TraceAfterDispatchInlinedDerived() : TraceAfterDispatchInlinedBase(DERIVED) {}
50 40
51 void TraceAfterDispatch(Visitor* visitor) { TraceAfterDispatchImpl(visitor); } 41 void TraceAfterDispatch(Visitor* visitor) {
52 void TraceAfterDispatch(InlinedGlobalMarkingVisitor visitor) { 42 // No Trace call (for member and base class).
53 TraceAfterDispatchImpl(visitor);
54 } 43 }
55 44
56 private: 45 private:
57 template <typename VisitorDispatcher>
58 void TraceAfterDispatchImpl(VisitorDispatcher visitor) {
59 // No Trace call (for member and base class).
60 }
61
62 Member<X> x_derived_; 46 Member<X> x_derived_;
63 }; 47 };
64 48
65 class TraceAfterDispatchExternBase 49 class TraceAfterDispatchExternBase
66 : public GarbageCollected<TraceAfterDispatchExternBase> { 50 : public GarbageCollected<TraceAfterDispatchExternBase> {
67 public: 51 public:
68 explicit TraceAfterDispatchExternBase(ClassTag tag) : tag_(tag) {} 52 explicit TraceAfterDispatchExternBase(ClassTag tag) : tag_(tag) {}
69 53
70 void Trace(Visitor* visitor); 54 void Trace(Visitor* visitor);
71 void Trace(InlinedGlobalMarkingVisitor visitor);
72 55
73 void TraceAfterDispatch(Visitor* visitor); 56 void TraceAfterDispatch(Visitor* visitor);
74 void TraceAfterDispatch(InlinedGlobalMarkingVisitor visitor);
75 57
76 private: 58 private:
77 template <typename VisitorDispatcher>
78 void TraceImpl(VisitorDispatcher visitor);
79
80 template <typename VisitorDispatcher>
81 void TraceAfterDispatchImpl(VisitorDispatcher visitor);
82
83 ClassTag tag_; 59 ClassTag tag_;
84 Member<X> x_base_; 60 Member<X> x_base_;
85 }; 61 };
86 62
87 class TraceAfterDispatchExternDerived : public TraceAfterDispatchExternBase { 63 class TraceAfterDispatchExternDerived : public TraceAfterDispatchExternBase {
88 public: 64 public:
89 TraceAfterDispatchExternDerived() : TraceAfterDispatchExternBase(DERIVED) {} 65 TraceAfterDispatchExternDerived() : TraceAfterDispatchExternBase(DERIVED) {}
90 66
91 void TraceAfterDispatch(Visitor* visitor); 67 void TraceAfterDispatch(Visitor* visitor);
92 void TraceAfterDispatch(InlinedGlobalMarkingVisitor visitor);
93 68
94 private: 69 private:
95 template <typename VisitorDispatcher>
96 void TraceAfterDispatchImpl(VisitorDispatcher visitor);
97
98 Member<X> x_derived_; 70 Member<X> x_derived_;
99 }; 71 };
100 72
101 } 73 }
102 74
103 #endif // TRACE_AFTER_DISPATCH_IMPL_ERROR_H_ 75 #endif // TRACE_AFTER_DISPATCH_IMPL_ERROR_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698