Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(56)

Side by Side Diff: src/objects.cc

Issue 1767123002: [runtime] Pass in receiver as target to the LookupIterator if known to be JSReceiver (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: property-descriptor Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/contexts.cc ('k') | src/objects-inl.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 the V8 project authors. All rights reserved. 1 // Copyright 2015 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 "src/objects.h" 5 #include "src/objects.h"
6 6
7 #include <cmath> 7 #include <cmath>
8 #include <iomanip> 8 #include <iomanip>
9 #include <sstream> 9 #include <sstream>
10 10
(...skipping 5209 matching lines...) Expand 10 before | Expand all | Expand 10 after
5220 object->JSObjectVerify(); 5220 object->JSObjectVerify();
5221 } 5221 }
5222 #endif 5222 #endif
5223 return true; 5223 return true;
5224 } 5224 }
5225 5225
5226 5226
5227 void JSObject::AddProperty(Handle<JSObject> object, Handle<Name> name, 5227 void JSObject::AddProperty(Handle<JSObject> object, Handle<Name> name,
5228 Handle<Object> value, 5228 Handle<Object> value,
5229 PropertyAttributes attributes) { 5229 PropertyAttributes attributes) {
5230 LookupIterator it(object, name, LookupIterator::OWN_SKIP_INTERCEPTOR); 5230 LookupIterator it(object, name, object, LookupIterator::OWN_SKIP_INTERCEPTOR);
5231 CHECK_NE(LookupIterator::ACCESS_CHECK, it.state()); 5231 CHECK_NE(LookupIterator::ACCESS_CHECK, it.state());
5232 #ifdef DEBUG 5232 #ifdef DEBUG
5233 uint32_t index; 5233 uint32_t index;
5234 DCHECK(!object->IsJSProxy()); 5234 DCHECK(!object->IsJSProxy());
5235 DCHECK(!name->AsArrayIndex(&index)); 5235 DCHECK(!name->AsArrayIndex(&index));
5236 Maybe<PropertyAttributes> maybe = GetPropertyAttributes(&it); 5236 Maybe<PropertyAttributes> maybe = GetPropertyAttributes(&it);
5237 DCHECK(maybe.IsJust()); 5237 DCHECK(maybe.IsJust());
5238 DCHECK(!it.IsFound()); 5238 DCHECK(!it.IsFound());
5239 DCHECK(object->map()->is_extensible() || name->IsPrivate()); 5239 DCHECK(object->map()->is_extensible() || name->IsPrivate());
5240 #endif 5240 #endif
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
5331 Nothing<bool>()); 5331 Nothing<bool>());
5332 } 5332 }
5333 5333
5334 return Just(true); 5334 return Just(true);
5335 } 5335 }
5336 case LookupIterator::INTEGER_INDEXED_EXOTIC: 5336 case LookupIterator::INTEGER_INDEXED_EXOTIC:
5337 return RedefineIncompatibleProperty(it->isolate(), it->GetName(), value, 5337 return RedefineIncompatibleProperty(it->isolate(), it->GetName(), value,
5338 should_throw); 5338 should_throw);
5339 5339
5340 case LookupIterator::DATA: { 5340 case LookupIterator::DATA: {
5341 Handle<Object> old_value = it->factory()->the_hole_value();
5342 // Regular property update if the attributes match. 5341 // Regular property update if the attributes match.
5343 if (it->property_attributes() == attributes) { 5342 if (it->property_attributes() == attributes) {
5344 return SetDataProperty(it, value); 5343 return SetDataProperty(it, value);
5345 } 5344 }
5346 5345
5347 // Special case: properties of typed arrays cannot be reconfigured to 5346 // Special case: properties of typed arrays cannot be reconfigured to
5348 // non-writable nor to non-enumerable. 5347 // non-writable nor to non-enumerable.
5349 if (it->IsElement() && object->HasFixedTypedArrayElements()) { 5348 if (it->IsElement() && object->HasFixedTypedArrayElements()) {
5350 return RedefineIncompatibleProperty(it->isolate(), it->GetName(), 5349 return RedefineIncompatibleProperty(it->isolate(), it->GetName(),
5351 value, should_throw); 5350 value, should_throw);
5352 } 5351 }
5353 5352
5354 // Reconfigure the data property if the attributes mismatch. 5353 // Reconfigure the data property if the attributes mismatch.
5354 Handle<Object> old_value = it->factory()->the_hole_value();
5355 if (is_observed) old_value = it->GetDataValue(); 5355 if (is_observed) old_value = it->GetDataValue();
5356 5356
5357 it->ReconfigureDataProperty(value, attributes); 5357 it->ReconfigureDataProperty(value, attributes);
5358 5358
5359 if (is_observed) { 5359 if (is_observed) {
5360 if (old_value->SameValue(*value)) { 5360 if (old_value->SameValue(*value)) {
5361 old_value = it->factory()->the_hole_value(); 5361 old_value = it->factory()->the_hole_value();
5362 } 5362 }
5363 RETURN_ON_EXCEPTION_VALUE( 5363 RETURN_ON_EXCEPTION_VALUE(
5364 it->isolate(), EnqueueChangeRecord(object, "reconfigure", 5364 it->isolate(), EnqueueChangeRecord(object, "reconfigure",
5365 it->GetName(), old_value), 5365 it->GetName(), old_value),
5366 Nothing<bool>()); 5366 Nothing<bool>());
5367 } 5367 }
5368 return Just(true); 5368 return Just(true);
5369 } 5369 }
5370 } 5370 }
5371 } 5371 }
5372 5372
5373 return AddDataProperty(it, value, attributes, should_throw, 5373 return AddDataProperty(it, value, attributes, should_throw,
5374 CERTAINLY_NOT_STORE_FROM_KEYED); 5374 CERTAINLY_NOT_STORE_FROM_KEYED);
5375 } 5375 }
5376 5376
5377 MaybeHandle<Object> JSObject::SetOwnPropertyIgnoreAttributes( 5377 MaybeHandle<Object> JSObject::SetOwnPropertyIgnoreAttributes(
5378 Handle<JSObject> object, Handle<Name> name, Handle<Object> value, 5378 Handle<JSObject> object, Handle<Name> name, Handle<Object> value,
5379 PropertyAttributes attributes) { 5379 PropertyAttributes attributes) {
5380 DCHECK(!value->IsTheHole()); 5380 DCHECK(!value->IsTheHole());
5381 LookupIterator it(object, name, LookupIterator::OWN); 5381 LookupIterator it(object, name, object, LookupIterator::OWN);
5382 return DefineOwnPropertyIgnoreAttributes(&it, value, attributes); 5382 return DefineOwnPropertyIgnoreAttributes(&it, value, attributes);
5383 } 5383 }
5384 5384
5385 MaybeHandle<Object> JSObject::SetOwnElementIgnoreAttributes( 5385 MaybeHandle<Object> JSObject::SetOwnElementIgnoreAttributes(
5386 Handle<JSObject> object, uint32_t index, Handle<Object> value, 5386 Handle<JSObject> object, uint32_t index, Handle<Object> value,
5387 PropertyAttributes attributes) { 5387 PropertyAttributes attributes) {
5388 Isolate* isolate = object->GetIsolate(); 5388 Isolate* isolate = object->GetIsolate();
5389 LookupIterator it(isolate, object, index, LookupIterator::OWN); 5389 LookupIterator it(isolate, object, index, object, LookupIterator::OWN);
5390 return DefineOwnPropertyIgnoreAttributes(&it, value, attributes); 5390 return DefineOwnPropertyIgnoreAttributes(&it, value, attributes);
5391 } 5391 }
5392 5392
5393 MaybeHandle<Object> JSObject::DefinePropertyOrElementIgnoreAttributes( 5393 MaybeHandle<Object> JSObject::DefinePropertyOrElementIgnoreAttributes(
5394 Handle<JSObject> object, Handle<Name> name, Handle<Object> value, 5394 Handle<JSObject> object, Handle<Name> name, Handle<Object> value,
5395 PropertyAttributes attributes) { 5395 PropertyAttributes attributes) {
5396 Isolate* isolate = object->GetIsolate(); 5396 Isolate* isolate = object->GetIsolate();
5397 LookupIterator it = LookupIterator::PropertyOrElement(isolate, object, name, 5397 LookupIterator it = LookupIterator::PropertyOrElement(
5398 LookupIterator::OWN); 5398 isolate, object, name, object, LookupIterator::OWN);
5399 return DefineOwnPropertyIgnoreAttributes(&it, value, attributes); 5399 return DefineOwnPropertyIgnoreAttributes(&it, value, attributes);
5400 } 5400 }
5401 5401
5402 5402
5403 Maybe<PropertyAttributes> JSObject::GetPropertyAttributesWithInterceptor( 5403 Maybe<PropertyAttributes> JSObject::GetPropertyAttributesWithInterceptor(
5404 LookupIterator* it) { 5404 LookupIterator* it) {
5405 Isolate* isolate = it->isolate(); 5405 Isolate* isolate = it->isolate();
5406 // Make sure that the top context does not change when doing 5406 // Make sure that the top context does not change when doing
5407 // callbacks or interceptor calls. 5407 // callbacks or interceptor calls.
5408 AssertNoContextChange ncc(isolate); 5408 AssertNoContextChange ncc(isolate);
(...skipping 461 matching lines...) Expand 10 before | Expand all | Expand 10 after
5870 } 5870 }
5871 5871
5872 // static 5872 // static
5873 Handle<Smi> JSObject::GetOrCreateIdentityHash(Handle<JSObject> object) { 5873 Handle<Smi> JSObject::GetOrCreateIdentityHash(Handle<JSObject> object) {
5874 if (object->IsJSGlobalProxy()) { 5874 if (object->IsJSGlobalProxy()) {
5875 return GetOrCreateIdentityHashHelper(Handle<JSGlobalProxy>::cast(object)); 5875 return GetOrCreateIdentityHashHelper(Handle<JSGlobalProxy>::cast(object));
5876 } 5876 }
5877 Isolate* isolate = object->GetIsolate(); 5877 Isolate* isolate = object->GetIsolate();
5878 5878
5879 Handle<Name> hash_code_symbol = isolate->factory()->hash_code_symbol(); 5879 Handle<Name> hash_code_symbol = isolate->factory()->hash_code_symbol();
5880 LookupIterator it(object, hash_code_symbol, LookupIterator::OWN); 5880 LookupIterator it(object, hash_code_symbol, object, LookupIterator::OWN);
5881 if (it.IsFound()) { 5881 if (it.IsFound()) {
5882 DCHECK_EQ(LookupIterator::DATA, it.state()); 5882 DCHECK_EQ(LookupIterator::DATA, it.state());
5883 Handle<Object> maybe_hash = it.GetDataValue(); 5883 Handle<Object> maybe_hash = it.GetDataValue();
5884 if (maybe_hash->IsSmi()) return Handle<Smi>::cast(maybe_hash); 5884 if (maybe_hash->IsSmi()) return Handle<Smi>::cast(maybe_hash);
5885 } 5885 }
5886 5886
5887 Handle<Smi> hash(GenerateIdentityHash(isolate), isolate); 5887 Handle<Smi> hash(GenerateIdentityHash(isolate), isolate);
5888 CHECK(AddDataProperty(&it, hash, NONE, THROW_ON_ERROR, 5888 CHECK(AddDataProperty(&it, hash, NONE, THROW_ON_ERROR,
5889 CERTAINLY_NOT_STORE_FROM_KEYED) 5889 CERTAINLY_NOT_STORE_FROM_KEYED)
5890 .IsJust()); 5890 .IsJust());
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
5979 5979
5980 Handle<ObjectHashTable> hashtable(ObjectHashTable::cast(inline_value)); 5980 Handle<ObjectHashTable> hashtable(ObjectHashTable::cast(inline_value));
5981 bool was_present = false; 5981 bool was_present = false;
5982 ObjectHashTable::Remove(hashtable, key, &was_present); 5982 ObjectHashTable::Remove(hashtable, key, &was_present);
5983 } 5983 }
5984 5984
5985 5985
5986 bool JSObject::HasHiddenProperties(Handle<JSObject> object) { 5986 bool JSObject::HasHiddenProperties(Handle<JSObject> object) {
5987 Isolate* isolate = object->GetIsolate(); 5987 Isolate* isolate = object->GetIsolate();
5988 Handle<Symbol> hidden = isolate->factory()->hidden_properties_symbol(); 5988 Handle<Symbol> hidden = isolate->factory()->hidden_properties_symbol();
5989 LookupIterator it(object, hidden); 5989 LookupIterator it(object, hidden, object);
5990 Maybe<PropertyAttributes> maybe = GetPropertyAttributes(&it); 5990 Maybe<PropertyAttributes> maybe = GetPropertyAttributes(&it);
5991 // Cannot get an exception since the hidden_properties_symbol isn't exposed to 5991 // Cannot get an exception since the hidden_properties_symbol isn't exposed to
5992 // JS. 5992 // JS.
5993 DCHECK(maybe.IsJust()); 5993 DCHECK(maybe.IsJust());
5994 return maybe.FromJust() != ABSENT; 5994 return maybe.FromJust() != ABSENT;
5995 } 5995 }
5996 5996
5997 5997
5998 Object* JSObject::GetHiddenPropertiesHashTable() { 5998 Object* JSObject::GetHiddenPropertiesHashTable() {
5999 DCHECK(!IsJSGlobalProxy()); 5999 DCHECK(!IsJSGlobalProxy());
(...skipping 14 matching lines...) Expand all
6014 FieldIndex index = FieldIndex::ForDescriptor(this->map(), 6014 FieldIndex index = FieldIndex::ForDescriptor(this->map(),
6015 sorted_index); 6015 sorted_index);
6016 return this->RawFastPropertyAt(index); 6016 return this->RawFastPropertyAt(index);
6017 } else { 6017 } else {
6018 return GetHeap()->undefined_value(); 6018 return GetHeap()->undefined_value();
6019 } 6019 }
6020 } else { 6020 } else {
6021 return GetHeap()->undefined_value(); 6021 return GetHeap()->undefined_value();
6022 } 6022 }
6023 } else { 6023 } else {
6024 Handle<Symbol> hidden = GetIsolate()->factory()->hidden_properties_symbol(); 6024 Isolate* isolate = GetIsolate();
6025 LookupIterator it(handle(this), hidden); 6025 Handle<Symbol> hidden = isolate->factory()->hidden_properties_symbol();
6026 Handle<JSObject> receiver(this, isolate);
6027 LookupIterator it(receiver, hidden, receiver);
6026 // Access check is always skipped for the hidden string anyways. 6028 // Access check is always skipped for the hidden string anyways.
6027 return *GetDataProperty(&it); 6029 return *GetDataProperty(&it);
6028 } 6030 }
6029 } 6031 }
6030 6032
6031 Handle<ObjectHashTable> JSObject::GetOrCreateHiddenPropertiesHashtable( 6033 Handle<ObjectHashTable> JSObject::GetOrCreateHiddenPropertiesHashtable(
6032 Handle<JSObject> object) { 6034 Handle<JSObject> object) {
6033 Isolate* isolate = object->GetIsolate(); 6035 Isolate* isolate = object->GetIsolate();
6034 6036
6035 static const int kInitialCapacity = 4; 6037 static const int kInitialCapacity = 4;
(...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after
6214 } 6216 }
6215 } 6217 }
6216 } 6218 }
6217 6219
6218 return Just(true); 6220 return Just(true);
6219 } 6221 }
6220 6222
6221 6223
6222 Maybe<bool> JSReceiver::DeleteElement(Handle<JSReceiver> object, uint32_t index, 6224 Maybe<bool> JSReceiver::DeleteElement(Handle<JSReceiver> object, uint32_t index,
6223 LanguageMode language_mode) { 6225 LanguageMode language_mode) {
6224 LookupIterator it(object->GetIsolate(), object, index, 6226 LookupIterator it(object->GetIsolate(), object, index, object,
6225 LookupIterator::HIDDEN); 6227 LookupIterator::HIDDEN);
6226 return DeleteProperty(&it, language_mode); 6228 return DeleteProperty(&it, language_mode);
6227 } 6229 }
6228 6230
6229 6231
6230 Maybe<bool> JSReceiver::DeleteProperty(Handle<JSReceiver> object, 6232 Maybe<bool> JSReceiver::DeleteProperty(Handle<JSReceiver> object,
6231 Handle<Name> name, 6233 Handle<Name> name,
6232 LanguageMode language_mode) { 6234 LanguageMode language_mode) {
6233 LookupIterator it(object, name, LookupIterator::HIDDEN); 6235 LookupIterator it(object, name, object, LookupIterator::HIDDEN);
6234 return DeleteProperty(&it, language_mode); 6236 return DeleteProperty(&it, language_mode);
6235 } 6237 }
6236 6238
6237 6239
6238 Maybe<bool> JSReceiver::DeletePropertyOrElement(Handle<JSReceiver> object, 6240 Maybe<bool> JSReceiver::DeletePropertyOrElement(Handle<JSReceiver> object,
6239 Handle<Name> name, 6241 Handle<Name> name,
6240 LanguageMode language_mode) { 6242 LanguageMode language_mode) {
6241 LookupIterator it = LookupIterator::PropertyOrElement( 6243 LookupIterator it = LookupIterator::PropertyOrElement(
6242 name->GetIsolate(), object, name, LookupIterator::HIDDEN); 6244 name->GetIsolate(), object, name, object, LookupIterator::HIDDEN);
6243 return DeleteProperty(&it, language_mode); 6245 return DeleteProperty(&it, language_mode);
6244 } 6246 }
6245 6247
6246 6248
6247 // ES6 7.1.14 6249 // ES6 7.1.14
6248 MaybeHandle<Object> ToPropertyKey(Isolate* isolate, Handle<Object> value) { 6250 MaybeHandle<Object> ToPropertyKey(Isolate* isolate, Handle<Object> value) {
6249 // 1. Let key be ToPrimitive(argument, hint String). 6251 // 1. Let key be ToPrimitive(argument, hint String).
6250 MaybeHandle<Object> maybe_key = 6252 MaybeHandle<Object> maybe_key =
6251 Object::ToPrimitive(value, ToPrimitiveHint::kString); 6253 Object::ToPrimitive(value, ToPrimitiveHint::kString);
6252 // 2. ReturnIfAbrupt(key). 6254 // 2. ReturnIfAbrupt(key).
(...skipping 846 matching lines...) Expand 10 before | Expand all | Expand 10 after
7099 desc->ToAttributes() != DONT_ENUM) { 7101 desc->ToAttributes() != DONT_ENUM) {
7100 RETURN_FAILURE(isolate, should_throw, 7102 RETURN_FAILURE(isolate, should_throw,
7101 NewTypeError(MessageTemplate::kProxyPrivate)); 7103 NewTypeError(MessageTemplate::kProxyPrivate));
7102 } 7104 }
7103 DCHECK(proxy->map()->is_dictionary_map()); 7105 DCHECK(proxy->map()->is_dictionary_map());
7104 Handle<Object> value = 7106 Handle<Object> value =
7105 desc->has_value() 7107 desc->has_value()
7106 ? desc->value() 7108 ? desc->value()
7107 : Handle<Object>::cast(isolate->factory()->undefined_value()); 7109 : Handle<Object>::cast(isolate->factory()->undefined_value());
7108 7110
7109 LookupIterator it(proxy, private_name); 7111 LookupIterator it(proxy, private_name, proxy);
7110 7112
7111 if (it.IsFound()) { 7113 if (it.IsFound()) {
7112 DCHECK_EQ(LookupIterator::DATA, it.state()); 7114 DCHECK_EQ(LookupIterator::DATA, it.state());
7113 DCHECK_EQ(DONT_ENUM, it.property_attributes()); 7115 DCHECK_EQ(DONT_ENUM, it.property_attributes());
7114 it.WriteDataValue(value); 7116 it.WriteDataValue(value);
7115 return Just(true); 7117 return Just(true);
7116 } 7118 }
7117 7119
7118 Handle<NameDictionary> dict(proxy->property_dictionary()); 7120 Handle<NameDictionary> dict(proxy->property_dictionary());
7119 PropertyDetails details(DONT_ENUM, DATA, 0, PropertyCellType::kNoCell); 7121 PropertyDetails details(DONT_ENUM, DATA, 0, PropertyCellType::kNoCell);
(...skipping 7927 matching lines...) Expand 10 before | Expand all | Expand 10 after
15047 15049
15048 15050
15049 // Returns false if the passed-in index is marked non-configurable, which will 15051 // Returns false if the passed-in index is marked non-configurable, which will
15050 // cause the truncation operation to halt, and thus no further old values need 15052 // cause the truncation operation to halt, and thus no further old values need
15051 // be collected. 15053 // be collected.
15052 static bool GetOldValue(Isolate* isolate, 15054 static bool GetOldValue(Isolate* isolate,
15053 Handle<JSObject> object, 15055 Handle<JSObject> object,
15054 uint32_t index, 15056 uint32_t index,
15055 List<Handle<Object> >* old_values, 15057 List<Handle<Object> >* old_values,
15056 List<uint32_t>* indices) { 15058 List<uint32_t>* indices) {
15057 LookupIterator it(isolate, object, index, LookupIterator::HIDDEN); 15059 LookupIterator it(isolate, object, index, object, LookupIterator::HIDDEN);
15058 CHECK(JSReceiver::GetPropertyAttributes(&it).IsJust()); 15060 CHECK(JSReceiver::GetPropertyAttributes(&it).IsJust());
15059 DCHECK(it.IsFound()); 15061 DCHECK(it.IsFound());
15060 if (!it.IsConfigurable()) return false; 15062 if (!it.IsConfigurable()) return false;
15061 Handle<Object> value = 15063 Handle<Object> value =
15062 it.state() == LookupIterator::ACCESSOR 15064 it.state() == LookupIterator::ACCESSOR
15063 ? Handle<Object>::cast(isolate->factory()->the_hole_value()) 15065 ? Handle<Object>::cast(isolate->factory()->the_hole_value())
15064 : JSReceiver::GetDataProperty(&it); 15066 : JSReceiver::GetDataProperty(&it);
15065 old_values->Add(value); 15067 old_values->Add(value);
15066 indices->Add(index); 15068 indices->Add(index);
15067 return true; 15069 return true;
(...skipping 1046 matching lines...) Expand 10 before | Expand all | Expand 10 after
16114 16116
16115 bool JSArray::HasReadOnlyLength(Handle<JSArray> array) { 16117 bool JSArray::HasReadOnlyLength(Handle<JSArray> array) {
16116 Isolate* isolate = array->GetIsolate(); 16118 Isolate* isolate = array->GetIsolate();
16117 // Optimistic fast path: "length" is usually the first fast property. 16119 // Optimistic fast path: "length" is usually the first fast property.
16118 DescriptorArray* descriptors = array->map()->instance_descriptors(); 16120 DescriptorArray* descriptors = array->map()->instance_descriptors();
16119 if (descriptors->length() >= 1 && 16121 if (descriptors->length() >= 1 &&
16120 descriptors->GetKey(0) == isolate->heap()->length_string()) { 16122 descriptors->GetKey(0) == isolate->heap()->length_string()) {
16121 return descriptors->GetDetails(0).IsReadOnly(); 16123 return descriptors->GetDetails(0).IsReadOnly();
16122 } 16124 }
16123 16125
16124 LookupIterator it(array, isolate->factory()->length_string(), 16126 LookupIterator it(array, isolate->factory()->length_string(), array,
16125 LookupIterator::OWN_SKIP_INTERCEPTOR); 16127 LookupIterator::OWN_SKIP_INTERCEPTOR);
16126 CHECK_EQ(LookupIterator::ACCESSOR, it.state()); 16128 CHECK_EQ(LookupIterator::ACCESSOR, it.state());
16127 return it.IsReadOnly(); 16129 return it.IsReadOnly();
16128 } 16130 }
16129 16131
16130 16132
16131 bool JSArray::WouldChangeReadOnlyLength(Handle<JSArray> array, 16133 bool JSArray::WouldChangeReadOnlyLength(Handle<JSArray> array,
16132 uint32_t index) { 16134 uint32_t index) {
16133 uint32_t length = 0; 16135 uint32_t length = 0;
16134 CHECK(array->length()->ToArrayLength(&length)); 16136 CHECK(array->length()->ToArrayLength(&length));
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after
16292 Handle<Name> name) { 16294 Handle<Name> name) {
16293 LookupIterator it = LookupIterator::PropertyOrElement( 16295 LookupIterator it = LookupIterator::PropertyOrElement(
16294 name->GetIsolate(), object, name, LookupIterator::OWN_SKIP_INTERCEPTOR); 16296 name->GetIsolate(), object, name, LookupIterator::OWN_SKIP_INTERCEPTOR);
16295 return HasProperty(&it); 16297 return HasProperty(&it);
16296 } 16298 }
16297 16299
16298 16300
16299 Maybe<bool> JSObject::HasRealElementProperty(Handle<JSObject> object, 16301 Maybe<bool> JSObject::HasRealElementProperty(Handle<JSObject> object,
16300 uint32_t index) { 16302 uint32_t index) {
16301 Isolate* isolate = object->GetIsolate(); 16303 Isolate* isolate = object->GetIsolate();
16302 LookupIterator it(isolate, object, index, 16304 LookupIterator it(isolate, object, index, object,
16303 LookupIterator::OWN_SKIP_INTERCEPTOR); 16305 LookupIterator::OWN_SKIP_INTERCEPTOR);
16304 return HasProperty(&it); 16306 return HasProperty(&it);
16305 } 16307 }
16306 16308
16307 16309
16308 Maybe<bool> JSObject::HasRealNamedCallbackProperty(Handle<JSObject> object, 16310 Maybe<bool> JSObject::HasRealNamedCallbackProperty(Handle<JSObject> object,
16309 Handle<Name> name) { 16311 Handle<Name> name) {
16310 LookupIterator it = LookupIterator::PropertyOrElement( 16312 LookupIterator it = LookupIterator::PropertyOrElement(
16311 name->GetIsolate(), object, name, LookupIterator::OWN_SKIP_INTERCEPTOR); 16313 name->GetIsolate(), object, name, LookupIterator::OWN_SKIP_INTERCEPTOR);
16312 Maybe<PropertyAttributes> maybe_result = GetPropertyAttributes(&it); 16314 Maybe<PropertyAttributes> maybe_result = GetPropertyAttributes(&it);
(...skipping 3443 matching lines...) Expand 10 before | Expand all | Expand 10 after
19756 if (cell->value() != *new_value) { 19758 if (cell->value() != *new_value) {
19757 cell->set_value(*new_value); 19759 cell->set_value(*new_value);
19758 Isolate* isolate = cell->GetIsolate(); 19760 Isolate* isolate = cell->GetIsolate();
19759 cell->dependent_code()->DeoptimizeDependentCodeGroup( 19761 cell->dependent_code()->DeoptimizeDependentCodeGroup(
19760 isolate, DependentCode::kPropertyCellChangedGroup); 19762 isolate, DependentCode::kPropertyCellChangedGroup);
19761 } 19763 }
19762 } 19764 }
19763 19765
19764 } // namespace internal 19766 } // namespace internal
19765 } // namespace v8 19767 } // namespace v8
OLDNEW
« no previous file with comments | « src/contexts.cc ('k') | src/objects-inl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698