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 2166 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2177 }; | 2177 }; |
2178 | 2178 |
2179 template<typename T, typename Traits> | 2179 template<typename T, typename Traits> |
2180 void HeapVectorBacking<T, Traits>::finalize(void* pointer) | 2180 void HeapVectorBacking<T, Traits>::finalize(void* pointer) |
2181 { | 2181 { |
2182 ASSERT(!WTF::IsTriviallyDestructible<T>::value); | 2182 ASSERT(!WTF::IsTriviallyDestructible<T>::value); |
2183 HeapObjectHeader* header = HeapObjectHeader::fromPayload(pointer); | 2183 HeapObjectHeader* header = HeapObjectHeader::fromPayload(pointer); |
2184 // Use the payload size as recorded by the heap to determine how many | 2184 // Use the payload size as recorded by the heap to determine how many |
2185 // elements to finalize. | 2185 // elements to finalize. |
2186 size_t length = header->payloadSize() / sizeof(T); | 2186 size_t length = header->payloadSize() / sizeof(T); |
2187 T* array = reinterpret_cast<T*>(pointer); | 2187 T* buffer = reinterpret_cast<T*>(pointer); |
2188 for (unsigned i = 0; i < length; ++i) { | 2188 #ifdef ANNOTATE_CONTIGUOUS_CONTAINER |
2189 array[i].~T(); | 2189 // Like for trace(), have no option but to mark the whole container |
2190 } | 2190 // as accessible. |
| 2191 ANNOTATE_CHANGE_SIZE(buffer, length, 0, length); |
| 2192 #endif |
| 2193 for (unsigned i = 0; i < length; ++i) |
| 2194 buffer[i].~T(); |
2191 } | 2195 } |
2192 | 2196 |
2193 template<typename Table> | 2197 template<typename Table> |
2194 void HeapHashTableBacking<Table>::finalize(void* pointer) | 2198 void HeapHashTableBacking<Table>::finalize(void* pointer) |
2195 { | 2199 { |
2196 using Value = typename Table::ValueType; | 2200 using Value = typename Table::ValueType; |
2197 ASSERT(!WTF::IsTriviallyDestructible<Value>::value); | 2201 ASSERT(!WTF::IsTriviallyDestructible<Value>::value); |
2198 HeapObjectHeader* header = HeapObjectHeader::fromPayload(pointer); | 2202 HeapObjectHeader* header = HeapObjectHeader::fromPayload(pointer); |
2199 // Use the payload size as recorded by the heap to determine how many | 2203 // Use the payload size as recorded by the heap to determine how many |
2200 // elements to finalize. | 2204 // elements to finalize. |
2201 size_t length = header->payloadSize() / sizeof(Value); | 2205 size_t length = header->payloadSize() / sizeof(Value); |
2202 Value* table = reinterpret_cast<Value*>(pointer); | 2206 Value* table = reinterpret_cast<Value*>(pointer); |
2203 for (unsigned i = 0; i < length; ++i) { | 2207 for (unsigned i = 0; i < length; ++i) { |
2204 if (!Table::isEmptyOrDeletedBucket(table[i])) | 2208 if (!Table::isEmptyOrDeletedBucket(table[i])) |
2205 table[i].~Value(); | 2209 table[i].~Value(); |
2206 } | 2210 } |
2207 } | 2211 } |
2208 | 2212 |
2209 } // namespace blink | 2213 } // namespace blink |
2210 | 2214 |
2211 #endif // Heap_h | 2215 #endif // Heap_h |
OLD | NEW |