| OLD | NEW |
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, 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/object.h" | 5 #include "vm/object.h" |
| 6 | 6 |
| 7 #include "include/dart_api.h" | 7 #include "include/dart_api.h" |
| 8 #include "platform/assert.h" | 8 #include "platform/assert.h" |
| 9 #include "vm/assembler.h" | 9 #include "vm/assembler.h" |
| 10 #include "vm/become.h" | 10 #include "vm/become.h" |
| (...skipping 1098 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1109 | 1109 |
| 1110 // Set up names for the pseudo-classes for free list elements and forwarding | 1110 // Set up names for the pseudo-classes for free list elements and forwarding |
| 1111 // corpses. Mainly this makes VM debugging easier. | 1111 // corpses. Mainly this makes VM debugging easier. |
| 1112 cls = isolate->class_table()->At(kFreeListElement); | 1112 cls = isolate->class_table()->At(kFreeListElement); |
| 1113 cls.set_name(Symbols::FreeListElement()); | 1113 cls.set_name(Symbols::FreeListElement()); |
| 1114 cls = isolate->class_table()->At(kForwardingCorpse); | 1114 cls = isolate->class_table()->At(kForwardingCorpse); |
| 1115 cls.set_name(Symbols::ForwardingCorpse()); | 1115 cls.set_name(Symbols::ForwardingCorpse()); |
| 1116 | 1116 |
| 1117 { | 1117 { |
| 1118 ASSERT(isolate == Dart::vm_isolate()); | 1118 ASSERT(isolate == Dart::vm_isolate()); |
| 1119 WritableVMIsolateScope scope(Thread::Current()); | 1119 Thread* thread = Thread::Current(); |
| 1120 WritableVMIsolateScope scope(thread); |
| 1121 HeapIterationScope iteration(thread); |
| 1120 FinalizeVMIsolateVisitor premarker; | 1122 FinalizeVMIsolateVisitor premarker; |
| 1121 ASSERT(isolate->heap()->UsedInWords(Heap::kNew) == 0); | 1123 ASSERT(isolate->heap()->UsedInWords(Heap::kNew) == 0); |
| 1122 isolate->heap()->IterateOldObjectsNoImagePages(&premarker); | 1124 iteration.IterateOldObjectsNoImagePages(&premarker); |
| 1123 // Make the VM isolate read-only again after setting all objects as marked. | 1125 // Make the VM isolate read-only again after setting all objects as marked. |
| 1124 // Note objects in image pages are already pre-marked. | 1126 // Note objects in image pages are already pre-marked. |
| 1125 } | 1127 } |
| 1126 } | 1128 } |
| 1127 | 1129 |
| 1128 void Object::set_vm_isolate_snapshot_object_table(const Array& table) { | 1130 void Object::set_vm_isolate_snapshot_object_table(const Array& table) { |
| 1129 ASSERT(Isolate::Current() == Dart::vm_isolate()); | 1131 ASSERT(Isolate::Current() == Dart::vm_isolate()); |
| 1130 *vm_isolate_snapshot_object_table_ = table.raw(); | 1132 *vm_isolate_snapshot_object_table_ = table.raw(); |
| 1131 } | 1133 } |
| 1132 | 1134 |
| (...skipping 12986 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 14119 | 14121 |
| 14120 bool Code::SlowFindRawCodeVisitor::FindObject(RawObject* raw_obj) const { | 14122 bool Code::SlowFindRawCodeVisitor::FindObject(RawObject* raw_obj) const { |
| 14121 return RawCode::ContainsPC(raw_obj, pc_); | 14123 return RawCode::ContainsPC(raw_obj, pc_); |
| 14122 } | 14124 } |
| 14123 | 14125 |
| 14124 RawCode* Code::LookupCodeInIsolate(Isolate* isolate, uword pc) { | 14126 RawCode* Code::LookupCodeInIsolate(Isolate* isolate, uword pc) { |
| 14125 ASSERT((isolate == Isolate::Current()) || (isolate == Dart::vm_isolate())); | 14127 ASSERT((isolate == Isolate::Current()) || (isolate == Dart::vm_isolate())); |
| 14126 if (isolate->heap() == NULL) { | 14128 if (isolate->heap() == NULL) { |
| 14127 return Code::null(); | 14129 return Code::null(); |
| 14128 } | 14130 } |
| 14129 NoSafepointScope no_safepoint; | 14131 HeapIterationScope heap_iteration_scope(Thread::Current()); |
| 14130 SlowFindRawCodeVisitor visitor(pc); | 14132 SlowFindRawCodeVisitor visitor(pc); |
| 14131 RawObject* needle = isolate->heap()->FindOldObject(&visitor); | 14133 RawObject* needle = isolate->heap()->FindOldObject(&visitor); |
| 14132 if (needle != Code::null()) { | 14134 if (needle != Code::null()) { |
| 14133 return static_cast<RawCode*>(needle); | 14135 return static_cast<RawCode*>(needle); |
| 14134 } | 14136 } |
| 14135 return Code::null(); | 14137 return Code::null(); |
| 14136 } | 14138 } |
| 14137 | 14139 |
| 14138 RawCode* Code::LookupCode(uword pc) { | 14140 RawCode* Code::LookupCode(uword pc) { |
| 14139 return LookupCodeInIsolate(Isolate::Current(), pc); | 14141 return LookupCodeInIsolate(Isolate::Current(), pc); |
| (...skipping 8406 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 22546 } | 22548 } |
| 22547 return UserTag::null(); | 22549 return UserTag::null(); |
| 22548 } | 22550 } |
| 22549 | 22551 |
| 22550 const char* UserTag::ToCString() const { | 22552 const char* UserTag::ToCString() const { |
| 22551 const String& tag_label = String::Handle(label()); | 22553 const String& tag_label = String::Handle(label()); |
| 22552 return tag_label.ToCString(); | 22554 return tag_label.ToCString(); |
| 22553 } | 22555 } |
| 22554 | 22556 |
| 22555 } // namespace dart | 22557 } // namespace dart |
| OLD | NEW |