| 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 283 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 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() { |
| 302 } | 302 } |
| 303 | 303 |
| 304 void VisitHandle(uword addr) { | 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); | 309 FinalizablePersistentHandle::Finalize(handle, is_prologue_weak); |
| 310 } | 310 } |
| 311 } | 311 } |
| 312 | 312 |
| 313 private: | 313 private: |
| 314 DISALLOW_COPY_AND_ASSIGN(MarkingWeakVisitor); | 314 DISALLOW_COPY_AND_ASSIGN(MarkingWeakVisitor); |
| 315 }; | 315 }; |
| 316 | 316 |
| 317 | 317 |
| 318 void GCMarker::Prologue(Isolate* isolate, bool invoke_api_callbacks) { | 318 void GCMarker::Prologue(Isolate* isolate, bool invoke_api_callbacks) { |
| 319 if (invoke_api_callbacks) { | 319 if (invoke_api_callbacks) { |
| (...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 497 MarkingWeakVisitor mark_weak; | 497 MarkingWeakVisitor mark_weak; |
| 498 IterateWeakRoots(isolate, &mark_weak, invoke_api_callbacks); | 498 IterateWeakRoots(isolate, &mark_weak, invoke_api_callbacks); |
| 499 mark.Finalize(); | 499 mark.Finalize(); |
| 500 ProcessWeakTables(page_space); | 500 ProcessWeakTables(page_space); |
| 501 ProcessObjectIdTable(isolate); | 501 ProcessObjectIdTable(isolate); |
| 502 | 502 |
| 503 Epilogue(isolate, invoke_api_callbacks); | 503 Epilogue(isolate, invoke_api_callbacks); |
| 504 } | 504 } |
| 505 | 505 |
| 506 } // namespace dart | 506 } // namespace dart |
| OLD | NEW |