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

Side by Side Diff: Source/heap/Handle.h

Issue 168963003: Make WebPrivatePtr capable of wrapping garbage collected objects. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Update transition type comment Created 6 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
« no previous file with comments | « no previous file | Source/modules/speech/SpeechGrammar.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 492 matching lines...) Expand 10 before | Expand all | Expand 10 after
503 ASSERT(this == static_cast<PersistentNode*>(this)); 503 ASSERT(this == static_cast<PersistentNode*>(this));
504 const char* n = FieldAnnotationBase::fromAddress(this); 504 const char* n = FieldAnnotationBase::fromAddress(this);
505 return n ? n : "CollectionPersistent"; 505 return n ? n : "CollectionPersistent";
506 } 506 }
507 #endif 507 #endif
508 508
509 private: 509 private:
510 Collection m_collection; 510 Collection m_collection;
511 }; 511 };
512 512
513 // Template aliases for the transition period where we want to support 513 // CPP-defined type names for the transition period where we want to
514 // both reference counting and garbage collection based on a 514 // support both reference counting and garbage collection based on a
515 // compile-time flag. 515 // compile-time flag.
516 // 516 //
517 // With clang we can use c++11 template aliases which is really what 517 // [
Mads Ager (chromium) 2014/02/18 09:15:39 I would remove the '[' and ']' here.
518 // we want. For GCC and MSVC we simulate the template aliases with 518 // C++11 template aliases were initially used (with clang only, not
519 // stylized macros until we can use template aliases. 519 // with GCC nor MSVC.) However, supporting both CPP defines and
520 // template aliases is problematic from outside a WebCore namespace
521 // when Oilpan is disabled: e.g.,
522 // WebCore::RefCountedWillBeGarbageCollected as a template alias would
523 // uniquely resolve from within any namespace, but if it is backed by
524 // a CPP #define, it would expand to WebCore::RefCounted, and not the
525 // required WTF::RefCounted.
526 //
527 // Having the CPP expansion instead be fully namespace qualified, and the
528 // transition type be unqualified, would dually not work for template
529 // aliases. So, slightly unfortunately, fall back/down to the lowest
530 // commmon denominator of using CPP macros only.
531 // ]
520 #if ENABLE(OILPAN) 532 #if ENABLE(OILPAN)
521 533 #define PassRefPtrWillBeRawPtr WTF::RawPtr
522 #if COMPILER(CLANG) 534 #define RefCountedWillBeGarbageCollected WebCore::GarbageCollected
523 template<typename T> using PassRefPtrWillBeRawPtr = RawPtr<T>; 535 #define RefCountedWillBeGarbageCollectedFinalized WebCore::GarbageCollectedFinal ized
524 template<typename T> using RefCountedWillBeGarbageCollected = GarbageCollected<T >; 536 #define RefCountedWillBeRefCountedGarbageCollected WebCore::RefCountedGarbageCol lected
525 template<typename T> using RefCountedWillBeGarbageCollectedFinalized = GarbageCo llectedFinalized<T>; 537 #define RefPtrWillBePersistent WebCore::Persistent
526 template<typename T> using RefCountedWillBeRefCountedGarbageCollected = RefCount edGarbageCollected<T>; 538 #define RefPtrWillBeRawPtr WTF::RawPtr
527 template<typename T> using RefPtrWillBePersistent = Persistent<T>; 539 #define RefPtrWillBeMember WebCore::Member
528 template<typename T> using RefPtrWillBeRawPtr = RawPtr<T>; 540 #define RawPtrWillBeMember WebCore::Member
529 template<typename T> using RefPtrWillBeMember = Member<T>; 541 #define RawPtrWillBeWeakMember WebCore::WeakMember
530 template<typename T> using RawPtrWillBeMember = Member<T>; 542 #define OwnPtrWillBeMember WebCore::Member
531 template<typename T> using RawPtrWillBeWeakMember = WeakMember<T>; 543 #define PassOwnPtrWillBeRawPtr WTF::RawPtr
532 template<typename T> using OwnPtrWillBeMember = Member<T>; 544 #define NoBaseWillBeGarbageCollected WebCore::GarbageCollected
533 template<typename T> using PassOwnPtrWillBeRawPtr = RawPtr<T>; 545 #define NoBaseWillBeGarbageCollectedFinalized WebCore::GarbageCollectedFinalized
534 template<typename T> using NoBaseWillBeGarbageCollected = GarbageCollected<T>; 546 #define WillBeHeapHashMap WebCore::HeapHashMap
535 template<typename T> using NoBaseWillBeGarbageCollectedFinalized = GarbageCollec tedFinalized<T>; 547 #define WillBePersistentHeapHashMap WebCore::PersistentHeapHashMap
536 template< 548 #define WillBeHeapHashSet WebCore::HeapHashSet
537 typename K, 549 #define WillBePersistentHeapHashSet WebCore::PersistentHeapHashSet
538 typename V, 550 #define WillBeHeapVector WebCore::HeapVector
539 typename H = typename DefaultHash<K>::Hash, 551 #define WillBePersistentHeapVector WebCore::PersistentHeapVector
540 typename KT = HashTraits<K>,
541 typename VT = HashTraits<V> >
542 using WillBeHeapHashMap = HeapHashMap<K, V, H, KT, VT>;
543 template<
544 typename K,
545 typename V,
546 typename H = typename DefaultHash<K>::Hash,
547 typename KT = HashTraits<K>,
548 typename VT = HashTraits<V> >
549 using WillBePersistentHeapHashMap = PersistentHeapHashMap<K, V, H, KT, VT>;
550 template<
551 typename V,
552 typename H = typename DefaultHash<V>::Hash,
553 typename T = HashTraits<V> >
554 using WillBeHeapHashSet = HeapHashSet<V, H, T>;
555 template<
556 typename V,
557 typename H = typename DefaultHash<V>::Hash,
558 typename T = HashTraits<V> >
559 using WillBePersistentHeapHashSet = PersistentHeapHashSet<V, H, T>;
560 template<typename T, size_t inlineCapacity = 0>
561 using WillBeHeapVector = HeapVector<T, inlineCapacity>;
562 template<typename T, size_t inlineCapacity = 0>
563 using WillBePersistentHeapVector = PersistentHeapVector<T, inlineCapacity>;
564 #else // !COMPILER(CLANG)
565 #define PassRefPtrWillBeRawPtr RawPtr
566 #define RefCountedWillBeGarbageCollected GarbageCollected
567 #define RefCountedWillBeGarbageCollectedFinalized GarbageCollectedFinalized
568 #define RefCountedWillBeRefCountedGarbageCollected RefCountedGarbageCollected
569 #define RefPtrWillBePersistent Persistent
570 #define RefPtrWillBeRawPtr RawPtr
571 #define RefPtrWillBeMember Member
572 #define RawPtrWillBeMember Member
573 #define RawPtrWillBeWeakMember WeakMember
574 #define OwnPtrWillBeMember Member
575 #define PassOwnPtrWillBeRawPtr RawPtr
576 #define NoBaseWillBeGarbageCollected GarbageCollected
577 #define NoBaseWillBeGarbageCollectedFinalized GarbageCollectedFinalized
578 #define WillBeHeapHashMap HeapHashMap
579 #define WillBePersistentHeapHashMap PersistentHeapHashMap
580 #define WillBeHeapHashSet HeapHashSet
581 #define WillBePersistentHeapHashSet PersistentHeapHashSet
582 #define WillBeHeapVector HeapVector
583 #define WillBePersistentHeapVector PersistentHeapVector
584 #endif // COMPILER(CLANG)
585 552
586 template<typename T> PassRefPtrWillBeRawPtr<T> adoptRefWillBeNoop(T* ptr) 553 template<typename T> PassRefPtrWillBeRawPtr<T> adoptRefWillBeNoop(T* ptr)
587 { 554 {
588 static const bool notRefCountedGarbageCollected = !WTF::IsSubclassOfTemplate <T, RefCountedGarbageCollected>::value; 555 static const bool notRefCountedGarbageCollected = !WTF::IsSubclassOfTemplate <T, RefCountedGarbageCollected>::value;
589 static const bool notRefCounted = !WTF::IsSubclassOfTemplate<T, RefCounted>: :value; 556 static const bool notRefCounted = !WTF::IsSubclassOfTemplate<T, RefCounted>: :value;
590 COMPILE_ASSERT(notRefCountedGarbageCollected, useAdoptRefCountedWillBeRefCou ntedGarbageCollected); 557 COMPILE_ASSERT(notRefCountedGarbageCollected, useAdoptRefCountedWillBeRefCou ntedGarbageCollected);
591 COMPILE_ASSERT(notRefCounted, youMustAdopt); 558 COMPILE_ASSERT(notRefCounted, youMustAdopt);
592 return PassRefPtrWillBeRawPtr<T>(ptr); 559 return PassRefPtrWillBeRawPtr<T>(ptr);
593 } 560 }
594 561
(...skipping 17 matching lines...) Expand all
612 579
613 #else // !ENABLE(OILPAN) 580 #else // !ENABLE(OILPAN)
614 581
615 template<typename T> 582 template<typename T>
616 class DummyBase { 583 class DummyBase {
617 public: 584 public:
618 DummyBase() { } 585 DummyBase() { }
619 ~DummyBase() { } 586 ~DummyBase() { }
620 }; 587 };
621 588
622 #if COMPILER(CLANG) 589 #define PassRefPtrWillBeRawPtr WTF::PassRefPtr
623 template<typename T> using PassRefPtrWillBeRawPtr = PassRefPtr<T>; 590 #define RefCountedWillBeGarbageCollected WTF::RefCounted
624 template<typename T> using RefCountedWillBeGarbageCollected = RefCounted<T>; 591 #define RefCountedWillBeGarbageCollectedFinalized WTF::RefCounted
625 template<typename T> using RefCountedWillBeGarbageCollectedFinalized = RefCounte d<T>; 592 #define RefCountedWillBeRefCountedGarbageCollected WTF::RefCounted
626 template<typename T> using RefCountedWillBeRefCountedGarbageCollected = RefCount ed<T>; 593 #define RefPtrWillBePersistent WTF::RefPtr
627 template<typename T> using RefPtrWillBePersistent = RefPtr<T>; 594 #define RefPtrWillBeRawPtr WTF::RefPtr
628 template<typename T> using RefPtrWillBeRawPtr = RefPtr<T>; 595 #define RefPtrWillBeMember WTF::RefPtr
629 template<typename T> using RefPtrWillBeMember = RefPtr<T>; 596 #define RawPtrWillBeMember WTF::RawPtr
630 template<typename T> using RawPtrWillBeMember = RawPtr<T>; 597 #define RawPtrWillBeWeakMember WTF::RawPtr
631 template<typename T> using RawPtrWillBeWeakMember = RawPtr<T>; 598 #define OwnPtrWillBeMember WTF::OwnPtr
632 template<typename T> using OwnPtrWillBeMember = OwnPtr<T>; 599 #define PassOwnPtrWillBeRawPtr WTF::PassOwnPtr
633 template<typename T> using PassOwnPtrWillBeRawPtr = PassOwnPtr<T>; 600 #define NoBaseWillBeGarbageCollected WebCore::DummyBase
634 template<typename T> using NoBaseWillBeGarbageCollected = DummyBase<T>; 601 #define NoBaseWillBeGarbageCollectedFinalized WebCore::DummyBase
635 template<typename T> using NoBaseWillBeGarbageCollectedFinalized = DummyBase<T>; 602 #define WillBeHeapHashMap WTF::HashMap
636 template< 603 #define WillBePersistentHeapHashMap WTF::HashMap
637 typename K, 604 #define WillBeHeapHashSet WTF::HashSet
638 typename V, 605 #define WillBePersistentHeapHashSet WTF::HashSet
639 typename H = typename DefaultHash<K>::Hash, 606 #define WillBeHeapVector WTF::Vector
640 typename KT = HashTraits<K>, 607 #define WillBePersistentHeapVector WTF::Vector
641 typename VT = HashTraits<V> >
642 using WillBeHeapHashMap = HashMap<K, V, H, KT, VT>;
643 template<
644 typename K,
645 typename V,
646 typename H = typename DefaultHash<K>::Hash,
647 typename KT = HashTraits<K>,
648 typename VT = HashTraits<V> >
649 using WillBePersistentHeapHashMap = HashMap<K, V, H, KT, VT>;
650 template<
651 typename V,
652 typename H = typename DefaultHash<V>::Hash,
653 typename T = HashTraits<V> >
654 using WillBeHeapHashSet = HashSet<V, H, T>;
655 template<
656 typename V,
657 typename H = typename DefaultHash<V>::Hash,
658 typename T = HashTraits<V> >
659 using WillBePersistentHeapHashSet = HashSet<V, H, T>;
660 template<typename T, size_t inlineCapacity = 0>
661 using WillBeHeapVector = Vector<T, inlineCapacity>;
662 template<typename T, size_t inlineCapacity = 0>
663 using WillBePersistentHeapVector = Vector<T, inlineCapacity>;
664 #else // !COMPILER(CLANG)
665 #define PassRefPtrWillBeRawPtr PassRefPtr
666 #define RefCountedWillBeGarbageCollected RefCounted
667 #define RefCountedWillBeGarbageCollectedFinalized RefCounted
668 #define RefCountedWillBeRefCountedGarbageCollected RefCounted
669 #define RefPtrWillBePersistent RefPtr
670 #define RefPtrWillBeRawPtr RefPtr
671 #define RefPtrWillBeMember RefPtr
672 #define RawPtrWillBeMember RawPtr
673 #define RawPtrWillBeWeakMember RawPtr
674 #define OwnPtrWillBeMember OwnPtr
675 #define PassOwnPtrWillBeRawPtr PassOwnPtr
676 #define NoBaseWillBeGarbageCollected DummyBase
677 #define NoBaseWillBeGarbageCollectedFinalized DummyBase
678 #define WillBeHeapHashMap HashMap
679 #define WillBePersistentHeapHashMap HashMap
680 #define WillBeHeapHashSet HashSet
681 #define WillBePersistentHeapHashSet HashSet
682 #define WillBeHeapVector Vector
683 #define WillBePersistentHeapVector Vector
684 #endif // COMPILER(CLANG)
685 608
686 template<typename T> PassRefPtrWillBeRawPtr<T> adoptRefWillBeNoop(T* ptr) { retu rn adoptRef(ptr); } 609 template<typename T> PassRefPtrWillBeRawPtr<T> adoptRefWillBeNoop(T* ptr) { retu rn adoptRef(ptr); }
687 template<typename T> PassRefPtrWillBeRawPtr<T> adoptRefCountedWillBeRefCountedGa rbageCollected(T* ptr) { return adoptRef(ptr); } 610 template<typename T> PassRefPtrWillBeRawPtr<T> adoptRefCountedWillBeRefCountedGa rbageCollected(T* ptr) { return adoptRef(ptr); }
688 template<typename T> PassOwnPtrWillBeRawPtr<T> adoptPtrWillBeNoop(T* ptr) { retu rn adoptPtr(ptr); } 611 template<typename T> PassOwnPtrWillBeRawPtr<T> adoptPtrWillBeNoop(T* ptr) { retu rn adoptPtr(ptr); }
689 612
690 #define WTF_MAKE_FAST_ALLOCATED_WILL_BE_REMOVED WTF_MAKE_FAST_ALLOCATED 613 #define WTF_MAKE_FAST_ALLOCATED_WILL_BE_REMOVED WTF_MAKE_FAST_ALLOCATED
691 614
692 #endif // ENABLE(OILPAN) 615 #endif // ENABLE(OILPAN)
693 616
694 } // namespace WebCore 617 } // namespace WebCore
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
800 }; 723 };
801 724
802 template<typename T> inline T* getPtr(const WebCore::Member<T>& p) 725 template<typename T> inline T* getPtr(const WebCore::Member<T>& p)
803 { 726 {
804 return p.get(); 727 return p.get();
805 } 728 }
806 729
807 } // namespace WTF 730 } // namespace WTF
808 731
809 #endif 732 #endif
OLDNEW
« no previous file with comments | « no previous file | Source/modules/speech/SpeechGrammar.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698