| OLD | NEW |
| 1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include <iomanip> | 5 #include <iomanip> |
| 6 #include <sstream> | 6 #include <sstream> |
| 7 | 7 |
| 8 #include "src/v8.h" | 8 #include "src/v8.h" |
| 9 | 9 |
| 10 #include "src/accessors.h" | 10 #include "src/accessors.h" |
| (...skipping 6942 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6953 case ACCESSOR_CONSTANT: | 6953 case ACCESSOR_CONSTANT: |
| 6954 return false; | 6954 return false; |
| 6955 } | 6955 } |
| 6956 | 6956 |
| 6957 UNREACHABLE(); | 6957 UNREACHABLE(); |
| 6958 return false; | 6958 return false; |
| 6959 } | 6959 } |
| 6960 | 6960 |
| 6961 | 6961 |
| 6962 // static | 6962 // static |
| 6963 Handle<Map> Map::PrepareForDataElement(Handle<Map> map, Handle<Object> value) { | |
| 6964 ElementsKind kind = map->elements_kind(); | |
| 6965 bool holey = IsHoleyElementsKind(kind); | |
| 6966 | |
| 6967 switch (kind) { | |
| 6968 case FAST_SMI_ELEMENTS: | |
| 6969 case FAST_HOLEY_SMI_ELEMENTS: | |
| 6970 if (value->IsSmi()) return map; | |
| 6971 kind = value->IsNumber() ? FAST_DOUBLE_ELEMENTS : FAST_ELEMENTS; | |
| 6972 break; | |
| 6973 | |
| 6974 case FAST_DOUBLE_ELEMENTS: | |
| 6975 case FAST_HOLEY_DOUBLE_ELEMENTS: | |
| 6976 if (value->IsNumber()) return map; | |
| 6977 kind = FAST_ELEMENTS; | |
| 6978 break; | |
| 6979 | |
| 6980 case FAST_ELEMENTS: | |
| 6981 case FAST_HOLEY_ELEMENTS: | |
| 6982 case DICTIONARY_ELEMENTS: | |
| 6983 case FAST_SLOPPY_ARGUMENTS_ELEMENTS: | |
| 6984 case SLOW_SLOPPY_ARGUMENTS_ELEMENTS: | |
| 6985 #define TYPED_ARRAY_CASE(Type, type, TYPE, ctype, size) \ | |
| 6986 case EXTERNAL_##TYPE##_ELEMENTS: \ | |
| 6987 case TYPE##_ELEMENTS: | |
| 6988 | |
| 6989 TYPED_ARRAYS(TYPED_ARRAY_CASE) | |
| 6990 #undef TYPED_ARRAY_CASE | |
| 6991 return map; | |
| 6992 } | |
| 6993 | |
| 6994 if (holey) kind = GetHoleyElementsKind(kind); | |
| 6995 return Map::AsElementsKind(map, kind); | |
| 6996 } | |
| 6997 | |
| 6998 | |
| 6999 // static | |
| 7000 Handle<Map> Map::PrepareForDataProperty(Handle<Map> map, int descriptor, | 6963 Handle<Map> Map::PrepareForDataProperty(Handle<Map> map, int descriptor, |
| 7001 Handle<Object> value) { | 6964 Handle<Object> value) { |
| 7002 // Dictionaries can store any property value. | 6965 // Dictionaries can store any property value. |
| 7003 if (map->is_dictionary_map()) return map; | 6966 if (map->is_dictionary_map()) return map; |
| 7004 | 6967 |
| 7005 // Migrate to the newest map before storing the property. | 6968 // Migrate to the newest map before storing the property. |
| 7006 map = Update(map); | 6969 map = Update(map); |
| 7007 | 6970 |
| 7008 Handle<DescriptorArray> descriptors(map->instance_descriptors()); | 6971 Handle<DescriptorArray> descriptors(map->instance_descriptors()); |
| 7009 | 6972 |
| (...skipping 8943 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 15953 Handle<Object> new_value) { | 15916 Handle<Object> new_value) { |
| 15954 if (cell->value() != *new_value) { | 15917 if (cell->value() != *new_value) { |
| 15955 cell->set_value(*new_value); | 15918 cell->set_value(*new_value); |
| 15956 Isolate* isolate = cell->GetIsolate(); | 15919 Isolate* isolate = cell->GetIsolate(); |
| 15957 cell->dependent_code()->DeoptimizeDependentCodeGroup( | 15920 cell->dependent_code()->DeoptimizeDependentCodeGroup( |
| 15958 isolate, DependentCode::kPropertyCellChangedGroup); | 15921 isolate, DependentCode::kPropertyCellChangedGroup); |
| 15959 } | 15922 } |
| 15960 } | 15923 } |
| 15961 } // namespace internal | 15924 } // namespace internal |
| 15962 } // namespace v8 | 15925 } // namespace v8 |
| OLD | NEW |