OLD | NEW |
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 namespace blink { | 5 namespace blink { |
6 | 6 |
7 // Note: do not add any copy or move constructors to this class: doing so will | 7 // Note: do not add any copy or move constructors to this class: doing so will |
8 // break test coverage that we don't clobber the class name by trying to emit | 8 // break test coverage that we don't clobber the class name by trying to emit |
9 // replacements for synthesized functions. | 9 // replacements for synthesized functions. |
10 class C { | 10 class C { |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
83 class TypeTrait2 { | 83 class TypeTrait2 { |
84 public: | 84 public: |
85 static const bool value = false; | 85 static const bool value = false; |
86 }; | 86 }; |
87 template <> | 87 template <> |
88 class TypeTrait2<void> { | 88 class TypeTrait2<void> { |
89 public: | 89 public: |
90 static const bool value = false; | 90 static const bool value = false; |
91 }; | 91 }; |
92 | 92 |
| 93 template <typename T, typename U> |
| 94 struct IsSubclass { |
| 95 private: |
| 96 typedef char YesType; |
| 97 struct NoType { |
| 98 char padding[8]; |
| 99 }; |
| 100 |
| 101 static YesType subclassCheck(U*); |
| 102 static NoType subclassCheck(...); |
| 103 static T* t; |
| 104 |
| 105 public: |
| 106 static const bool value = sizeof(subclassCheck(t)) == sizeof(YesType); |
| 107 }; |
| 108 |
| 109 template <typename U = void> |
| 110 struct IsTraceableInCollection { |
| 111 // Expanded from STATIC_ONLY(IsTraceableInCollection): |
| 112 private: |
| 113 IsTraceableInCollection() = delete; |
| 114 IsTraceableInCollection(const IsTraceableInCollection&) = delete; |
| 115 IsTraceableInCollection& operator=(const IsTraceableInCollection&) = delete; |
| 116 void* operator new(unsigned long) = delete; |
| 117 void* operator new(unsigned long, void*) = delete; |
| 118 |
| 119 public: |
| 120 static const bool value = true; |
| 121 }; |
| 122 |
93 }; // namespace WTF | 123 }; // namespace WTF |
94 | 124 |
95 void F() { | 125 void F() { |
96 // Test that references to a static field are correctly rewritten. | 126 // Test that references to a static field are correctly rewritten. |
97 blink::C::instanceCount++; | 127 blink::C::instanceCount++; |
98 // Force instantiation of a copy constructor for blink::C to make sure field | 128 // Force instantiation of a copy constructor for blink::C to make sure field |
99 // initializers for synthesized functions don't cause weird rewrites. | 129 // initializers for synthesized functions don't cause weird rewrites. |
100 blink::C c; | 130 blink::C c; |
101 blink::C c2 = c; | 131 blink::C c2 = c; |
102 | 132 |
103 bool b1 = WTF::TypeTrait1::value; | 133 bool b1 = WTF::TypeTrait1::value; |
104 bool b2 = WTF::TypeTrait2<void>::value; | 134 bool b2 = WTF::TypeTrait2<void>::value; |
105 } | 135 } |
OLD | NEW |