Index: src/objects-inl.h |
diff --git a/src/objects-inl.h b/src/objects-inl.h |
index 101096d6c9a21c49fc5b9dde6823853f830c8507..64df1d6cbb5b00e97d94e8f28b47aca189320b32 100644 |
--- a/src/objects-inl.h |
+++ b/src/objects-inl.h |
@@ -2060,21 +2060,8 @@ void ExternalFloatArray::set(int index, float value) { |
ptr[index] = value; |
} |
-inline Scavenger Map::scavenger() { |
- Scavenger callback = reinterpret_cast<Scavenger>( |
- READ_INTPTR_FIELD(this, kScavengerCallbackOffset)); |
- ASSERT(callback == Heap::GetScavenger(instance_type(), |
- instance_size())); |
- |
- return callback; |
-} |
- |
-inline void Map::set_scavenger(Scavenger callback) { |
- WRITE_INTPTR_FIELD(this, |
- kScavengerCallbackOffset, |
- reinterpret_cast<intptr_t>(callback)); |
-} |
+INT_ACCESSORS(Map, visitor_id, kScavengerCallbackOffset) |
int Map::instance_size() { |
return READ_BYTE_FIELD(this, kInstanceSizeOffset) << kPointerSizeLog2; |
@@ -2099,7 +2086,7 @@ int HeapObject::SizeFromMap(Map* map) { |
(kStringTag | kConsStringTag) || |
instance_type == JS_ARRAY_TYPE) return map->instance_size(); |
if (instance_type == FIXED_ARRAY_TYPE) { |
- return reinterpret_cast<FixedArray*>(this)->FixedArraySize(); |
+ return FixedArray::BodyDescriptor::SizeOf(map, this); |
} |
if (instance_type == BYTE_ARRAY_TYPE) { |
return reinterpret_cast<ByteArray*>(this)->ByteArraySize(); |
@@ -2818,12 +2805,6 @@ void Proxy::set_proxy(Address value) { |
} |
-void Proxy::ProxyIterateBody(ObjectVisitor* visitor) { |
- visitor->VisitExternalReference( |
- reinterpret_cast<Address *>(FIELD_ADDR(this, kProxyOffset))); |
-} |
- |
- |
ACCESSORS(JSValue, value, Object, kValueOffset) |
@@ -3307,6 +3288,74 @@ Object* FixedArray::Copy() { |
} |
+int JSObject::BodyDescriptor::SizeOf(Map* map, HeapObject* object) { |
+ return map->instance_size(); |
+} |
+ |
+ |
+void Proxy::ProxyIterateBody(ObjectVisitor* v) { |
+ v->VisitExternalReference( |
+ reinterpret_cast<Address *>(FIELD_ADDR(this, kProxyOffset))); |
+} |
+ |
+ |
+template<typename StaticVisitor> |
+void Proxy::ProxyIterateBody() { |
+ StaticVisitor::VisitExternalReference( |
+ reinterpret_cast<Address *>(FIELD_ADDR(this, kProxyOffset))); |
+} |
+ |
+ |
+void ExternalAsciiString::ExternalAsciiStringIterateBody(ObjectVisitor* v) { |
+ typedef v8::String::ExternalAsciiStringResource Resource; |
+ v->VisitExternalAsciiString( |
+ reinterpret_cast<Resource**>(FIELD_ADDR(this, kResourceOffset))); |
+} |
+ |
+ |
+template<typename StaticVisitor> |
+void ExternalAsciiString::ExternalAsciiStringIterateBody() { |
+ typedef v8::String::ExternalAsciiStringResource Resource; |
+ StaticVisitor::VisitExternalAsciiString( |
+ reinterpret_cast<Resource**>(FIELD_ADDR(this, kResourceOffset))); |
+} |
+ |
+ |
+void ExternalTwoByteString::ExternalTwoByteStringIterateBody(ObjectVisitor* v) { |
+ typedef v8::String::ExternalStringResource Resource; |
+ v->VisitExternalTwoByteString( |
+ reinterpret_cast<Resource**>(FIELD_ADDR(this, kResourceOffset))); |
+} |
+ |
+ |
+template<typename StaticVisitor> |
+void ExternalTwoByteString::ExternalTwoByteStringIterateBody() { |
+ typedef v8::String::ExternalStringResource Resource; |
+ StaticVisitor::VisitExternalTwoByteString( |
+ reinterpret_cast<Resource**>(FIELD_ADDR(this, kResourceOffset))); |
+} |
+ |
+#define SLOT_ADDR(obj, offset) \ |
+ reinterpret_cast<Object**>((obj)->address() + offset) |
+ |
+template<int start_offset, int end_offset, int size> |
+void FixedBodyDescriptor<start_offset, end_offset, size>::IterateBody( |
+ HeapObject* obj, |
+ ObjectVisitor* v) { |
+ v->VisitPointers(SLOT_ADDR(obj, start_offset), SLOT_ADDR(obj, end_offset)); |
+} |
+ |
+ |
+template<int start_offset> |
+void FlexibleBodyDescriptor<start_offset>::IterateBody(HeapObject* obj, |
+ int object_size, |
+ ObjectVisitor* v) { |
+ v->VisitPointers(SLOT_ADDR(obj, start_offset), SLOT_ADDR(obj, object_size)); |
+} |
+ |
+#undef SLOT_ADDR |
+ |
+ |
#undef CAST_ACCESSOR |
#undef INT_ACCESSORS |
#undef SMI_ACCESSORS |