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

Side by Side Diff: src/objects.cc

Issue 760883002: Add interceptor support for symbols (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 6 years 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
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 <sstream> 5 #include <sstream>
6 6
7 #include "src/v8.h" 7 #include "src/v8.h"
8 8
9 #include "src/accessors.h" 9 #include "src/accessors.h"
10 #include "src/allocation-site-scopes.h" 10 #include "src/allocation-site-scopes.h"
(...skipping 2855 matching lines...) Expand 10 before | Expand all | Expand 10 after
2866 break; 2866 break;
2867 } 2867 }
2868 } 2868 }
2869 if (new_map->NumberOfOwnDescriptors() != old_nof) return MaybeHandle<Map>(); 2869 if (new_map->NumberOfOwnDescriptors() != old_nof) return MaybeHandle<Map>();
2870 return handle(new_map); 2870 return handle(new_map);
2871 } 2871 }
2872 2872
2873 2873
2874 MaybeHandle<Object> JSObject::SetPropertyWithInterceptor(LookupIterator* it, 2874 MaybeHandle<Object> JSObject::SetPropertyWithInterceptor(LookupIterator* it,
2875 Handle<Object> value) { 2875 Handle<Object> value) {
2876 // TODO(rossberg): Support symbols in the API. 2876 Handle<Name> name = it->name();
2877 if (it->name()->IsSymbol()) return value;
2878
2879 Handle<String> name_string = Handle<String>::cast(it->name());
2880 Handle<JSObject> holder = it->GetHolder<JSObject>(); 2877 Handle<JSObject> holder = it->GetHolder<JSObject>();
2881 Handle<InterceptorInfo> interceptor(holder->GetNamedInterceptor()); 2878 Handle<InterceptorInfo> interceptor(holder->GetNamedInterceptor());
2882 if (interceptor->setter()->IsUndefined()) return MaybeHandle<Object>(); 2879 if (interceptor->setter()->IsUndefined() ||
2880 (name->IsSymbol() && !interceptor->can_intercept_symbols())) {
2881 return MaybeHandle<Object>();
2882 }
2883 2883
2884 LOG(it->isolate(), 2884 LOG(it->isolate(),
2885 ApiNamedPropertyAccess("interceptor-named-set", *holder, *name_string)); 2885 ApiNamedPropertyAccess("interceptor-named-set", *holder, *name));
2886 PropertyCallbackArguments args(it->isolate(), interceptor->data(), *holder, 2886 PropertyCallbackArguments args(it->isolate(), interceptor->data(), *holder,
2887 *holder); 2887 *holder);
2888 v8::NamedPropertySetterCallback setter = 2888 v8::GenericNamedPropertySetterCallback setter =
2889 v8::ToCData<v8::NamedPropertySetterCallback>(interceptor->setter()); 2889 v8::ToCData<v8::GenericNamedPropertySetterCallback>(
2890 v8::Handle<v8::Value> result = args.Call( 2890 interceptor->setter());
2891 setter, v8::Utils::ToLocal(name_string), v8::Utils::ToLocal(value)); 2891 v8::Handle<v8::Value> result =
2892 args.Call(setter, v8::Utils::ToLocal(name), v8::Utils::ToLocal(value));
2892 RETURN_EXCEPTION_IF_SCHEDULED_EXCEPTION(it->isolate(), Object); 2893 RETURN_EXCEPTION_IF_SCHEDULED_EXCEPTION(it->isolate(), Object);
2893 if (!result.IsEmpty()) return value; 2894 if (!result.IsEmpty()) return value;
2894 2895
2895 return MaybeHandle<Object>(); 2896 return MaybeHandle<Object>();
2896 } 2897 }
2897 2898
2898 2899
2899 MaybeHandle<Object> Object::SetProperty(Handle<Object> object, 2900 MaybeHandle<Object> Object::SetProperty(Handle<Object> object,
2900 Handle<Name> name, Handle<Object> value, 2901 Handle<Name> name, Handle<Object> value,
2901 StrictMode strict_mode, 2902 StrictMode strict_mode,
(...skipping 1165 matching lines...) Expand 10 before | Expand all | Expand 10 after
4067 4068
4068 return AddDataProperty(&it, value, attributes, STRICT, 4069 return AddDataProperty(&it, value, attributes, STRICT,
4069 CERTAINLY_NOT_STORE_FROM_KEYED); 4070 CERTAINLY_NOT_STORE_FROM_KEYED);
4070 } 4071 }
4071 4072
4072 4073
4073 Maybe<PropertyAttributes> JSObject::GetPropertyAttributesWithInterceptor( 4074 Maybe<PropertyAttributes> JSObject::GetPropertyAttributesWithInterceptor(
4074 Handle<JSObject> holder, 4075 Handle<JSObject> holder,
4075 Handle<Object> receiver, 4076 Handle<Object> receiver,
4076 Handle<Name> name) { 4077 Handle<Name> name) {
4077 // TODO(rossberg): Support symbols in the API.
4078 if (name->IsSymbol()) return maybe(ABSENT);
4079
4080 Isolate* isolate = holder->GetIsolate(); 4078 Isolate* isolate = holder->GetIsolate();
4081 HandleScope scope(isolate); 4079 HandleScope scope(isolate);
4082 4080
4083 // Make sure that the top context does not change when doing 4081 // Make sure that the top context does not change when doing
4084 // callbacks or interceptor calls. 4082 // callbacks or interceptor calls.
4085 AssertNoContextChange ncc(isolate); 4083 AssertNoContextChange ncc(isolate);
4086 4084
4087 Handle<InterceptorInfo> interceptor(holder->GetNamedInterceptor()); 4085 Handle<InterceptorInfo> interceptor(holder->GetNamedInterceptor());
4086 if (name->IsSymbol() && !interceptor->can_intercept_symbols()) {
4087 return maybe(ABSENT);
4088 }
4088 PropertyCallbackArguments args( 4089 PropertyCallbackArguments args(
4089 isolate, interceptor->data(), *receiver, *holder); 4090 isolate, interceptor->data(), *receiver, *holder);
4090 if (!interceptor->query()->IsUndefined()) { 4091 if (!interceptor->query()->IsUndefined()) {
4091 v8::NamedPropertyQueryCallback query = 4092 v8::GenericNamedPropertyQueryCallback query =
4092 v8::ToCData<v8::NamedPropertyQueryCallback>(interceptor->query()); 4093 v8::ToCData<v8::GenericNamedPropertyQueryCallback>(
4094 interceptor->query());
4093 LOG(isolate, 4095 LOG(isolate,
4094 ApiNamedPropertyAccess("interceptor-named-has", *holder, *name)); 4096 ApiNamedPropertyAccess("interceptor-named-has", *holder, *name));
4095 v8::Handle<v8::Integer> result = 4097 v8::Handle<v8::Integer> result = args.Call(query, v8::Utils::ToLocal(name));
4096 args.Call(query, v8::Utils::ToLocal(Handle<String>::cast(name)));
4097 if (!result.IsEmpty()) { 4098 if (!result.IsEmpty()) {
4098 DCHECK(result->IsInt32()); 4099 DCHECK(result->IsInt32());
4099 return maybe(static_cast<PropertyAttributes>(result->Int32Value())); 4100 return maybe(static_cast<PropertyAttributes>(result->Int32Value()));
4100 } 4101 }
4101 } else if (!interceptor->getter()->IsUndefined()) { 4102 } else if (!interceptor->getter()->IsUndefined()) {
4102 v8::NamedPropertyGetterCallback getter = 4103 v8::GenericNamedPropertyGetterCallback getter =
4103 v8::ToCData<v8::NamedPropertyGetterCallback>(interceptor->getter()); 4104 v8::ToCData<v8::GenericNamedPropertyGetterCallback>(
4105 interceptor->getter());
4104 LOG(isolate, 4106 LOG(isolate,
4105 ApiNamedPropertyAccess("interceptor-named-get-has", *holder, *name)); 4107 ApiNamedPropertyAccess("interceptor-named-get-has", *holder, *name));
4106 v8::Handle<v8::Value> result = 4108 v8::Handle<v8::Value> result = args.Call(getter, v8::Utils::ToLocal(name));
4107 args.Call(getter, v8::Utils::ToLocal(Handle<String>::cast(name)));
4108 if (!result.IsEmpty()) return maybe(DONT_ENUM); 4109 if (!result.IsEmpty()) return maybe(DONT_ENUM);
4109 } 4110 }
4110 4111
4111 RETURN_VALUE_IF_SCHEDULED_EXCEPTION(isolate, Maybe<PropertyAttributes>()); 4112 RETURN_VALUE_IF_SCHEDULED_EXCEPTION(isolate, Maybe<PropertyAttributes>());
4112 return maybe(ABSENT); 4113 return maybe(ABSENT);
4113 } 4114 }
4114 4115
4115 4116
4116 Maybe<PropertyAttributes> JSReceiver::GetOwnPropertyAttributes( 4117 Maybe<PropertyAttributes> JSReceiver::GetOwnPropertyAttributes(
4117 Handle<JSReceiver> object, Handle<Name> name) { 4118 Handle<JSReceiver> object, Handle<Name> name) {
(...skipping 807 matching lines...) Expand 10 before | Expand all | Expand 10 after
4925 Handle<Name> name = isolate->factory()->hidden_string(); 4926 Handle<Name> name = isolate->factory()->hidden_string();
4926 SetOwnPropertyIgnoreAttributes(object, name, value, DONT_ENUM).Assert(); 4927 SetOwnPropertyIgnoreAttributes(object, name, value, DONT_ENUM).Assert();
4927 return object; 4928 return object;
4928 } 4929 }
4929 4930
4930 4931
4931 MaybeHandle<Object> JSObject::DeletePropertyWithInterceptor( 4932 MaybeHandle<Object> JSObject::DeletePropertyWithInterceptor(
4932 Handle<JSObject> holder, Handle<JSObject> receiver, Handle<Name> name) { 4933 Handle<JSObject> holder, Handle<JSObject> receiver, Handle<Name> name) {
4933 Isolate* isolate = holder->GetIsolate(); 4934 Isolate* isolate = holder->GetIsolate();
4934 4935
4935 // TODO(rossberg): Support symbols in the API. 4936 Handle<InterceptorInfo> interceptor(holder->GetNamedInterceptor());
4936 if (name->IsSymbol()) return MaybeHandle<Object>(); 4937 if (interceptor->deleter()->IsUndefined() ||
4938 (name->IsSymbol() && !interceptor->can_intercept_symbols())) {
4939 return MaybeHandle<Object>();
4940 }
4937 4941
4938 Handle<InterceptorInfo> interceptor(holder->GetNamedInterceptor()); 4942 v8::GenericNamedPropertyDeleterCallback deleter =
4939 if (interceptor->deleter()->IsUndefined()) return MaybeHandle<Object>(); 4943 v8::ToCData<v8::GenericNamedPropertyDeleterCallback>(
4940 4944 interceptor->deleter());
4941 v8::NamedPropertyDeleterCallback deleter =
4942 v8::ToCData<v8::NamedPropertyDeleterCallback>(interceptor->deleter());
4943 LOG(isolate, 4945 LOG(isolate,
4944 ApiNamedPropertyAccess("interceptor-named-delete", *holder, *name)); 4946 ApiNamedPropertyAccess("interceptor-named-delete", *holder, *name));
4945 PropertyCallbackArguments args(isolate, interceptor->data(), *receiver, 4947 PropertyCallbackArguments args(isolate, interceptor->data(), *receiver,
4946 *holder); 4948 *holder);
4947 v8::Handle<v8::Boolean> result = 4949 v8::Handle<v8::Boolean> result = args.Call(deleter, v8::Utils::ToLocal(name));
4948 args.Call(deleter, v8::Utils::ToLocal(Handle<String>::cast(name)));
4949 RETURN_EXCEPTION_IF_SCHEDULED_EXCEPTION(isolate, Object); 4950 RETURN_EXCEPTION_IF_SCHEDULED_EXCEPTION(isolate, Object);
4950 if (result.IsEmpty()) return MaybeHandle<Object>(); 4951 if (result.IsEmpty()) return MaybeHandle<Object>();
4951 4952
4952 DCHECK(result->IsBoolean()); 4953 DCHECK(result->IsBoolean());
4953 Handle<Object> result_internal = v8::Utils::OpenHandle(*result); 4954 Handle<Object> result_internal = v8::Utils::OpenHandle(*result);
4954 result_internal->VerifyApiCallResultType(); 4955 result_internal->VerifyApiCallResultType();
4955 // Rebox CustomArguments::kReturnValueOffset before returning. 4956 // Rebox CustomArguments::kReturnValueOffset before returning.
4956 return handle(*result_internal, isolate); 4957 return handle(*result_internal, isolate);
4957 } 4958 }
4958 4959
(...skipping 1097 matching lines...) Expand 10 before | Expand all | Expand 10 after
6056 !current->HasNamedInterceptor() && 6057 !current->HasNamedInterceptor() &&
6057 !current->HasIndexedInterceptor()); 6058 !current->HasIndexedInterceptor());
6058 // Compute the property keys and cache them if possible. 6059 // Compute the property keys and cache them if possible.
6059 ASSIGN_RETURN_ON_EXCEPTION( 6060 ASSIGN_RETURN_ON_EXCEPTION(
6060 isolate, content, 6061 isolate, content,
6061 FixedArray::UnionOfKeys( 6062 FixedArray::UnionOfKeys(
6062 content, GetEnumPropertyKeys(current, cache_enum_keys)), 6063 content, GetEnumPropertyKeys(current, cache_enum_keys)),
6063 FixedArray); 6064 FixedArray);
6064 DCHECK(ContainsOnlyValidKeys(content)); 6065 DCHECK(ContainsOnlyValidKeys(content));
6065 6066
6066 // Add the property keys from the interceptor. 6067 // Add the non-symbol property keys from the interceptor.
6067 if (current->HasNamedInterceptor()) { 6068 if (current->HasNamedInterceptor()) {
6068 Handle<JSObject> result; 6069 Handle<JSObject> result;
6069 if (JSObject::GetKeysForNamedInterceptor( 6070 if (JSObject::GetKeysForNamedInterceptor(
6070 current, object).ToHandle(&result)) { 6071 current, object).ToHandle(&result)) {
6071 ASSIGN_RETURN_ON_EXCEPTION( 6072 ASSIGN_RETURN_ON_EXCEPTION(
6072 isolate, content, 6073 isolate, content, FixedArray::AddKeysFromArrayLike(
6073 FixedArray::AddKeysFromArrayLike(content, result), 6074 content, result, FixedArray::NON_SYMBOL_KEYS),
6074 FixedArray); 6075 FixedArray);
6075 } 6076 }
6076 DCHECK(ContainsOnlyValidKeys(content)); 6077 DCHECK(ContainsOnlyValidKeys(content));
6077 } 6078 }
6078 6079
6079 // If we only want own properties we bail out after the first 6080 // If we only want own properties we bail out after the first
6080 // iteration. 6081 // iteration.
6081 if (type == OWN_ONLY) break; 6082 if (type == OWN_ONLY) break;
6082 } 6083 }
6083 return content; 6084 return content;
(...skipping 1904 matching lines...) Expand 10 before | Expand all | Expand 10 after
7988 void FixedArray::Shrink(int new_length) { 7989 void FixedArray::Shrink(int new_length) {
7989 DCHECK(0 <= new_length && new_length <= length()); 7990 DCHECK(0 <= new_length && new_length <= length());
7990 if (new_length < length()) { 7991 if (new_length < length()) {
7991 GetHeap()->RightTrimFixedArray<Heap::FROM_MUTATOR>( 7992 GetHeap()->RightTrimFixedArray<Heap::FROM_MUTATOR>(
7992 this, length() - new_length); 7993 this, length() - new_length);
7993 } 7994 }
7994 } 7995 }
7995 7996
7996 7997
7997 MaybeHandle<FixedArray> FixedArray::AddKeysFromArrayLike( 7998 MaybeHandle<FixedArray> FixedArray::AddKeysFromArrayLike(
7998 Handle<FixedArray> content, 7999 Handle<FixedArray> content, Handle<JSObject> array, KeyFilter filter) {
7999 Handle<JSObject> array) {
8000 DCHECK(array->IsJSArray() || array->HasSloppyArgumentsElements()); 8000 DCHECK(array->IsJSArray() || array->HasSloppyArgumentsElements());
8001 ElementsAccessor* accessor = array->GetElementsAccessor(); 8001 ElementsAccessor* accessor = array->GetElementsAccessor();
8002 Handle<FixedArray> result; 8002 Handle<FixedArray> result;
8003 ASSIGN_RETURN_ON_EXCEPTION( 8003 ASSIGN_RETURN_ON_EXCEPTION(
8004 array->GetIsolate(), result, 8004 array->GetIsolate(), result,
8005 accessor->AddElementsToFixedArray(array, array, content), 8005 accessor->AddElementsToFixedArray(array, array, content, filter),
8006 FixedArray); 8006 FixedArray);
8007 8007
8008 #ifdef ENABLE_SLOW_DCHECKS 8008 #ifdef ENABLE_SLOW_DCHECKS
8009 if (FLAG_enable_slow_asserts) { 8009 if (FLAG_enable_slow_asserts) {
8010 DisallowHeapAllocation no_allocation; 8010 DisallowHeapAllocation no_allocation;
8011 for (int i = 0; i < result->length(); i++) { 8011 for (int i = 0; i < result->length(); i++) {
8012 Object* current = result->get(i); 8012 Object* current = result->get(i);
8013 DCHECK(current->IsNumber() || current->IsName()); 8013 DCHECK(current->IsNumber() || current->IsName());
8014 } 8014 }
8015 } 8015 }
8016 #endif 8016 #endif
8017 return result; 8017 return result;
8018 } 8018 }
8019 8019
8020 8020
8021 MaybeHandle<FixedArray> FixedArray::UnionOfKeys(Handle<FixedArray> first, 8021 MaybeHandle<FixedArray> FixedArray::UnionOfKeys(Handle<FixedArray> first,
8022 Handle<FixedArray> second) { 8022 Handle<FixedArray> second) {
8023 ElementsAccessor* accessor = ElementsAccessor::ForArray(second); 8023 ElementsAccessor* accessor = ElementsAccessor::ForArray(second);
8024 Handle<FixedArray> result; 8024 Handle<FixedArray> result;
8025 ASSIGN_RETURN_ON_EXCEPTION( 8025 ASSIGN_RETURN_ON_EXCEPTION(
8026 first->GetIsolate(), result, 8026 first->GetIsolate(), result,
8027 accessor->AddElementsToFixedArray( 8027 accessor->AddElementsToFixedArray(
8028 Handle<Object>::null(), // receiver 8028 Handle<Object>::null(), // receiver
8029 Handle<JSObject>::null(), // holder 8029 Handle<JSObject>::null(), // holder
8030 first, 8030 first, Handle<FixedArrayBase>::cast(second), ALL_KEYS),
8031 Handle<FixedArrayBase>::cast(second)),
8032 FixedArray); 8031 FixedArray);
8033 8032
8034 #ifdef ENABLE_SLOW_DCHECKS 8033 #ifdef ENABLE_SLOW_DCHECKS
8035 if (FLAG_enable_slow_asserts) { 8034 if (FLAG_enable_slow_asserts) {
8036 DisallowHeapAllocation no_allocation; 8035 DisallowHeapAllocation no_allocation;
8037 for (int i = 0; i < result->length(); i++) { 8036 for (int i = 0; i < result->length(); i++) {
8038 Object* current = result->get(i); 8037 Object* current = result->get(i);
8039 DCHECK(current->IsNumber() || current->IsName()); 8038 DCHECK(current->IsNumber() || current->IsName());
8040 } 8039 }
8041 } 8040 }
(...skipping 5399 matching lines...) Expand 10 before | Expand all | Expand 10 after
13441 return InterceptorInfo::cast(result); 13440 return InterceptorInfo::cast(result);
13442 } 13441 }
13443 13442
13444 13443
13445 MaybeHandle<Object> JSObject::GetPropertyWithInterceptor( 13444 MaybeHandle<Object> JSObject::GetPropertyWithInterceptor(
13446 Handle<JSObject> holder, 13445 Handle<JSObject> holder,
13447 Handle<Object> receiver, 13446 Handle<Object> receiver,
13448 Handle<Name> name) { 13447 Handle<Name> name) {
13449 Isolate* isolate = holder->GetIsolate(); 13448 Isolate* isolate = holder->GetIsolate();
13450 13449
13451 // TODO(rossberg): Support symbols in the API.
13452 if (name->IsSymbol()) return isolate->factory()->undefined_value();
13453
13454 Handle<InterceptorInfo> interceptor(holder->GetNamedInterceptor(), isolate); 13450 Handle<InterceptorInfo> interceptor(holder->GetNamedInterceptor(), isolate);
13455 Handle<String> name_string = Handle<String>::cast(name);
13456
13457 if (interceptor->getter()->IsUndefined()) return MaybeHandle<Object>(); 13451 if (interceptor->getter()->IsUndefined()) return MaybeHandle<Object>();
13458 13452
13459 v8::NamedPropertyGetterCallback getter = 13453 if (name->IsSymbol() && !interceptor->can_intercept_symbols()) {
13460 v8::ToCData<v8::NamedPropertyGetterCallback>(interceptor->getter()); 13454 return MaybeHandle<Object>();
13455 }
13456
13457 v8::GenericNamedPropertyGetterCallback getter =
13458 v8::ToCData<v8::GenericNamedPropertyGetterCallback>(
13459 interceptor->getter());
13461 LOG(isolate, 13460 LOG(isolate,
13462 ApiNamedPropertyAccess("interceptor-named-get", *holder, *name)); 13461 ApiNamedPropertyAccess("interceptor-named-get", *holder, *name));
13463 PropertyCallbackArguments 13462 PropertyCallbackArguments
13464 args(isolate, interceptor->data(), *receiver, *holder); 13463 args(isolate, interceptor->data(), *receiver, *holder);
13465 v8::Handle<v8::Value> result = 13464 v8::Handle<v8::Value> result = args.Call(getter, v8::Utils::ToLocal(name));
13466 args.Call(getter, v8::Utils::ToLocal(name_string));
13467 RETURN_EXCEPTION_IF_SCHEDULED_EXCEPTION(isolate, Object); 13465 RETURN_EXCEPTION_IF_SCHEDULED_EXCEPTION(isolate, Object);
13468 if (result.IsEmpty()) return MaybeHandle<Object>(); 13466 if (result.IsEmpty()) return MaybeHandle<Object>();
13469 13467
13470 Handle<Object> result_internal = v8::Utils::OpenHandle(*result); 13468 Handle<Object> result_internal = v8::Utils::OpenHandle(*result);
13471 result_internal->VerifyApiCallResultType(); 13469 result_internal->VerifyApiCallResultType();
13472 // Rebox handle before return 13470 // Rebox handle before return
13473 return handle(*result_internal, isolate); 13471 return handle(*result_internal, isolate);
13474 } 13472 }
13475 13473
13476 13474
13477 // Compute the property keys from the interceptor. 13475 // Compute the property keys from the interceptor.
13478 // TODO(rossberg): support symbols in API, and filter here if needed.
13479 MaybeHandle<JSObject> JSObject::GetKeysForNamedInterceptor( 13476 MaybeHandle<JSObject> JSObject::GetKeysForNamedInterceptor(
13480 Handle<JSObject> object, Handle<JSReceiver> receiver) { 13477 Handle<JSObject> object, Handle<JSReceiver> receiver) {
13481 Isolate* isolate = receiver->GetIsolate(); 13478 Isolate* isolate = receiver->GetIsolate();
13482 Handle<InterceptorInfo> interceptor(object->GetNamedInterceptor()); 13479 Handle<InterceptorInfo> interceptor(object->GetNamedInterceptor());
13483 PropertyCallbackArguments 13480 PropertyCallbackArguments
13484 args(isolate, interceptor->data(), *receiver, *object); 13481 args(isolate, interceptor->data(), *receiver, *object);
13485 v8::Handle<v8::Object> result; 13482 v8::Handle<v8::Object> result;
13486 if (!interceptor->enumerator()->IsUndefined()) { 13483 if (!interceptor->enumerator()->IsUndefined()) {
13487 v8::NamedPropertyEnumeratorCallback enum_fun = 13484 v8::GenericNamedPropertyEnumeratorCallback enum_fun =
13488 v8::ToCData<v8::NamedPropertyEnumeratorCallback>( 13485 v8::ToCData<v8::GenericNamedPropertyEnumeratorCallback>(
13489 interceptor->enumerator()); 13486 interceptor->enumerator());
13490 LOG(isolate, ApiObjectAccess("interceptor-named-enum", *object)); 13487 LOG(isolate, ApiObjectAccess("interceptor-named-enum", *object));
13491 result = args.Call(enum_fun); 13488 result = args.Call(enum_fun);
13492 } 13489 }
13493 if (result.IsEmpty()) return MaybeHandle<JSObject>(); 13490 if (result.IsEmpty()) return MaybeHandle<JSObject>();
13494 #if ENABLE_EXTRA_CHECKS 13491 #if ENABLE_EXTRA_CHECKS
13495 CHECK(v8::Utils::OpenHandle(*result)->IsJSArray() || 13492 CHECK(v8::Utils::OpenHandle(*result)->IsJSArray() ||
13496 v8::Utils::OpenHandle(*result)->HasSloppyArgumentsElements()); 13493 v8::Utils::OpenHandle(*result)->HasSloppyArgumentsElements());
13497 #endif 13494 #endif
13498 // Rebox before returning. 13495 // Rebox before returning.
(...skipping 3326 matching lines...) Expand 10 before | Expand all | Expand 10 after
16825 Handle<DependentCode> codes = 16822 Handle<DependentCode> codes =
16826 DependentCode::Insert(handle(cell->dependent_code(), info->isolate()), 16823 DependentCode::Insert(handle(cell->dependent_code(), info->isolate()),
16827 DependentCode::kPropertyCellChangedGroup, 16824 DependentCode::kPropertyCellChangedGroup,
16828 info->object_wrapper()); 16825 info->object_wrapper());
16829 if (*codes != cell->dependent_code()) cell->set_dependent_code(*codes); 16826 if (*codes != cell->dependent_code()) cell->set_dependent_code(*codes);
16830 info->dependencies(DependentCode::kPropertyCellChangedGroup)->Add( 16827 info->dependencies(DependentCode::kPropertyCellChangedGroup)->Add(
16831 cell, info->zone()); 16828 cell, info->zone());
16832 } 16829 }
16833 16830
16834 } } // namespace v8::internal 16831 } } // namespace v8::internal
OLDNEW
« include/v8.h ('K') | « src/objects.h ('k') | src/objects-debug.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698