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

Side by Side Diff: third_party/WebKit/Source/platform/heap/Handle.h

Issue 1884113002: Remove RawPtr.h (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix HeapTest.Bind expectation Created 4 years, 8 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 /* 1 /*
2 * Copyright (C) 2014 Google Inc. All rights reserved. 2 * Copyright (C) 2014 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 25 matching lines...) Expand all
36 #include "platform/heap/InlinedGlobalMarkingVisitor.h" 36 #include "platform/heap/InlinedGlobalMarkingVisitor.h"
37 #include "platform/heap/PersistentNode.h" 37 #include "platform/heap/PersistentNode.h"
38 #include "platform/heap/ThreadState.h" 38 #include "platform/heap/ThreadState.h"
39 #include "platform/heap/TraceTraits.h" 39 #include "platform/heap/TraceTraits.h"
40 #include "platform/heap/Visitor.h" 40 #include "platform/heap/Visitor.h"
41 #include "wtf/Allocator.h" 41 #include "wtf/Allocator.h"
42 #include "wtf/Atomics.h" 42 #include "wtf/Atomics.h"
43 #include "wtf/Functional.h" 43 #include "wtf/Functional.h"
44 #include "wtf/HashFunctions.h" 44 #include "wtf/HashFunctions.h"
45 #include "wtf/Locker.h" 45 #include "wtf/Locker.h"
46 #include "wtf/RawPtr.h"
47 #include "wtf/RefCounted.h" 46 #include "wtf/RefCounted.h"
48 #include "wtf/TypeTraits.h" 47 #include "wtf/TypeTraits.h"
49 48
50 #if defined(LEAK_SANITIZER) 49 #if defined(LEAK_SANITIZER)
51 #include "wtf/LeakAnnotations.h" 50 #include "wtf/LeakAnnotations.h"
52 #endif 51 #endif
53 52
54 namespace blink { 53 namespace blink {
55 54
56 // Marker used to annotate persistent objects and collections with, 55 // Marker used to annotate persistent objects and collections with,
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
111 checkPointer(); 110 checkPointer();
112 } 111 }
113 112
114 template<typename U> 113 template<typename U>
115 PersistentBase(const Member<U>& other) : m_raw(other) 114 PersistentBase(const Member<U>& other) : m_raw(other)
116 { 115 {
117 initialize(); 116 initialize();
118 checkPointer(); 117 checkPointer();
119 } 118 }
120 119
121 template<typename U>
122 PersistentBase(const RawPtr<U>& other) : m_raw(other.get())
123 {
124 initialize();
125 checkPointer();
126 }
127
128 ~PersistentBase() 120 ~PersistentBase()
129 { 121 {
130 uninitialize(); 122 uninitialize();
131 m_raw = nullptr; 123 m_raw = nullptr;
132 } 124 }
133 125
134 template<typename VisitorDispatcher> 126 template<typename VisitorDispatcher>
135 void trace(VisitorDispatcher visitor) 127 void trace(VisitorDispatcher visitor)
136 { 128 {
137 static_assert(sizeof(T), "T must be fully defined"); 129 static_assert(sizeof(T), "T must be fully defined");
138 static_assert(IsGarbageCollectedType<T>::value, "T needs to be a garbage collected object"); 130 static_assert(IsGarbageCollectedType<T>::value, "T needs to be a garbage collected object");
139 if (weaknessConfiguration == WeakPersistentConfiguration) { 131 if (weaknessConfiguration == WeakPersistentConfiguration) {
140 visitor->registerWeakCell(&m_raw); 132 visitor->registerWeakCell(&m_raw);
141 } else { 133 } else {
142 visitor->mark(m_raw); 134 visitor->mark(m_raw);
143 } 135 }
144 } 136 }
145 137
146 T* release() 138 T* release()
147 { 139 {
148 T* result = m_raw; 140 T* result = m_raw;
149 assign(nullptr); 141 assign(nullptr);
150 return result; 142 return result;
151 } 143 }
152 144
153 void clear() { assign(nullptr); } 145 void clear() { assign(nullptr); }
154 T& operator*() const { return *m_raw; } 146 T& operator*() const { return *m_raw; }
155 bool operator!() const { return !m_raw; } 147 bool operator!() const { return !m_raw; }
156 operator T*() const { return m_raw; } 148 operator T*() const { return m_raw; }
157 operator RawPtr<T>() const { return m_raw; }
158 T* operator->() const { return *this; } 149 T* operator->() const { return *this; }
159 T* get() const { return m_raw; } 150 T* get() const { return m_raw; }
160 151
161 template<typename U> 152 template<typename U>
162 PersistentBase& operator=(U* other) 153 PersistentBase& operator=(U* other)
163 { 154 {
164 assign(other); 155 assign(other);
165 return *this; 156 return *this;
166 } 157 }
167 158
(...skipping 16 matching lines...) Expand all
184 return *this; 175 return *this;
185 } 176 }
186 177
187 template<typename U> 178 template<typename U>
188 PersistentBase& operator=(const Member<U>& other) 179 PersistentBase& operator=(const Member<U>& other)
189 { 180 {
190 assign(other); 181 assign(other);
191 return *this; 182 return *this;
192 } 183 }
193 184
194 template<typename U>
195 PersistentBase& operator=(const RawPtr<U>& other)
196 {
197 assign(other);
198 return *this;
199 }
200
201 #if defined(LEAK_SANITIZER) 185 #if defined(LEAK_SANITIZER)
202 PersistentBase* registerAsStaticReference() 186 PersistentBase* registerAsStaticReference()
203 { 187 {
204 if (m_persistentNode) { 188 if (m_persistentNode) {
205 ASSERT(ThreadState::current()); 189 ASSERT(ThreadState::current());
206 ThreadState::current()->registerStaticPersistentNode(m_persistentNod e); 190 ThreadState::current()->registerStaticPersistentNode(m_persistentNod e);
207 LEAK_SANITIZER_IGNORE_OBJECT(this); 191 LEAK_SANITIZER_IGNORE_OBJECT(this);
208 } 192 }
209 return this; 193 return this;
210 } 194 }
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
306 public: 290 public:
307 Persistent() : Parent() { } 291 Persistent() : Parent() { }
308 Persistent(std::nullptr_t) : Parent(nullptr) { } 292 Persistent(std::nullptr_t) : Parent(nullptr) { }
309 Persistent(T* raw) : Parent(raw) { } 293 Persistent(T* raw) : Parent(raw) { }
310 Persistent(T& raw) : Parent(raw) { } 294 Persistent(T& raw) : Parent(raw) { }
311 Persistent(const Persistent& other) : Parent(other) { } 295 Persistent(const Persistent& other) : Parent(other) { }
312 template<typename U> 296 template<typename U>
313 Persistent(const Persistent<U>& other) : Parent(other) { } 297 Persistent(const Persistent<U>& other) : Parent(other) { }
314 template<typename U> 298 template<typename U>
315 Persistent(const Member<U>& other) : Parent(other) { } 299 Persistent(const Member<U>& other) : Parent(other) { }
316 template<typename U>
317 Persistent(const RawPtr<U>& other) : Parent(other.get()) { }
318 300
319 template<typename U> 301 template<typename U>
320 Persistent& operator=(U* other) 302 Persistent& operator=(U* other)
321 { 303 {
322 Parent::operator=(other); 304 Parent::operator=(other);
323 return *this; 305 return *this;
324 } 306 }
325 307
326 Persistent& operator=(std::nullptr_t) 308 Persistent& operator=(std::nullptr_t)
327 { 309 {
(...skipping 13 matching lines...) Expand all
341 Parent::operator=(other); 323 Parent::operator=(other);
342 return *this; 324 return *this;
343 } 325 }
344 326
345 template<typename U> 327 template<typename U>
346 Persistent& operator=(const Member<U>& other) 328 Persistent& operator=(const Member<U>& other)
347 { 329 {
348 Parent::operator=(other); 330 Parent::operator=(other);
349 return *this; 331 return *this;
350 } 332 }
351
352 template<typename U>
353 Persistent& operator=(const RawPtr<U>& other)
354 {
355 Parent::operator=(other);
356 return *this;
357 }
358 }; 333 };
359 334
360 // WeakPersistent is a way to create a weak pointer from an off-heap object 335 // WeakPersistent is a way to create a weak pointer from an off-heap object
361 // to an on-heap object. The m_raw is automatically cleared when the pointee 336 // to an on-heap object. The m_raw is automatically cleared when the pointee
362 // gets collected. 337 // gets collected.
363 // 338 //
364 // We have to construct and destruct WeakPersistent in the same thread. 339 // We have to construct and destruct WeakPersistent in the same thread.
365 // 340 //
366 // Note that collections of WeakPersistents are not supported. Use a persistent 341 // Note that collections of WeakPersistents are not supported. Use a persistent
367 // collection of WeakMembers instead. 342 // collection of WeakMembers instead.
368 // 343 //
369 // HashSet<WeakPersistent<T>> m_set; // wrong 344 // HashSet<WeakPersistent<T>> m_set; // wrong
370 // PersistentHeapHashSet<WeakMember<T>> m_set; // correct 345 // PersistentHeapHashSet<WeakMember<T>> m_set; // correct
371 template<typename T> 346 template<typename T>
372 class WeakPersistent : public PersistentBase<T, WeakPersistentConfiguration, Sin gleThreadPersistentConfiguration> { 347 class WeakPersistent : public PersistentBase<T, WeakPersistentConfiguration, Sin gleThreadPersistentConfiguration> {
373 typedef PersistentBase<T, WeakPersistentConfiguration, SingleThreadPersisten tConfiguration> Parent; 348 typedef PersistentBase<T, WeakPersistentConfiguration, SingleThreadPersisten tConfiguration> Parent;
374 public: 349 public:
375 WeakPersistent() : Parent() { } 350 WeakPersistent() : Parent() { }
376 WeakPersistent(std::nullptr_t) : Parent(nullptr) { } 351 WeakPersistent(std::nullptr_t) : Parent(nullptr) { }
377 WeakPersistent(T* raw) : Parent(raw) { } 352 WeakPersistent(T* raw) : Parent(raw) { }
378 WeakPersistent(T& raw) : Parent(raw) { } 353 WeakPersistent(T& raw) : Parent(raw) { }
379 WeakPersistent(const WeakPersistent& other) : Parent(other) { } 354 WeakPersistent(const WeakPersistent& other) : Parent(other) { }
380 template<typename U> 355 template<typename U>
381 WeakPersistent(const WeakPersistent<U>& other) : Parent(other) { } 356 WeakPersistent(const WeakPersistent<U>& other) : Parent(other) { }
382 template<typename U> 357 template<typename U>
383 WeakPersistent(const Member<U>& other) : Parent(other) { } 358 WeakPersistent(const Member<U>& other) : Parent(other) { }
384 template<typename U>
385 WeakPersistent(const RawPtr<U>& other) : Parent(other.get()) { }
386 359
387 template<typename U> 360 template<typename U>
388 WeakPersistent& operator=(U* other) 361 WeakPersistent& operator=(U* other)
389 { 362 {
390 Parent::operator=(other); 363 Parent::operator=(other);
391 return *this; 364 return *this;
392 } 365 }
393 366
394 WeakPersistent& operator=(std::nullptr_t) 367 WeakPersistent& operator=(std::nullptr_t)
395 { 368 {
(...skipping 13 matching lines...) Expand all
409 Parent::operator=(other); 382 Parent::operator=(other);
410 return *this; 383 return *this;
411 } 384 }
412 385
413 template<typename U> 386 template<typename U>
414 WeakPersistent& operator=(const Member<U>& other) 387 WeakPersistent& operator=(const Member<U>& other)
415 { 388 {
416 Parent::operator=(other); 389 Parent::operator=(other);
417 return *this; 390 return *this;
418 } 391 }
419
420 template<typename U>
421 WeakPersistent& operator=(const RawPtr<U>& other)
422 {
423 Parent::operator=(other);
424 return *this;
425 }
426 }; 392 };
427 393
428 // Unlike Persistent, we can destruct a CrossThreadPersistent in a thread 394 // Unlike Persistent, we can destruct a CrossThreadPersistent in a thread
429 // different from the construction thread. 395 // different from the construction thread.
430 template<typename T> 396 template<typename T>
431 class CrossThreadPersistent : public PersistentBase<T, NonWeakPersistentConfigur ation, CrossThreadPersistentConfiguration> { 397 class CrossThreadPersistent : public PersistentBase<T, NonWeakPersistentConfigur ation, CrossThreadPersistentConfiguration> {
432 typedef PersistentBase<T, NonWeakPersistentConfiguration, CrossThreadPersist entConfiguration> Parent; 398 typedef PersistentBase<T, NonWeakPersistentConfiguration, CrossThreadPersist entConfiguration> Parent;
433 public: 399 public:
434 CrossThreadPersistent() : Parent() { } 400 CrossThreadPersistent() : Parent() { }
435 CrossThreadPersistent(std::nullptr_t) : Parent(nullptr) { } 401 CrossThreadPersistent(std::nullptr_t) : Parent(nullptr) { }
436 CrossThreadPersistent(T* raw) : Parent(raw) { } 402 CrossThreadPersistent(T* raw) : Parent(raw) { }
437 CrossThreadPersistent(T& raw) : Parent(raw) { } 403 CrossThreadPersistent(T& raw) : Parent(raw) { }
438 CrossThreadPersistent(const CrossThreadPersistent& other) : Parent(other) { } 404 CrossThreadPersistent(const CrossThreadPersistent& other) : Parent(other) { }
439 template<typename U> 405 template<typename U>
440 CrossThreadPersistent(const CrossThreadPersistent<U>& other) : Parent(other) { } 406 CrossThreadPersistent(const CrossThreadPersistent<U>& other) : Parent(other) { }
441 template<typename U> 407 template<typename U>
442 CrossThreadPersistent(const Member<U>& other) : Parent(other) { } 408 CrossThreadPersistent(const Member<U>& other) : Parent(other) { }
443 template<typename U>
444 CrossThreadPersistent(const RawPtr<U>& other) : Parent(other.get()) { }
445 409
446 T* atomicGet() { return Parent::atomicGet(); } 410 T* atomicGet() { return Parent::atomicGet(); }
447 411
448 template<typename U> 412 template<typename U>
449 CrossThreadPersistent& operator=(U* other) 413 CrossThreadPersistent& operator=(U* other)
450 { 414 {
451 Parent::operator=(other); 415 Parent::operator=(other);
452 return *this; 416 return *this;
453 } 417 }
454 418
(...skipping 15 matching lines...) Expand all
470 Parent::operator=(other); 434 Parent::operator=(other);
471 return *this; 435 return *this;
472 } 436 }
473 437
474 template<typename U> 438 template<typename U>
475 CrossThreadPersistent& operator=(const Member<U>& other) 439 CrossThreadPersistent& operator=(const Member<U>& other)
476 { 440 {
477 Parent::operator=(other); 441 Parent::operator=(other);
478 return *this; 442 return *this;
479 } 443 }
480
481 template<typename U>
482 CrossThreadPersistent& operator=(const RawPtr<U>& other)
483 {
484 Parent::operator=(other);
485 return *this;
486 }
487 }; 444 };
488 445
489 // Combines the behavior of CrossThreadPersistent and WeakPersistent. 446 // Combines the behavior of CrossThreadPersistent and WeakPersistent.
490 template<typename T> 447 template<typename T>
491 class CrossThreadWeakPersistent : public PersistentBase<T, WeakPersistentConfigu ration, CrossThreadPersistentConfiguration> { 448 class CrossThreadWeakPersistent : public PersistentBase<T, WeakPersistentConfigu ration, CrossThreadPersistentConfiguration> {
492 typedef PersistentBase<T, WeakPersistentConfiguration, CrossThreadPersistent Configuration> Parent; 449 typedef PersistentBase<T, WeakPersistentConfiguration, CrossThreadPersistent Configuration> Parent;
493 public: 450 public:
494 CrossThreadWeakPersistent() : Parent() { } 451 CrossThreadWeakPersistent() : Parent() { }
495 CrossThreadWeakPersistent(std::nullptr_t) : Parent(nullptr) { } 452 CrossThreadWeakPersistent(std::nullptr_t) : Parent(nullptr) { }
496 CrossThreadWeakPersistent(T* raw) : Parent(raw) { } 453 CrossThreadWeakPersistent(T* raw) : Parent(raw) { }
497 CrossThreadWeakPersistent(T& raw) : Parent(raw) { } 454 CrossThreadWeakPersistent(T& raw) : Parent(raw) { }
498 CrossThreadWeakPersistent(const CrossThreadWeakPersistent& other) : Parent(o ther) { } 455 CrossThreadWeakPersistent(const CrossThreadWeakPersistent& other) : Parent(o ther) { }
499 template<typename U> 456 template<typename U>
500 CrossThreadWeakPersistent(const CrossThreadWeakPersistent<U>& other) : Paren t(other) { } 457 CrossThreadWeakPersistent(const CrossThreadWeakPersistent<U>& other) : Paren t(other) { }
501 template<typename U> 458 template<typename U>
502 CrossThreadWeakPersistent(const Member<U>& other) : Parent(other) { } 459 CrossThreadWeakPersistent(const Member<U>& other) : Parent(other) { }
503 template<typename U>
504 CrossThreadWeakPersistent(const RawPtr<U>& other) : Parent(other.get()) { }
505 460
506 template<typename U> 461 template<typename U>
507 CrossThreadWeakPersistent& operator=(U* other) 462 CrossThreadWeakPersistent& operator=(U* other)
508 { 463 {
509 Parent::operator=(other); 464 Parent::operator=(other);
510 return *this; 465 return *this;
511 } 466 }
512 467
513 CrossThreadWeakPersistent& operator=(std::nullptr_t) 468 CrossThreadWeakPersistent& operator=(std::nullptr_t)
514 { 469 {
(...skipping 13 matching lines...) Expand all
528 Parent::operator=(other); 483 Parent::operator=(other);
529 return *this; 484 return *this;
530 } 485 }
531 486
532 template<typename U> 487 template<typename U>
533 CrossThreadWeakPersistent& operator=(const Member<U>& other) 488 CrossThreadWeakPersistent& operator=(const Member<U>& other)
534 { 489 {
535 Parent::operator=(other); 490 Parent::operator=(other);
536 return *this; 491 return *this;
537 } 492 }
538
539 template<typename U>
540 CrossThreadWeakPersistent& operator=(const RawPtr<U>& other)
541 {
542 Parent::operator=(other);
543 return *this;
544 }
545 }; 493 };
546 494
547 template<typename Collection> 495 template<typename Collection>
548 class PersistentHeapCollectionBase : public Collection { 496 class PersistentHeapCollectionBase : public Collection {
549 // We overload the various new and delete operators with using the WTF Parti tionAllocator to ensure persistent 497 // We overload the various new and delete operators with using the WTF Parti tionAllocator to ensure persistent
550 // heap collections are always allocated off-heap. This allows persistent co llections to be used in 498 // heap collections are always allocated off-heap. This allows persistent co llections to be used in
551 // DEFINE_STATIC_LOCAL et. al. 499 // DEFINE_STATIC_LOCAL et. al.
552 WTF_USE_ALLOCATOR(PersistentHeapCollectionBase, WTF::PartitionAllocator); 500 WTF_USE_ALLOCATOR(PersistentHeapCollectionBase, WTF::PartitionAllocator);
553 IS_PERSISTENT_REFERENCE_TYPE(); 501 IS_PERSISTENT_REFERENCE_TYPE();
554 public: 502 public:
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after
724 Member(T* raw) : m_raw(raw) 672 Member(T* raw) : m_raw(raw)
725 { 673 {
726 checkPointer(); 674 checkPointer();
727 } 675 }
728 676
729 explicit Member(T& raw) : m_raw(&raw) 677 explicit Member(T& raw) : m_raw(&raw)
730 { 678 {
731 checkPointer(); 679 checkPointer();
732 } 680 }
733 681
734 template<typename U>
735 Member(const RawPtr<U>& other) : m_raw(other.get())
736 {
737 checkPointer();
738 }
739
740 Member(WTF::HashTableDeletedValueType) : m_raw(reinterpret_cast<T*>(-1)) 682 Member(WTF::HashTableDeletedValueType) : m_raw(reinterpret_cast<T*>(-1))
741 { 683 {
742 } 684 }
743 685
744 bool isHashTableDeletedValue() const { return m_raw == reinterpret_cast<T*>( -1); } 686 bool isHashTableDeletedValue() const { return m_raw == reinterpret_cast<T*>( -1); }
745 687
746 template<typename U> 688 template<typename U>
747 Member(const Persistent<U>& other) : m_raw(other) 689 Member(const Persistent<U>& other) : m_raw(other)
748 { 690 {
749 checkPointer(); 691 checkPointer();
(...skipping 16 matching lines...) Expand all
766 m_raw = nullptr; 708 m_raw = nullptr;
767 return result; 709 return result;
768 } 710 }
769 711
770 bool operator!() const { return !m_raw; } 712 bool operator!() const { return !m_raw; }
771 713
772 operator T*() const { return m_raw; } 714 operator T*() const { return m_raw; }
773 715
774 T* operator->() const { return m_raw; } 716 T* operator->() const { return m_raw; }
775 T& operator*() const { return *m_raw; } 717 T& operator*() const { return *m_raw; }
776 template<typename U>
777 operator RawPtr<U>() const { return m_raw; }
778 718
779 template<typename U> 719 template<typename U>
780 Member& operator=(const Persistent<U>& other) 720 Member& operator=(const Persistent<U>& other)
781 { 721 {
782 m_raw = other; 722 m_raw = other;
783 checkPointer(); 723 checkPointer();
784 return *this; 724 return *this;
785 } 725 }
786 726
787 template<typename U> 727 template<typename U>
788 Member& operator=(const Member<U>& other) 728 Member& operator=(const Member<U>& other)
789 { 729 {
790 m_raw = other; 730 m_raw = other;
791 checkPointer(); 731 checkPointer();
792 return *this; 732 return *this;
793 } 733 }
794 734
795 template<typename U> 735 template<typename U>
796 Member& operator=(U* other) 736 Member& operator=(U* other)
797 { 737 {
798 m_raw = other; 738 m_raw = other;
799 checkPointer(); 739 checkPointer();
800 return *this; 740 return *this;
801 } 741 }
802 742
803 template<typename U>
804 Member& operator=(RawPtr<U> other)
805 {
806 m_raw = other;
807 checkPointer();
808 return *this;
809 }
810
811 Member& operator=(std::nullptr_t) 743 Member& operator=(std::nullptr_t)
812 { 744 {
813 m_raw = nullptr; 745 m_raw = nullptr;
814 return *this; 746 return *this;
815 } 747 }
816 748
817 void swap(Member<T>& other) 749 void swap(Member<T>& other)
818 { 750 {
819 std::swap(m_raw, other.m_raw); 751 std::swap(m_raw, other.m_raw);
820 checkPointer(); 752 checkPointer();
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
900 } 832 }
901 833
902 template<typename U> 834 template<typename U>
903 WeakMember& operator=(U* other) 835 WeakMember& operator=(U* other)
904 { 836 {
905 this->m_raw = other; 837 this->m_raw = other;
906 this->checkPointer(); 838 this->checkPointer();
907 return *this; 839 return *this;
908 } 840 }
909 841
910 template<typename U>
911 WeakMember& operator=(const RawPtr<U>& other)
912 {
913 this->m_raw = other;
914 this->checkPointer();
915 return *this;
916 }
917
918 WeakMember& operator=(std::nullptr_t) 842 WeakMember& operator=(std::nullptr_t)
919 { 843 {
920 this->m_raw = nullptr; 844 this->m_raw = nullptr;
921 return *this; 845 return *this;
922 } 846 }
923 847
924 private: 848 private:
925 T** cell() const { return const_cast<T**>(&this->m_raw); } 849 T** cell() const { return const_cast<T**>(&this->m_raw); }
926 850
927 template<typename Derived> friend class VisitorHelper; 851 template<typename Derived> friend class VisitorHelper;
(...skipping 10 matching lines...) Expand all
938 template<typename T> 862 template<typename T>
939 class UntracedMember final : public Member<T> { 863 class UntracedMember final : public Member<T> {
940 public: 864 public:
941 UntracedMember() : Member<T>() { } 865 UntracedMember() : Member<T>() { }
942 866
943 UntracedMember(std::nullptr_t) : Member<T>(nullptr) { } 867 UntracedMember(std::nullptr_t) : Member<T>(nullptr) { }
944 868
945 UntracedMember(T* raw) : Member<T>(raw) { } 869 UntracedMember(T* raw) : Member<T>(raw) { }
946 870
947 template<typename U> 871 template<typename U>
948 UntracedMember(const RawPtr<U>& other) : Member<T>(other) { }
949
950 template<typename U>
951 UntracedMember(const Persistent<U>& other) : Member<T>(other) { } 872 UntracedMember(const Persistent<U>& other) : Member<T>(other) { }
952 873
953 template<typename U> 874 template<typename U>
954 UntracedMember(const Member<U>& other) : Member<T>(other) { } 875 UntracedMember(const Member<U>& other) : Member<T>(other) { }
955 876
956 UntracedMember(WTF::HashTableDeletedValueType x) : Member<T>(x) { } 877 UntracedMember(WTF::HashTableDeletedValueType x) : Member<T>(x) { }
957 878
958 template<typename U> 879 template<typename U>
959 UntracedMember& operator=(const Persistent<U>& other) 880 UntracedMember& operator=(const Persistent<U>& other)
960 { 881 {
(...skipping 11 matching lines...) Expand all
972 } 893 }
973 894
974 template<typename U> 895 template<typename U>
975 UntracedMember& operator=(U* other) 896 UntracedMember& operator=(U* other)
976 { 897 {
977 this->m_raw = other; 898 this->m_raw = other;
978 this->checkPointer(); 899 this->checkPointer();
979 return *this; 900 return *this;
980 } 901 }
981 902
982 template<typename U>
983 UntracedMember& operator=(const RawPtr<U>& other)
984 {
985 this->m_raw = other;
986 this->checkPointer();
987 return *this;
988 }
989
990 UntracedMember& operator=(std::nullptr_t) 903 UntracedMember& operator=(std::nullptr_t)
991 { 904 {
992 this->m_raw = nullptr; 905 this->m_raw = nullptr;
993 return *this; 906 return *this;
994 } 907 }
995 }; 908 };
996 909
997 // Comparison operators between (Weak)Members, Persistents, and UntracedMembers. 910 // Comparison operators between (Weak)Members, Persistents, and UntracedMembers.
998 template<typename T, typename U> inline bool operator==(const Member<T>& a, cons t Member<U>& b) { return a.get() == b.get(); } 911 template<typename T, typename U> inline bool operator==(const Member<T>& a, cons t Member<U>& b) { return a.get() == b.get(); }
999 template<typename T, typename U> inline bool operator!=(const Member<T>& a, cons t Member<U>& b) { return a.get() != b.get(); } 912 template<typename T, typename U> inline bool operator!=(const Member<T>& a, cons t Member<U>& b) { return a.get() != b.get(); }
1000 template<typename T, typename U> inline bool operator==(const Persistent<T>& a, const Persistent<U>& b) { return a.get() == b.get(); } 913 template<typename T, typename U> inline bool operator==(const Persistent<T>& a, const Persistent<U>& b) { return a.get() == b.get(); }
1001 template<typename T, typename U> inline bool operator!=(const Persistent<T>& a, const Persistent<U>& b) { return a.get() != b.get(); } 914 template<typename T, typename U> inline bool operator!=(const Persistent<T>& a, const Persistent<U>& b) { return a.get() != b.get(); }
1002 915
1003 template<typename T, typename U> inline bool operator==(const Member<T>& a, cons t Persistent<U>& b) { return a.get() == b.get(); } 916 template<typename T, typename U> inline bool operator==(const Member<T>& a, cons t Persistent<U>& b) { return a.get() == b.get(); }
1004 template<typename T, typename U> inline bool operator!=(const Member<T>& a, cons t Persistent<U>& b) { return a.get() != b.get(); } 917 template<typename T, typename U> inline bool operator!=(const Member<T>& a, cons t Persistent<U>& b) { return a.get() != b.get(); }
1005 template<typename T, typename U> inline bool operator==(const Persistent<T>& a, const Member<U>& b) { return a.get() == b.get(); } 918 template<typename T, typename U> inline bool operator==(const Persistent<T>& a, const Member<U>& b) { return a.get() == b.get(); }
1006 template<typename T, typename U> inline bool operator!=(const Persistent<T>& a, const Member<U>& b) { return a.get() != b.get(); } 919 template<typename T, typename U> inline bool operator!=(const Persistent<T>& a, const Member<U>& b) { return a.get() != b.get(); }
1007 920
1008 template<typename T, bool = IsGarbageCollectedType<T>::value> 921 template<typename T, bool = IsGarbageCollectedType<T>::value>
1009 class RawPtrOrMemberTrait { 922 class RawPtrOrMemberTrait {
1010 STATIC_ONLY(RawPtrOrMemberTrait) 923 STATIC_ONLY(RawPtrOrMemberTrait)
1011 public: 924 public:
1012 using Type = RawPtr<T>; 925 using Type = T*;
1013 }; 926 };
1014 927
1015 template<typename T> 928 template<typename T>
1016 class RawPtrOrMemberTrait<T, true> { 929 class RawPtrOrMemberTrait<T, true> {
1017 STATIC_ONLY(RawPtrOrMemberTrait) 930 STATIC_ONLY(RawPtrOrMemberTrait)
1018 public: 931 public:
1019 using Type = Member<T>; 932 using Type = Member<T>;
1020 }; 933 };
1021 934
1022 // Abstraction for injecting calls to an object's 'dispose()' method 935 // Abstraction for injecting calls to an object's 'dispose()' method
(...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after
1253 static T* unwrap(const StorageType& value) { return value.get(); } 1166 static T* unwrap(const StorageType& value) { return value.get(); }
1254 }; 1167 };
1255 1168
1256 template<typename T> 1169 template<typename T>
1257 struct ParamStorageTraits<T*> : public PointerParamStorageTraits<T*, blink::IsGa rbageCollectedType<T>::value> { 1170 struct ParamStorageTraits<T*> : public PointerParamStorageTraits<T*, blink::IsGa rbageCollectedType<T>::value> {
1258 STATIC_ONLY(ParamStorageTraits); 1171 STATIC_ONLY(ParamStorageTraits);
1259 static_assert(sizeof(T), "T must be fully defined"); 1172 static_assert(sizeof(T), "T must be fully defined");
1260 }; 1173 };
1261 1174
1262 template<typename T> 1175 template<typename T>
1263 struct ParamStorageTraits<RawPtr<T>> : public PointerParamStorageTraits<T*, blin k::IsGarbageCollectedType<T>::value> {
1264 STATIC_ONLY(ParamStorageTraits);
1265 static_assert(sizeof(T), "T must be fully defined");
1266 };
1267
1268 template<typename T>
1269 struct ParamStorageTraits<blink::WeakPersistentThisPointer<T>> { 1176 struct ParamStorageTraits<blink::WeakPersistentThisPointer<T>> {
1270 STATIC_ONLY(ParamStorageTraits); 1177 STATIC_ONLY(ParamStorageTraits);
1271 static_assert(sizeof(T), "T must be fully defined"); 1178 static_assert(sizeof(T), "T must be fully defined");
1272 using StorageType = blink::WeakPersistent<T>; 1179 using StorageType = blink::WeakPersistent<T>;
1273 1180
1274 static StorageType wrap(const blink::WeakPersistentThisPointer<T>& value) { return value.value(); } 1181 static StorageType wrap(const blink::WeakPersistentThisPointer<T>& value) { return value.value(); }
1275 1182
1276 // WTF::FunctionWrapper<> handles WeakPtr<>, so recast this weak persistent 1183 // WTF::FunctionWrapper<> handles WeakPtr<>, so recast this weak persistent
1277 // into it. 1184 // into it.
1278 // 1185 //
(...skipping 14 matching lines...) Expand all
1293 // into it. 1200 // into it.
1294 // 1201 //
1295 // TODO(sof): remove this hack once wtf/Functional.h can also work with a ty pe like 1202 // TODO(sof): remove this hack once wtf/Functional.h can also work with a ty pe like
1296 // CrossThreadWeakPersistent<>. 1203 // CrossThreadWeakPersistent<>.
1297 static WeakPtr<T> unwrap(const StorageType& value) { return WeakPtr<T>(WeakR eference<T>::create(value.get())); } 1204 static WeakPtr<T> unwrap(const StorageType& value) { return WeakPtr<T>(WeakR eference<T>::create(value.get())); }
1298 }; 1205 };
1299 1206
1300 } // namespace WTF 1207 } // namespace WTF
1301 1208
1302 #endif 1209 #endif
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/platform/heap/BlinkGCAPIReference.md ('k') | third_party/WebKit/Source/platform/heap/Heap.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698