OLD | NEW |
1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 #include "vm/gc_marker.h" | 5 #include "vm/gc_marker.h" |
6 | 6 |
7 #include <map> | 7 #include <map> |
8 #include <utility> | 8 #include <utility> |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
(...skipping 280 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
291 } | 291 } |
292 if (!raw_obj->IsOldObject()) { | 292 if (!raw_obj->IsOldObject()) { |
293 return false; | 293 return false; |
294 } | 294 } |
295 return !raw_obj->IsMarked(); | 295 return !raw_obj->IsMarked(); |
296 } | 296 } |
297 | 297 |
298 | 298 |
299 class MarkingWeakVisitor : public HandleVisitor { | 299 class MarkingWeakVisitor : public HandleVisitor { |
300 public: | 300 public: |
301 MarkingWeakVisitor() { | 301 MarkingWeakVisitor() : HandleVisitor(Isolate::Current()) { |
302 } | 302 } |
303 | 303 |
304 void VisitHandle(uword addr, bool is_prologue_weak) { | 304 void VisitHandle(uword addr, bool is_prologue_weak) { |
305 FinalizablePersistentHandle* handle = | 305 FinalizablePersistentHandle* handle = |
306 reinterpret_cast<FinalizablePersistentHandle*>(addr); | 306 reinterpret_cast<FinalizablePersistentHandle*>(addr); |
307 RawObject* raw_obj = handle->raw(); | 307 RawObject* raw_obj = handle->raw(); |
308 if (IsUnreachable(raw_obj)) { | 308 if (IsUnreachable(raw_obj)) { |
309 FinalizablePersistentHandle::Finalize(handle, is_prologue_weak); | 309 FinalizablePersistentHandle::Finalize(isolate(), |
| 310 handle, |
| 311 is_prologue_weak); |
310 } | 312 } |
311 } | 313 } |
312 | 314 |
313 private: | 315 private: |
314 DISALLOW_COPY_AND_ASSIGN(MarkingWeakVisitor); | 316 DISALLOW_COPY_AND_ASSIGN(MarkingWeakVisitor); |
315 }; | 317 }; |
316 | 318 |
317 | 319 |
318 void GCMarker::Prologue(Isolate* isolate, bool invoke_api_callbacks) { | 320 void GCMarker::Prologue(Isolate* isolate, bool invoke_api_callbacks) { |
319 if (invoke_api_callbacks) { | 321 if (invoke_api_callbacks) { |
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
497 MarkingWeakVisitor mark_weak; | 499 MarkingWeakVisitor mark_weak; |
498 IterateWeakRoots(isolate, &mark_weak, invoke_api_callbacks); | 500 IterateWeakRoots(isolate, &mark_weak, invoke_api_callbacks); |
499 mark.Finalize(); | 501 mark.Finalize(); |
500 ProcessWeakTables(page_space); | 502 ProcessWeakTables(page_space); |
501 ProcessObjectIdTable(isolate); | 503 ProcessObjectIdTable(isolate); |
502 | 504 |
503 Epilogue(isolate, invoke_api_callbacks); | 505 Epilogue(isolate, invoke_api_callbacks); |
504 } | 506 } |
505 | 507 |
506 } // namespace dart | 508 } // namespace dart |
OLD | NEW |