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

Side by Side Diff: src/objects.cc

Issue 1224623004: Make v8::Handle as "deprecated soon" (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 5 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/i18n.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 <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 316 matching lines...) Expand 10 before | Expand all | Expand 10 after
327 name, receiver), 327 name, receiver),
328 Object); 328 Object);
329 } 329 }
330 330
331 v8::AccessorNameGetterCallback call_fun = 331 v8::AccessorNameGetterCallback call_fun =
332 v8::ToCData<v8::AccessorNameGetterCallback>(info->getter()); 332 v8::ToCData<v8::AccessorNameGetterCallback>(info->getter());
333 if (call_fun == nullptr) return isolate->factory()->undefined_value(); 333 if (call_fun == nullptr) return isolate->factory()->undefined_value();
334 334
335 LOG(isolate, ApiNamedPropertyAccess("load", *holder, *name)); 335 LOG(isolate, ApiNamedPropertyAccess("load", *holder, *name));
336 PropertyCallbackArguments args(isolate, info->data(), *receiver, *holder); 336 PropertyCallbackArguments args(isolate, info->data(), *receiver, *holder);
337 v8::Handle<v8::Value> result = 337 v8::Local<v8::Value> result = args.Call(call_fun, v8::Utils::ToLocal(name));
338 args.Call(call_fun, v8::Utils::ToLocal(name));
339 RETURN_EXCEPTION_IF_SCHEDULED_EXCEPTION(isolate, Object); 338 RETURN_EXCEPTION_IF_SCHEDULED_EXCEPTION(isolate, Object);
340 if (result.IsEmpty()) { 339 if (result.IsEmpty()) {
341 return ReadAbsentProperty(isolate, receiver, name, language_mode); 340 return ReadAbsentProperty(isolate, receiver, name, language_mode);
342 } 341 }
343 Handle<Object> return_value = v8::Utils::OpenHandle(*result); 342 Handle<Object> return_value = v8::Utils::OpenHandle(*result);
344 return_value->VerifyApiCallResultType(); 343 return_value->VerifyApiCallResultType();
345 // Rebox handle before return. 344 // Rebox handle before return.
346 return handle(*return_value, isolate); 345 return handle(*return_value, isolate);
347 } 346 }
348 347
(...skipping 2626 matching lines...) Expand 10 before | Expand all | Expand 10 after
2975 Isolate* isolate = it->isolate(); 2974 Isolate* isolate = it->isolate();
2976 // Make sure that the top context does not change when doing callbacks or 2975 // Make sure that the top context does not change when doing callbacks or
2977 // interceptor calls. 2976 // interceptor calls.
2978 AssertNoContextChange ncc(isolate); 2977 AssertNoContextChange ncc(isolate);
2979 2978
2980 DCHECK_EQ(LookupIterator::INTERCEPTOR, it->state()); 2979 DCHECK_EQ(LookupIterator::INTERCEPTOR, it->state());
2981 Handle<InterceptorInfo> interceptor(it->GetInterceptor()); 2980 Handle<InterceptorInfo> interceptor(it->GetInterceptor());
2982 if (interceptor->setter()->IsUndefined()) return MaybeHandle<Object>(); 2981 if (interceptor->setter()->IsUndefined()) return MaybeHandle<Object>();
2983 2982
2984 Handle<JSObject> holder = it->GetHolder<JSObject>(); 2983 Handle<JSObject> holder = it->GetHolder<JSObject>();
2985 v8::Handle<v8::Value> result; 2984 v8::Local<v8::Value> result;
2986 PropertyCallbackArguments args(isolate, interceptor->data(), 2985 PropertyCallbackArguments args(isolate, interceptor->data(),
2987 *it->GetReceiver(), *holder); 2986 *it->GetReceiver(), *holder);
2988 2987
2989 if (it->IsElement()) { 2988 if (it->IsElement()) {
2990 uint32_t index = it->index(); 2989 uint32_t index = it->index();
2991 v8::IndexedPropertySetterCallback setter = 2990 v8::IndexedPropertySetterCallback setter =
2992 v8::ToCData<v8::IndexedPropertySetterCallback>(interceptor->setter()); 2991 v8::ToCData<v8::IndexedPropertySetterCallback>(interceptor->setter());
2993 LOG(isolate, 2992 LOG(isolate,
2994 ApiIndexedPropertyAccess("interceptor-indexed-set", *holder, index)); 2993 ApiIndexedPropertyAccess("interceptor-indexed-set", *holder, index));
2995 result = args.Call(setter, index, v8::Utils::ToLocal(value)); 2994 result = args.Call(setter, index, v8::Utils::ToLocal(value));
(...skipping 1344 matching lines...) Expand 10 before | Expand all | Expand 10 after
4340 4339
4341 Handle<JSObject> holder = it->GetHolder<JSObject>(); 4340 Handle<JSObject> holder = it->GetHolder<JSObject>();
4342 Handle<InterceptorInfo> interceptor(it->GetInterceptor()); 4341 Handle<InterceptorInfo> interceptor(it->GetInterceptor());
4343 if (!it->IsElement() && it->name()->IsSymbol() && 4342 if (!it->IsElement() && it->name()->IsSymbol() &&
4344 !interceptor->can_intercept_symbols()) { 4343 !interceptor->can_intercept_symbols()) {
4345 return Just(ABSENT); 4344 return Just(ABSENT);
4346 } 4345 }
4347 PropertyCallbackArguments args(isolate, interceptor->data(), 4346 PropertyCallbackArguments args(isolate, interceptor->data(),
4348 *it->GetReceiver(), *holder); 4347 *it->GetReceiver(), *holder);
4349 if (!interceptor->query()->IsUndefined()) { 4348 if (!interceptor->query()->IsUndefined()) {
4350 v8::Handle<v8::Integer> result; 4349 v8::Local<v8::Integer> result;
4351 if (it->IsElement()) { 4350 if (it->IsElement()) {
4352 uint32_t index = it->index(); 4351 uint32_t index = it->index();
4353 v8::IndexedPropertyQueryCallback query = 4352 v8::IndexedPropertyQueryCallback query =
4354 v8::ToCData<v8::IndexedPropertyQueryCallback>(interceptor->query()); 4353 v8::ToCData<v8::IndexedPropertyQueryCallback>(interceptor->query());
4355 LOG(isolate, 4354 LOG(isolate,
4356 ApiIndexedPropertyAccess("interceptor-indexed-has", *holder, index)); 4355 ApiIndexedPropertyAccess("interceptor-indexed-has", *holder, index));
4357 result = args.Call(query, index); 4356 result = args.Call(query, index);
4358 } else { 4357 } else {
4359 Handle<Name> name = it->name(); 4358 Handle<Name> name = it->name();
4360 v8::GenericNamedPropertyQueryCallback query = 4359 v8::GenericNamedPropertyQueryCallback query =
4361 v8::ToCData<v8::GenericNamedPropertyQueryCallback>( 4360 v8::ToCData<v8::GenericNamedPropertyQueryCallback>(
4362 interceptor->query()); 4361 interceptor->query());
4363 LOG(isolate, 4362 LOG(isolate,
4364 ApiNamedPropertyAccess("interceptor-named-has", *holder, *name)); 4363 ApiNamedPropertyAccess("interceptor-named-has", *holder, *name));
4365 result = args.Call(query, v8::Utils::ToLocal(name)); 4364 result = args.Call(query, v8::Utils::ToLocal(name));
4366 } 4365 }
4367 if (!result.IsEmpty()) { 4366 if (!result.IsEmpty()) {
4368 DCHECK(result->IsInt32()); 4367 DCHECK(result->IsInt32());
4369 return Just(static_cast<PropertyAttributes>( 4368 return Just(static_cast<PropertyAttributes>(
4370 result->Int32Value(reinterpret_cast<v8::Isolate*>(isolate) 4369 result->Int32Value(reinterpret_cast<v8::Isolate*>(isolate)
4371 ->GetCurrentContext()).FromJust())); 4370 ->GetCurrentContext()).FromJust()));
4372 } 4371 }
4373 } else if (!interceptor->getter()->IsUndefined()) { 4372 } else if (!interceptor->getter()->IsUndefined()) {
4374 // TODO(verwaest): Use GetPropertyWithInterceptor? 4373 // TODO(verwaest): Use GetPropertyWithInterceptor?
4375 v8::Handle<v8::Value> result; 4374 v8::Local<v8::Value> result;
4376 if (it->IsElement()) { 4375 if (it->IsElement()) {
4377 uint32_t index = it->index(); 4376 uint32_t index = it->index();
4378 v8::IndexedPropertyGetterCallback getter = 4377 v8::IndexedPropertyGetterCallback getter =
4379 v8::ToCData<v8::IndexedPropertyGetterCallback>(interceptor->getter()); 4378 v8::ToCData<v8::IndexedPropertyGetterCallback>(interceptor->getter());
4380 LOG(isolate, ApiIndexedPropertyAccess("interceptor-indexed-get-has", 4379 LOG(isolate, ApiIndexedPropertyAccess("interceptor-indexed-get-has",
4381 *holder, index)); 4380 *holder, index));
4382 result = args.Call(getter, index); 4381 result = args.Call(getter, index);
4383 } else { 4382 } else {
4384 Handle<Name> name = it->name(); 4383 Handle<Name> name = it->name();
4385 4384
(...skipping 721 matching lines...) Expand 10 before | Expand all | Expand 10 after
5107 AssertNoContextChange ncc(isolate); 5106 AssertNoContextChange ncc(isolate);
5108 5107
5109 DCHECK_EQ(LookupIterator::INTERCEPTOR, it->state()); 5108 DCHECK_EQ(LookupIterator::INTERCEPTOR, it->state());
5110 Handle<InterceptorInfo> interceptor(it->GetInterceptor()); 5109 Handle<InterceptorInfo> interceptor(it->GetInterceptor());
5111 if (interceptor->deleter()->IsUndefined()) return MaybeHandle<Object>(); 5110 if (interceptor->deleter()->IsUndefined()) return MaybeHandle<Object>();
5112 5111
5113 Handle<JSObject> holder = it->GetHolder<JSObject>(); 5112 Handle<JSObject> holder = it->GetHolder<JSObject>();
5114 5113
5115 PropertyCallbackArguments args(isolate, interceptor->data(), 5114 PropertyCallbackArguments args(isolate, interceptor->data(),
5116 *it->GetReceiver(), *holder); 5115 *it->GetReceiver(), *holder);
5117 v8::Handle<v8::Boolean> result; 5116 v8::Local<v8::Boolean> result;
5118 if (it->IsElement()) { 5117 if (it->IsElement()) {
5119 uint32_t index = it->index(); 5118 uint32_t index = it->index();
5120 v8::IndexedPropertyDeleterCallback deleter = 5119 v8::IndexedPropertyDeleterCallback deleter =
5121 v8::ToCData<v8::IndexedPropertyDeleterCallback>(interceptor->deleter()); 5120 v8::ToCData<v8::IndexedPropertyDeleterCallback>(interceptor->deleter());
5122 LOG(isolate, 5121 LOG(isolate,
5123 ApiIndexedPropertyAccess("interceptor-indexed-delete", *holder, index)); 5122 ApiIndexedPropertyAccess("interceptor-indexed-delete", *holder, index));
5124 result = args.Call(deleter, index); 5123 result = args.Call(deleter, index);
5125 } else if (it->name()->IsSymbol() && !interceptor->can_intercept_symbols()) { 5124 } else if (it->name()->IsSymbol() && !interceptor->can_intercept_symbols()) {
5126 return MaybeHandle<Object>(); 5125 return MaybeHandle<Object>();
5127 } else { 5126 } else {
(...skipping 7766 matching lines...) Expand 10 before | Expand all | Expand 10 after
12894 // interceptor calls. 12893 // interceptor calls.
12895 AssertNoContextChange ncc(isolate); 12894 AssertNoContextChange ncc(isolate);
12896 12895
12897 DCHECK_EQ(LookupIterator::INTERCEPTOR, it->state()); 12896 DCHECK_EQ(LookupIterator::INTERCEPTOR, it->state());
12898 Handle<InterceptorInfo> interceptor = it->GetInterceptor(); 12897 Handle<InterceptorInfo> interceptor = it->GetInterceptor();
12899 if (interceptor->getter()->IsUndefined()) { 12898 if (interceptor->getter()->IsUndefined()) {
12900 return isolate->factory()->undefined_value(); 12899 return isolate->factory()->undefined_value();
12901 } 12900 }
12902 12901
12903 Handle<JSObject> holder = it->GetHolder<JSObject>(); 12902 Handle<JSObject> holder = it->GetHolder<JSObject>();
12904 v8::Handle<v8::Value> result; 12903 v8::Local<v8::Value> result;
12905 PropertyCallbackArguments args(isolate, interceptor->data(), 12904 PropertyCallbackArguments args(isolate, interceptor->data(),
12906 *it->GetReceiver(), *holder); 12905 *it->GetReceiver(), *holder);
12907 12906
12908 if (it->IsElement()) { 12907 if (it->IsElement()) {
12909 uint32_t index = it->index(); 12908 uint32_t index = it->index();
12910 v8::IndexedPropertyGetterCallback getter = 12909 v8::IndexedPropertyGetterCallback getter =
12911 v8::ToCData<v8::IndexedPropertyGetterCallback>(interceptor->getter()); 12910 v8::ToCData<v8::IndexedPropertyGetterCallback>(interceptor->getter());
12912 LOG(isolate, 12911 LOG(isolate,
12913 ApiIndexedPropertyAccess("interceptor-indexed-get", *holder, index)); 12912 ApiIndexedPropertyAccess("interceptor-indexed-get", *holder, index));
12914 result = args.Call(getter, index); 12913 result = args.Call(getter, index);
(...skipping 22 matching lines...) Expand all
12937 } 12936 }
12938 12937
12939 12938
12940 // Compute the property keys from the interceptor. 12939 // Compute the property keys from the interceptor.
12941 MaybeHandle<JSObject> JSObject::GetKeysForNamedInterceptor( 12940 MaybeHandle<JSObject> JSObject::GetKeysForNamedInterceptor(
12942 Handle<JSObject> object, Handle<JSReceiver> receiver) { 12941 Handle<JSObject> object, Handle<JSReceiver> receiver) {
12943 Isolate* isolate = receiver->GetIsolate(); 12942 Isolate* isolate = receiver->GetIsolate();
12944 Handle<InterceptorInfo> interceptor(object->GetNamedInterceptor()); 12943 Handle<InterceptorInfo> interceptor(object->GetNamedInterceptor());
12945 PropertyCallbackArguments 12944 PropertyCallbackArguments
12946 args(isolate, interceptor->data(), *receiver, *object); 12945 args(isolate, interceptor->data(), *receiver, *object);
12947 v8::Handle<v8::Object> result; 12946 v8::Local<v8::Object> result;
12948 if (!interceptor->enumerator()->IsUndefined()) { 12947 if (!interceptor->enumerator()->IsUndefined()) {
12949 v8::GenericNamedPropertyEnumeratorCallback enum_fun = 12948 v8::GenericNamedPropertyEnumeratorCallback enum_fun =
12950 v8::ToCData<v8::GenericNamedPropertyEnumeratorCallback>( 12949 v8::ToCData<v8::GenericNamedPropertyEnumeratorCallback>(
12951 interceptor->enumerator()); 12950 interceptor->enumerator());
12952 LOG(isolate, ApiObjectAccess("interceptor-named-enum", *object)); 12951 LOG(isolate, ApiObjectAccess("interceptor-named-enum", *object));
12953 result = args.Call(enum_fun); 12952 result = args.Call(enum_fun);
12954 } 12953 }
12955 if (result.IsEmpty()) return MaybeHandle<JSObject>(); 12954 if (result.IsEmpty()) return MaybeHandle<JSObject>();
12956 DCHECK(v8::Utils::OpenHandle(*result)->IsJSArray() || 12955 DCHECK(v8::Utils::OpenHandle(*result)->IsJSArray() ||
12957 v8::Utils::OpenHandle(*result)->HasSloppyArgumentsElements()); 12956 v8::Utils::OpenHandle(*result)->HasSloppyArgumentsElements());
12958 // Rebox before returning. 12957 // Rebox before returning.
12959 return handle(*v8::Utils::OpenHandle(*result), isolate); 12958 return handle(*v8::Utils::OpenHandle(*result), isolate);
12960 } 12959 }
12961 12960
12962 12961
12963 // Compute the element keys from the interceptor. 12962 // Compute the element keys from the interceptor.
12964 MaybeHandle<JSObject> JSObject::GetKeysForIndexedInterceptor( 12963 MaybeHandle<JSObject> JSObject::GetKeysForIndexedInterceptor(
12965 Handle<JSObject> object, Handle<JSReceiver> receiver) { 12964 Handle<JSObject> object, Handle<JSReceiver> receiver) {
12966 Isolate* isolate = receiver->GetIsolate(); 12965 Isolate* isolate = receiver->GetIsolate();
12967 Handle<InterceptorInfo> interceptor(object->GetIndexedInterceptor()); 12966 Handle<InterceptorInfo> interceptor(object->GetIndexedInterceptor());
12968 PropertyCallbackArguments 12967 PropertyCallbackArguments
12969 args(isolate, interceptor->data(), *receiver, *object); 12968 args(isolate, interceptor->data(), *receiver, *object);
12970 v8::Handle<v8::Object> result; 12969 v8::Local<v8::Object> result;
12971 if (!interceptor->enumerator()->IsUndefined()) { 12970 if (!interceptor->enumerator()->IsUndefined()) {
12972 v8::IndexedPropertyEnumeratorCallback enum_fun = 12971 v8::IndexedPropertyEnumeratorCallback enum_fun =
12973 v8::ToCData<v8::IndexedPropertyEnumeratorCallback>( 12972 v8::ToCData<v8::IndexedPropertyEnumeratorCallback>(
12974 interceptor->enumerator()); 12973 interceptor->enumerator());
12975 LOG(isolate, ApiObjectAccess("interceptor-indexed-enum", *object)); 12974 LOG(isolate, ApiObjectAccess("interceptor-indexed-enum", *object));
12976 result = args.Call(enum_fun); 12975 result = args.Call(enum_fun);
12977 } 12976 }
12978 if (result.IsEmpty()) return MaybeHandle<JSObject>(); 12977 if (result.IsEmpty()) return MaybeHandle<JSObject>();
12979 DCHECK(v8::Utils::OpenHandle(*result)->IsJSArray() || 12978 DCHECK(v8::Utils::OpenHandle(*result)->IsJSArray() ||
12980 v8::Utils::OpenHandle(*result)->HasSloppyArgumentsElements()); 12979 v8::Utils::OpenHandle(*result)->HasSloppyArgumentsElements());
(...skipping 3168 matching lines...) Expand 10 before | Expand all | Expand 10 after
16149 Handle<Object> new_value) { 16148 Handle<Object> new_value) {
16150 if (cell->value() != *new_value) { 16149 if (cell->value() != *new_value) {
16151 cell->set_value(*new_value); 16150 cell->set_value(*new_value);
16152 Isolate* isolate = cell->GetIsolate(); 16151 Isolate* isolate = cell->GetIsolate();
16153 cell->dependent_code()->DeoptimizeDependentCodeGroup( 16152 cell->dependent_code()->DeoptimizeDependentCodeGroup(
16154 isolate, DependentCode::kPropertyCellChangedGroup); 16153 isolate, DependentCode::kPropertyCellChangedGroup);
16155 } 16154 }
16156 } 16155 }
16157 } // namespace internal 16156 } // namespace internal
16158 } // namespace v8 16157 } // namespace v8
OLDNEW
« no previous file with comments | « src/i18n.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698