| 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;
 | 
| 
 |