Index: src/objects.cc |
=================================================================== |
--- src/objects.cc (revision 602) |
+++ src/objects.cc (working copy) |
@@ -333,7 +333,7 @@ |
// Check if we're allowed to read from the current object. Note |
// that even though we may not actually end up loading the named |
// property from the current object, we still check that we have |
- // access to it. |
+ // access to the it. |
JSObject* checked = JSObject::cast(current); |
if (!Top::MayNamedAccess(checked, name, v8::ACCESS_GET)) { |
return checked->GetPropertyWithFailedAccessCheck(receiver, |
@@ -4050,67 +4050,6 @@ |
} |
-void Map::CreateBackPointers() { |
- DescriptorArray* descriptors = instance_descriptors(); |
- for (DescriptorReader r(descriptors); !r.eos(); r.advance()) { |
- if (r.type() == MAP_TRANSITION) { |
- // Get target. |
- Map* target = Map::cast(r.GetValue()); |
-#ifdef DEBUG |
- // Verify target. |
- Object* source_prototype = prototype(); |
- Object* target_prototype = target->prototype(); |
- ASSERT(source_prototype->IsJSObject() || |
- source_prototype->IsMap() || |
- source_prototype->IsNull()); |
- ASSERT(target_prototype->IsJSObject() || |
- target_prototype->IsNull()); |
- ASSERT(source_prototype->IsMap() || |
- source_prototype == target_prototype); |
-#endif |
- // Point target back to source. set_prototype() will not let us set |
- // the prototype to a map, as we do here. |
- RawField(target, kPrototypeOffset) = this; |
- } |
- } |
-} |
- |
- |
-void Map::ClearNonLiveTransitions(Object* real_prototype) { |
- // Live DescriptorArray objects will be marked, so we must use |
- // low-level accessors to get and modify their data. |
- DescriptorArray* d = reinterpret_cast<DescriptorArray*>( |
- RawField(this, Map::kInstanceDescriptorsOffset)); |
- if (d == Heap::empty_descriptor_array()) return; |
- Smi* NullDescriptorDetails = |
- PropertyDetails(NONE, NULL_DESCRIPTOR).AsSmi(); |
- FixedArray* contents = reinterpret_cast<FixedArray*>( |
- d->get(DescriptorArray::kContentArrayIndex)); |
- ASSERT(contents->length() >= 2); |
- for (int i = 0; i < contents->length(); i += 2) { |
- // If the pair (value, details) is a map transition, |
- // check if the target is live. If not, null the descriptor. |
- // Also drop the back pointer for that map transition, so that this |
- // map is not reached again by following a back pointer from a |
- // non-live object. |
- PropertyDetails details(Smi::cast(contents->get(i + 1))); |
- if (details.type() == MAP_TRANSITION) { |
- Map* target = reinterpret_cast<Map*>(contents->get(i)); |
- ASSERT(target->IsHeapObject()); |
- if (!target->IsMarked()) { |
- ASSERT(target->IsMap()); |
- contents->set(i + 1, NullDescriptorDetails, SKIP_WRITE_BARRIER); |
- contents->set(i, Heap::null_value(), SKIP_WRITE_BARRIER); |
- ASSERT(target->prototype() == this || |
- target->prototype() == real_prototype); |
- // Getter prototype() is read-only, set_prototype() has side effects. |
- RawField(target, Map::kPrototypeOffset) = real_prototype; |
- } |
- } |
- } |
-} |
- |
- |
void Map::MapIterateBody(ObjectVisitor* v) { |
// Assumes all Object* members are contiguously allocated! |
IteratePointers(v, kPrototypeOffset, kCodeCacheOffset + kPointerSize); |