| OLD | NEW | 
|---|
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. | 
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without | 
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are | 
| 4 // met: | 4 // met: | 
| 5 // | 5 // | 
| 6 //     * Redistributions of source code must retain the above copyright | 6 //     * Redistributions of source code must retain the above copyright | 
| 7 //       notice, this list of conditions and the following disclaimer. | 7 //       notice, this list of conditions and the following disclaimer. | 
| 8 //     * Redistributions in binary form must reproduce the above | 8 //     * Redistributions in binary form must reproduce the above | 
| 9 //       copyright notice, this list of conditions and the following | 9 //       copyright notice, this list of conditions and the following | 
| 10 //       disclaimer in the documentation and/or other materials provided | 10 //       disclaimer in the documentation and/or other materials provided | 
| (...skipping 5717 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 5728     set(kEnumerationIndexIndex, bridge_storage); | 5728     set(kEnumerationIndexIndex, bridge_storage); | 
| 5729   } | 5729   } | 
| 5730 } | 5730 } | 
| 5731 | 5731 | 
| 5732 | 5732 | 
| 5733 static bool InsertionPointFound(String* key1, String* key2) { | 5733 static bool InsertionPointFound(String* key1, String* key2) { | 
| 5734   return key1->Hash() > key2->Hash() || key1 == key2; | 5734   return key1->Hash() > key2->Hash() || key1 == key2; | 
| 5735 } | 5735 } | 
| 5736 | 5736 | 
| 5737 | 5737 | 
|  | 5738 void DescriptorArray::CopyFrom(Handle<DescriptorArray> dst, | 
|  | 5739                                int dst_index, | 
|  | 5740                                Handle<DescriptorArray> src, | 
|  | 5741                                int src_index, | 
|  | 5742                                const WhitenessWitness& witness) { | 
|  | 5743   CALL_HEAP_FUNCTION_VOID(dst->GetIsolate(), | 
|  | 5744                           dst->CopyFrom(dst_index, *src, src_index, witness)); | 
|  | 5745 } | 
|  | 5746 | 
|  | 5747 | 
|  | 5748 MaybeObject* DescriptorArray::CopyFrom(int dst_index, | 
|  | 5749                                        DescriptorArray* src, | 
|  | 5750                                        int src_index, | 
|  | 5751                                        const WhitenessWitness& witness) { | 
|  | 5752   Object* value = src->GetValue(src_index); | 
|  | 5753   PropertyDetails details(src->GetDetails(src_index)); | 
|  | 5754   if (details.type() == CALLBACKS && value->IsAccessorPair()) { | 
|  | 5755     MaybeObject* maybe_copy = | 
|  | 5756         AccessorPair::cast(value)->CopyWithoutTransitions(); | 
|  | 5757     if (!maybe_copy->To(&value)) return maybe_copy; | 
|  | 5758   } | 
|  | 5759   Descriptor desc(src->GetKey(src_index), value, details); | 
|  | 5760   Set(dst_index, &desc, witness); | 
|  | 5761   return this; | 
|  | 5762 } | 
|  | 5763 | 
|  | 5764 | 
| 5738 MaybeObject* DescriptorArray::CopyInsert(Descriptor* descriptor, | 5765 MaybeObject* DescriptorArray::CopyInsert(Descriptor* descriptor, | 
| 5739                                          TransitionFlag transition_flag) { | 5766                                          TransitionFlag transition_flag) { | 
| 5740   // Transitions are only kept when inserting another transition. | 5767   // Transitions are only kept when inserting another transition. | 
| 5741   // This precondition is not required by this function's implementation, but | 5768   // This precondition is not required by this function's implementation, but | 
| 5742   // is currently required by the semantics of maps, so we check it. | 5769   // is currently required by the semantics of maps, so we check it. | 
| 5743   // Conversely, we filter after replacing, so replacing a transition and | 5770   // Conversely, we filter after replacing, so replacing a transition and | 
| 5744   // removing all other transitions is not supported. | 5771   // removing all other transitions is not supported. | 
| 5745   bool remove_transitions = transition_flag == REMOVE_TRANSITIONS; | 5772   bool remove_transitions = transition_flag == REMOVE_TRANSITIONS; | 
| 5746   ASSERT(remove_transitions == !descriptor->ContainsTransition()); | 5773   ASSERT(remove_transitions == !descriptor->ContainsTransition()); | 
| 5747   ASSERT(descriptor->GetDetails().type() != NULL_DESCRIPTOR); | 5774   ASSERT(descriptor->GetDetails().type() != NULL_DESCRIPTOR); | 
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 5811   int insertion_index = -1; | 5838   int insertion_index = -1; | 
| 5812   int from_index = 0; | 5839   int from_index = 0; | 
| 5813   while (from_index < number_of_descriptors()) { | 5840   while (from_index < number_of_descriptors()) { | 
| 5814     if (insertion_index < 0 && | 5841     if (insertion_index < 0 && | 
| 5815         InsertionPointFound(GetKey(from_index), descriptor->GetKey())) { | 5842         InsertionPointFound(GetKey(from_index), descriptor->GetKey())) { | 
| 5816       insertion_index = to_index++; | 5843       insertion_index = to_index++; | 
| 5817       if (replacing) from_index++; | 5844       if (replacing) from_index++; | 
| 5818     } else { | 5845     } else { | 
| 5819       if (!(IsNullDescriptor(from_index) || | 5846       if (!(IsNullDescriptor(from_index) || | 
| 5820             (remove_transitions && IsTransitionOnly(from_index)))) { | 5847             (remove_transitions && IsTransitionOnly(from_index)))) { | 
| 5821         new_descriptors->CopyFrom(to_index++, this, from_index, witness); | 5848         MaybeObject* copy_result = | 
|  | 5849             new_descriptors->CopyFrom(to_index++, this, from_index, witness); | 
|  | 5850         if (copy_result->IsFailure()) return copy_result; | 
| 5822       } | 5851       } | 
| 5823       from_index++; | 5852       from_index++; | 
| 5824     } | 5853     } | 
| 5825   } | 5854   } | 
| 5826   if (insertion_index < 0) insertion_index = to_index++; | 5855   if (insertion_index < 0) insertion_index = to_index++; | 
| 5827   new_descriptors->Set(insertion_index, descriptor, witness); | 5856   new_descriptors->Set(insertion_index, descriptor, witness); | 
| 5828 | 5857 | 
| 5829   ASSERT(to_index == new_descriptors->number_of_descriptors()); | 5858   ASSERT(to_index == new_descriptors->number_of_descriptors()); | 
| 5830   SLOW_ASSERT(new_descriptors->IsSortedNoDuplicates()); | 5859   SLOW_ASSERT(new_descriptors->IsSortedNoDuplicates()); | 
| 5831 | 5860 | 
| (...skipping 19 matching lines...) Expand all  Loading... | 
| 5851       return maybe_result; | 5880       return maybe_result; | 
| 5852     } | 5881     } | 
| 5853   } | 5882   } | 
| 5854 | 5883 | 
| 5855   DescriptorArray::WhitenessWitness witness(new_descriptors); | 5884   DescriptorArray::WhitenessWitness witness(new_descriptors); | 
| 5856 | 5885 | 
| 5857   // Copy the content. | 5886   // Copy the content. | 
| 5858   int next_descriptor = 0; | 5887   int next_descriptor = 0; | 
| 5859   for (int i = 0; i < number_of_descriptors(); i++) { | 5888   for (int i = 0; i < number_of_descriptors(); i++) { | 
| 5860     if (IsProperty(i)) { | 5889     if (IsProperty(i)) { | 
| 5861       new_descriptors->CopyFrom(next_descriptor++, this, i, witness); | 5890       MaybeObject* copy_result = | 
|  | 5891           new_descriptors->CopyFrom(next_descriptor++, this, i, witness); | 
|  | 5892       if (copy_result->IsFailure()) return copy_result; | 
| 5862     } | 5893     } | 
| 5863   } | 5894   } | 
| 5864   ASSERT(next_descriptor == new_descriptors->number_of_descriptors()); | 5895   ASSERT(next_descriptor == new_descriptors->number_of_descriptors()); | 
| 5865 | 5896 | 
| 5866   return new_descriptors; | 5897   return new_descriptors; | 
| 5867 } | 5898 } | 
| 5868 | 5899 | 
| 5869 | 5900 | 
| 5870 void DescriptorArray::SortUnchecked(const WhitenessWitness& witness) { | 5901 void DescriptorArray::SortUnchecked(const WhitenessWitness& witness) { | 
| 5871   // In-place heap sort. | 5902   // In-place heap sort. | 
| (...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 5964     if ((entry->Hash() == hash) && | 5995     if ((entry->Hash() == hash) && | 
| 5965         name->Equals(entry) && | 5996         name->Equals(entry) && | 
| 5966         !is_null_descriptor(number)) { | 5997         !is_null_descriptor(number)) { | 
| 5967       return number; | 5998       return number; | 
| 5968     } | 5999     } | 
| 5969   } | 6000   } | 
| 5970   return kNotFound; | 6001   return kNotFound; | 
| 5971 } | 6002 } | 
| 5972 | 6003 | 
| 5973 | 6004 | 
|  | 6005 MaybeObject* AccessorPair::CopyWithoutTransitions() { | 
|  | 6006   Heap* heap = GetHeap(); | 
|  | 6007   AccessorPair* copy; | 
|  | 6008   { MaybeObject* maybe_copy = heap->AllocateAccessorPair(); | 
|  | 6009     if (!maybe_copy->To(©)) return maybe_copy; | 
|  | 6010   } | 
|  | 6011   copy->set_getter(getter()->IsMap() ? heap->the_hole_value() : getter()); | 
|  | 6012   copy->set_setter(setter()->IsMap() ? heap->the_hole_value() : setter()); | 
|  | 6013   return copy; | 
|  | 6014 } | 
|  | 6015 | 
|  | 6016 | 
| 5974 MaybeObject* DeoptimizationInputData::Allocate(int deopt_entry_count, | 6017 MaybeObject* DeoptimizationInputData::Allocate(int deopt_entry_count, | 
| 5975                                                PretenureFlag pretenure) { | 6018                                                PretenureFlag pretenure) { | 
| 5976   ASSERT(deopt_entry_count > 0); | 6019   ASSERT(deopt_entry_count > 0); | 
| 5977   return HEAP->AllocateFixedArray(LengthFor(deopt_entry_count), | 6020   return HEAP->AllocateFixedArray(LengthFor(deopt_entry_count), | 
| 5978                                   pretenure); | 6021                                   pretenure); | 
| 5979 } | 6022 } | 
| 5980 | 6023 | 
| 5981 | 6024 | 
| 5982 MaybeObject* DeoptimizationOutputData::Allocate(int number_of_deopt_points, | 6025 MaybeObject* DeoptimizationOutputData::Allocate(int number_of_deopt_points, | 
| 5983                                                 PretenureFlag pretenure) { | 6026                                                 PretenureFlag pretenure) { | 
| (...skipping 7047 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 13031   if (break_point_objects()->IsUndefined()) return 0; | 13074   if (break_point_objects()->IsUndefined()) return 0; | 
| 13032   // Single break point. | 13075   // Single break point. | 
| 13033   if (!break_point_objects()->IsFixedArray()) return 1; | 13076   if (!break_point_objects()->IsFixedArray()) return 1; | 
| 13034   // Multiple break points. | 13077   // Multiple break points. | 
| 13035   return FixedArray::cast(break_point_objects())->length(); | 13078   return FixedArray::cast(break_point_objects())->length(); | 
| 13036 } | 13079 } | 
| 13037 #endif  // ENABLE_DEBUGGER_SUPPORT | 13080 #endif  // ENABLE_DEBUGGER_SUPPORT | 
| 13038 | 13081 | 
| 13039 | 13082 | 
| 13040 } }  // namespace v8::internal | 13083 } }  // namespace v8::internal | 
| OLD | NEW | 
|---|