| OLD | NEW |
| 1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 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 2357 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2368 ASSERT(target_number_of_fields + target_unused == target_inobject); | 2368 ASSERT(target_number_of_fields + target_unused == target_inobject); |
| 2369 return false; | 2369 return false; |
| 2370 } | 2370 } |
| 2371 // Otherwise, properties will need to be moved to the backing store. | 2371 // Otherwise, properties will need to be moved to the backing store. |
| 2372 return true; | 2372 return true; |
| 2373 } | 2373 } |
| 2374 | 2374 |
| 2375 | 2375 |
| 2376 Handle<TransitionArray> Map::SetElementsTransitionMap( | 2376 Handle<TransitionArray> Map::SetElementsTransitionMap( |
| 2377 Handle<Map> map, Handle<Map> transitioned_map) { | 2377 Handle<Map> map, Handle<Map> transitioned_map) { |
| 2378 Handle<TransitionArray> transitions = Map::AddTransition( | 2378 Handle<TransitionArray> transitions = TransitionArray::CopyInsert( |
| 2379 map, | 2379 map, |
| 2380 map->GetIsolate()->factory()->elements_transition_symbol(), | 2380 map->GetIsolate()->factory()->elements_transition_symbol(), |
| 2381 transitioned_map, | 2381 transitioned_map, |
| 2382 FULL_TRANSITION); | 2382 FULL_TRANSITION); |
| 2383 map->set_transitions(*transitions); | 2383 map->set_transitions(*transitions); |
| 2384 return transitions; | 2384 return transitions; |
| 2385 } | 2385 } |
| 2386 | 2386 |
| 2387 | 2387 |
| 2388 // To migrate an instance to a map: | 2388 // To migrate an instance to a map: |
| (...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2498 } | 2498 } |
| 2499 | 2499 |
| 2500 // The trimming is performed on a newly allocated object, which is on a | 2500 // The trimming is performed on a newly allocated object, which is on a |
| 2501 // fresly allocated page or on an already swept page. Hence, the sweeper | 2501 // fresly allocated page or on an already swept page. Hence, the sweeper |
| 2502 // thread can not get confused with the filler creation. No synchronization | 2502 // thread can not get confused with the filler creation. No synchronization |
| 2503 // needed. | 2503 // needed. |
| 2504 object->set_map(*new_map); | 2504 object->set_map(*new_map); |
| 2505 } | 2505 } |
| 2506 | 2506 |
| 2507 | 2507 |
| 2508 Handle<TransitionArray> Map::AddTransition(Handle<Map> map, | |
| 2509 Handle<Name> key, | |
| 2510 Handle<Map> target, | |
| 2511 SimpleTransitionFlag flag) { | |
| 2512 if (map->HasTransitionArray()) { | |
| 2513 return TransitionArray::CopyInsert(map, key, target); | |
| 2514 } | |
| 2515 return TransitionArray::NewWith( | |
| 2516 flag, key, target, handle(map->GetBackPointer(), map->GetIsolate())); | |
| 2517 } | |
| 2518 | |
| 2519 | |
| 2520 void JSObject::GeneralizeFieldRepresentation(Handle<JSObject> object, | 2508 void JSObject::GeneralizeFieldRepresentation(Handle<JSObject> object, |
| 2521 int modify_index, | 2509 int modify_index, |
| 2522 Representation new_representation, | 2510 Representation new_representation, |
| 2523 StoreMode store_mode) { | 2511 StoreMode store_mode) { |
| 2524 Handle<Map> new_map = Map::GeneralizeRepresentation( | 2512 Handle<Map> new_map = Map::GeneralizeRepresentation( |
| 2525 handle(object->map()), modify_index, new_representation, store_mode); | 2513 handle(object->map()), modify_index, new_representation, store_mode); |
| 2526 if (object->map() == *new_map) return; | 2514 if (object->map() == *new_map) return; |
| 2527 return MigrateToMap(object, new_map); | 2515 return MigrateToMap(object, new_map); |
| 2528 } | 2516 } |
| 2529 | 2517 |
| (...skipping 4338 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6868 Descriptor* descriptor) { | 6856 Descriptor* descriptor) { |
| 6869 // Sanity check. This path is only to be taken if the map owns its descriptor | 6857 // Sanity check. This path is only to be taken if the map owns its descriptor |
| 6870 // array, implying that its NumberOfOwnDescriptors equals the number of | 6858 // array, implying that its NumberOfOwnDescriptors equals the number of |
| 6871 // descriptors in the descriptor array. | 6859 // descriptors in the descriptor array. |
| 6872 ASSERT(map->NumberOfOwnDescriptors() == | 6860 ASSERT(map->NumberOfOwnDescriptors() == |
| 6873 map->instance_descriptors()->number_of_descriptors()); | 6861 map->instance_descriptors()->number_of_descriptors()); |
| 6874 | 6862 |
| 6875 Handle<Map> result = Map::CopyDropDescriptors(map); | 6863 Handle<Map> result = Map::CopyDropDescriptors(map); |
| 6876 Handle<Name> name = descriptor->GetKey(); | 6864 Handle<Name> name = descriptor->GetKey(); |
| 6877 Handle<TransitionArray> transitions = | 6865 Handle<TransitionArray> transitions = |
| 6878 Map::AddTransition(map, name, result, SIMPLE_TRANSITION); | 6866 TransitionArray::CopyInsert(map, name, result, SIMPLE_TRANSITION); |
| 6879 | 6867 |
| 6880 // Ensure there's space for the new descriptor in the shared descriptor array. | 6868 // Ensure there's space for the new descriptor in the shared descriptor array. |
| 6881 if (descriptors->NumberOfSlackDescriptors() == 0) { | 6869 if (descriptors->NumberOfSlackDescriptors() == 0) { |
| 6882 int old_size = descriptors->number_of_descriptors(); | 6870 int old_size = descriptors->number_of_descriptors(); |
| 6883 if (old_size == 0) { | 6871 if (old_size == 0) { |
| 6884 descriptors = map->GetIsolate()->factory()->NewDescriptorArray(0, 1); | 6872 descriptors = map->GetIsolate()->factory()->NewDescriptorArray(0, 1); |
| 6885 } else { | 6873 } else { |
| 6886 Map::EnsureDescriptorSlack(map, old_size < 4 ? 1 : old_size / 2); | 6874 Map::EnsureDescriptorSlack(map, old_size < 4 ? 1 : old_size / 2); |
| 6887 descriptors = handle(map->instance_descriptors()); | 6875 descriptors = handle(map->instance_descriptors()); |
| 6888 } | 6876 } |
| (...skipping 28 matching lines...) Expand all Loading... |
| 6917 Handle<DescriptorArray> descriptors, | 6905 Handle<DescriptorArray> descriptors, |
| 6918 TransitionFlag flag, | 6906 TransitionFlag flag, |
| 6919 Handle<Name> name, | 6907 Handle<Name> name, |
| 6920 SimpleTransitionFlag simple_flag) { | 6908 SimpleTransitionFlag simple_flag) { |
| 6921 ASSERT(descriptors->IsSortedNoDuplicates()); | 6909 ASSERT(descriptors->IsSortedNoDuplicates()); |
| 6922 | 6910 |
| 6923 Handle<Map> result = CopyDropDescriptors(map); | 6911 Handle<Map> result = CopyDropDescriptors(map); |
| 6924 result->InitializeDescriptors(*descriptors); | 6912 result->InitializeDescriptors(*descriptors); |
| 6925 | 6913 |
| 6926 if (flag == INSERT_TRANSITION && map->CanHaveMoreTransitions()) { | 6914 if (flag == INSERT_TRANSITION && map->CanHaveMoreTransitions()) { |
| 6927 Handle<TransitionArray> transitions = Map::AddTransition( | 6915 Handle<TransitionArray> transitions = TransitionArray::CopyInsert( |
| 6928 map, name, result, simple_flag); | 6916 map, name, result, simple_flag); |
| 6929 map->set_transitions(*transitions); | 6917 map->set_transitions(*transitions); |
| 6930 result->SetBackPointer(*map); | 6918 result->SetBackPointer(*map); |
| 6931 } else { | 6919 } else { |
| 6932 descriptors->InitializeRepresentations(Representation::Tagged()); | 6920 descriptors->InitializeRepresentations(Representation::Tagged()); |
| 6933 } | 6921 } |
| 6934 | 6922 |
| 6935 return result; | 6923 return result; |
| 6936 } | 6924 } |
| 6937 | 6925 |
| (...skipping 15 matching lines...) Expand all Loading... |
| 6953 unused_property_fields = map->unused_property_fields() - 1; | 6941 unused_property_fields = map->unused_property_fields() - 1; |
| 6954 if (unused_property_fields < 0) { | 6942 if (unused_property_fields < 0) { |
| 6955 unused_property_fields += JSObject::kFieldsAdded; | 6943 unused_property_fields += JSObject::kFieldsAdded; |
| 6956 } | 6944 } |
| 6957 } | 6945 } |
| 6958 | 6946 |
| 6959 result->set_unused_property_fields(unused_property_fields); | 6947 result->set_unused_property_fields(unused_property_fields); |
| 6960 result->set_owns_descriptors(false); | 6948 result->set_owns_descriptors(false); |
| 6961 | 6949 |
| 6962 Handle<Name> name = handle(descriptors->GetKey(new_descriptor)); | 6950 Handle<Name> name = handle(descriptors->GetKey(new_descriptor)); |
| 6963 Handle<TransitionArray> transitions = Map::AddTransition(map, name, result, | 6951 Handle<TransitionArray> transitions = TransitionArray::CopyInsert( |
| 6964 SIMPLE_TRANSITION); | 6952 map, name, result, SIMPLE_TRANSITION); |
| 6965 | 6953 |
| 6966 map->set_transitions(*transitions); | 6954 map->set_transitions(*transitions); |
| 6967 result->SetBackPointer(*map); | 6955 result->SetBackPointer(*map); |
| 6968 | 6956 |
| 6969 return result; | 6957 return result; |
| 6970 } | 6958 } |
| 6971 | 6959 |
| 6972 | 6960 |
| 6973 Handle<Map> Map::CopyAsElementsKind(Handle<Map> map, ElementsKind kind, | 6961 Handle<Map> Map::CopyAsElementsKind(Handle<Map> map, ElementsKind kind, |
| 6974 TransitionFlag flag) { | 6962 TransitionFlag flag) { |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7025 | 7013 |
| 7026 // In case the map owned its own descriptors, share the descriptors and | 7014 // In case the map owned its own descriptors, share the descriptors and |
| 7027 // transfer ownership to the new map. | 7015 // transfer ownership to the new map. |
| 7028 Handle<Map> new_map; | 7016 Handle<Map> new_map; |
| 7029 if (map->owns_descriptors()) { | 7017 if (map->owns_descriptors()) { |
| 7030 new_map = Map::CopyDropDescriptors(map); | 7018 new_map = Map::CopyDropDescriptors(map); |
| 7031 } else { | 7019 } else { |
| 7032 new_map = Map::Copy(map); | 7020 new_map = Map::Copy(map); |
| 7033 } | 7021 } |
| 7034 | 7022 |
| 7035 Handle<TransitionArray> transitions = | 7023 Handle<TransitionArray> transitions = TransitionArray::CopyInsert( |
| 7036 Map::AddTransition(map, isolate->factory()->observed_symbol(), new_map, | 7024 map, isolate->factory()->observed_symbol(), new_map, FULL_TRANSITION); |
| 7037 FULL_TRANSITION); | |
| 7038 | 7025 |
| 7039 map->set_transitions(*transitions); | 7026 map->set_transitions(*transitions); |
| 7040 | 7027 |
| 7041 new_map->set_is_observed(); | 7028 new_map->set_is_observed(); |
| 7042 | 7029 |
| 7043 if (map->owns_descriptors()) { | 7030 if (map->owns_descriptors()) { |
| 7044 new_map->InitializeDescriptors(map->instance_descriptors()); | 7031 new_map->InitializeDescriptors(map->instance_descriptors()); |
| 7045 map->set_owns_descriptors(false); | 7032 map->set_owns_descriptors(false); |
| 7046 } | 7033 } |
| 7047 | 7034 |
| (...skipping 9594 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 16642 #define ERROR_MESSAGES_TEXTS(C, T) T, | 16629 #define ERROR_MESSAGES_TEXTS(C, T) T, |
| 16643 static const char* error_messages_[] = { | 16630 static const char* error_messages_[] = { |
| 16644 ERROR_MESSAGES_LIST(ERROR_MESSAGES_TEXTS) | 16631 ERROR_MESSAGES_LIST(ERROR_MESSAGES_TEXTS) |
| 16645 }; | 16632 }; |
| 16646 #undef ERROR_MESSAGES_TEXTS | 16633 #undef ERROR_MESSAGES_TEXTS |
| 16647 return error_messages_[reason]; | 16634 return error_messages_[reason]; |
| 16648 } | 16635 } |
| 16649 | 16636 |
| 16650 | 16637 |
| 16651 } } // namespace v8::internal | 16638 } } // namespace v8::internal |
| OLD | NEW |