Chromium Code Reviews| Index: src/debug.cc | 
| diff --git a/src/debug.cc b/src/debug.cc | 
| index 7fe9064e989a1e0bd44c1102ea2b8b5025f5dc91..45f465c0efc55fdb7a215c2e9aef4a1d29fe9a22 100644 | 
| --- a/src/debug.cc | 
| +++ b/src/debug.cc | 
| @@ -1225,7 +1225,31 @@ void Debug::FloodBoundFunctionWithOneShot(Handle<JSFunction> function) { | 
| if (!bindee.is_null() && bindee->IsJSFunction() && | 
| !JSFunction::cast(*bindee)->IsFromNativeScript()) { | 
| Handle<JSFunction> bindee_function(JSFunction::cast(*bindee)); | 
| - FloodWithOneShot(bindee_function); | 
| + if (bindee_function->shared()->is_default_constructor()) { | 
| + FloodDefaultConstructorWithOneShot(bindee_function); | 
| + } else { | 
| + FloodWithOneShot(bindee_function); | 
| + } | 
| + } | 
| +} | 
| + | 
| + | 
| +void Debug::FloodDefaultConstructorWithOneShot(Handle<JSFunction> function) { | 
| + DCHECK(function->shared()->is_default_constructor()); | 
| + // Instead of stepping into the function we directly step into the super class | 
| + // constructor. | 
| + Isolate* isolate = function->GetIsolate(); | 
| + PrototypeIterator iter(isolate, function); | 
| + Handle<Object> proto = PrototypeIterator::GetCurrent(iter); | 
| + if (!proto->IsJSFunction()) return; // Object.prototype | 
| + Handle<JSFunction> function_proto = Handle<JSFunction>::cast(proto); | 
| + | 
| + if (function_proto->shared()->bound()) { | 
| 
 
aandrey
2014/11/14 19:27:13
this if-else block is repeated several times below
 
arv (Not doing code reviews)
2014/11/14 22:02:22
Done.
 
 | 
| + FloodBoundFunctionWithOneShot(function_proto); | 
| + } else if (function_proto->shared()->is_default_constructor()) { | 
| + FloodDefaultConstructorWithOneShot(function_proto); | 
| + } else if (!function_proto->IsFromNativeScript()) { | 
| + FloodWithOneShot(function_proto); | 
| } | 
| } | 
| @@ -1466,6 +1490,8 @@ void Debug::PrepareStep(StepAction step_action, | 
| Handle<JSFunction> js_function(JSFunction::cast(fun)); | 
| if (js_function->shared()->bound()) { | 
| 
 
aandrey
2014/11/14 19:27:13
repeated again
 
arv (Not doing code reviews)
2014/11/14 22:02:22
Done.
 
 | 
| FloodBoundFunctionWithOneShot(js_function); | 
| + } else if (js_function->shared()->is_default_constructor()) { | 
| + FloodDefaultConstructorWithOneShot(js_function); | 
| } else if (!js_function->IsFromNativeScript()) { | 
| // Don't step into builtins. | 
| // It will also compile target function if it's not compiled yet. | 
| @@ -1615,6 +1641,8 @@ void Debug::HandleStepIn(Handle<Object> function_obj, Handle<Object> holder, | 
| if (function->shared()->bound()) { | 
| 
 
aandrey
2014/11/14 19:27:13
repeated once more.
 
arv (Not doing code reviews)
2014/11/14 22:02:22
Done.
 
 | 
| // Handle Function.prototype.bind | 
| FloodBoundFunctionWithOneShot(function); | 
| + } else if (function->shared()->is_default_constructor()) { | 
| + FloodDefaultConstructorWithOneShot(function); | 
| } else if (!function->IsFromNativeScript()) { | 
| // Don't allow step into functions in the native context. | 
| if (function->shared()->code() == | 
| 
 
aandrey
2014/11/14 19:27:13
maybe the following apply & call checks should be
 
arv (Not doing code reviews)
2014/11/14 22:02:22
This is the only place where we have the holder.
 
 | 
| @@ -1632,6 +1660,8 @@ void Debug::HandleStepIn(Handle<Object> function_obj, Handle<Object> holder, | 
| } else if (js_function->shared()->bound()) { | 
| // Handle Function.prototype.bind | 
| FloodBoundFunctionWithOneShot(js_function); | 
| + } else if (js_function->shared()->is_default_constructor()) { | 
| + FloodDefaultConstructorWithOneShot(js_function); | 
| } | 
| } | 
| } else { |