| Index: src/objects-inl.h
|
| ===================================================================
|
| --- src/objects-inl.h (revision 508)
|
| +++ src/objects-inl.h (working copy)
|
| @@ -627,23 +627,19 @@
|
|
|
|
|
| bool MapWord::IsForwardingAddress() {
|
| - // This function only works for map words that are heap object pointers.
|
| - // Since it is a heap object, it has a map. We use that map's instance
|
| - // type to detect if this map word is not actually a map (ie, it is a
|
| - // forwarding address during a scavenge collection).
|
| - return reinterpret_cast<HeapObject*>(value_)->map()->instance_type() !=
|
| - MAP_TYPE;
|
| + return HAS_SMI_TAG(reinterpret_cast<Object*>(value_));
|
| }
|
|
|
|
|
| MapWord MapWord::FromForwardingAddress(HeapObject* object) {
|
| - return MapWord(reinterpret_cast<uintptr_t>(object));
|
| + Address raw = reinterpret_cast<Address>(object) - kHeapObjectTag;
|
| + return MapWord(reinterpret_cast<uintptr_t>(raw));
|
| }
|
|
|
|
|
| HeapObject* MapWord::ToForwardingAddress() {
|
| ASSERT(IsForwardingAddress());
|
| - return reinterpret_cast<HeapObject*>(value_);
|
| + return HeapObject::FromAddress(reinterpret_cast<Address>(value_));
|
| }
|
|
|
|
|
|
|