OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2013 Google Inc. All rights reserved. | 2 * Copyright (C) 2013 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 1006 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1017 | 1017 |
1018 template<typename T> | 1018 template<typename T> |
1019 T* adoptRefCountedGarbageCollected(T* ptr) | 1019 T* adoptRefCountedGarbageCollected(T* ptr) |
1020 { | 1020 { |
1021 ASSERT(ptr->hasOneRef()); | 1021 ASSERT(ptr->hasOneRef()); |
1022 ptr->deref(); | 1022 ptr->deref(); |
1023 WTF::adopted(ptr); | 1023 WTF::adopted(ptr); |
1024 return ptr; | 1024 return ptr; |
1025 } | 1025 } |
1026 | 1026 |
| 1027 // Classes that contain heap references but aren't themselves heap |
| 1028 // allocated, have some extra macros available which allows their use |
| 1029 // to be restricted to cases where the garbage collector is able |
| 1030 // to discover their heap references. |
| 1031 // |
| 1032 // STACK_ALLOCATED(): Use if the object is only stack allocated. Heap objects |
| 1033 // should be in Members but you do not need the trace method as they are on |
| 1034 // the stack. (Down the line these might turn in to raw pointers, but for |
| 1035 // now Members indicates that we have thought about them and explicitly |
| 1036 // taken care of them.) |
| 1037 // |
| 1038 // DISALLOW_ALLOCATION(): Cannot be allocated with new operators but can |
| 1039 // be a part object. If it has Members you need a trace method and the |
| 1040 // containing object needs to call that trace method. |
| 1041 // |
| 1042 // ALLOW_ONLY_INLINE_ALLOCATION(): Allows only placement new operator. |
| 1043 // This disallows general allocation of this object but allows to put |
| 1044 // the object as a value object in collections. If these have Members you |
| 1045 // need to have a trace method. That trace method will be called |
| 1046 // automatically by the Heap collections. |
| 1047 // |
1027 #if COMPILER_SUPPORTS(CXX_DELETED_FUNCTIONS) | 1048 #if COMPILER_SUPPORTS(CXX_DELETED_FUNCTIONS) |
1028 #define DISALLOW_ALLOCATION() \ | 1049 #define DISALLOW_ALLOCATION() \ |
1029 private: \ | 1050 private: \ |
1030 void* operator new(size_t) = delete; \ | 1051 void* operator new(size_t) = delete; \ |
1031 void* operator new(size_t, NotNullTag, void*) = delete; \ | 1052 void* operator new(size_t, NotNullTag, void*) = delete; \ |
1032 void* operator new(size_t, void*) = delete; | 1053 void* operator new(size_t, void*) = delete; |
1033 | 1054 |
1034 #define ALLOW_ONLY_INLINE_ALLOCATION()
\ | 1055 #define ALLOW_ONLY_INLINE_ALLOCATION()
\ |
1035 public:
\ | 1056 public:
\ |
1036 void* operator new(size_t, NotNullTag, void* location) { return location
; } \ | 1057 void* operator new(size_t, NotNullTag, void* location) { return location
; } \ |
(...skipping 720 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1757 // to export. This forces it to export all the methods from ThreadHeap. | 1778 // to export. This forces it to export all the methods from ThreadHeap. |
1758 template<> void ThreadHeap<FinalizedHeapObjectHeader>::addPageToHeap(const GCInf
o*); | 1779 template<> void ThreadHeap<FinalizedHeapObjectHeader>::addPageToHeap(const GCInf
o*); |
1759 template<> void ThreadHeap<HeapObjectHeader>::addPageToHeap(const GCInfo*); | 1780 template<> void ThreadHeap<HeapObjectHeader>::addPageToHeap(const GCInfo*); |
1760 extern template class PLATFORM_EXPORT ThreadHeap<FinalizedHeapObjectHeader>; | 1781 extern template class PLATFORM_EXPORT ThreadHeap<FinalizedHeapObjectHeader>; |
1761 extern template class PLATFORM_EXPORT ThreadHeap<HeapObjectHeader>; | 1782 extern template class PLATFORM_EXPORT ThreadHeap<HeapObjectHeader>; |
1762 #endif | 1783 #endif |
1763 | 1784 |
1764 } | 1785 } |
1765 | 1786 |
1766 #endif // Heap_h | 1787 #endif // Heap_h |
OLD | NEW |