Index: src/objects.cc |
diff --git a/src/objects.cc b/src/objects.cc |
index d2ffb9c3c81a5871cbe8ffd159c1e223c4c8a142..f5fa2997348e1d662120c352cdecd455bd34a053 100644 |
--- a/src/objects.cc |
+++ b/src/objects.cc |
@@ -2486,8 +2486,7 @@ void Map::DeprecateTransitionTree() { |
deprecate(); |
dependent_code()->DeoptimizeDependentCodeGroup( |
GetIsolate(), DependentCode::kTransitionGroup); |
- dependent_code()->DeoptimizeDependentCodeGroup( |
- GetIsolate(), DependentCode::kPrototypeCheckGroup); |
+ NotifyLeafMapLayoutChange(); |
} |
@@ -3949,7 +3948,7 @@ MaybeObject* JSObject::SetPropertyForResult(LookupResult* lookup, |
Handle<Object> hresult; |
if (!result->ToHandle(&hresult, isolate)) return result; |
- if (FLAG_harmony_observation && map()->is_observed()) { |
+ if (FLAG_harmony_observation && self->map()->is_observed()) { |
if (lookup->IsTransition()) { |
EnqueueChangeRecord(self, "new", name, old_value); |
} else { |
@@ -6495,6 +6494,7 @@ MaybeObject* Map::RawCopy(int instance_size) { |
new_bit_field3 = NumberOfOwnDescriptorsBits::update(new_bit_field3, 0); |
new_bit_field3 = EnumLengthBits::update(new_bit_field3, kInvalidEnumCache); |
new_bit_field3 = Deprecated::update(new_bit_field3, false); |
+ new_bit_field3 = IsUnstable::update(new_bit_field3, false); |
result->set_bit_field3(new_bit_field3); |
return result; |
} |
@@ -7023,12 +7023,6 @@ class IntrusiveMapTransitionIterator { |
return transition_array_->GetTarget(index); |
} |
- if (index == number_of_transitions && |
- transition_array_->HasElementsTransition()) { |
- Map* elements_transition = transition_array_->elements_transition(); |
- *TransitionArrayHeader() = Smi::FromInt(index + 1); |
- return elements_transition; |
- } |
*TransitionArrayHeader() = transition_array_->GetHeap()->fixed_array_map(); |
return NULL; |
} |
@@ -9145,18 +9139,10 @@ void Map::ClearNonLiveTransitions(Heap* heap) { |
} |
} |
- if (t->HasElementsTransition() && |
- ClearBackPointer(heap, t->elements_transition())) { |
- if (t->elements_transition()->instance_descriptors() == descriptors) { |
- descriptors_owner_died = true; |
- } |
- t->ClearElementsTransition(); |
- } else { |
- // If there are no transitions to be cleared, return. |
- // TODO(verwaest) Should be an assert, otherwise back pointers are not |
- // properly cleared. |
- if (transition_index == t->number_of_transitions()) return; |
- } |
+ // If there are no transitions to be cleared, return. |
+ // TODO(verwaest) Should be an assert, otherwise back pointers are not |
+ // properly cleared. |
+ if (transition_index == t->number_of_transitions()) return; |
int number_of_own_descriptors = NumberOfOwnDescriptors(); |
@@ -9234,7 +9220,6 @@ void JSFunction::MarkForLazyRecompilation() { |
ASSERT(!IsOptimized()); |
ASSERT(shared()->allows_lazy_compilation() || |
code()->optimizable()); |
- ASSERT(!shared()->is_generator()); |
set_code_no_write_barrier( |
GetIsolate()->builtins()->builtin(Builtins::kLazyRecompile)); |
// No write barrier required, since the builtin is part of the root set. |
@@ -9245,8 +9230,10 @@ void JSFunction::MarkForParallelRecompilation() { |
ASSERT(is_compiled() || GetIsolate()->DebuggerHasBreakPoints()); |
ASSERT(!IsOptimized()); |
ASSERT(shared()->allows_lazy_compilation() || code()->optimizable()); |
- ASSERT(!shared()->is_generator()); |
- ASSERT(FLAG_parallel_recompilation); |
+ if (!FLAG_parallel_recompilation) { |
+ JSFunction::MarkForLazyRecompilation(); |
+ return; |
+ } |
if (FLAG_trace_parallel_recompilation) { |
PrintF(" ** Marking "); |
PrintName(); |
@@ -9817,7 +9804,7 @@ void SharedFunctionInfo::EnableDeoptimizationSupport(Code* recompiled) { |
} |
-void SharedFunctionInfo::DisableOptimization(const char* reason) { |
+void SharedFunctionInfo::DisableOptimization(BailoutReason reason) { |
// Disable optimization for the shared function info and mark the |
// code as non-optimizable. The marker on the shared function info |
// is there because we flush non-optimized code thereby loosing the |
@@ -9835,7 +9822,7 @@ void SharedFunctionInfo::DisableOptimization(const char* reason) { |
if (FLAG_trace_opt) { |
PrintF("[disabled optimization for "); |
ShortPrint(); |
- PrintF(", reason: %s]\n", reason); |
+ PrintF(", reason: %s]\n", GetBailoutReason(reason)); |
} |
} |
@@ -15977,4 +15964,15 @@ void PropertyCell::AddDependentCode(Handle<Code> code) { |
} |
+const char* GetBailoutReason(BailoutReason reason) { |
+ ASSERT(reason < kLastErrorMessage); |
+#define ERROR_MESSAGES_TEXTS(C, T) T, |
+ static const char* error_messages_[] = { |
+ ERROR_MESSAGES_LIST(ERROR_MESSAGES_TEXTS) |
+ }; |
+#undef ERROR_MESSAGES_TEXTS |
+ return error_messages_[reason]; |
+} |
+ |
+ |
} } // namespace v8::internal |