Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2006-2008 the V8 project authors. All rights reserved. | 1 // Copyright 2006-2008 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 264 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 275 &FixedBodyVisitor<StaticMarkingVisitor, | 275 &FixedBodyVisitor<StaticMarkingVisitor, |
| 276 ConsString::BodyDescriptor, | 276 ConsString::BodyDescriptor, |
| 277 void>::Visit); | 277 void>::Visit); |
| 278 | 278 |
| 279 | 279 |
| 280 table_.Register(kVisitFixedArray, | 280 table_.Register(kVisitFixedArray, |
| 281 &FlexibleBodyVisitor<StaticMarkingVisitor, | 281 &FlexibleBodyVisitor<StaticMarkingVisitor, |
| 282 FixedArray::BodyDescriptor, | 282 FixedArray::BodyDescriptor, |
| 283 void>::Visit); | 283 void>::Visit); |
| 284 | 284 |
| 285 table_.Register(kVisitSharedFunctionInfo, | 285 table_.Register(kVisitSharedFunctionInfo, &VisitSharedFunctionInfo); |
| 286 &FixedBodyVisitor<StaticMarkingVisitor, | |
| 287 SharedFunctionInfo::BodyDescriptor, | |
| 288 void>::Visit); | |
| 289 | 286 |
| 290 table_.Register(kVisitByteArray, &DataObjectVisitor::Visit); | 287 table_.Register(kVisitByteArray, &DataObjectVisitor::Visit); |
| 291 table_.Register(kVisitSeqAsciiString, &DataObjectVisitor::Visit); | 288 table_.Register(kVisitSeqAsciiString, &DataObjectVisitor::Visit); |
| 292 table_.Register(kVisitSeqTwoByteString, &DataObjectVisitor::Visit); | 289 table_.Register(kVisitSeqTwoByteString, &DataObjectVisitor::Visit); |
| 293 | 290 |
| 294 table_.Register(kVisitOddball, | 291 table_.Register(kVisitOddball, |
| 295 &FixedBodyVisitor<StaticMarkingVisitor, | 292 &FixedBodyVisitor<StaticMarkingVisitor, |
| 296 Oddball::BodyDescriptor, | 293 Oddball::BodyDescriptor, |
| 297 void>::Visit); | 294 void>::Visit); |
| 298 table_.Register(kVisitMap, | 295 table_.Register(kVisitMap, |
| (...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 530 Context* context = reinterpret_cast<Context*>(ctx); | 527 Context* context = reinterpret_cast<Context*>(ctx); |
| 531 | 528 |
| 532 if (IsJSBuiltinsObject(context->global())) { | 529 if (IsJSBuiltinsObject(context->global())) { |
| 533 return false; | 530 return false; |
| 534 } | 531 } |
| 535 | 532 |
| 536 return true; | 533 return true; |
| 537 } | 534 } |
| 538 | 535 |
| 539 | 536 |
| 537 static void VisitSharedFunctionInfo(Map* map, HeapObject* object) { | |
| 538 SharedFunctionInfo* shared = reinterpret_cast<SharedFunctionInfo*>(object); | |
| 539 if (shared->IsInobjectSlackTrackingInProgress()) { | |
| 540 shared->DetachInitialMap(); | |
| 541 } | |
| 542 FixedBodyVisitor<StaticMarkingVisitor, | |
| 543 SharedFunctionInfo::BodyDescriptor, | |
| 544 void>::Visit(map, object); | |
| 545 } | |
| 546 | |
| 547 | |
| 540 static void VisitCodeEntry(Address entry_address) { | 548 static void VisitCodeEntry(Address entry_address) { |
| 541 Object* code = Code::GetObjectFromEntryAddress(entry_address); | 549 Object* code = Code::GetObjectFromEntryAddress(entry_address); |
| 542 Object* old_code = code; | 550 Object* old_code = code; |
| 543 VisitPointer(&code); | 551 VisitPointer(&code); |
| 544 if (code != old_code) { | 552 if (code != old_code) { |
| 545 Memory::Address_at(entry_address) = | 553 Memory::Address_at(entry_address) = |
| 546 reinterpret_cast<Code*>(code)->entry(); | 554 reinterpret_cast<Code*>(code)->entry(); |
| 547 } | 555 } |
| 548 } | 556 } |
| 549 | 557 |
| (...skipping 582 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1132 // and related subtypes. | 1140 // and related subtypes. |
| 1133 for (HeapObject* obj = map_iterator.next(); | 1141 for (HeapObject* obj = map_iterator.next(); |
| 1134 obj != NULL; obj = map_iterator.next()) { | 1142 obj != NULL; obj = map_iterator.next()) { |
| 1135 Map* map = reinterpret_cast<Map*>(obj); | 1143 Map* map = reinterpret_cast<Map*>(obj); |
| 1136 if (!map->IsMarked() && map->IsByteArray()) continue; | 1144 if (!map->IsMarked() && map->IsByteArray()) continue; |
| 1137 | 1145 |
| 1138 ASSERT(SafeIsMap(map)); | 1146 ASSERT(SafeIsMap(map)); |
| 1139 // Only JSObject and subtypes have map transitions and back pointers. | 1147 // Only JSObject and subtypes have map transitions and back pointers. |
| 1140 if (map->instance_type() < FIRST_JS_OBJECT_TYPE) continue; | 1148 if (map->instance_type() < FIRST_JS_OBJECT_TYPE) continue; |
| 1141 if (map->instance_type() > JS_FUNCTION_TYPE) continue; | 1149 if (map->instance_type() > JS_FUNCTION_TYPE) continue; |
| 1150 | |
| 1151 if (map->IsMarked() && map->attached_to_shared_function_info()) { | |
|
Vitaly Repeshko
2010/09/22 14:40:25
This needs a short comment.
Vladislav Kaznacheev
2010/09/23 08:38:16
Done.
| |
| 1152 map->unchecked_constructor()->unchecked_shared()-> | |
| 1153 AttachInitialMap(map); | |
| 1154 } | |
| 1155 | |
| 1142 // Follow the chain of back pointers to find the prototype. | 1156 // Follow the chain of back pointers to find the prototype. |
| 1143 Map* current = map; | 1157 Map* current = map; |
| 1144 while (SafeIsMap(current)) { | 1158 while (SafeIsMap(current)) { |
| 1145 current = reinterpret_cast<Map*>(current->prototype()); | 1159 current = reinterpret_cast<Map*>(current->prototype()); |
| 1146 ASSERT(current->IsHeapObject()); | 1160 ASSERT(current->IsHeapObject()); |
| 1147 } | 1161 } |
| 1148 Object* real_prototype = current; | 1162 Object* real_prototype = current; |
| 1149 | 1163 |
| 1150 // Follow back pointers, setting them to prototype, | 1164 // Follow back pointers, setting them to prototype, |
| 1151 // clearing map transitions when necessary. | 1165 // clearing map transitions when necessary. |
| (...skipping 1462 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2614 } | 2628 } |
| 2615 | 2629 |
| 2616 | 2630 |
| 2617 void MarkCompactCollector::Initialize() { | 2631 void MarkCompactCollector::Initialize() { |
| 2618 StaticPointersToNewGenUpdatingVisitor::Initialize(); | 2632 StaticPointersToNewGenUpdatingVisitor::Initialize(); |
| 2619 StaticMarkingVisitor::Initialize(); | 2633 StaticMarkingVisitor::Initialize(); |
| 2620 } | 2634 } |
| 2621 | 2635 |
| 2622 | 2636 |
| 2623 } } // namespace v8::internal | 2637 } } // namespace v8::internal |
| OLD | NEW |