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 2753 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2764 result->holder(), | 2764 result->holder(), |
2765 strict_mode); | 2765 strict_mode); |
2766 } | 2766 } |
2767 case INTERCEPTOR: | 2767 case INTERCEPTOR: |
2768 return self->SetPropertyWithInterceptor(*name, | 2768 return self->SetPropertyWithInterceptor(*name, |
2769 *value, | 2769 *value, |
2770 attributes, | 2770 attributes, |
2771 strict_mode); | 2771 strict_mode); |
2772 case TRANSITION: { | 2772 case TRANSITION: { |
2773 Map* transition_map = result->GetTransitionTarget(); | 2773 Map* transition_map = result->GetTransitionTarget(); |
| 2774 int descriptor = transition_map->LastAdded(); |
2774 | 2775 |
2775 DescriptorArray* descriptors = transition_map->instance_descriptors(); | 2776 DescriptorArray* descriptors = transition_map->instance_descriptors(); |
2776 int descriptor = descriptors->LastAdded(); | |
2777 PropertyDetails details = descriptors->GetDetails(descriptor); | 2777 PropertyDetails details = descriptors->GetDetails(descriptor); |
2778 | 2778 |
2779 if (details.type() == FIELD) { | 2779 if (details.type() == FIELD) { |
2780 if (attributes == details.attributes()) { | 2780 if (attributes == details.attributes()) { |
2781 int field_index = descriptors->GetFieldIndex(descriptor); | 2781 int field_index = descriptors->GetFieldIndex(descriptor); |
2782 return self->AddFastPropertyUsingMap(transition_map, | 2782 return self->AddFastPropertyUsingMap(transition_map, |
2783 *name, | 2783 *name, |
2784 *value, | 2784 *value, |
2785 field_index); | 2785 field_index); |
2786 } | 2786 } |
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2885 if (value == result.GetConstantFunction()) return value; | 2885 if (value == result.GetConstantFunction()) return value; |
2886 // Preserve the attributes of this existing property. | 2886 // Preserve the attributes of this existing property. |
2887 attributes = result.GetAttributes(); | 2887 attributes = result.GetAttributes(); |
2888 return ConvertDescriptorToField(name, value, attributes); | 2888 return ConvertDescriptorToField(name, value, attributes); |
2889 case CALLBACKS: | 2889 case CALLBACKS: |
2890 case INTERCEPTOR: | 2890 case INTERCEPTOR: |
2891 // Override callback in clone | 2891 // Override callback in clone |
2892 return ConvertDescriptorToField(name, value, attributes); | 2892 return ConvertDescriptorToField(name, value, attributes); |
2893 case TRANSITION: { | 2893 case TRANSITION: { |
2894 Map* transition_map = result.GetTransitionTarget(); | 2894 Map* transition_map = result.GetTransitionTarget(); |
| 2895 int descriptor = transition_map->LastAdded(); |
2895 | 2896 |
2896 DescriptorArray* descriptors = transition_map->instance_descriptors(); | 2897 DescriptorArray* descriptors = transition_map->instance_descriptors(); |
2897 int descriptor = descriptors->LastAdded(); | |
2898 PropertyDetails details = descriptors->GetDetails(descriptor); | 2898 PropertyDetails details = descriptors->GetDetails(descriptor); |
2899 | 2899 |
2900 if (details.type() == FIELD) { | 2900 if (details.type() == FIELD) { |
2901 if (attributes == details.attributes()) { | 2901 if (attributes == details.attributes()) { |
2902 int field_index = descriptors->GetFieldIndex(descriptor); | 2902 int field_index = descriptors->GetFieldIndex(descriptor); |
2903 return AddFastPropertyUsingMap(transition_map, | 2903 return AddFastPropertyUsingMap(transition_map, |
2904 name, | 2904 name, |
2905 value, | 2905 value, |
2906 field_index); | 2906 field_index); |
2907 } | 2907 } |
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3073 Map::cast(result)->EquivalentToForNormalization(fast, mode)) { | 3073 Map::cast(result)->EquivalentToForNormalization(fast, mode)) { |
3074 #ifdef DEBUG | 3074 #ifdef DEBUG |
3075 if (FLAG_verify_heap) { | 3075 if (FLAG_verify_heap) { |
3076 Map::cast(result)->SharedMapVerify(); | 3076 Map::cast(result)->SharedMapVerify(); |
3077 } | 3077 } |
3078 if (FLAG_enable_slow_asserts) { | 3078 if (FLAG_enable_slow_asserts) { |
3079 // The cached map should match newly created normalized map bit-by-bit, | 3079 // The cached map should match newly created normalized map bit-by-bit, |
3080 // except for the code cache, which can contain some ics which can be | 3080 // except for the code cache, which can contain some ics which can be |
3081 // applied to the shared map. | 3081 // applied to the shared map. |
3082 Object* fresh; | 3082 Object* fresh; |
3083 { MaybeObject* maybe_fresh = | 3083 MaybeObject* maybe_fresh = |
3084 fast->CopyNormalized(mode, SHARED_NORMALIZED_MAP); | 3084 fast->CopyNormalized(mode, SHARED_NORMALIZED_MAP); |
3085 if (maybe_fresh->ToObject(&fresh)) { | 3085 if (maybe_fresh->ToObject(&fresh)) { |
3086 ASSERT(memcmp(Map::cast(fresh)->address(), | 3086 ASSERT(memcmp(Map::cast(fresh)->address(), |
3087 Map::cast(result)->address(), | 3087 Map::cast(result)->address(), |
3088 Map::kCodeCacheOffset) == 0); | 3088 Map::kCodeCacheOffset) == 0); |
3089 int offset = Map::kCodeCacheOffset + kPointerSize; | 3089 int offset = Map::kCodeCacheOffset + kPointerSize; |
3090 ASSERT(memcmp(Map::cast(fresh)->address() + offset, | 3090 ASSERT(memcmp(Map::cast(fresh)->address() + offset, |
3091 Map::cast(result)->address() + offset, | 3091 Map::cast(result)->address() + offset, |
3092 Map::kSize - offset) == 0); | 3092 Map::kSize - offset) == 0); |
3093 } | |
3094 } | 3093 } |
3095 } | 3094 } |
3096 #endif | 3095 #endif |
3097 return result; | 3096 return result; |
3098 } | 3097 } |
3099 | 3098 |
3100 { MaybeObject* maybe_result = | 3099 { MaybeObject* maybe_result = |
3101 fast->CopyNormalized(mode, SHARED_NORMALIZED_MAP); | 3100 fast->CopyNormalized(mode, SHARED_NORMALIZED_MAP); |
3102 if (!maybe_result->ToObject(&result)) return maybe_result; | 3101 if (!maybe_result->ToObject(&result)) return maybe_result; |
3103 } | 3102 } |
(...skipping 1385 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4489 return TryAccessorTransition( | 4488 return TryAccessorTransition( |
4490 this, target, descriptor_number, component, accessor, attributes); | 4489 this, target, descriptor_number, component, accessor, attributes); |
4491 } | 4490 } |
4492 } else { | 4491 } else { |
4493 // If not, lookup a transition. | 4492 // If not, lookup a transition. |
4494 map()->LookupTransition(this, name, &result); | 4493 map()->LookupTransition(this, name, &result); |
4495 | 4494 |
4496 // If there is a transition, try to follow it. | 4495 // If there is a transition, try to follow it. |
4497 if (result.IsFound()) { | 4496 if (result.IsFound()) { |
4498 Map* target = result.GetTransitionTarget(); | 4497 Map* target = result.GetTransitionTarget(); |
4499 int descriptor_number = target->instance_descriptors()->LastAdded(); | 4498 int descriptor_number = target->LastAdded(); |
4500 ASSERT(target->instance_descriptors()->GetKey(descriptor_number) == name); | 4499 ASSERT(target->instance_descriptors()->GetKey(descriptor_number) == name); |
4501 return TryAccessorTransition( | 4500 return TryAccessorTransition( |
4502 this, target, descriptor_number, component, accessor, attributes); | 4501 this, target, descriptor_number, component, accessor, attributes); |
4503 } | 4502 } |
4504 } | 4503 } |
4505 | 4504 |
4506 // If there is no transition yet, add a transition to the a new accessor pair | 4505 // If there is no transition yet, add a transition to the a new accessor pair |
4507 // containing the accessor. | 4506 // containing the accessor. |
4508 AccessorPair* accessors; | 4507 AccessorPair* accessors; |
4509 MaybeObject* maybe_accessors; | 4508 MaybeObject* maybe_accessors; |
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4704 | 4703 |
4705 | 4704 |
4706 MaybeObject* Map::CopyNormalized(PropertyNormalizationMode mode, | 4705 MaybeObject* Map::CopyNormalized(PropertyNormalizationMode mode, |
4707 NormalizedMapSharingMode sharing) { | 4706 NormalizedMapSharingMode sharing) { |
4708 int new_instance_size = instance_size(); | 4707 int new_instance_size = instance_size(); |
4709 if (mode == CLEAR_INOBJECT_PROPERTIES) { | 4708 if (mode == CLEAR_INOBJECT_PROPERTIES) { |
4710 new_instance_size -= inobject_properties() * kPointerSize; | 4709 new_instance_size -= inobject_properties() * kPointerSize; |
4711 } | 4710 } |
4712 | 4711 |
4713 Map* result; | 4712 Map* result; |
4714 { MaybeObject* maybe_result = RawCopy(new_instance_size); | 4713 MaybeObject* maybe_result = RawCopy(new_instance_size); |
4715 if (!maybe_result->To(&result)) return maybe_result; | 4714 if (!maybe_result->To(&result)) return maybe_result; |
4716 } | |
4717 | 4715 |
4718 if (mode != CLEAR_INOBJECT_PROPERTIES) { | 4716 if (mode != CLEAR_INOBJECT_PROPERTIES) { |
4719 result->set_inobject_properties(inobject_properties()); | 4717 result->set_inobject_properties(inobject_properties()); |
4720 } | 4718 } |
4721 | 4719 |
| 4720 result->SetLastAdded(kNoneAdded); |
4722 result->set_code_cache(code_cache()); | 4721 result->set_code_cache(code_cache()); |
4723 result->set_is_shared(sharing == SHARED_NORMALIZED_MAP); | 4722 result->set_is_shared(sharing == SHARED_NORMALIZED_MAP); |
4724 | 4723 |
4725 #ifdef DEBUG | 4724 #ifdef DEBUG |
4726 if (FLAG_verify_heap && Map::cast(result)->is_shared()) { | 4725 if (FLAG_verify_heap && Map::cast(result)->is_shared()) { |
4727 result->SharedMapVerify(); | 4726 result->SharedMapVerify(); |
4728 } | 4727 } |
4729 #endif | 4728 #endif |
4730 | 4729 |
4731 return result; | 4730 return result; |
(...skipping 17 matching lines...) Expand all Loading... |
4749 | 4748 |
4750 | 4749 |
4751 MaybeObject* Map::CopyReplaceDescriptors(DescriptorArray* descriptors, | 4750 MaybeObject* Map::CopyReplaceDescriptors(DescriptorArray* descriptors, |
4752 String* name, | 4751 String* name, |
4753 int last_added, | 4752 int last_added, |
4754 TransitionFlag flag) { | 4753 TransitionFlag flag) { |
4755 Map* result; | 4754 Map* result; |
4756 MaybeObject* maybe_result = CopyDropDescriptors(); | 4755 MaybeObject* maybe_result = CopyDropDescriptors(); |
4757 if (!maybe_result->To(&result)) return maybe_result; | 4756 if (!maybe_result->To(&result)) return maybe_result; |
4758 | 4757 |
4759 if (last_added == DescriptorArray::kNoneAdded) { | 4758 if (last_added == kNoneAdded) { |
4760 ASSERT(descriptors->IsEmpty()); | 4759 ASSERT(descriptors->IsEmpty()); |
4761 ASSERT(flag == OMIT_TRANSITION); | 4760 } else { |
4762 return result; | 4761 ASSERT(descriptors->GetDetails(last_added).index() == |
| 4762 descriptors->number_of_descriptors()); |
| 4763 result->set_instance_descriptors(descriptors); |
| 4764 result->SetLastAdded(last_added); |
4763 } | 4765 } |
4764 | 4766 |
4765 descriptors->SetLastAdded(last_added); | |
4766 result->set_instance_descriptors(descriptors); | |
4767 | |
4768 if (flag == INSERT_TRANSITION) { | 4767 if (flag == INSERT_TRANSITION) { |
4769 TransitionArray* transitions; | 4768 TransitionArray* transitions; |
4770 MaybeObject* maybe_transitions = AddTransition(name, result); | 4769 MaybeObject* maybe_transitions = AddTransition(name, result); |
4771 if (!maybe_transitions->To(&transitions)) return maybe_transitions; | 4770 if (!maybe_transitions->To(&transitions)) return maybe_transitions; |
4772 | 4771 |
4773 MaybeObject* maybe_set = set_transitions(transitions); | 4772 MaybeObject* maybe_set = set_transitions(transitions); |
4774 if (maybe_set->IsFailure()) return maybe_set; | 4773 if (maybe_set->IsFailure()) return maybe_set; |
4775 | 4774 |
4776 result->SetBackPointer(this); | 4775 result->SetBackPointer(this); |
4777 } | 4776 } |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4816 ASSERT(constructor()->IsJSFunction()); | 4815 ASSERT(constructor()->IsJSFunction()); |
4817 JSFunction* ctor = JSFunction::cast(constructor()); | 4816 JSFunction* ctor = JSFunction::cast(constructor()); |
4818 Map* initial_map = ctor->initial_map(); | 4817 Map* initial_map = ctor->initial_map(); |
4819 DescriptorArray* initial_descriptors = initial_map->instance_descriptors(); | 4818 DescriptorArray* initial_descriptors = initial_map->instance_descriptors(); |
4820 DescriptorArray* descriptors; | 4819 DescriptorArray* descriptors; |
4821 MaybeObject* maybe_descriptors = | 4820 MaybeObject* maybe_descriptors = |
4822 initial_descriptors->Copy(DescriptorArray::MAY_BE_SHARED); | 4821 initial_descriptors->Copy(DescriptorArray::MAY_BE_SHARED); |
4823 if (!maybe_descriptors->To(&descriptors)) return maybe_descriptors; | 4822 if (!maybe_descriptors->To(&descriptors)) return maybe_descriptors; |
4824 | 4823 |
4825 int last_added = initial_descriptors->IsEmpty() | 4824 int last_added = initial_descriptors->IsEmpty() |
4826 ? DescriptorArray::kNoneAdded | 4825 ? kNoneAdded |
4827 : initial_descriptors->LastAdded(); | 4826 : initial_map->LastAdded(); |
4828 | 4827 |
4829 return CopyReplaceDescriptors(descriptors, NULL, last_added, OMIT_TRANSITION); | 4828 return CopyReplaceDescriptors(descriptors, NULL, last_added, OMIT_TRANSITION); |
4830 } | 4829 } |
4831 | 4830 |
4832 | 4831 |
4833 MaybeObject* Map::Copy(DescriptorArray::SharedMode shared_mode) { | 4832 MaybeObject* Map::Copy(DescriptorArray::SharedMode shared_mode) { |
4834 DescriptorArray* source_descriptors = instance_descriptors(); | 4833 DescriptorArray* source_descriptors = instance_descriptors(); |
4835 DescriptorArray* descriptors; | 4834 DescriptorArray* descriptors; |
4836 MaybeObject* maybe_descriptors = source_descriptors->Copy(shared_mode); | 4835 MaybeObject* maybe_descriptors = source_descriptors->Copy(shared_mode); |
4837 if (!maybe_descriptors->To(&descriptors)) return maybe_descriptors; | 4836 if (!maybe_descriptors->To(&descriptors)) return maybe_descriptors; |
4838 | 4837 |
4839 int last_added = source_descriptors->IsEmpty() | 4838 int last_added = source_descriptors->IsEmpty() ? kNoneAdded : LastAdded(); |
4840 ? DescriptorArray::kNoneAdded | |
4841 : source_descriptors->LastAdded(); | |
4842 | 4839 |
4843 return CopyReplaceDescriptors(descriptors, NULL, last_added, OMIT_TRANSITION); | 4840 return CopyReplaceDescriptors(descriptors, NULL, last_added, OMIT_TRANSITION); |
4844 } | 4841 } |
4845 | 4842 |
4846 | 4843 |
4847 static bool InsertionPointFound(String* key1, String* key2) { | 4844 static bool InsertionPointFound(String* key1, String* key2) { |
4848 return key1->Hash() > key2->Hash() || key1 == key2; | 4845 return key1->Hash() > key2->Hash() || key1 == key2; |
4849 } | 4846 } |
4850 | 4847 |
4851 | 4848 |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4937 if (index == insertion_index) continue; | 4934 if (index == insertion_index) continue; |
4938 new_descriptors->CopyFrom(index, descriptors, index, witness); | 4935 new_descriptors->CopyFrom(index, descriptors, index, witness); |
4939 } | 4936 } |
4940 | 4937 |
4941 descriptor->SetEnumerationIndex( | 4938 descriptor->SetEnumerationIndex( |
4942 descriptors->GetDetails(insertion_index).index()); | 4939 descriptors->GetDetails(insertion_index).index()); |
4943 new_descriptors->Set(insertion_index, descriptor, witness); | 4940 new_descriptors->Set(insertion_index, descriptor, witness); |
4944 | 4941 |
4945 SLOW_ASSERT(new_descriptors->IsSortedNoDuplicates()); | 4942 SLOW_ASSERT(new_descriptors->IsSortedNoDuplicates()); |
4946 | 4943 |
4947 return CopyReplaceDescriptors( | 4944 return CopyReplaceDescriptors(new_descriptors, key, LastAdded(), flag); |
4948 new_descriptors, key, descriptors->LastAdded(), flag); | |
4949 } | 4945 } |
4950 | 4946 |
4951 | 4947 |
4952 void Map::UpdateCodeCache(Handle<Map> map, | 4948 void Map::UpdateCodeCache(Handle<Map> map, |
4953 Handle<String> name, | 4949 Handle<String> name, |
4954 Handle<Code> code) { | 4950 Handle<Code> code) { |
4955 Isolate* isolate = map->GetIsolate(); | 4951 Isolate* isolate = map->GetIsolate(); |
4956 CALL_HEAP_FUNCTION_VOID(isolate, | 4952 CALL_HEAP_FUNCTION_VOID(isolate, |
4957 map->UpdateCodeCache(*name, *code)); | 4953 map->UpdateCodeCache(*name, *code)); |
4958 } | 4954 } |
(...skipping 766 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5725 FixedArray* result; | 5721 FixedArray* result; |
5726 if (number_of_descriptors == 0 && shared_mode == MAY_BE_SHARED) { | 5722 if (number_of_descriptors == 0 && shared_mode == MAY_BE_SHARED) { |
5727 return heap->empty_descriptor_array(); | 5723 return heap->empty_descriptor_array(); |
5728 } | 5724 } |
5729 // Allocate the array of keys. | 5725 // Allocate the array of keys. |
5730 { MaybeObject* maybe_array = | 5726 { MaybeObject* maybe_array = |
5731 heap->AllocateFixedArray(ToKeyIndex(number_of_descriptors)); | 5727 heap->AllocateFixedArray(ToKeyIndex(number_of_descriptors)); |
5732 if (!maybe_array->To(&result)) return maybe_array; | 5728 if (!maybe_array->To(&result)) return maybe_array; |
5733 } | 5729 } |
5734 | 5730 |
5735 result->set(kLastAddedIndex, Smi::FromInt(kNoneAdded)); | 5731 result->set(kEnumCacheIndex, Smi::FromInt(Map::kNoneAdded)); |
5736 result->set(kTransitionsIndex, Smi::FromInt(0)); | 5732 result->set(kTransitionsIndex, Smi::FromInt(0)); |
5737 return result; | 5733 return result; |
5738 } | 5734 } |
5739 | 5735 |
5740 | 5736 |
5741 void DescriptorArray::SetEnumCache(FixedArray* bridge_storage, | 5737 void DescriptorArray::SetEnumCache(FixedArray* bridge_storage, |
5742 FixedArray* new_cache, | 5738 FixedArray* new_cache, |
5743 Object* new_index_cache) { | 5739 Object* new_index_cache) { |
5744 ASSERT(bridge_storage->length() >= kEnumCacheBridgeLength); | 5740 ASSERT(bridge_storage->length() >= kEnumCacheBridgeLength); |
5745 ASSERT(new_index_cache->IsSmi() || new_index_cache->IsFixedArray()); | 5741 ASSERT(new_index_cache->IsSmi() || new_index_cache->IsFixedArray()); |
5746 if (HasEnumCache()) { | 5742 if (HasEnumCache()) { |
5747 FixedArray::cast(get(kLastAddedIndex))-> | 5743 FixedArray::cast(get(kEnumCacheIndex))-> |
5748 set(kEnumCacheBridgeCacheIndex, new_cache); | 5744 set(kEnumCacheBridgeCacheIndex, new_cache); |
5749 FixedArray::cast(get(kLastAddedIndex))-> | 5745 FixedArray::cast(get(kEnumCacheIndex))-> |
5750 set(kEnumCacheBridgeIndicesCacheIndex, new_index_cache); | 5746 set(kEnumCacheBridgeIndicesCacheIndex, new_index_cache); |
5751 } else { | 5747 } else { |
5752 if (IsEmpty()) return; // Do nothing for empty descriptor array. | 5748 if (IsEmpty()) return; // Do nothing for empty descriptor array. |
5753 FixedArray::cast(bridge_storage)-> | 5749 FixedArray::cast(bridge_storage)-> |
5754 set(kEnumCacheBridgeCacheIndex, new_cache); | 5750 set(kEnumCacheBridgeCacheIndex, new_cache); |
5755 FixedArray::cast(bridge_storage)-> | 5751 FixedArray::cast(bridge_storage)-> |
5756 set(kEnumCacheBridgeIndicesCacheIndex, new_index_cache); | 5752 set(kEnumCacheBridgeIndicesCacheIndex, new_index_cache); |
5757 NoWriteBarrierSet(FixedArray::cast(bridge_storage), | 5753 NoWriteBarrierSet(FixedArray::cast(bridge_storage), |
5758 kEnumCacheBridgeLastAdded, | 5754 kEnumCacheBridgeLastAdded, |
5759 get(kLastAddedIndex)); | 5755 get(kEnumCacheIndex)); |
5760 set(kLastAddedIndex, bridge_storage); | 5756 set(kEnumCacheIndex, bridge_storage); |
5761 } | 5757 } |
5762 } | 5758 } |
5763 | 5759 |
5764 | 5760 |
5765 void DescriptorArray::CopyFrom(int dst_index, | 5761 void DescriptorArray::CopyFrom(int dst_index, |
5766 DescriptorArray* src, | 5762 DescriptorArray* src, |
5767 int src_index, | 5763 int src_index, |
5768 const WhitenessWitness& witness) { | 5764 const WhitenessWitness& witness) { |
5769 Object* value = src->GetValue(src_index); | 5765 Object* value = src->GetValue(src_index); |
5770 PropertyDetails details = src->GetDetails(src_index); | 5766 PropertyDetails details = src->GetDetails(src_index); |
(...skipping 1448 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7219 PropertyNormalizationMode mode) { | 7215 PropertyNormalizationMode mode) { |
7220 return | 7216 return |
7221 constructor() == other->constructor() && | 7217 constructor() == other->constructor() && |
7222 prototype() == other->prototype() && | 7218 prototype() == other->prototype() && |
7223 inobject_properties() == ((mode == CLEAR_INOBJECT_PROPERTIES) ? | 7219 inobject_properties() == ((mode == CLEAR_INOBJECT_PROPERTIES) ? |
7224 0 : | 7220 0 : |
7225 other->inobject_properties()) && | 7221 other->inobject_properties()) && |
7226 instance_type() == other->instance_type() && | 7222 instance_type() == other->instance_type() && |
7227 bit_field() == other->bit_field() && | 7223 bit_field() == other->bit_field() && |
7228 bit_field2() == other->bit_field2() && | 7224 bit_field2() == other->bit_field2() && |
7229 (bit_field3() & ~(1<<Map::kIsShared)) == | 7225 static_cast<uint32_t>(bit_field3()) == |
7230 (other->bit_field3() & ~(1<<Map::kIsShared)); | 7226 LastAddedBits::update( |
| 7227 IsShared::update(other->bit_field3(), true), |
| 7228 kNoneAdded); |
7231 } | 7229 } |
7232 | 7230 |
7233 | 7231 |
7234 void JSFunction::JSFunctionIterateBody(int object_size, ObjectVisitor* v) { | 7232 void JSFunction::JSFunctionIterateBody(int object_size, ObjectVisitor* v) { |
7235 // Iterate over all fields in the body but take care in dealing with | 7233 // Iterate over all fields in the body but take care in dealing with |
7236 // the code entry. | 7234 // the code entry. |
7237 IteratePointers(v, kPropertiesOffset, kCodeEntryOffset); | 7235 IteratePointers(v, kPropertiesOffset, kCodeEntryOffset); |
7238 v->VisitCodeEntry(this->address() + kCodeEntryOffset); | 7236 v->VisitCodeEntry(this->address() + kCodeEntryOffset); |
7239 IteratePointers(v, kCodeEntryOffset + kPointerSize, object_size); | 7237 IteratePointers(v, kCodeEntryOffset + kPointerSize, object_size); |
7240 } | 7238 } |
(...skipping 5793 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
13034 set_year(Smi::FromInt(year), SKIP_WRITE_BARRIER); | 13032 set_year(Smi::FromInt(year), SKIP_WRITE_BARRIER); |
13035 set_month(Smi::FromInt(month), SKIP_WRITE_BARRIER); | 13033 set_month(Smi::FromInt(month), SKIP_WRITE_BARRIER); |
13036 set_day(Smi::FromInt(day), SKIP_WRITE_BARRIER); | 13034 set_day(Smi::FromInt(day), SKIP_WRITE_BARRIER); |
13037 set_weekday(Smi::FromInt(weekday), SKIP_WRITE_BARRIER); | 13035 set_weekday(Smi::FromInt(weekday), SKIP_WRITE_BARRIER); |
13038 set_hour(Smi::FromInt(hour), SKIP_WRITE_BARRIER); | 13036 set_hour(Smi::FromInt(hour), SKIP_WRITE_BARRIER); |
13039 set_min(Smi::FromInt(min), SKIP_WRITE_BARRIER); | 13037 set_min(Smi::FromInt(min), SKIP_WRITE_BARRIER); |
13040 set_sec(Smi::FromInt(sec), SKIP_WRITE_BARRIER); | 13038 set_sec(Smi::FromInt(sec), SKIP_WRITE_BARRIER); |
13041 } | 13039 } |
13042 | 13040 |
13043 } } // namespace v8::internal | 13041 } } // namespace v8::internal |
OLD | NEW |