| 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
|
|
|