| Index: src/runtime/runtime-debug.cc
|
| diff --git a/src/runtime/runtime-debug.cc b/src/runtime/runtime-debug.cc
|
| index 8bdec1061b1f92af06c7938db61fdbe7d9b7c83c..1ffaa5f95cab4d1e06d8f0b7b70b47c73c0068ec 100644
|
| --- a/src/runtime/runtime-debug.cc
|
| +++ b/src/runtime/runtime-debug.cc
|
| @@ -1633,50 +1633,15 @@ bool DebugStepInIsActive(Debug* debug) {
|
| }
|
|
|
|
|
| -// Check whether debugger is about to step into the callback that is passed
|
| -// to a built-in function such as Array.forEach. This check is done before
|
| -// %DebugPrepareStepInIfStepping and is not strictly necessary. However, if it
|
| -// returns false, we can skip %DebugPrepareStepInIfStepping, useful in loops.
|
| -RUNTIME_FUNCTION(Runtime_DebugCallbackSupportsStepping) {
|
| - SealHandleScope shs(isolate);
|
| - DCHECK(args.length() == 1);
|
| - if (!DebugStepInIsActive(isolate->debug())) {
|
| - return isolate->heap()->false_value();
|
| - }
|
| - CONVERT_ARG_CHECKED(Object, object, 0);
|
| - RUNTIME_ASSERT(object->IsJSFunction() || object->IsJSGeneratorObject());
|
| - // We do not step into the callback if it's a builtin other than a bound,
|
| - // or not even a function.
|
| - JSFunction* fun;
|
| - if (object->IsJSFunction()) {
|
| - fun = JSFunction::cast(object);
|
| - } else {
|
| - fun = JSGeneratorObject::cast(object)->function();
|
| - }
|
| - return isolate->heap()->ToBoolean(fun->shared()->IsSubjectToDebugging() ||
|
| - fun->shared()->bound());
|
| -}
|
| -
|
| -
|
| -void FloodDebugSubjectWithOneShot(Debug* debug, Handle<JSFunction> function) {
|
| - if (function->shared()->IsSubjectToDebugging() ||
|
| - function->shared()->bound()) {
|
| - // When leaving the function, step out has been activated, but not performed
|
| - // if we do not leave the builtin. To be able to step into the function
|
| - // again, we need to clear the step out at this point.
|
| - debug->ClearStepOut();
|
| - debug->FloodWithOneShotGeneric(function);
|
| - }
|
| -}
|
| -
|
| -
|
| // Set one shot breakpoints for the callback function that is passed to a
|
| // built-in function such as Array.forEach to enable stepping into the callback,
|
| // if we are indeed stepping and the callback is subject to debugging.
|
| RUNTIME_FUNCTION(Runtime_DebugPrepareStepInIfStepping) {
|
| DCHECK(args.length() == 1);
|
| Debug* debug = isolate->debug();
|
| - if (!DebugStepInIsActive(debug)) return isolate->heap()->undefined_value();
|
| + if (debug->in_debug_scope() || !DebugStepInIsActive(debug)) {
|
| + return isolate->heap()->undefined_value();
|
| + }
|
|
|
| HandleScope scope(isolate);
|
| CONVERT_ARG_HANDLE_CHECKED(Object, object, 0);
|
| @@ -1689,22 +1654,18 @@ RUNTIME_FUNCTION(Runtime_DebugPrepareStepInIfStepping) {
|
| Handle<JSGeneratorObject>::cast(object)->function(), isolate);
|
| }
|
|
|
| - FloodDebugSubjectWithOneShot(debug, fun);
|
| + debug->ClearStepOut();
|
| + debug->FloodWithOneShotGeneric(fun);
|
| return isolate->heap()->undefined_value();
|
| }
|
|
|
|
|
| RUNTIME_FUNCTION(Runtime_DebugPushPromise) {
|
| - DCHECK(args.length() == 3);
|
| + DCHECK(args.length() == 2);
|
| HandleScope scope(isolate);
|
| CONVERT_ARG_HANDLE_CHECKED(JSObject, promise, 0);
|
| CONVERT_ARG_HANDLE_CHECKED(JSFunction, function, 1);
|
| - CONVERT_ARG_HANDLE_CHECKED(Object, handler, 2);
|
| isolate->PushPromise(promise, function);
|
| - Debug* debug = isolate->debug();
|
| - if (handler->IsJSFunction() && DebugStepInIsActive(debug)) {
|
| - FloodDebugSubjectWithOneShot(debug, Handle<JSFunction>::cast(handler));
|
| - }
|
| return isolate->heap()->undefined_value();
|
| }
|
|
|
|
|