| OLD | NEW |
| 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 877 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 888 private: | 888 private: |
| 889 | 889 |
| 890 #define DEFINE_EMPTY_DESTRUCTOR_WILL_BE_REMOVED(type) \ | 890 #define DEFINE_EMPTY_DESTRUCTOR_WILL_BE_REMOVED(type) \ |
| 891 type::~type() { } | 891 type::~type() { } |
| 892 | 892 |
| 893 #define DEFINE_STATIC_REF_WILL_BE_PERSISTENT(type, name, arguments) \ | 893 #define DEFINE_STATIC_REF_WILL_BE_PERSISTENT(type, name, arguments) \ |
| 894 DEFINE_STATIC_REF(type, name, arguments) | 894 DEFINE_STATIC_REF(type, name, arguments) |
| 895 | 895 |
| 896 #endif // ENABLE(OILPAN) | 896 #endif // ENABLE(OILPAN) |
| 897 | 897 |
| 898 template<typename T, bool = IsGarbageCollectedType<T>::value> |
| 899 class PointerFieldStorageTrait { |
| 900 public: |
| 901 using Type = RawPtr<T>; |
| 902 }; |
| 903 |
| 904 template<typename T> |
| 905 class PointerFieldStorageTrait<T, true> { |
| 906 public: |
| 907 using Type = Member<T>; |
| 908 }; |
| 909 |
| 898 // Abstraction for injecting calls to an object's 'dispose()' method | 910 // Abstraction for injecting calls to an object's 'dispose()' method |
| 899 // on leaving a stack scope, ensuring earlier release of resources | 911 // on leaving a stack scope, ensuring earlier release of resources |
| 900 // than waiting until the object is eventually GCed. | 912 // than waiting until the object is eventually GCed. |
| 901 template<typename T> | 913 template<typename T, void (T::*Disposer)() = (&T::dispose)> |
| 902 class ScopedDisposal { | 914 class ScopedDisposal { |
| 903 STACK_ALLOCATED(); | 915 STACK_ALLOCATED(); |
| 904 public: | 916 public: |
| 905 ScopedDisposal(T* object) | 917 ScopedDisposal(T* object) |
| 906 : m_object(object) | 918 : m_object(object) |
| 907 { | 919 { |
| 908 static_assert(IsGarbageCollectedType<T>::value, "can only be used with g
arbage collected types"); | |
| 909 } | 920 } |
| 910 | 921 |
| 911 ~ScopedDisposal() | 922 ~ScopedDisposal() |
| 912 { | 923 { |
| 913 if (m_object) | 924 if (m_object) |
| 914 m_object->dispose(); | 925 (m_object->*Disposer)(); |
| 915 } | 926 } |
| 916 | 927 |
| 917 void clear() { m_object.clear(); } | 928 void clear() { m_object.clear(); } |
| 918 | 929 |
| 919 private: | 930 private: |
| 920 Member<T> m_object; | 931 typename PointerFieldStorageTrait<T>::Type m_object; |
| 921 }; | 932 }; |
| 922 | 933 |
| 923 // SelfKeepAlive<Object> is the idiom to use for objects that have to keep | 934 // SelfKeepAlive<Object> is the idiom to use for objects that have to keep |
| 924 // themselves temporarily alive and cannot rely on there being some | 935 // themselves temporarily alive and cannot rely on there being some |
| 925 // external reference in that interval: | 936 // external reference in that interval: |
| 926 // | 937 // |
| 927 // class Opener { | 938 // class Opener { |
| 928 // public: | 939 // public: |
| 929 // ... | 940 // ... |
| 930 // void open() | 941 // void open() |
| (...skipping 269 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1200 // TODO(sof): extend WTF::FunctionWrapper call overloading to also handle (C
rossThread)WeakPersistent. | 1211 // TODO(sof): extend WTF::FunctionWrapper call overloading to also handle (C
rossThread)WeakPersistent. |
| 1201 static T* unwrap(const StorageType& value) { return value.get(); } | 1212 static T* unwrap(const StorageType& value) { return value.get(); } |
| 1202 }; | 1213 }; |
| 1203 | 1214 |
| 1204 template<typename T> | 1215 template<typename T> |
| 1205 PassRefPtr<T> adoptRef(blink::RefCountedGarbageCollected<T>*) = delete; | 1216 PassRefPtr<T> adoptRef(blink::RefCountedGarbageCollected<T>*) = delete; |
| 1206 | 1217 |
| 1207 } // namespace WTF | 1218 } // namespace WTF |
| 1208 | 1219 |
| 1209 #endif | 1220 #endif |
| OLD | NEW |