| Index: src/objects.cc
 | 
| diff --git a/src/objects.cc b/src/objects.cc
 | 
| index 5f83f736ae0c33753b76f855e5a299d94bc2c9a9..8be7be32879115e7656a0fabc5708b439f04be32 100644
 | 
| --- a/src/objects.cc
 | 
| +++ b/src/objects.cc
 | 
| @@ -135,7 +135,7 @@ void Object::Lookup(String* name, LookupResult* result) {
 | 
|    if (IsJSReceiver()) {
 | 
|      holder = this;
 | 
|    } else {
 | 
| -    Context* native_context = Isolate::Current()->context()->native_context();
 | 
| +    Context* native_context = result->isolate()->context()->native_context();
 | 
|      if (IsNumber()) {
 | 
|        holder = native_context->number_function()->instance_prototype();
 | 
|      } else if (IsString()) {
 | 
| @@ -613,7 +613,8 @@ MaybeObject* Object::GetProperty(Object* receiver,
 | 
|    // Make sure that the top context does not change when doing
 | 
|    // callbacks or interceptor calls.
 | 
|    AssertNoContextChange ncc;
 | 
| -  Heap* heap = name->GetHeap();
 | 
| +  Isolate* isolate = name->GetIsolate();
 | 
| +  Heap* heap = isolate->heap();
 | 
|  
 | 
|    // Traverse the prototype chain from the current object (this) to
 | 
|    // the holder and check for access rights. This avoids traversing the
 | 
| @@ -626,8 +627,10 @@ MaybeObject* Object::GetProperty(Object* receiver,
 | 
|      Object* last = result->IsProperty()
 | 
|          ? result->holder()
 | 
|          : Object::cast(heap->null_value());
 | 
| -    ASSERT(this != this->GetPrototype());
 | 
| -    for (Object* current = this; true; current = current->GetPrototype()) {
 | 
| +    ASSERT(this != this->GetPrototype(isolate));
 | 
| +    for (Object* current = this;
 | 
| +         true;
 | 
| +         current = current->GetPrototype(isolate)) {
 | 
|        if (current->IsAccessCheckNeeded()) {
 | 
|          // Check if we're allowed to read from the current object. Note
 | 
|          // that even though we may not actually end up loading the named
 | 
| @@ -687,18 +690,18 @@ MaybeObject* Object::GetProperty(Object* receiver,
 | 
|  
 | 
|  
 | 
|  MaybeObject* Object::GetElementWithReceiver(Object* receiver, uint32_t index) {
 | 
| -  Heap* heap = IsSmi()
 | 
| -      ? Isolate::Current()->heap()
 | 
| -      : HeapObject::cast(this)->GetHeap();
 | 
| +  Isolate* isolate = IsSmi()
 | 
| +      ? Isolate::Current()
 | 
| +      : HeapObject::cast(this)->GetIsolate();
 | 
| +  Heap* heap = isolate->heap();
 | 
|    Object* holder = this;
 | 
|  
 | 
|    // Iterate up the prototype chain until an element is found or the null
 | 
|    // prototype is encountered.
 | 
|    for (holder = this;
 | 
|         holder != heap->null_value();
 | 
| -       holder = holder->GetPrototype()) {
 | 
| +       holder = holder->GetPrototype(isolate)) {
 | 
|      if (!holder->IsJSObject()) {
 | 
| -      Isolate* isolate = heap->isolate();
 | 
|        Context* native_context = isolate->context()->native_context();
 | 
|        if (holder->IsNumber()) {
 | 
|          holder = native_context->number_function()->instance_prototype();
 | 
| @@ -744,10 +747,9 @@ MaybeObject* Object::GetElementWithReceiver(Object* receiver, uint32_t index) {
 | 
|  }
 | 
|  
 | 
|  
 | 
| -Object* Object::GetPrototype() {
 | 
| +Object* Object::GetPrototype(Isolate* isolate) {
 | 
|    if (IsSmi()) {
 | 
| -    Heap* heap = Isolate::Current()->heap();
 | 
| -    Context* context = heap->isolate()->context()->native_context();
 | 
| +    Context* context = isolate->context()->native_context();
 | 
|      return context->number_function()->instance_prototype();
 | 
|    }
 | 
|  
 | 
| @@ -758,8 +760,7 @@ Object* Object::GetPrototype() {
 | 
|    if (heap_object->IsJSReceiver()) {
 | 
|      return heap_object->map()->prototype();
 | 
|    }
 | 
| -  Heap* heap = heap_object->GetHeap();
 | 
| -  Context* context = heap->isolate()->context()->native_context();
 | 
| +  Context* context = isolate->context()->native_context();
 | 
|  
 | 
|    if (heap_object->IsHeapNumber()) {
 | 
|      return context->number_function()->instance_prototype();
 | 
| @@ -770,7 +771,7 @@ Object* Object::GetPrototype() {
 | 
|    if (heap_object->IsBoolean()) {
 | 
|      return context->boolean_function()->instance_prototype();
 | 
|    } else {
 | 
| -    return heap->null_value();
 | 
| +    return isolate->heap()->null_value();
 | 
|    }
 | 
|  }
 | 
|  
 | 
| @@ -2100,10 +2101,10 @@ MaybeObject* JSObject::SetElementWithCallbackSetterInPrototypes(
 | 
|    Heap* heap = GetHeap();
 | 
|    for (Object* pt = GetPrototype();
 | 
|         pt != heap->null_value();
 | 
| -       pt = pt->GetPrototype()) {
 | 
| +       pt = pt->GetPrototype(GetIsolate())) {
 | 
|      if (pt->IsJSProxy()) {
 | 
|        String* name;
 | 
| -      MaybeObject* maybe = GetHeap()->Uint32ToString(index);
 | 
| +      MaybeObject* maybe = heap->Uint32ToString(index);
 | 
|        if (!maybe->To<String>(&name)) {
 | 
|          *found = true;  // Force abort
 | 
|          return maybe;
 | 
| @@ -2503,10 +2504,11 @@ void JSObject::LookupRealNamedProperty(String* name, LookupResult* result) {
 | 
|  
 | 
|  void JSObject::LookupRealNamedPropertyInPrototypes(String* name,
 | 
|                                                     LookupResult* result) {
 | 
| -  Heap* heap = GetHeap();
 | 
| +  Isolate* isolate = GetIsolate();
 | 
| +  Heap* heap = isolate->heap();
 | 
|    for (Object* pt = GetPrototype();
 | 
|         pt != heap->null_value();
 | 
| -       pt = pt->GetPrototype()) {
 | 
| +       pt = pt->GetPrototype(isolate)) {
 | 
|      if (pt->IsJSProxy()) {
 | 
|        return result->HandlerResult(JSProxy::cast(pt));
 | 
|      }
 | 
| @@ -8149,13 +8151,14 @@ bool SharedFunctionInfo::CanGenerateInlineConstructor(Object* prototype) {
 | 
|      return false;
 | 
|    }
 | 
|  
 | 
| -  Heap* heap = GetHeap();
 | 
| +  Isolate* isolate = GetIsolate();
 | 
| +  Heap* heap = isolate->heap();
 | 
|  
 | 
|    // Traverse the proposed prototype chain looking for properties of the
 | 
|    // same names as are set by the inline constructor.
 | 
|    for (Object* obj = prototype;
 | 
|         obj != heap->null_value();
 | 
| -       obj = obj->GetPrototype()) {
 | 
| +       obj = obj->GetPrototype(isolate)) {
 | 
|      JSReceiver* receiver = JSReceiver::cast(obj);
 | 
|      for (int i = 0; i < this_property_assignments_count(); i++) {
 | 
|        LookupResult result(heap->isolate());
 | 
| @@ -9611,7 +9614,8 @@ MaybeObject* JSReceiver::SetPrototype(Object* value,
 | 
|    int size = Size();
 | 
|  #endif
 | 
|  
 | 
| -  Heap* heap = GetHeap();
 | 
| +  Isolate* isolate = GetIsolate();
 | 
| +  Heap* heap = isolate->heap();
 | 
|    // Silently ignore the change if value is not a JSObject or null.
 | 
|    // SpiderMonkey behaves this way.
 | 
|    if (!value->IsJSReceiver() && !value->IsNull()) return value;
 | 
| @@ -9625,22 +9629,24 @@ MaybeObject* JSReceiver::SetPrototype(Object* value,
 | 
|    // or [[Extensible]] must not violate the invariants defined in the preceding
 | 
|    // paragraph.
 | 
|    if (!this->map()->is_extensible()) {
 | 
| -    HandleScope scope(heap->isolate());
 | 
| -    Handle<Object> handle(this, heap->isolate());
 | 
| -    return heap->isolate()->Throw(
 | 
| -        *FACTORY->NewTypeError("non_extensible_proto",
 | 
| -                               HandleVector<Object>(&handle, 1)));
 | 
| +    HandleScope scope(isolate);
 | 
| +    Handle<Object> handle(this, isolate);
 | 
| +    return isolate->Throw(
 | 
| +        *isolate->factory()->NewTypeError("non_extensible_proto",
 | 
| +                                          HandleVector<Object>(&handle, 1)));
 | 
|    }
 | 
|  
 | 
|    // Before we can set the prototype we need to be sure
 | 
|    // prototype cycles are prevented.
 | 
|    // It is sufficient to validate that the receiver is not in the new prototype
 | 
|    // chain.
 | 
| -  for (Object* pt = value; pt != heap->null_value(); pt = pt->GetPrototype()) {
 | 
| +  for (Object* pt = value;
 | 
| +       pt != heap->null_value();
 | 
| +       pt = pt->GetPrototype(isolate)) {
 | 
|      if (JSReceiver::cast(pt) == this) {
 | 
|        // Cycle detected.
 | 
| -      HandleScope scope(heap->isolate());
 | 
| -      return heap->isolate()->Throw(
 | 
| +      HandleScope scope(isolate);
 | 
| +      return isolate->Throw(
 | 
|            *FACTORY->NewError("cyclic_proto", HandleVector<Object>(NULL, 0)));
 | 
|      }
 | 
|    }
 | 
| @@ -9654,7 +9660,7 @@ MaybeObject* JSReceiver::SetPrototype(Object* value,
 | 
|      while (current_proto->IsJSObject() &&
 | 
|            JSReceiver::cast(current_proto)->map()->is_hidden_prototype()) {
 | 
|        real_receiver = JSReceiver::cast(current_proto);
 | 
| -      current_proto = current_proto->GetPrototype();
 | 
| +      current_proto = current_proto->GetPrototype(isolate);
 | 
|      }
 | 
|    }
 | 
|  
 | 
| 
 |