| Index: src/heap/heap-inl.h
 | 
| diff --git a/src/heap/heap-inl.h b/src/heap/heap-inl.h
 | 
| index f40ac5616d159a33c638cca024d96fdab971ab59..183fc9d4f9bd6c500431ac913617d23fcae357a3 100644
 | 
| --- a/src/heap/heap-inl.h
 | 
| +++ b/src/heap/heap-inl.h
 | 
| @@ -497,6 +497,21 @@ AllocationMemento* Heap::FindAllocationMemento(HeapObject* object) {
 | 
|  }
 | 
|  
 | 
|  
 | 
| +bool Heap::CollectGarbage(AllocationSpace space, const char* gc_reason,
 | 
| +                          const GCFlags flags,
 | 
| +                          const GCCallbackFlags callback_flags) {
 | 
| +  const char* collector_reason = nullptr;
 | 
| +  GarbageCollector collector = SelectGarbageCollector(space, &collector_reason);
 | 
| +  set_current_gc_flags(flags);
 | 
| +  current_gc_callback_flags_ = callback_flags;
 | 
| +  const bool next_gc_likely_to_collect_more =
 | 
| +      CollectGarbage(collector, gc_reason, collector_reason);
 | 
| +  set_current_gc_flags(kNoGCFlags);
 | 
| +  current_gc_callback_flags_ = kNoGCCallbackFlags;
 | 
| +  return next_gc_likely_to_collect_more;
 | 
| +}
 | 
| +
 | 
| +
 | 
|  void Heap::UpdateAllocationSiteFeedback(HeapObject* object,
 | 
|                                          ScratchpadSlotMode mode) {
 | 
|    Heap* heap = object->GetHeap();
 | 
| @@ -542,14 +557,6 @@ void Heap::ScavengeObject(HeapObject** p, HeapObject* object) {
 | 
|  }
 | 
|  
 | 
|  
 | 
| -bool Heap::CollectGarbage(AllocationSpace space, const char* gc_reason,
 | 
| -                          const v8::GCCallbackFlags callbackFlags) {
 | 
| -  const char* collector_reason = NULL;
 | 
| -  GarbageCollector collector = SelectGarbageCollector(space, &collector_reason);
 | 
| -  return CollectGarbage(collector, gc_reason, collector_reason, callbackFlags);
 | 
| -}
 | 
| -
 | 
| -
 | 
|  Isolate* Heap::isolate() {
 | 
|    return reinterpret_cast<Isolate*>(
 | 
|        reinterpret_cast<intptr_t>(this) -
 | 
| @@ -570,28 +577,29 @@ Isolate* Heap::isolate() {
 | 
|      RETURN_VALUE;                                         \
 | 
|    }
 | 
|  
 | 
| -#define CALL_AND_RETRY(ISOLATE, FUNCTION_CALL, RETURN_VALUE, RETURN_EMPTY)    \
 | 
| -  do {                                                                        \
 | 
| -    AllocationResult __allocation__ = FUNCTION_CALL;                          \
 | 
| -    Object* __object__ = NULL;                                                \
 | 
| -    RETURN_OBJECT_UNLESS_RETRY(ISOLATE, RETURN_VALUE)                         \
 | 
| -    /* Two GCs before panicking.  In newspace will almost always succeed. */  \
 | 
| -    for (int __i__ = 0; __i__ < 2; __i__++) {                                 \
 | 
| -      (ISOLATE)->heap()->CollectGarbage(__allocation__.RetrySpace(),          \
 | 
| -                                        "allocation failure");                \
 | 
| -      __allocation__ = FUNCTION_CALL;                                         \
 | 
| -      RETURN_OBJECT_UNLESS_RETRY(ISOLATE, RETURN_VALUE)                       \
 | 
| -    }                                                                         \
 | 
| -    (ISOLATE)->counters()->gc_last_resort_from_handles()->Increment();        \
 | 
| -    (ISOLATE)->heap()->CollectAllAvailableGarbage("last resort gc");          \
 | 
| -    {                                                                         \
 | 
| -      AlwaysAllocateScope __scope__(ISOLATE);                                 \
 | 
| -      __allocation__ = FUNCTION_CALL;                                         \
 | 
| -    }                                                                         \
 | 
| -    RETURN_OBJECT_UNLESS_RETRY(ISOLATE, RETURN_VALUE)                         \
 | 
| -    /* TODO(1181417): Fix this. */                                            \
 | 
| -    v8::internal::Heap::FatalProcessOutOfMemory("CALL_AND_RETRY_LAST", true); \
 | 
| -    RETURN_EMPTY;                                                             \
 | 
| +#define CALL_AND_RETRY(ISOLATE, FUNCTION_CALL, RETURN_VALUE, RETURN_EMPTY)     \
 | 
| +  do {                                                                         \
 | 
| +    AllocationResult __allocation__ = FUNCTION_CALL;                           \
 | 
| +    Object* __object__ = NULL;                                                 \
 | 
| +    RETURN_OBJECT_UNLESS_RETRY(ISOLATE, RETURN_VALUE)                          \
 | 
| +    /* Two GCs before panicking.  In newspace will almost always succeed. */   \
 | 
| +    for (int __i__ = 0; __i__ < 2; __i__++) {                                  \
 | 
| +      (ISOLATE)->heap()->CollectGarbage(__allocation__.RetrySpace(),           \
 | 
| +                                        "allocation failure",                  \
 | 
| +                                        Heap::kNoGCFlags, kNoGCCallbackFlags); \
 | 
| +      __allocation__ = FUNCTION_CALL;                                          \
 | 
| +      RETURN_OBJECT_UNLESS_RETRY(ISOLATE, RETURN_VALUE)                        \
 | 
| +    }                                                                          \
 | 
| +    (ISOLATE)->counters()->gc_last_resort_from_handles()->Increment();         \
 | 
| +    (ISOLATE)->heap()->CollectAllAvailableGarbage("last resort gc");           \
 | 
| +    {                                                                          \
 | 
| +      AlwaysAllocateScope __scope__(ISOLATE);                                  \
 | 
| +      __allocation__ = FUNCTION_CALL;                                          \
 | 
| +    }                                                                          \
 | 
| +    RETURN_OBJECT_UNLESS_RETRY(ISOLATE, RETURN_VALUE)                          \
 | 
| +    /* TODO(1181417): Fix this. */                                             \
 | 
| +    v8::internal::Heap::FatalProcessOutOfMemory("CALL_AND_RETRY_LAST", true);  \
 | 
| +    RETURN_EMPTY;                                                              \
 | 
|    } while (false)
 | 
|  
 | 
|  #define CALL_AND_RETRY_OR_DIE(ISOLATE, FUNCTION_CALL, RETURN_VALUE, \
 | 
| 
 |