| 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 5451 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5462 break; | 5462 break; |
| 5463 } | 5463 } |
| 5464 case LookupIterator::INTEGER_INDEXED_EXOTIC: | 5464 case LookupIterator::INTEGER_INDEXED_EXOTIC: |
| 5465 return it.isolate()->factory()->true_value(); | 5465 return it.isolate()->factory()->true_value(); |
| 5466 case LookupIterator::DATA: | 5466 case LookupIterator::DATA: |
| 5467 if (is_observed) { | 5467 if (is_observed) { |
| 5468 old_value = it.GetDataValue(); | 5468 old_value = it.GetDataValue(); |
| 5469 } | 5469 } |
| 5470 // Fall through. | 5470 // Fall through. |
| 5471 case LookupIterator::ACCESSOR: { | 5471 case LookupIterator::ACCESSOR: { |
| 5472 if (!it.IsConfigurable()) { | 5472 if (!it.IsConfigurable() || object->map()->is_strong()) { |
| 5473 // Fail if the property is not configurable. | 5473 // Fail if the property is not configurable, or on a strong object. |
| 5474 if (is_strict(language_mode)) { | 5474 if (is_strict(language_mode)) { |
| 5475 if (object->map()->is_strong()) { |
| 5476 THROW_NEW_ERROR( |
| 5477 it.isolate(), |
| 5478 NewTypeError(MessageTemplate::kStrongDeleteProperty, object, |
| 5479 name), |
| 5480 Object); |
| 5481 } |
| 5475 THROW_NEW_ERROR(it.isolate(), | 5482 THROW_NEW_ERROR(it.isolate(), |
| 5476 NewTypeError(MessageTemplate::kStrictDeleteProperty, | 5483 NewTypeError(MessageTemplate::kStrictDeleteProperty, |
| 5477 name, object), | 5484 name, object), |
| 5478 Object); | 5485 Object); |
| 5479 } | 5486 } |
| 5480 return it.isolate()->factory()->false_value(); | 5487 return it.isolate()->factory()->false_value(); |
| 5481 } | 5488 } |
| 5482 | 5489 |
| 5483 PropertyNormalizationMode mode = object->map()->is_prototype_map() | 5490 PropertyNormalizationMode mode = object->map()->is_prototype_map() |
| 5484 ? KEEP_INOBJECT_PROPERTIES | 5491 ? KEEP_INOBJECT_PROPERTIES |
| (...skipping 9506 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 14991 template Object* | 14998 template Object* |
| 14992 Dictionary<SeededNumberDictionary, SeededNumberDictionaryShape, uint32_t>:: | 14999 Dictionary<SeededNumberDictionary, SeededNumberDictionaryShape, uint32_t>:: |
| 14993 SlowReverseLookup(Object* value); | 15000 SlowReverseLookup(Object* value); |
| 14994 | 15001 |
| 14995 template Object* | 15002 template Object* |
| 14996 Dictionary<NameDictionary, NameDictionaryShape, Handle<Name> >:: | 15003 Dictionary<NameDictionary, NameDictionaryShape, Handle<Name> >:: |
| 14997 SlowReverseLookup(Object* value); | 15004 SlowReverseLookup(Object* value); |
| 14998 | 15005 |
| 14999 template Handle<Object> | 15006 template Handle<Object> |
| 15000 Dictionary<NameDictionary, NameDictionaryShape, Handle<Name> >::DeleteProperty( | 15007 Dictionary<NameDictionary, NameDictionaryShape, Handle<Name> >::DeleteProperty( |
| 15001 Handle<NameDictionary>, int); | 15008 Handle<NameDictionary>, int, bool); |
| 15002 | 15009 |
| 15003 template Handle<Object> | 15010 template Handle<Object> |
| 15004 Dictionary<SeededNumberDictionary, SeededNumberDictionaryShape, | 15011 Dictionary<SeededNumberDictionary, SeededNumberDictionaryShape, |
| 15005 uint32_t>::DeleteProperty(Handle<SeededNumberDictionary>, int); | 15012 uint32_t>::DeleteProperty(Handle<SeededNumberDictionary>, int, bool); |
| 15006 | 15013 |
| 15007 template Handle<NameDictionary> | 15014 template Handle<NameDictionary> |
| 15008 HashTable<NameDictionary, NameDictionaryShape, Handle<Name> >:: | 15015 HashTable<NameDictionary, NameDictionaryShape, Handle<Name> >:: |
| 15009 New(Isolate*, int, MinimumCapacity, PretenureFlag); | 15016 New(Isolate*, int, MinimumCapacity, PretenureFlag); |
| 15010 | 15017 |
| 15011 template Handle<NameDictionary> | 15018 template Handle<NameDictionary> |
| 15012 HashTable<NameDictionary, NameDictionaryShape, Handle<Name> >:: | 15019 HashTable<NameDictionary, NameDictionaryShape, Handle<Name> >:: |
| 15013 Shrink(Handle<NameDictionary>, Handle<Name>); | 15020 Shrink(Handle<NameDictionary>, Handle<Name>); |
| 15014 | 15021 |
| 15015 template Handle<SeededNumberDictionary> | 15022 template Handle<SeededNumberDictionary> |
| (...skipping 948 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 15964 !PropertyDetails::IsValidIndex(dictionary->NextEnumerationIndex() + n)) { | 15971 !PropertyDetails::IsValidIndex(dictionary->NextEnumerationIndex() + n)) { |
| 15965 // If not, we generate new indices for the properties. | 15972 // If not, we generate new indices for the properties. |
| 15966 GenerateNewEnumerationIndices(dictionary); | 15973 GenerateNewEnumerationIndices(dictionary); |
| 15967 } | 15974 } |
| 15968 return DerivedHashTable::EnsureCapacity(dictionary, n, key); | 15975 return DerivedHashTable::EnsureCapacity(dictionary, n, key); |
| 15969 } | 15976 } |
| 15970 | 15977 |
| 15971 | 15978 |
| 15972 template <typename Derived, typename Shape, typename Key> | 15979 template <typename Derived, typename Shape, typename Key> |
| 15973 Handle<Object> Dictionary<Derived, Shape, Key>::DeleteProperty( | 15980 Handle<Object> Dictionary<Derived, Shape, Key>::DeleteProperty( |
| 15974 Handle<Derived> dictionary, int entry) { | 15981 Handle<Derived> dictionary, int entry, bool strong_obj) { |
| 15975 Factory* factory = dictionary->GetIsolate()->factory(); | 15982 Factory* factory = dictionary->GetIsolate()->factory(); |
| 15976 PropertyDetails details = dictionary->DetailsAt(entry); | 15983 PropertyDetails details = dictionary->DetailsAt(entry); |
| 15977 if (!details.IsConfigurable()) return factory->false_value(); | 15984 if (!details.IsConfigurable() || strong_obj) return factory->false_value(); |
| 15978 | 15985 |
| 15979 dictionary->SetEntry( | 15986 dictionary->SetEntry( |
| 15980 entry, factory->the_hole_value(), factory->the_hole_value()); | 15987 entry, factory->the_hole_value(), factory->the_hole_value()); |
| 15981 dictionary->ElementRemoved(); | 15988 dictionary->ElementRemoved(); |
| 15982 return factory->true_value(); | 15989 return factory->true_value(); |
| 15983 } | 15990 } |
| 15984 | 15991 |
| 15985 | 15992 |
| 15986 template<typename Derived, typename Shape, typename Key> | 15993 template<typename Derived, typename Shape, typename Key> |
| 15987 Handle<Derived> Dictionary<Derived, Shape, Key>::AtPut( | 15994 Handle<Derived> Dictionary<Derived, Shape, Key>::AtPut( |
| (...skipping 1265 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 17253 void PropertyCell::SetValueWithInvalidation(Handle<PropertyCell> cell, | 17260 void PropertyCell::SetValueWithInvalidation(Handle<PropertyCell> cell, |
| 17254 Handle<Object> new_value) { | 17261 Handle<Object> new_value) { |
| 17255 if (cell->value() != *new_value) { | 17262 if (cell->value() != *new_value) { |
| 17256 cell->set_value(*new_value); | 17263 cell->set_value(*new_value); |
| 17257 Isolate* isolate = cell->GetIsolate(); | 17264 Isolate* isolate = cell->GetIsolate(); |
| 17258 cell->dependent_code()->DeoptimizeDependentCodeGroup( | 17265 cell->dependent_code()->DeoptimizeDependentCodeGroup( |
| 17259 isolate, DependentCode::kPropertyCellChangedGroup); | 17266 isolate, DependentCode::kPropertyCellChangedGroup); |
| 17260 } | 17267 } |
| 17261 } | 17268 } |
| 17262 } } // namespace v8::internal | 17269 } } // namespace v8::internal |
| OLD | NEW |