| OLD | NEW |
| 1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "src/v8.h" | 5 #include "src/v8.h" |
| 6 | 6 |
| 7 #include "src/heap/objects-visiting.h" | 7 #include "src/heap/objects-visiting.h" |
| 8 | 8 |
| 9 namespace v8 { | 9 namespace v8 { |
| 10 namespace internal { | 10 namespace internal { |
| (...skipping 235 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 246 T* candidate = reinterpret_cast<T*>(list); | 246 T* candidate = reinterpret_cast<T*>(list); |
| 247 list = WeakListVisitor<T>::WeakNext(candidate); | 247 list = WeakListVisitor<T>::WeakNext(candidate); |
| 248 WeakListVisitor<T>::SetWeakNext(candidate, undefined); | 248 WeakListVisitor<T>::SetWeakNext(candidate, undefined); |
| 249 } | 249 } |
| 250 } | 250 } |
| 251 | 251 |
| 252 | 252 |
| 253 template <> | 253 template <> |
| 254 struct WeakListVisitor<JSFunction> { | 254 struct WeakListVisitor<JSFunction> { |
| 255 static void SetWeakNext(JSFunction* function, Object* next) { | 255 static void SetWeakNext(JSFunction* function, Object* next) { |
| 256 function->set_next_function_link(next); | 256 function->set_next_function_link(next, UPDATE_WEAK_WRITE_BARRIER); |
| 257 } | 257 } |
| 258 | 258 |
| 259 static Object* WeakNext(JSFunction* function) { | 259 static Object* WeakNext(JSFunction* function) { |
| 260 return function->next_function_link(); | 260 return function->next_function_link(); |
| 261 } | 261 } |
| 262 | 262 |
| 263 static int WeakNextOffset() { return JSFunction::kNextFunctionLinkOffset; } | 263 static int WeakNextOffset() { return JSFunction::kNextFunctionLinkOffset; } |
| 264 | 264 |
| 265 static void VisitLiveObject(Heap*, JSFunction*, WeakObjectRetainer*) {} | 265 static void VisitLiveObject(Heap*, JSFunction*, WeakObjectRetainer*) {} |
| 266 | 266 |
| 267 static void VisitPhantomObject(Heap*, JSFunction*) {} | 267 static void VisitPhantomObject(Heap*, JSFunction*) {} |
| 268 }; | 268 }; |
| 269 | 269 |
| 270 | 270 |
| 271 template <> | 271 template <> |
| 272 struct WeakListVisitor<Code> { | 272 struct WeakListVisitor<Code> { |
| 273 static void SetWeakNext(Code* code, Object* next) { | 273 static void SetWeakNext(Code* code, Object* next) { |
| 274 code->set_next_code_link(next); | 274 code->set_next_code_link(next, UPDATE_WEAK_WRITE_BARRIER); |
| 275 } | 275 } |
| 276 | 276 |
| 277 static Object* WeakNext(Code* code) { return code->next_code_link(); } | 277 static Object* WeakNext(Code* code) { return code->next_code_link(); } |
| 278 | 278 |
| 279 static int WeakNextOffset() { return Code::kNextCodeLinkOffset; } | 279 static int WeakNextOffset() { return Code::kNextCodeLinkOffset; } |
| 280 | 280 |
| 281 static void VisitLiveObject(Heap*, Code*, WeakObjectRetainer*) {} | 281 static void VisitLiveObject(Heap*, Code*, WeakObjectRetainer*) {} |
| 282 | 282 |
| 283 static void VisitPhantomObject(Heap*, Code*) {} | 283 static void VisitPhantomObject(Heap*, Code*) {} |
| 284 }; | 284 }; |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 335 context->get(Context::OPTIMIZED_FUNCTIONS_LIST)); | 335 context->get(Context::OPTIMIZED_FUNCTIONS_LIST)); |
| 336 ClearWeakList<Code>(heap, context->get(Context::OPTIMIZED_CODE_LIST)); | 336 ClearWeakList<Code>(heap, context->get(Context::OPTIMIZED_CODE_LIST)); |
| 337 ClearWeakList<Code>(heap, context->get(Context::DEOPTIMIZED_CODE_LIST)); | 337 ClearWeakList<Code>(heap, context->get(Context::DEOPTIMIZED_CODE_LIST)); |
| 338 } | 338 } |
| 339 }; | 339 }; |
| 340 | 340 |
| 341 | 341 |
| 342 template <> | 342 template <> |
| 343 struct WeakListVisitor<AllocationSite> { | 343 struct WeakListVisitor<AllocationSite> { |
| 344 static void SetWeakNext(AllocationSite* obj, Object* next) { | 344 static void SetWeakNext(AllocationSite* obj, Object* next) { |
| 345 obj->set_weak_next(next); | 345 obj->set_weak_next(next, UPDATE_WEAK_WRITE_BARRIER); |
| 346 } | 346 } |
| 347 | 347 |
| 348 static Object* WeakNext(AllocationSite* obj) { return obj->weak_next(); } | 348 static Object* WeakNext(AllocationSite* obj) { return obj->weak_next(); } |
| 349 | 349 |
| 350 static int WeakNextOffset() { return AllocationSite::kWeakNextOffset; } | 350 static int WeakNextOffset() { return AllocationSite::kWeakNextOffset; } |
| 351 | 351 |
| 352 static void VisitLiveObject(Heap*, AllocationSite*, WeakObjectRetainer*) {} | 352 static void VisitLiveObject(Heap*, AllocationSite*, WeakObjectRetainer*) {} |
| 353 | 353 |
| 354 static void VisitPhantomObject(Heap*, AllocationSite*) {} | 354 static void VisitPhantomObject(Heap*, AllocationSite*) {} |
| 355 }; | 355 }; |
| 356 | 356 |
| 357 | 357 |
| 358 template Object* VisitWeakList<Context>(Heap* heap, Object* list, | 358 template Object* VisitWeakList<Context>(Heap* heap, Object* list, |
| 359 WeakObjectRetainer* retainer); | 359 WeakObjectRetainer* retainer); |
| 360 | 360 |
| 361 template Object* VisitWeakList<AllocationSite>(Heap* heap, Object* list, | 361 template Object* VisitWeakList<AllocationSite>(Heap* heap, Object* list, |
| 362 WeakObjectRetainer* retainer); | 362 WeakObjectRetainer* retainer); |
| 363 } | 363 } |
| 364 } // namespace v8::internal | 364 } // namespace v8::internal |
| OLD | NEW |