| Index: src/factory.cc | 
| diff --git a/src/factory.cc b/src/factory.cc | 
| index 72974a317c18646800178b4c10340a85b444afcf..c500212b0a708c494ca10c35212458266f95fe2b 100644 | 
| --- a/src/factory.cc | 
| +++ b/src/factory.cc | 
| @@ -1358,6 +1358,14 @@ Handle<JSObject> Factory::NewFunctionPrototype(Handle<JSFunction> function) { | 
| } | 
|  | 
|  | 
| +static bool ShouldOptimizeNewClosure(Isolate* isolate, | 
| +                                     Handle<SharedFunctionInfo> info) { | 
| +  return isolate->use_crankshaft() && !info->is_toplevel() && | 
| +         info->is_compiled() && info->allows_lazy_compilation() && | 
| +         !info->optimization_disabled() && !isolate->DebuggerHasBreakPoints(); | 
| +} | 
| + | 
| + | 
| Handle<JSFunction> Factory::NewFunctionFromSharedFunctionInfo( | 
| Handle<SharedFunctionInfo> info, | 
| Handle<Context> context, | 
| @@ -1395,14 +1403,11 @@ Handle<JSFunction> Factory::NewFunctionFromSharedFunctionInfo( | 
| return result; | 
| } | 
|  | 
| -  if (isolate()->use_crankshaft() && | 
| -      FLAG_always_opt && | 
| -      result->is_compiled() && | 
| -      !info->is_toplevel() && | 
| -      info->allows_lazy_compilation() && | 
| -      !info->optimization_disabled() && | 
| -      !isolate()->DebuggerHasBreakPoints()) { | 
| +  if (FLAG_always_opt && ShouldOptimizeNewClosure(isolate(), info)) { | 
| result->MarkForOptimization(); | 
| +  } else if (info->optimize_next_closure() && | 
| +             ShouldOptimizeNewClosure(isolate(), info)) { | 
| +    result->AttemptConcurrentOptimization(); | 
| } | 
| return result; | 
| } | 
|  |