| Index: src/compiler.cc
 | 
| diff --git a/src/compiler.cc b/src/compiler.cc
 | 
| index 86dbe8fcf0aa13910140a038a3158eba53ddffa4..665fca5ddc3f98d0a4e487601c8fac1bb7dcf6c8 100644
 | 
| --- a/src/compiler.cc
 | 
| +++ b/src/compiler.cc
 | 
| @@ -221,6 +221,16 @@ CompilationInfo::~CompilationInfo() {
 | 
|  
 | 
|  
 | 
|  void CompilationInfo::CommitDependencies(Handle<Code> code) {
 | 
| +  bool has_dependencies = false;
 | 
| +  for (int i = 0; i < DependentCode::kGroupCount; i++) {
 | 
| +    has_dependencies |=
 | 
| +        dependencies_[i] != NULL && dependencies_[i]->length() > 0;
 | 
| +  }
 | 
| +  // Avoid creating a weak cell for code with no dependencies.
 | 
| +  if (!has_dependencies) return;
 | 
| +
 | 
| +  AllowDeferredHandleDereference get_object_wrapper;
 | 
| +  Handle<WeakCell> cell = Code::WeakCellFor(code);
 | 
|    for (int i = 0; i < DependentCode::kGroupCount; i++) {
 | 
|      ZoneList<Handle<HeapObject> >* group_objects = dependencies_[i];
 | 
|      if (group_objects == NULL) continue;
 | 
| @@ -230,7 +240,7 @@ void CompilationInfo::CommitDependencies(Handle<Code> code) {
 | 
|            static_cast<DependentCode::DependencyGroup>(i);
 | 
|        DependentCode* dependent_code =
 | 
|            DependentCode::ForObject(group_objects->at(j), group);
 | 
| -      dependent_code->UpdateToFinishedCode(group, this, *code);
 | 
| +      dependent_code->UpdateToFinishedCode(group, *object_wrapper(), *cell);
 | 
|      }
 | 
|      dependencies_[i] = NULL;  // Zone-allocated, no need to delete.
 | 
|    }
 | 
| @@ -238,6 +248,7 @@ void CompilationInfo::CommitDependencies(Handle<Code> code) {
 | 
|  
 | 
|  
 | 
|  void CompilationInfo::RollbackDependencies() {
 | 
| +  AllowDeferredHandleDereference get_object_wrapper;
 | 
|    // Unregister from all dependent maps if not yet committed.
 | 
|    for (int i = 0; i < DependentCode::kGroupCount; i++) {
 | 
|      ZoneList<Handle<HeapObject> >* group_objects = dependencies_[i];
 | 
| @@ -247,7 +258,7 @@ void CompilationInfo::RollbackDependencies() {
 | 
|            static_cast<DependentCode::DependencyGroup>(i);
 | 
|        DependentCode* dependent_code =
 | 
|            DependentCode::ForObject(group_objects->at(j), group);
 | 
| -      dependent_code->RemoveCompilationInfo(group, this);
 | 
| +      dependent_code->RemoveCompilationInfo(group, *object_wrapper());
 | 
|      }
 | 
|      dependencies_[i] = NULL;  // Zone-allocated, no need to delete.
 | 
|    }
 | 
| 
 |