| Index: src/objects.cc
 | 
| diff --git a/src/objects.cc b/src/objects.cc
 | 
| index c484eabe9183401b1b3cce2e571efb85d66ae879..45c695213ad5e6b69e0a8799f6bcfdfb2732a6a7 100644
 | 
| --- a/src/objects.cc
 | 
| +++ b/src/objects.cc
 | 
| @@ -9185,19 +9185,20 @@ Handle<String> SeqString::Truncate(Handle<SeqString> string, int new_length) {
 | 
|  
 | 
|  
 | 
|  AllocationMemento* AllocationMemento::FindForHeapObject(HeapObject* object,
 | 
| +                                                        Heap* heap,
 | 
|                                                          bool in_GC) {
 | 
|    // AllocationMemento objects are only allocated immediately after objects in
 | 
|    // NewSpace. Detecting whether a memento is present involves carefully
 | 
|    // checking the object immediately after the current object (if there is one)
 | 
|    // to see if it's an AllocationMemento.
 | 
| -  ASSERT(object->GetHeap()->InNewSpace(object));
 | 
| +  ASSERT(heap->InNewSpace(object));
 | 
|    Address ptr_end = (reinterpret_cast<Address>(object) - kHeapObjectTag) +
 | 
|        object->Size();
 | 
|    Address top;
 | 
|    if (in_GC) {
 | 
| -    top = object->GetHeap()->new_space()->FromSpacePageHigh();
 | 
| +    top = heap->new_space()->FromSpacePageHigh();
 | 
|    } else {
 | 
| -    top = object->GetHeap()->NewSpaceTop();
 | 
| +    top = heap->NewSpaceTop();
 | 
|    }
 | 
|    if ((ptr_end + AllocationMemento::kSize) <= top) {
 | 
|      // There is room in newspace for allocation info. Do we have some?
 | 
| @@ -12775,6 +12776,24 @@ void JSObject::TransitionElementsKind(Handle<JSObject> object,
 | 
|  const double AllocationSite::kPretenureRatio = 0.60;
 | 
|  
 | 
|  
 | 
| +void AllocationSite::ResetPretenureDecision() {
 | 
| +  dependent_code()->DeoptimizeDependentCodeGroup(
 | 
| +      GetIsolate(),
 | 
| +      DependentCode::kAllocationSiteTenuringChangedGroup);
 | 
| +  set_pretenure_decision(Smi::FromInt(kUndecided));
 | 
| +  set_memento_found_count(Smi::FromInt(0));
 | 
| +  set_memento_create_count(Smi::FromInt(0));
 | 
| +}
 | 
| +
 | 
| +
 | 
| +PretenureFlag AllocationSite::GetPretenureMode() {
 | 
| +  int mode = pretenure_decision()->value();
 | 
| +  // Zombie objects "decide" to be untenured.
 | 
| +  return (mode == kTenure && GetHeap()->GetPretenureMode() == TENURED)
 | 
| +      ? TENURED : NOT_TENURED;
 | 
| +}
 | 
| +
 | 
| +
 | 
|  bool AllocationSite::IsNestedSite() {
 | 
|    ASSERT(FLAG_trace_track_allocation_sites);
 | 
|    Object* current = GetHeap()->allocation_sites_list();
 | 
| @@ -12873,9 +12892,10 @@ MaybeObject* JSObject::UpdateAllocationSite(ElementsKind to_kind) {
 | 
|      return this;
 | 
|    }
 | 
|  
 | 
| -  if (!GetHeap()->InNewSpace(this)) return this;
 | 
| +  Heap* heap = GetHeap();
 | 
| +  if (!heap->InNewSpace(this)) return this;
 | 
|  
 | 
| -  AllocationMemento* memento = AllocationMemento::FindForHeapObject(this);
 | 
| +  AllocationMemento* memento = AllocationMemento::FindForHeapObject(this, heap);
 | 
|    if (memento == NULL || !memento->IsValid()) {
 | 
|      return this;
 | 
|    }
 | 
| 
 |