| Index: src/regexp/regexp-macro-assembler.cc
|
| diff --git a/src/regexp/regexp-macro-assembler.cc b/src/regexp/regexp-macro-assembler.cc
|
| index 755b604f8c02fd52b2b43bd529f94d1fd451b13f..2e3a8a2f76877eb90bac9dd699ae03ba1e86a505 100644
|
| --- a/src/regexp/regexp-macro-assembler.cc
|
| +++ b/src/regexp/regexp-macro-assembler.cc
|
| @@ -170,18 +170,15 @@
|
| bool is_one_byte = subject_handle->IsOneByteRepresentationUnderneath();
|
|
|
| StackLimitCheck check(isolate);
|
| - bool js_has_overflowed = check.JsHasOverflowed();
|
| -
|
| - if (is_direct_call) {
|
| - // Direct calls from JavaScript can be interrupted in two ways:
|
| - // 1. A real stack overflow, in which case we let the caller throw the
|
| - // exception.
|
| - // 2. The stack guard was used to interrupt execution for another purpose,
|
| - // forcing the call through the runtime system.
|
| - return_value = js_has_overflowed ? EXCEPTION : RETRY;
|
| - } else if (js_has_overflowed) {
|
| + if (check.JsHasOverflowed()) {
|
| isolate->StackOverflow();
|
| return_value = EXCEPTION;
|
| + } else if (is_direct_call) {
|
| + // If not real stack overflow the stack guard was used to interrupt
|
| + // execution for another purpose. If this is a direct call from JavaScript
|
| + // retry the RegExp forcing the call through the runtime system.
|
| + // Currently the direct call cannot handle a GC.
|
| + return_value = RETRY;
|
| } else {
|
| Object* result = isolate->stack_guard()->HandleInterrupts();
|
| if (result->IsException(isolate)) return_value = EXCEPTION;
|
|
|