| Index: src/objects-inl.h | 
| =================================================================== | 
| --- src/objects-inl.h	(revision 5298) | 
| +++ src/objects-inl.h	(working copy) | 
| @@ -35,9 +35,10 @@ | 
| #ifndef V8_OBJECTS_INL_H_ | 
| #define V8_OBJECTS_INL_H_ | 
|  | 
| -#include "objects.h" | 
| +#include "memory.h" | 
| #include "contexts.h" | 
| #include "conversions-inl.h" | 
| +#include "objects.h" | 
| #include "property.h" | 
|  | 
| namespace v8 { | 
| @@ -2402,6 +2403,12 @@ | 
| } | 
|  | 
|  | 
| +Object* Code::GetObjectFromEntryAddress(Address location_of_address) { | 
| +  return HeapObject:: | 
| +      FromAddress(Memory::Address_at(location_of_address) - Code::kHeaderSize); | 
| +} | 
| + | 
| + | 
| Object* Map::prototype() { | 
| return READ_FIELD(this, kPrototypeOffset); | 
| } | 
| @@ -2731,19 +2738,21 @@ | 
|  | 
|  | 
| Code* JSFunction::code() { | 
| -  return Code::cast(READ_FIELD(this, kCodeOffset)); | 
| +  return Code::cast(unchecked_code()); | 
| } | 
|  | 
|  | 
| Code* JSFunction::unchecked_code() { | 
| -  return reinterpret_cast<Code*>(READ_FIELD(this, kCodeOffset)); | 
| +  return reinterpret_cast<Code*>( | 
| +      Code::GetObjectFromEntryAddress(FIELD_ADDR(this, kCodeEntryOffset))); | 
| } | 
|  | 
|  | 
| void JSFunction::set_code(Code* value) { | 
| // Skip the write barrier because code is never in new space. | 
| ASSERT(!Heap::InNewSpace(value)); | 
| -  WRITE_FIELD(this, kCodeOffset, value); | 
| +  Address entry = value->entry(); | 
| +  WRITE_INTPTR_FIELD(this, kCodeEntryOffset, reinterpret_cast<intptr_t>(entry)); | 
| } | 
|  | 
|  | 
|  |