| Index: src/heap/heap-inl.h
|
| diff --git a/src/heap/heap-inl.h b/src/heap/heap-inl.h
|
| index 6f7c060d70c9e53f41fd9802f21389920d2aec2b..172b862a4c5d75e430136ad88b504ae02a20eedd 100644
|
| --- a/src/heap/heap-inl.h
|
| +++ b/src/heap/heap-inl.h
|
| @@ -535,27 +535,27 @@ Isolate* Heap::isolate() {
|
| // Calls the FUNCTION_CALL function and retries it up to three times
|
| // to guarantee that any allocations performed during the call will
|
| // succeed if there's enough memory.
|
| +//
|
| +// Warning: Do not use the identifiers __object__, __maybe_object__,
|
| +// __allocation__ or __scope__ in a call to this macro.
|
|
|
| -// Warning: Do not use the identifiers __object__, __maybe_object__ or
|
| -// __scope__ in a call to this macro.
|
| -
|
| -#define RETURN_OBJECT_UNLESS_RETRY(ISOLATE, RETURN_VALUE) \
|
| +#define RETURN_OBJECT_UNLESS_RETRY(ISOLATE, TYPE) \
|
| if (__allocation__.To(&__object__)) { \
|
| DCHECK(__object__ != (ISOLATE)->heap()->exception()); \
|
| - RETURN_VALUE; \
|
| + return Handle<TYPE>(TYPE::cast(__object__), ISOLATE); \
|
| }
|
|
|
| -#define CALL_AND_RETRY(ISOLATE, FUNCTION_CALL, RETURN_VALUE, RETURN_EMPTY) \
|
| +#define CALL_HEAP_FUNCTION(ISOLATE, FUNCTION_CALL, TYPE) \
|
| do { \
|
| AllocationResult __allocation__ = FUNCTION_CALL; \
|
| Object* __object__ = NULL; \
|
| - RETURN_OBJECT_UNLESS_RETRY(ISOLATE, RETURN_VALUE) \
|
| + RETURN_OBJECT_UNLESS_RETRY(ISOLATE, TYPE) \
|
| /* 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) \
|
| + RETURN_OBJECT_UNLESS_RETRY(ISOLATE, TYPE) \
|
| } \
|
| (ISOLATE)->counters()->gc_last_resort_from_handles()->Increment(); \
|
| (ISOLATE)->heap()->CollectAllAvailableGarbage("last resort gc"); \
|
| @@ -563,25 +563,12 @@ Isolate* Heap::isolate() {
|
| AlwaysAllocateScope __scope__(ISOLATE); \
|
| __allocation__ = FUNCTION_CALL; \
|
| } \
|
| - RETURN_OBJECT_UNLESS_RETRY(ISOLATE, RETURN_VALUE) \
|
| + RETURN_OBJECT_UNLESS_RETRY(ISOLATE, TYPE) \
|
| /* TODO(1181417): Fix this. */ \
|
| v8::internal::Heap::FatalProcessOutOfMemory("CALL_AND_RETRY_LAST", true); \
|
| - RETURN_EMPTY; \
|
| + return Handle<TYPE>(); \
|
| } while (false)
|
|
|
| -#define CALL_AND_RETRY_OR_DIE(ISOLATE, FUNCTION_CALL, RETURN_VALUE, \
|
| - RETURN_EMPTY) \
|
| - CALL_AND_RETRY(ISOLATE, FUNCTION_CALL, RETURN_VALUE, RETURN_EMPTY)
|
| -
|
| -#define CALL_HEAP_FUNCTION(ISOLATE, FUNCTION_CALL, TYPE) \
|
| - CALL_AND_RETRY_OR_DIE(ISOLATE, FUNCTION_CALL, \
|
| - return Handle<TYPE>(TYPE::cast(__object__), ISOLATE), \
|
| - return Handle<TYPE>())
|
| -
|
| -
|
| -#define CALL_HEAP_FUNCTION_VOID(ISOLATE, FUNCTION_CALL) \
|
| - CALL_AND_RETRY_OR_DIE(ISOLATE, FUNCTION_CALL, return, return)
|
| -
|
|
|
| void Heap::ExternalStringTable::AddString(String* string) {
|
| DCHECK(string->IsExternalString());
|
|
|