| Index: src/compiler.cc
 | 
| diff --git a/src/compiler.cc b/src/compiler.cc
 | 
| index 8eb6ff577308015c0ec7ee0e7984d04d4e43ac81..0d5534927a826c961cf52e89adfd7b023843ae01 100644
 | 
| --- a/src/compiler.cc
 | 
| +++ b/src/compiler.cc
 | 
| @@ -1242,6 +1242,12 @@ bool Compiler::CompileForLiveEdit(Handle<Script> script) {
 | 
|    Isolate* isolate = script->GetIsolate();
 | 
|    DCHECK(AllowCompilation::IsAllowed(isolate));
 | 
|  
 | 
| +  // In order to ensure that live edit function info collection finds the newly
 | 
| +  // generated shared function infos, clear the script's list temporarily
 | 
| +  // and restore it at the end of this method.
 | 
| +  Handle<Object> old_function_infos(script->shared_function_infos(), isolate);
 | 
| +  script->set_shared_function_infos(Smi::FromInt(0));
 | 
| +
 | 
|    // Start a compilation.
 | 
|    Zone zone(isolate->allocator());
 | 
|    ParseInfo parse_info(&zone, script);
 | 
| @@ -1249,13 +1255,21 @@ bool Compiler::CompileForLiveEdit(Handle<Script> script) {
 | 
|    parse_info.set_global();
 | 
|    info.MarkAsDebug();
 | 
|    // TODO(635): support extensions.
 | 
| -  if (CompileToplevel(&info).is_null()) {
 | 
| +  const bool compilation_succeeded = !CompileToplevel(&info).is_null();
 | 
| +
 | 
| +  // Restore the original function info list in order to remain side-effect
 | 
| +  // free as much as possible, since some code expects the old shared function
 | 
| +  // infos to stick around.
 | 
| +  script->set_shared_function_infos(*old_function_infos);
 | 
| +
 | 
| +  if (!compilation_succeeded) {
 | 
|      return false;
 | 
|    }
 | 
|  
 | 
|    // Check postconditions on success.
 | 
|    DCHECK(!isolate->has_pending_exception());
 | 
| -  return true;
 | 
| +
 | 
| +  return compilation_succeeded;
 | 
|  }
 | 
|  
 | 
|  // TODO(turbofan): In the future, unoptimized code with deopt support could
 | 
| 
 |