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

Side by Side Diff: src/objects.cc

Issue 491023002: Get rid of all non-IC uses of LookupOwnRealNamedProperty (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 4 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 | Annotate | Revision Log
OLDNEW
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 "src/v8.h" 5 #include "src/v8.h"
6 6
7 #include "src/accessors.h" 7 #include "src/accessors.h"
8 #include "src/allocation-site-scopes.h" 8 #include "src/allocation-site-scopes.h"
9 #include "src/api.h" 9 #include "src/api.h"
10 #include "src/arguments.h" 10 #include "src/arguments.h"
(...skipping 12933 matching lines...) Expand 10 before | Expand all | Expand 10 after
12944 jsarray_map->LookupDescriptor(NULL, *length_string, &lookup); 12944 jsarray_map->LookupDescriptor(NULL, *length_string, &lookup);
12945 return lookup.IsReadOnly(); 12945 return lookup.IsReadOnly();
12946 } 12946 }
12947 12947
12948 12948
12949 bool JSArray::WouldChangeReadOnlyLength(Handle<JSArray> array, 12949 bool JSArray::WouldChangeReadOnlyLength(Handle<JSArray> array,
12950 uint32_t index) { 12950 uint32_t index) {
12951 uint32_t length = 0; 12951 uint32_t length = 0;
12952 CHECK(array->length()->ToArrayIndex(&length)); 12952 CHECK(array->length()->ToArrayIndex(&length));
12953 if (length <= index) { 12953 if (length <= index) {
12954 Isolate* isolate = array->GetIsolate(); 12954 LookupIterator it(array, array->GetIsolate()->factory()->length_string(),
12955 LookupResult lookup(isolate); 12955 LookupIterator::CHECK_PROPERTY);
12956 Handle<Name> length_string = isolate->factory()->length_string(); 12956 CHECK(it.IsFound());
12957 array->LookupOwnRealNamedProperty(length_string, &lookup); 12957 CHECK(it.HasProperty());
12958 return lookup.IsReadOnly(); 12958 return it.IsReadOnly();
12959 } 12959 }
12960 return false; 12960 return false;
12961 } 12961 }
12962 12962
12963 12963
12964 MaybeHandle<Object> JSArray::ReadOnlyLengthError(Handle<JSArray> array) { 12964 MaybeHandle<Object> JSArray::ReadOnlyLengthError(Handle<JSArray> array) {
12965 Isolate* isolate = array->GetIsolate(); 12965 Isolate* isolate = array->GetIsolate();
12966 Handle<Name> length = isolate->factory()->length_string(); 12966 Handle<Name> length = isolate->factory()->length_string();
12967 Handle<Object> args[2] = { length, array }; 12967 Handle<Object> args[2] = { length, array };
12968 Handle<Object> error = isolate->factory()->NewTypeError( 12968 Handle<Object> error = isolate->factory()->NewTypeError(
(...skipping 363 matching lines...) Expand 10 before | Expand all | Expand 10 after
13332 CHECK(v8::Utils::OpenHandle(*result)->IsJSArray() || 13332 CHECK(v8::Utils::OpenHandle(*result)->IsJSArray() ||
13333 v8::Utils::OpenHandle(*result)->HasSloppyArgumentsElements()); 13333 v8::Utils::OpenHandle(*result)->HasSloppyArgumentsElements());
13334 #endif 13334 #endif
13335 // Rebox before returning. 13335 // Rebox before returning.
13336 return handle(*v8::Utils::OpenHandle(*result), isolate); 13336 return handle(*v8::Utils::OpenHandle(*result), isolate);
13337 } 13337 }
13338 13338
13339 13339
13340 Maybe<bool> JSObject::HasRealNamedProperty(Handle<JSObject> object, 13340 Maybe<bool> JSObject::HasRealNamedProperty(Handle<JSObject> object,
13341 Handle<Name> key) { 13341 Handle<Name> key) {
13342 Isolate* isolate = object->GetIsolate(); 13342 LookupIterator it(object, key, LookupIterator::CHECK_ACCESS_CHECK);
13343 SealHandleScope shs(isolate); 13343 Maybe<PropertyAttributes> maybe_result = GetPropertyAttributes(&it);
13344 // Check access rights if needed. 13344 if (!maybe_result.has_value) return Maybe<bool>();
13345 if (object->IsAccessCheckNeeded()) { 13345 return maybe(it.IsFound());
13346 if (!isolate->MayNamedAccess(object, key, v8::ACCESS_HAS)) {
13347 isolate->ReportFailedAccessCheck(object, v8::ACCESS_HAS);
13348 RETURN_VALUE_IF_SCHEDULED_EXCEPTION(isolate, Maybe<bool>());
13349 return maybe(false);
13350 }
13351 }
13352
13353 LookupResult result(isolate);
13354 object->LookupOwnRealNamedProperty(key, &result);
13355 return maybe(result.IsFound() && !result.IsInterceptor());
13356 } 13346 }
13357 13347
13358 13348
13359 Maybe<bool> JSObject::HasRealElementProperty(Handle<JSObject> object, 13349 Maybe<bool> JSObject::HasRealElementProperty(Handle<JSObject> object,
13360 uint32_t index) { 13350 uint32_t index) {
13361 Isolate* isolate = object->GetIsolate(); 13351 Isolate* isolate = object->GetIsolate();
13362 HandleScope scope(isolate); 13352 HandleScope scope(isolate);
13363 // Check access rights if needed. 13353 // Check access rights if needed.
13364 if (object->IsAccessCheckNeeded()) { 13354 if (object->IsAccessCheckNeeded()) {
13365 if (!isolate->MayIndexedAccess(object, index, v8::ACCESS_HAS)) { 13355 if (!isolate->MayIndexedAccess(object, index, v8::ACCESS_HAS)) {
(...skipping 14 matching lines...) Expand all
13380 13370
13381 Maybe<PropertyAttributes> result = 13371 Maybe<PropertyAttributes> result =
13382 GetElementAttributeWithoutInterceptor(object, object, index, false); 13372 GetElementAttributeWithoutInterceptor(object, object, index, false);
13383 if (!result.has_value) return Maybe<bool>(); 13373 if (!result.has_value) return Maybe<bool>();
13384 return maybe(result.value != ABSENT); 13374 return maybe(result.value != ABSENT);
13385 } 13375 }
13386 13376
13387 13377
13388 Maybe<bool> JSObject::HasRealNamedCallbackProperty(Handle<JSObject> object, 13378 Maybe<bool> JSObject::HasRealNamedCallbackProperty(Handle<JSObject> object,
13389 Handle<Name> key) { 13379 Handle<Name> key) {
13390 Isolate* isolate = object->GetIsolate(); 13380 LookupIterator it(object, key, LookupIterator::CHECK_ACCESS_CHECK);
13391 SealHandleScope shs(isolate); 13381 Maybe<PropertyAttributes> maybe_result = GetPropertyAttributes(&it);
13392 // Check access rights if needed. 13382 if (!maybe_result.has_value) return Maybe<bool>();
13393 if (object->IsAccessCheckNeeded()) { 13383 return maybe(it.IsFound() && it.property_kind() == LookupIterator::ACCESSOR);
13394 if (!isolate->MayNamedAccess(object, key, v8::ACCESS_HAS)) {
13395 isolate->ReportFailedAccessCheck(object, v8::ACCESS_HAS);
13396 RETURN_VALUE_IF_SCHEDULED_EXCEPTION(isolate, Maybe<bool>());
13397 return maybe(false);
13398 }
13399 }
13400
13401 LookupResult result(isolate);
13402 object->LookupOwnRealNamedProperty(key, &result);
13403 return maybe(result.IsPropertyCallbacks());
13404 } 13384 }
13405 13385
13406 13386
13407 int JSObject::NumberOfOwnProperties(PropertyAttributes filter) { 13387 int JSObject::NumberOfOwnProperties(PropertyAttributes filter) {
13408 if (HasFastProperties()) { 13388 if (HasFastProperties()) {
13409 Map* map = this->map(); 13389 Map* map = this->map();
13410 if (filter == NONE) return map->NumberOfOwnDescriptors(); 13390 if (filter == NONE) return map->NumberOfOwnDescriptors();
13411 if (filter & DONT_ENUM) { 13391 if (filter & DONT_ENUM) {
13412 int result = map->EnumLength(); 13392 int result = map->EnumLength();
13413 if (result != kInvalidEnumCacheSentinel) return result; 13393 if (result != kInvalidEnumCacheSentinel) return result;
(...skipping 3140 matching lines...) Expand 10 before | Expand all | Expand 10 after
16554 #define ERROR_MESSAGES_TEXTS(C, T) T, 16534 #define ERROR_MESSAGES_TEXTS(C, T) T,
16555 static const char* error_messages_[] = { 16535 static const char* error_messages_[] = {
16556 ERROR_MESSAGES_LIST(ERROR_MESSAGES_TEXTS) 16536 ERROR_MESSAGES_LIST(ERROR_MESSAGES_TEXTS)
16557 }; 16537 };
16558 #undef ERROR_MESSAGES_TEXTS 16538 #undef ERROR_MESSAGES_TEXTS
16559 return error_messages_[reason]; 16539 return error_messages_[reason];
16560 } 16540 }
16561 16541
16562 16542
16563 } } // namespace v8::internal 16543 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/lookup-inl.h ('k') | test/cctest/test-api.cc » ('j') | test/cctest/test-api.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698