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

Side by Side Diff: src/api.cc

Issue 1413463006: Map v8::Object to v8::internal::JSReceiver (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: updates Created 5 years, 1 month 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/api.h ('k') | src/objects.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 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 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/api.h" 5 #include "src/api.h"
6 6
7 #include <string.h> // For memcpy, strlen. 7 #include <string.h> // For memcpy, strlen.
8 #ifdef V8_USE_ADDRESS_SANITIZER 8 #ifdef V8_USE_ADDRESS_SANITIZER
9 #include <sanitizer/asan_interface.h> 9 #include <sanitizer/asan_interface.h>
10 #endif // V8_USE_ADDRESS_SANITIZER 10 #endif // V8_USE_ADDRESS_SANITIZER
(...skipping 1938 matching lines...) Expand 10 before | Expand all | Expand 10 after
1949 // Include \n in case the source contains a line end comment. 1949 // Include \n in case the source contains a line end comment.
1950 auto brackets = factory->NewStringFromStaticChars("\n})"); 1950 auto brackets = factory->NewStringFromStaticChars("\n})");
1951 has_pending_exception = 1951 has_pending_exception =
1952 !factory->NewConsString(source_string, brackets).ToHandle(&source_string); 1952 !factory->NewConsString(source_string, brackets).ToHandle(&source_string);
1953 RETURN_ON_FAILED_EXECUTION(Function); 1953 RETURN_ON_FAILED_EXECUTION(Function);
1954 1954
1955 i::Handle<i::Context> context = Utils::OpenHandle(*v8_context); 1955 i::Handle<i::Context> context = Utils::OpenHandle(*v8_context);
1956 i::Handle<i::SharedFunctionInfo> outer_info(context->closure()->shared(), 1956 i::Handle<i::SharedFunctionInfo> outer_info(context->closure()->shared(),
1957 isolate); 1957 isolate);
1958 for (size_t i = 0; i < context_extension_count; ++i) { 1958 for (size_t i = 0; i < context_extension_count; ++i) {
1959 i::Handle<i::JSObject> extension = 1959 i::Handle<i::JSReceiver> extension =
1960 Utils::OpenHandle(*context_extensions[i]); 1960 Utils::OpenHandle(*context_extensions[i]);
1961 if (!extension->IsJSObject()) return Local<Function>();
1961 i::Handle<i::JSFunction> closure(context->closure(), isolate); 1962 i::Handle<i::JSFunction> closure(context->closure(), isolate);
1962 context = factory->NewWithContext(closure, context, extension); 1963 context = factory->NewWithContext(closure, context, extension);
1963 } 1964 }
1964 1965
1965 i::Handle<i::Object> name_obj; 1966 i::Handle<i::Object> name_obj;
1966 int line_offset = 0; 1967 int line_offset = 0;
1967 int column_offset = 0; 1968 int column_offset = 0;
1968 if (!source->resource_name.IsEmpty()) { 1969 if (!source->resource_name.IsEmpty()) {
1969 name_obj = Utils::OpenHandle(*(source->resource_name)); 1970 name_obj = Utils::OpenHandle(*(source->resource_name));
1970 } 1971 }
(...skipping 1063 matching lines...) Expand 10 before | Expand all | Expand 10 after
3034 3035
3035 void External::CheckCast(v8::Value* that) { 3036 void External::CheckCast(v8::Value* that) {
3036 Utils::ApiCheck(Utils::OpenHandle(that)->IsExternal(), 3037 Utils::ApiCheck(Utils::OpenHandle(that)->IsExternal(),
3037 "v8::External::Cast()", 3038 "v8::External::Cast()",
3038 "Could not convert to external"); 3039 "Could not convert to external");
3039 } 3040 }
3040 3041
3041 3042
3042 void v8::Object::CheckCast(Value* that) { 3043 void v8::Object::CheckCast(Value* that) {
3043 i::Handle<i::Object> obj = Utils::OpenHandle(that); 3044 i::Handle<i::Object> obj = Utils::OpenHandle(that);
3044 Utils::ApiCheck(obj->IsJSObject(), 3045 Utils::ApiCheck(obj->IsJSReceiver(), "v8::Object::Cast()",
3045 "v8::Object::Cast()",
3046 "Could not convert to object"); 3046 "Could not convert to object");
3047 } 3047 }
3048 3048
3049 3049
3050 void v8::Function::CheckCast(Value* that) { 3050 void v8::Function::CheckCast(Value* that) {
3051 i::Handle<i::Object> obj = Utils::OpenHandle(that); 3051 i::Handle<i::Object> obj = Utils::OpenHandle(that);
3052 Utils::ApiCheck(obj->IsCallable(), "v8::Function::Cast()", 3052 Utils::ApiCheck(obj->IsCallable(), "v8::Function::Cast()",
3053 "Could not convert to function"); 3053 "Could not convert to function");
3054 } 3054 }
3055 3055
(...skipping 417 matching lines...) Expand 10 before | Expand all | Expand 10 after
3473 auto context = ContextFromHeapObject(Utils::OpenHandle(this)); 3473 auto context = ContextFromHeapObject(Utils::OpenHandle(this));
3474 return Set(context, index, value).FromMaybe(false); 3474 return Set(context, index, value).FromMaybe(false);
3475 } 3475 }
3476 3476
3477 3477
3478 Maybe<bool> v8::Object::CreateDataProperty(v8::Local<v8::Context> context, 3478 Maybe<bool> v8::Object::CreateDataProperty(v8::Local<v8::Context> context,
3479 v8::Local<Name> key, 3479 v8::Local<Name> key,
3480 v8::Local<Value> value) { 3480 v8::Local<Value> value) {
3481 PREPARE_FOR_EXECUTION_PRIMITIVE(context, "v8::Object::CreateDataProperty()", 3481 PREPARE_FOR_EXECUTION_PRIMITIVE(context, "v8::Object::CreateDataProperty()",
3482 bool); 3482 bool);
3483 i::Handle<i::JSObject> self = Utils::OpenHandle(this); 3483 i::Handle<i::JSReceiver> self = Utils::OpenHandle(this);
3484 i::Handle<i::Name> key_obj = Utils::OpenHandle(*key); 3484 i::Handle<i::Name> key_obj = Utils::OpenHandle(*key);
3485 i::Handle<i::Object> value_obj = Utils::OpenHandle(*value); 3485 i::Handle<i::Object> value_obj = Utils::OpenHandle(*value);
3486 3486
3487 i::LookupIterator it = i::LookupIterator::PropertyOrElement( 3487 i::LookupIterator it = i::LookupIterator::PropertyOrElement(
3488 isolate, self, key_obj, i::LookupIterator::OWN); 3488 isolate, self, key_obj, i::LookupIterator::OWN);
3489 Maybe<bool> result = i::JSObject::CreateDataProperty(&it, value_obj); 3489 Maybe<bool> result = i::JSReceiver::CreateDataProperty(&it, value_obj);
3490 has_pending_exception = result.IsNothing(); 3490 has_pending_exception = result.IsNothing();
3491 RETURN_ON_FAILED_EXECUTION_PRIMITIVE(bool); 3491 RETURN_ON_FAILED_EXECUTION_PRIMITIVE(bool);
3492 return result; 3492 return result;
3493 } 3493 }
3494 3494
3495 3495
3496 Maybe<bool> v8::Object::CreateDataProperty(v8::Local<v8::Context> context, 3496 Maybe<bool> v8::Object::CreateDataProperty(v8::Local<v8::Context> context,
3497 uint32_t index, 3497 uint32_t index,
3498 v8::Local<Value> value) { 3498 v8::Local<Value> value) {
3499 PREPARE_FOR_EXECUTION_PRIMITIVE(context, "v8::Object::CreateDataProperty()", 3499 PREPARE_FOR_EXECUTION_PRIMITIVE(context, "v8::Object::CreateDataProperty()",
3500 bool); 3500 bool);
3501 i::Handle<i::JSObject> self = Utils::OpenHandle(this); 3501 i::Handle<i::JSReceiver> self = Utils::OpenHandle(this);
3502 i::Handle<i::Object> value_obj = Utils::OpenHandle(*value); 3502 i::Handle<i::Object> value_obj = Utils::OpenHandle(*value);
3503 3503
3504 i::LookupIterator it(isolate, self, index, i::LookupIterator::OWN); 3504 i::LookupIterator it(isolate, self, index, i::LookupIterator::OWN);
3505 Maybe<bool> result = i::JSObject::CreateDataProperty(&it, value_obj); 3505 Maybe<bool> result = i::JSReceiver::CreateDataProperty(&it, value_obj);
3506 has_pending_exception = result.IsNothing(); 3506 has_pending_exception = result.IsNothing();
3507 RETURN_ON_FAILED_EXECUTION_PRIMITIVE(bool); 3507 RETURN_ON_FAILED_EXECUTION_PRIMITIVE(bool);
3508 return result; 3508 return result;
3509 } 3509 }
3510 3510
3511 3511
3512 Maybe<bool> v8::Object::DefineOwnProperty(v8::Local<v8::Context> context, 3512 Maybe<bool> v8::Object::DefineOwnProperty(v8::Local<v8::Context> context,
3513 v8::Local<Name> key, 3513 v8::Local<Name> key,
3514 v8::Local<Value> value, 3514 v8::Local<Value> value,
3515 v8::PropertyAttribute attributes) { 3515 v8::PropertyAttribute attributes) {
3516 PREPARE_FOR_EXECUTION_PRIMITIVE(context, "v8::Object::DefineOwnProperty()", 3516 PREPARE_FOR_EXECUTION_PRIMITIVE(context, "v8::Object::DefineOwnProperty()",
3517 bool); 3517 bool);
3518 i::Handle<i::JSObject> self = Utils::OpenHandle(this); 3518 i::Handle<i::JSReceiver> self = Utils::OpenHandle(this);
3519 i::Handle<i::Name> key_obj = Utils::OpenHandle(*key); 3519 i::Handle<i::Name> key_obj = Utils::OpenHandle(*key);
3520 i::Handle<i::Object> value_obj = Utils::OpenHandle(*value); 3520 i::Handle<i::Object> value_obj = Utils::OpenHandle(*value);
3521 3521
3522 if (self->IsAccessCheckNeeded() && 3522 if (self->IsAccessCheckNeeded() &&
3523 !isolate->MayAccess(handle(isolate->context()), self)) { 3523 !isolate->MayAccess(handle(isolate->context()),
3524 isolate->ReportFailedAccessCheck(self); 3524 i::Handle<i::JSObject>::cast(self))) {
3525 isolate->ReportFailedAccessCheck(i::Handle<i::JSObject>::cast(self));
3525 return Nothing<bool>(); 3526 return Nothing<bool>();
3526 } 3527 }
3527 3528
3528 i::PropertyDescriptor desc; 3529 i::PropertyDescriptor desc;
3529 desc.set_writable(!(attributes & v8::ReadOnly)); 3530 desc.set_writable(!(attributes & v8::ReadOnly));
3530 desc.set_enumerable(!(attributes & v8::DontEnum)); 3531 desc.set_enumerable(!(attributes & v8::DontEnum));
3531 desc.set_configurable(!(attributes & v8::DontDelete)); 3532 desc.set_configurable(!(attributes & v8::DontDelete));
3532 desc.set_value(value_obj); 3533 desc.set_value(value_obj);
3533 bool success = i::JSReceiver::DefineOwnProperty(isolate, self, key_obj, &desc, 3534 bool success = i::JSReceiver::DefineOwnProperty(isolate, self, key_obj, &desc,
3534 i::Object::DONT_THROW); 3535 i::Object::DONT_THROW);
(...skipping 13 matching lines...) Expand all
3548 isolate, js_object, key, &success, i::LookupIterator::OWN); 3549 isolate, js_object, key, &success, i::LookupIterator::OWN);
3549 if (!success) return i::MaybeHandle<i::Object>(); 3550 if (!success) return i::MaybeHandle<i::Object>();
3550 3551
3551 return i::JSObject::DefineOwnPropertyIgnoreAttributes(&it, value, attrs); 3552 return i::JSObject::DefineOwnPropertyIgnoreAttributes(&it, value, attrs);
3552 } 3553 }
3553 3554
3554 3555
3555 Maybe<bool> v8::Object::ForceSet(v8::Local<v8::Context> context, 3556 Maybe<bool> v8::Object::ForceSet(v8::Local<v8::Context> context,
3556 v8::Local<Value> key, v8::Local<Value> value, 3557 v8::Local<Value> key, v8::Local<Value> value,
3557 v8::PropertyAttribute attribs) { 3558 v8::PropertyAttribute attribs) {
3558 PREPARE_FOR_EXECUTION_PRIMITIVE(context, "v8::Object::Set()", bool); 3559 PREPARE_FOR_EXECUTION_PRIMITIVE(context, "v8::Object::ForceSet()", bool);
3559 auto self = Utils::OpenHandle(this); 3560 auto self = i::Handle<i::JSObject>::cast(Utils::OpenHandle(this));
3560 auto key_obj = Utils::OpenHandle(*key); 3561 auto key_obj = Utils::OpenHandle(*key);
3561 auto value_obj = Utils::OpenHandle(*value); 3562 auto value_obj = Utils::OpenHandle(*value);
3562 has_pending_exception = 3563 has_pending_exception =
3563 DefineObjectProperty(self, key_obj, value_obj, 3564 DefineObjectProperty(self, key_obj, value_obj,
3564 static_cast<PropertyAttributes>(attribs)).is_null(); 3565 static_cast<PropertyAttributes>(attribs)).is_null();
3565 RETURN_ON_FAILED_EXECUTION_PRIMITIVE(bool); 3566 RETURN_ON_FAILED_EXECUTION_PRIMITIVE(bool);
3566 return Just(true); 3567 return Just(true);
3567 } 3568 }
3568 3569
3569 3570
3570 bool v8::Object::ForceSet(v8::Local<Value> key, v8::Local<Value> value, 3571 bool v8::Object::ForceSet(v8::Local<Value> key, v8::Local<Value> value,
3571 v8::PropertyAttribute attribs) { 3572 v8::PropertyAttribute attribs) {
3572 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); 3573 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate();
3573 PREPARE_FOR_EXECUTION_GENERIC(isolate, Local<Context>(), 3574 PREPARE_FOR_EXECUTION_GENERIC(isolate, Local<Context>(),
3574 "v8::Object::ForceSet", false, i::HandleScope, 3575 "v8::Object::ForceSet", false, i::HandleScope,
3575 false); 3576 false);
3576 i::Handle<i::JSObject> self = Utils::OpenHandle(this); 3577 i::Handle<i::JSObject> self =
3578 i::Handle<i::JSObject>::cast(Utils::OpenHandle(this));
3577 i::Handle<i::Object> key_obj = Utils::OpenHandle(*key); 3579 i::Handle<i::Object> key_obj = Utils::OpenHandle(*key);
3578 i::Handle<i::Object> value_obj = Utils::OpenHandle(*value); 3580 i::Handle<i::Object> value_obj = Utils::OpenHandle(*value);
3579 has_pending_exception = 3581 has_pending_exception =
3580 DefineObjectProperty(self, key_obj, value_obj, 3582 DefineObjectProperty(self, key_obj, value_obj,
3581 static_cast<PropertyAttributes>(attribs)).is_null(); 3583 static_cast<PropertyAttributes>(attribs)).is_null();
3582 EXCEPTION_BAILOUT_CHECK_SCOPED(isolate, false); 3584 EXCEPTION_BAILOUT_CHECK_SCOPED(isolate, false);
3583 return true; 3585 return true;
3584 } 3586 }
3585 3587
3586 3588
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
3695 3697
3696 3698
3697 Maybe<bool> v8::Object::SetPrototype(Local<Context> context, 3699 Maybe<bool> v8::Object::SetPrototype(Local<Context> context,
3698 Local<Value> value) { 3700 Local<Value> value) {
3699 PREPARE_FOR_EXECUTION_PRIMITIVE(context, "v8::Object::SetPrototype()", bool); 3701 PREPARE_FOR_EXECUTION_PRIMITIVE(context, "v8::Object::SetPrototype()", bool);
3700 auto self = Utils::OpenHandle(this); 3702 auto self = Utils::OpenHandle(this);
3701 auto value_obj = Utils::OpenHandle(*value); 3703 auto value_obj = Utils::OpenHandle(*value);
3702 // We do not allow exceptions thrown while setting the prototype 3704 // We do not allow exceptions thrown while setting the prototype
3703 // to propagate outside. 3705 // to propagate outside.
3704 TryCatch try_catch(reinterpret_cast<v8::Isolate*>(isolate)); 3706 TryCatch try_catch(reinterpret_cast<v8::Isolate*>(isolate));
3705 auto result = i::JSObject::SetPrototype(self, value_obj, false, 3707 auto result = i::JSReceiver::SetPrototype(self, value_obj, false,
3706 i::Object::THROW_ON_ERROR); 3708 i::Object::THROW_ON_ERROR);
3707 has_pending_exception = result.IsNothing(); 3709 has_pending_exception = result.IsNothing();
3708 RETURN_ON_FAILED_EXECUTION_PRIMITIVE(bool); 3710 RETURN_ON_FAILED_EXECUTION_PRIMITIVE(bool);
3709 return Just(true); 3711 return Just(true);
3710 } 3712 }
3711 3713
3712 3714
3713 bool v8::Object::SetPrototype(Local<Value> value) { 3715 bool v8::Object::SetPrototype(Local<Value> value) {
3714 auto context = ContextFromHeapObject(Utils::OpenHandle(this)); 3716 auto context = ContextFromHeapObject(Utils::OpenHandle(this));
3715 return SetPrototype(context, value).FromMaybe(false); 3717 return SetPrototype(context, value).FromMaybe(false);
3716 } 3718 }
(...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after
3937 } 3939 }
3938 3940
3939 3941
3940 bool v8::Object::Has(uint32_t index) { 3942 bool v8::Object::Has(uint32_t index) {
3941 auto context = ContextFromHeapObject(Utils::OpenHandle(this)); 3943 auto context = ContextFromHeapObject(Utils::OpenHandle(this));
3942 return Has(context, index).FromMaybe(false); 3944 return Has(context, index).FromMaybe(false);
3943 } 3945 }
3944 3946
3945 3947
3946 template <typename Getter, typename Setter, typename Data> 3948 template <typename Getter, typename Setter, typename Data>
3947 static Maybe<bool> ObjectSetAccessor(Local<Context> context, Object* obj, 3949 static Maybe<bool> ObjectSetAccessor(Local<Context> context, Object* self,
3948 Local<Name> name, Getter getter, 3950 Local<Name> name, Getter getter,
3949 Setter setter, Data data, 3951 Setter setter, Data data,
3950 AccessControl settings, 3952 AccessControl settings,
3951 PropertyAttribute attributes) { 3953 PropertyAttribute attributes) {
3952 PREPARE_FOR_EXECUTION_PRIMITIVE(context, "v8::Object::SetAccessor()", bool); 3954 PREPARE_FOR_EXECUTION_PRIMITIVE(context, "v8::Object::SetAccessor()", bool);
3955 if (!Utils::OpenHandle(self)->IsJSObject()) return Just(false);
3956 i::Handle<i::JSObject> obj =
3957 i::Handle<i::JSObject>::cast(Utils::OpenHandle(self));
3953 v8::Local<AccessorSignature> signature; 3958 v8::Local<AccessorSignature> signature;
3954 auto info = MakeAccessorInfo(name, getter, setter, data, settings, attributes, 3959 auto info = MakeAccessorInfo(name, getter, setter, data, settings, attributes,
3955 signature); 3960 signature);
3956 if (info.is_null()) return Nothing<bool>(); 3961 if (info.is_null()) return Nothing<bool>();
3957 bool fast = Utils::OpenHandle(obj)->HasFastProperties(); 3962 bool fast = obj->HasFastProperties();
3958 i::Handle<i::Object> result; 3963 i::Handle<i::Object> result;
3959 has_pending_exception = 3964 has_pending_exception =
3960 !i::JSObject::SetAccessor(Utils::OpenHandle(obj), info).ToHandle(&result); 3965 !i::JSObject::SetAccessor(obj, info).ToHandle(&result);
3961 RETURN_ON_FAILED_EXECUTION_PRIMITIVE(bool); 3966 RETURN_ON_FAILED_EXECUTION_PRIMITIVE(bool);
3962 if (result->IsUndefined()) return Nothing<bool>(); 3967 if (result->IsUndefined()) return Nothing<bool>();
3963 if (fast) { 3968 if (fast) {
3964 i::JSObject::MigrateSlowToFast(Utils::OpenHandle(obj), 0, "APISetAccessor"); 3969 i::JSObject::MigrateSlowToFast(obj, 0, "APISetAccessor");
3965 } 3970 }
3966 return Just(true); 3971 return Just(true);
3967 } 3972 }
3968 3973
3969 3974
3970 Maybe<bool> Object::SetAccessor(Local<Context> context, Local<Name> name, 3975 Maybe<bool> Object::SetAccessor(Local<Context> context, Local<Name> name,
3971 AccessorNameGetterCallback getter, 3976 AccessorNameGetterCallback getter,
3972 AccessorNameSetterCallback setter, 3977 AccessorNameSetterCallback setter,
3973 MaybeLocal<Value> data, AccessControl settings, 3978 MaybeLocal<Value> data, AccessControl settings,
3974 PropertyAttribute attribute) { 3979 PropertyAttribute attribute) {
(...skipping 23 matching lines...) Expand all
3998 4003
3999 void Object::SetAccessorProperty(Local<Name> name, Local<Function> getter, 4004 void Object::SetAccessorProperty(Local<Name> name, Local<Function> getter,
4000 Local<Function> setter, 4005 Local<Function> setter,
4001 PropertyAttribute attribute, 4006 PropertyAttribute attribute,
4002 AccessControl settings) { 4007 AccessControl settings) {
4003 // TODO(verwaest): Remove |settings|. 4008 // TODO(verwaest): Remove |settings|.
4004 DCHECK_EQ(v8::DEFAULT, settings); 4009 DCHECK_EQ(v8::DEFAULT, settings);
4005 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); 4010 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate();
4006 ENTER_V8(isolate); 4011 ENTER_V8(isolate);
4007 i::HandleScope scope(isolate); 4012 i::HandleScope scope(isolate);
4013 auto self = Utils::OpenHandle(this);
4014 if (!self->IsJSObject()) return;
4008 i::Handle<i::Object> getter_i = v8::Utils::OpenHandle(*getter); 4015 i::Handle<i::Object> getter_i = v8::Utils::OpenHandle(*getter);
4009 i::Handle<i::Object> setter_i = v8::Utils::OpenHandle(*setter, true); 4016 i::Handle<i::Object> setter_i = v8::Utils::OpenHandle(*setter, true);
4010 if (setter_i.is_null()) setter_i = isolate->factory()->null_value(); 4017 if (setter_i.is_null()) setter_i = isolate->factory()->null_value();
4011 i::JSObject::DefineAccessor(v8::Utils::OpenHandle(this), 4018 i::JSObject::DefineAccessor(i::Handle<i::JSObject>::cast(self),
4012 v8::Utils::OpenHandle(*name), 4019 v8::Utils::OpenHandle(*name), getter_i, setter_i,
4013 getter_i,
4014 setter_i,
4015 static_cast<PropertyAttributes>(attribute)); 4020 static_cast<PropertyAttributes>(attribute));
4016 } 4021 }
4017 4022
4018 4023
4019 Maybe<bool> v8::Object::HasOwnProperty(Local<Context> context, 4024 Maybe<bool> v8::Object::HasOwnProperty(Local<Context> context,
4020 Local<Name> key) { 4025 Local<Name> key) {
4021 PREPARE_FOR_EXECUTION_PRIMITIVE(context, "v8::Object::HasOwnProperty()", 4026 PREPARE_FOR_EXECUTION_PRIMITIVE(context, "v8::Object::HasOwnProperty()",
4022 bool); 4027 bool);
4023 auto self = Utils::OpenHandle(this); 4028 auto self = Utils::OpenHandle(this);
4024 auto key_val = Utils::OpenHandle(*key); 4029 auto key_val = Utils::OpenHandle(*key);
4025 auto result = i::JSReceiver::HasOwnProperty(self, key_val); 4030 auto result = i::JSReceiver::HasOwnProperty(self, key_val);
4026 has_pending_exception = result.IsNothing(); 4031 has_pending_exception = result.IsNothing();
4027 RETURN_ON_FAILED_EXECUTION_PRIMITIVE(bool); 4032 RETURN_ON_FAILED_EXECUTION_PRIMITIVE(bool);
4028 return result; 4033 return result;
4029 } 4034 }
4030 4035
4031 4036
4032 bool v8::Object::HasOwnProperty(Local<String> key) { 4037 bool v8::Object::HasOwnProperty(Local<String> key) {
4033 auto context = ContextFromHeapObject(Utils::OpenHandle(this)); 4038 auto context = ContextFromHeapObject(Utils::OpenHandle(this));
4034 return HasOwnProperty(context, key).FromMaybe(false); 4039 return HasOwnProperty(context, key).FromMaybe(false);
4035 } 4040 }
4036 4041
4037 4042
4038 Maybe<bool> v8::Object::HasRealNamedProperty(Local<Context> context, 4043 Maybe<bool> v8::Object::HasRealNamedProperty(Local<Context> context,
4039 Local<Name> key) { 4044 Local<Name> key) {
4040 PREPARE_FOR_EXECUTION_PRIMITIVE(context, "v8::Object::HasRealNamedProperty()", 4045 PREPARE_FOR_EXECUTION_PRIMITIVE(context, "v8::Object::HasRealNamedProperty()",
4041 bool); 4046 bool);
4042 auto self = Utils::OpenHandle(this); 4047 auto self = Utils::OpenHandle(this);
4048 if (!self->IsJSObject()) return Just(false);
4043 auto key_val = Utils::OpenHandle(*key); 4049 auto key_val = Utils::OpenHandle(*key);
4044 auto result = i::JSObject::HasRealNamedProperty(self, key_val); 4050 auto result = i::JSObject::HasRealNamedProperty(
4051 i::Handle<i::JSObject>::cast(self), key_val);
4045 has_pending_exception = result.IsNothing(); 4052 has_pending_exception = result.IsNothing();
4046 RETURN_ON_FAILED_EXECUTION_PRIMITIVE(bool); 4053 RETURN_ON_FAILED_EXECUTION_PRIMITIVE(bool);
4047 return result; 4054 return result;
4048 } 4055 }
4049 4056
4050 4057
4051 bool v8::Object::HasRealNamedProperty(Local<String> key) { 4058 bool v8::Object::HasRealNamedProperty(Local<String> key) {
4052 auto context = ContextFromHeapObject(Utils::OpenHandle(this)); 4059 auto context = ContextFromHeapObject(Utils::OpenHandle(this));
4053 return HasRealNamedProperty(context, key).FromMaybe(false); 4060 return HasRealNamedProperty(context, key).FromMaybe(false);
4054 } 4061 }
4055 4062
4056 4063
4057 Maybe<bool> v8::Object::HasRealIndexedProperty(Local<Context> context, 4064 Maybe<bool> v8::Object::HasRealIndexedProperty(Local<Context> context,
4058 uint32_t index) { 4065 uint32_t index) {
4059 PREPARE_FOR_EXECUTION_PRIMITIVE(context, 4066 PREPARE_FOR_EXECUTION_PRIMITIVE(context,
4060 "v8::Object::HasRealIndexedProperty()", bool); 4067 "v8::Object::HasRealIndexedProperty()", bool);
4061 auto self = Utils::OpenHandle(this); 4068 auto self = Utils::OpenHandle(this);
4062 auto result = i::JSObject::HasRealElementProperty(self, index); 4069 if (!self->IsJSObject()) return Just(false);
4070 auto result = i::JSObject::HasRealElementProperty(
4071 i::Handle<i::JSObject>::cast(self), index);
4063 has_pending_exception = result.IsNothing(); 4072 has_pending_exception = result.IsNothing();
4064 RETURN_ON_FAILED_EXECUTION_PRIMITIVE(bool); 4073 RETURN_ON_FAILED_EXECUTION_PRIMITIVE(bool);
4065 return result; 4074 return result;
4066 } 4075 }
4067 4076
4068 4077
4069 bool v8::Object::HasRealIndexedProperty(uint32_t index) { 4078 bool v8::Object::HasRealIndexedProperty(uint32_t index) {
4070 auto context = ContextFromHeapObject(Utils::OpenHandle(this)); 4079 auto context = ContextFromHeapObject(Utils::OpenHandle(this));
4071 return HasRealIndexedProperty(context, index).FromMaybe(false); 4080 return HasRealIndexedProperty(context, index).FromMaybe(false);
4072 } 4081 }
4073 4082
4074 4083
4075 Maybe<bool> v8::Object::HasRealNamedCallbackProperty(Local<Context> context, 4084 Maybe<bool> v8::Object::HasRealNamedCallbackProperty(Local<Context> context,
4076 Local<Name> key) { 4085 Local<Name> key) {
4077 PREPARE_FOR_EXECUTION_PRIMITIVE( 4086 PREPARE_FOR_EXECUTION_PRIMITIVE(
4078 context, "v8::Object::HasRealNamedCallbackProperty()", bool); 4087 context, "v8::Object::HasRealNamedCallbackProperty()", bool);
4079 auto self = Utils::OpenHandle(this); 4088 auto self = Utils::OpenHandle(this);
4089 if (!self->IsJSObject()) return Just(false);
4080 auto key_val = Utils::OpenHandle(*key); 4090 auto key_val = Utils::OpenHandle(*key);
4081 auto result = i::JSObject::HasRealNamedCallbackProperty(self, key_val); 4091 auto result = i::JSObject::HasRealNamedCallbackProperty(
4092 i::Handle<i::JSObject>::cast(self), key_val);
4082 has_pending_exception = result.IsNothing(); 4093 has_pending_exception = result.IsNothing();
4083 RETURN_ON_FAILED_EXECUTION_PRIMITIVE(bool); 4094 RETURN_ON_FAILED_EXECUTION_PRIMITIVE(bool);
4084 return result; 4095 return result;
4085 } 4096 }
4086 4097
4087 4098
4088 bool v8::Object::HasRealNamedCallbackProperty(Local<String> key) { 4099 bool v8::Object::HasRealNamedCallbackProperty(Local<String> key) {
4089 auto context = ContextFromHeapObject(Utils::OpenHandle(this)); 4100 auto context = ContextFromHeapObject(Utils::OpenHandle(this));
4090 return HasRealNamedCallbackProperty(context, key).FromMaybe(false); 4101 return HasRealNamedCallbackProperty(context, key).FromMaybe(false);
4091 } 4102 }
4092 4103
4093 4104
4094 bool v8::Object::HasNamedLookupInterceptor() { 4105 bool v8::Object::HasNamedLookupInterceptor() {
4095 auto self = Utils::OpenHandle(this); 4106 auto self = Utils::OpenHandle(this);
4096 return self->HasNamedInterceptor(); 4107 return self->IsJSObject() &&
4108 i::Handle<i::JSObject>::cast(self)->HasNamedInterceptor();
4097 } 4109 }
4098 4110
4099 4111
4100 bool v8::Object::HasIndexedLookupInterceptor() { 4112 bool v8::Object::HasIndexedLookupInterceptor() {
4101 auto self = Utils::OpenHandle(this); 4113 auto self = Utils::OpenHandle(this);
4102 return self->HasIndexedInterceptor(); 4114 return self->IsJSObject() &&
4115 i::Handle<i::JSObject>::cast(self)->HasIndexedInterceptor();
4103 } 4116 }
4104 4117
4105 4118
4106 MaybeLocal<Value> v8::Object::GetRealNamedPropertyInPrototypeChain( 4119 MaybeLocal<Value> v8::Object::GetRealNamedPropertyInPrototypeChain(
4107 Local<Context> context, Local<Name> key) { 4120 Local<Context> context, Local<Name> key) {
4108 PREPARE_FOR_EXECUTION( 4121 PREPARE_FOR_EXECUTION(
4109 context, "v8::Object::GetRealNamedPropertyInPrototypeChain()", Value); 4122 context, "v8::Object::GetRealNamedPropertyInPrototypeChain()", Value);
4110 i::Handle<i::JSObject> self = Utils::OpenHandle(this); 4123 i::Handle<i::JSReceiver> self = Utils::OpenHandle(this);
4124 if (!self->IsJSObject()) return MaybeLocal<Value>();
4111 i::Handle<i::Name> key_obj = Utils::OpenHandle(*key); 4125 i::Handle<i::Name> key_obj = Utils::OpenHandle(*key);
4112 i::PrototypeIterator iter(isolate, self); 4126 i::PrototypeIterator iter(isolate, self);
4113 if (iter.IsAtEnd()) return MaybeLocal<Value>(); 4127 if (iter.IsAtEnd()) return MaybeLocal<Value>();
4114 i::Handle<i::JSReceiver> proto = 4128 i::Handle<i::JSReceiver> proto =
4115 i::PrototypeIterator::GetCurrent<i::JSReceiver>(iter); 4129 i::PrototypeIterator::GetCurrent<i::JSReceiver>(iter);
4116 i::LookupIterator it = i::LookupIterator::PropertyOrElement( 4130 i::LookupIterator it = i::LookupIterator::PropertyOrElement(
4117 isolate, self, key_obj, proto, 4131 isolate, self, key_obj, proto,
4118 i::LookupIterator::PROTOTYPE_CHAIN_SKIP_INTERCEPTOR); 4132 i::LookupIterator::PROTOTYPE_CHAIN_SKIP_INTERCEPTOR);
4119 Local<Value> result; 4133 Local<Value> result;
4120 has_pending_exception = !ToLocal<Value>(i::Object::GetProperty(&it), &result); 4134 has_pending_exception = !ToLocal<Value>(i::Object::GetProperty(&it), &result);
(...skipping 10 matching lines...) Expand all
4131 Value); 4145 Value);
4132 } 4146 }
4133 4147
4134 4148
4135 Maybe<PropertyAttribute> 4149 Maybe<PropertyAttribute>
4136 v8::Object::GetRealNamedPropertyAttributesInPrototypeChain( 4150 v8::Object::GetRealNamedPropertyAttributesInPrototypeChain(
4137 Local<Context> context, Local<Name> key) { 4151 Local<Context> context, Local<Name> key) {
4138 PREPARE_FOR_EXECUTION_PRIMITIVE( 4152 PREPARE_FOR_EXECUTION_PRIMITIVE(
4139 context, "v8::Object::GetRealNamedPropertyAttributesInPrototypeChain()", 4153 context, "v8::Object::GetRealNamedPropertyAttributesInPrototypeChain()",
4140 PropertyAttribute); 4154 PropertyAttribute);
4141 i::Handle<i::JSObject> self = Utils::OpenHandle(this); 4155 i::Handle<i::JSReceiver> self = Utils::OpenHandle(this);
4156 if (!self->IsJSObject()) return Nothing<PropertyAttribute>();
4142 i::Handle<i::Name> key_obj = Utils::OpenHandle(*key); 4157 i::Handle<i::Name> key_obj = Utils::OpenHandle(*key);
4143 i::PrototypeIterator iter(isolate, self); 4158 i::PrototypeIterator iter(isolate, self);
4144 if (iter.IsAtEnd()) return Nothing<PropertyAttribute>(); 4159 if (iter.IsAtEnd()) return Nothing<PropertyAttribute>();
4145 i::Handle<i::JSReceiver> proto = 4160 i::Handle<i::JSReceiver> proto =
4146 i::PrototypeIterator::GetCurrent<i::JSReceiver>(iter); 4161 i::PrototypeIterator::GetCurrent<i::JSReceiver>(iter);
4147 i::LookupIterator it = i::LookupIterator::PropertyOrElement( 4162 i::LookupIterator it = i::LookupIterator::PropertyOrElement(
4148 isolate, self, key_obj, proto, 4163 isolate, self, key_obj, proto,
4149 i::LookupIterator::PROTOTYPE_CHAIN_SKIP_INTERCEPTOR); 4164 i::LookupIterator::PROTOTYPE_CHAIN_SKIP_INTERCEPTOR);
4150 Maybe<PropertyAttributes> result = i::JSReceiver::GetPropertyAttributes(&it); 4165 Maybe<PropertyAttributes> result = i::JSReceiver::GetPropertyAttributes(&it);
4151 RETURN_ON_FAILED_EXECUTION_PRIMITIVE(PropertyAttribute); 4166 RETURN_ON_FAILED_EXECUTION_PRIMITIVE(PropertyAttribute);
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
4206 4221
4207 4222
4208 Maybe<PropertyAttribute> v8::Object::GetRealNamedPropertyAttributes( 4223 Maybe<PropertyAttribute> v8::Object::GetRealNamedPropertyAttributes(
4209 Local<String> key) { 4224 Local<String> key) {
4210 auto context = ContextFromHeapObject(Utils::OpenHandle(this)); 4225 auto context = ContextFromHeapObject(Utils::OpenHandle(this));
4211 return GetRealNamedPropertyAttributes(context, key); 4226 return GetRealNamedPropertyAttributes(context, key);
4212 } 4227 }
4213 4228
4214 4229
4215 Local<v8::Object> v8::Object::Clone() { 4230 Local<v8::Object> v8::Object::Clone() {
4216 auto self = Utils::OpenHandle(this); 4231 auto self = i::Handle<i::JSObject>::cast(Utils::OpenHandle(this));
4217 auto isolate = self->GetIsolate(); 4232 auto isolate = self->GetIsolate();
4218 ENTER_V8(isolate); 4233 ENTER_V8(isolate);
4219 auto result = isolate->factory()->CopyJSObject(self); 4234 auto result = isolate->factory()->CopyJSObject(self);
4220 CHECK(!result.is_null()); 4235 CHECK(!result.is_null());
4221 return Utils::ToLocal(result); 4236 return Utils::ToLocal(result);
4222 } 4237 }
4223 4238
4224 4239
4225 Local<v8::Context> v8::Object::CreationContext() { 4240 Local<v8::Context> v8::Object::CreationContext() {
4226 auto self = Utils::OpenHandle(this); 4241 auto self = Utils::OpenHandle(this);
4227 auto context = handle(self->GetCreationContext()); 4242 auto context = handle(self->GetCreationContext());
4228 return Utils::ToLocal(context); 4243 return Utils::ToLocal(context);
4229 } 4244 }
4230 4245
4231 4246
4232 int v8::Object::GetIdentityHash() { 4247 int v8::Object::GetIdentityHash() {
4233 auto isolate = Utils::OpenHandle(this)->GetIsolate(); 4248 auto isolate = Utils::OpenHandle(this)->GetIsolate();
4234 i::HandleScope scope(isolate); 4249 i::HandleScope scope(isolate);
4235 auto self = Utils::OpenHandle(this); 4250 auto self = Utils::OpenHandle(this);
4236 return i::JSReceiver::GetOrCreateIdentityHash(self)->value(); 4251 return i::JSReceiver::GetOrCreateIdentityHash(self)->value();
4237 } 4252 }
4238 4253
4239 4254
4240 bool v8::Object::SetHiddenValue(v8::Local<v8::String> key, 4255 bool v8::Object::SetHiddenValue(v8::Local<v8::String> key,
4241 v8::Local<v8::Value> value) { 4256 v8::Local<v8::Value> value) {
4242 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); 4257 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate();
4243 ENTER_V8(isolate); 4258 ENTER_V8(isolate);
4244 i::HandleScope scope(isolate); 4259 i::HandleScope scope(isolate);
4245 i::Handle<i::JSObject> self = Utils::OpenHandle(this); 4260 i::Handle<i::JSReceiver> self = Utils::OpenHandle(this);
4261 if (!self->IsJSObject()) return false;
4246 i::Handle<i::String> key_obj = Utils::OpenHandle(*key); 4262 i::Handle<i::String> key_obj = Utils::OpenHandle(*key);
4247 i::Handle<i::String> key_string = 4263 i::Handle<i::String> key_string =
4248 isolate->factory()->InternalizeString(key_obj); 4264 isolate->factory()->InternalizeString(key_obj);
4249 if (value.IsEmpty()) { 4265 if (value.IsEmpty()) {
4250 i::JSObject::DeleteHiddenProperty(self, key_string); 4266 i::JSObject::DeleteHiddenProperty(i::Handle<i::JSObject>::cast(self),
4267 key_string);
4251 return true; 4268 return true;
4252 } 4269 }
4253 i::Handle<i::Object> value_obj = Utils::OpenHandle(*value); 4270 i::Handle<i::Object> value_obj = Utils::OpenHandle(*value);
4254 i::Handle<i::Object> result = 4271 i::Handle<i::Object> result = i::JSObject::SetHiddenProperty(
4255 i::JSObject::SetHiddenProperty(self, key_string, value_obj); 4272 i::Handle<i::JSObject>::cast(self), key_string, value_obj);
4256 return *result == *self; 4273 return *result == *self;
4257 } 4274 }
4258 4275
4259 4276
4260 v8::Local<v8::Value> v8::Object::GetHiddenValue(v8::Local<v8::String> key) { 4277 v8::Local<v8::Value> v8::Object::GetHiddenValue(v8::Local<v8::String> key) {
4261 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); 4278 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate();
4262 ENTER_V8(isolate); 4279 ENTER_V8(isolate);
4263 i::Handle<i::JSObject> self = Utils::OpenHandle(this); 4280 i::Handle<i::JSReceiver> self = Utils::OpenHandle(this);
4281 if (!self->IsJSObject()) return v8::Local<v8::Value>();
4264 i::Handle<i::String> key_obj = Utils::OpenHandle(*key); 4282 i::Handle<i::String> key_obj = Utils::OpenHandle(*key);
4265 i::Handle<i::String> key_string = 4283 i::Handle<i::String> key_string =
4266 isolate->factory()->InternalizeString(key_obj); 4284 isolate->factory()->InternalizeString(key_obj);
4267 i::Handle<i::Object> result(self->GetHiddenProperty(key_string), isolate); 4285 i::Handle<i::Object> result(
4286 i::Handle<i::JSObject>::cast(self)->GetHiddenProperty(key_string),
4287 isolate);
4268 if (result->IsTheHole()) return v8::Local<v8::Value>(); 4288 if (result->IsTheHole()) return v8::Local<v8::Value>();
4269 return Utils::ToLocal(result); 4289 return Utils::ToLocal(result);
4270 } 4290 }
4271 4291
4272 4292
4273 bool v8::Object::DeleteHiddenValue(v8::Local<v8::String> key) { 4293 bool v8::Object::DeleteHiddenValue(v8::Local<v8::String> key) {
4274 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); 4294 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate();
4275 ENTER_V8(isolate); 4295 ENTER_V8(isolate);
4276 i::HandleScope scope(isolate); 4296 i::HandleScope scope(isolate);
4277 i::Handle<i::JSObject> self = Utils::OpenHandle(this); 4297 i::Handle<i::JSReceiver> self = Utils::OpenHandle(this);
4298 if (!self->IsJSObject()) return false;
4278 i::Handle<i::String> key_obj = Utils::OpenHandle(*key); 4299 i::Handle<i::String> key_obj = Utils::OpenHandle(*key);
4279 i::Handle<i::String> key_string = 4300 i::Handle<i::String> key_string =
4280 isolate->factory()->InternalizeString(key_obj); 4301 isolate->factory()->InternalizeString(key_obj);
4281 i::JSObject::DeleteHiddenProperty(self, key_string); 4302 i::JSObject::DeleteHiddenProperty(i::Handle<i::JSObject>::cast(self),
4303 key_string);
4282 return true; 4304 return true;
4283 } 4305 }
4284 4306
4285 4307
4286 bool v8::Object::IsCallable() { 4308 bool v8::Object::IsCallable() {
4287 auto self = Utils::OpenHandle(this); 4309 auto self = Utils::OpenHandle(this);
4288 return self->IsCallable(); 4310 return self->IsCallable();
4289 } 4311 }
4290 4312
4291 4313
(...skipping 1003 matching lines...) Expand 10 before | Expand all | Expand 10 after
5295 i::Handle<i::Object> obj = Utils::OpenHandle(this); 5317 i::Handle<i::Object> obj = Utils::OpenHandle(this);
5296 if (obj->IsSmi()) { 5318 if (obj->IsSmi()) {
5297 return i::Smi::cast(*obj)->value(); 5319 return i::Smi::cast(*obj)->value();
5298 } else { 5320 } else {
5299 return static_cast<uint32_t>(obj->Number()); 5321 return static_cast<uint32_t>(obj->Number());
5300 } 5322 }
5301 } 5323 }
5302 5324
5303 5325
5304 int v8::Object::InternalFieldCount() { 5326 int v8::Object::InternalFieldCount() {
5305 i::Handle<i::JSObject> obj = Utils::OpenHandle(this); 5327 i::Handle<i::JSReceiver> self = Utils::OpenHandle(this);
5306 return obj->GetInternalFieldCount(); 5328 if (!self->IsJSObject()) return 0;
5329 return i::Handle<i::JSObject>::cast(self)->GetInternalFieldCount();
5307 } 5330 }
5308 5331
5309 5332
5310 static bool InternalFieldOK(i::Handle<i::JSObject> obj, 5333 static bool InternalFieldOK(i::Handle<i::JSReceiver> obj, int index,
5311 int index,
5312 const char* location) { 5334 const char* location) {
5313 return Utils::ApiCheck(index < obj->GetInternalFieldCount(), 5335 return Utils::ApiCheck(
5314 location, 5336 obj->IsJSObject() &&
5315 "Internal field out of bounds"); 5337 (index < i::Handle<i::JSObject>::cast(obj)->GetInternalFieldCount()),
5338 location, "Internal field out of bounds");
5316 } 5339 }
5317 5340
5318 5341
5319 Local<Value> v8::Object::SlowGetInternalField(int index) { 5342 Local<Value> v8::Object::SlowGetInternalField(int index) {
5320 i::Handle<i::JSObject> obj = Utils::OpenHandle(this); 5343 i::Handle<i::JSReceiver> obj = Utils::OpenHandle(this);
5321 const char* location = "v8::Object::GetInternalField()"; 5344 const char* location = "v8::Object::GetInternalField()";
5322 if (!InternalFieldOK(obj, index, location)) return Local<Value>(); 5345 if (!InternalFieldOK(obj, index, location)) return Local<Value>();
5323 i::Handle<i::Object> value(obj->GetInternalField(index), obj->GetIsolate()); 5346 i::Handle<i::Object> value(
5347 i::Handle<i::JSObject>::cast(obj)->GetInternalField(index),
5348 obj->GetIsolate());
5324 return Utils::ToLocal(value); 5349 return Utils::ToLocal(value);
5325 } 5350 }
5326 5351
5327 5352
5328 void v8::Object::SetInternalField(int index, v8::Local<Value> value) { 5353 void v8::Object::SetInternalField(int index, v8::Local<Value> value) {
5329 i::Handle<i::JSObject> obj = Utils::OpenHandle(this); 5354 i::Handle<i::JSReceiver> obj = Utils::OpenHandle(this);
5330 const char* location = "v8::Object::SetInternalField()"; 5355 const char* location = "v8::Object::SetInternalField()";
5331 if (!InternalFieldOK(obj, index, location)) return; 5356 if (!InternalFieldOK(obj, index, location)) return;
5332 i::Handle<i::Object> val = Utils::OpenHandle(*value); 5357 i::Handle<i::Object> val = Utils::OpenHandle(*value);
5333 obj->SetInternalField(index, *val); 5358 i::Handle<i::JSObject>::cast(obj)->SetInternalField(index, *val);
5334 } 5359 }
5335 5360
5336 5361
5337 void* v8::Object::SlowGetAlignedPointerFromInternalField(int index) { 5362 void* v8::Object::SlowGetAlignedPointerFromInternalField(int index) {
5338 i::Handle<i::JSObject> obj = Utils::OpenHandle(this); 5363 i::Handle<i::JSReceiver> obj = Utils::OpenHandle(this);
5339 const char* location = "v8::Object::GetAlignedPointerFromInternalField()"; 5364 const char* location = "v8::Object::GetAlignedPointerFromInternalField()";
5340 if (!InternalFieldOK(obj, index, location)) return NULL; 5365 if (!InternalFieldOK(obj, index, location)) return NULL;
5341 return DecodeSmiToAligned(obj->GetInternalField(index), location); 5366 return DecodeSmiToAligned(
5367 i::Handle<i::JSObject>::cast(obj)->GetInternalField(index), location);
5342 } 5368 }
5343 5369
5344 5370
5345 void v8::Object::SetAlignedPointerInInternalField(int index, void* value) { 5371 void v8::Object::SetAlignedPointerInInternalField(int index, void* value) {
5346 i::Handle<i::JSObject> obj = Utils::OpenHandle(this); 5372 i::Handle<i::JSReceiver> obj = Utils::OpenHandle(this);
5347 const char* location = "v8::Object::SetAlignedPointerInInternalField()"; 5373 const char* location = "v8::Object::SetAlignedPointerInInternalField()";
5348 if (!InternalFieldOK(obj, index, location)) return; 5374 if (!InternalFieldOK(obj, index, location)) return;
5349 obj->SetInternalField(index, EncodeAlignedAsSmi(value, location)); 5375 i::Handle<i::JSObject>::cast(obj)
5376 ->SetInternalField(index, EncodeAlignedAsSmi(value, location));
5350 DCHECK_EQ(value, GetAlignedPointerFromInternalField(index)); 5377 DCHECK_EQ(value, GetAlignedPointerFromInternalField(index));
5351 } 5378 }
5352 5379
5353 5380
5354 static void* ExternalValue(i::Object* obj) { 5381 static void* ExternalValue(i::Object* obj) {
5355 // Obscure semantics for undefined, but somehow checked in our unit tests... 5382 // Obscure semantics for undefined, but somehow checked in our unit tests...
5356 if (obj->IsUndefined()) return NULL; 5383 if (obj->IsUndefined()) return NULL;
5357 i::Object* foreign = i::JSObject::cast(obj)->GetInternalField(0); 5384 i::Object* foreign = i::JSObject::cast(obj)->GetInternalField(0);
5358 return i::Foreign::cast(foreign)->foreign_address(); 5385 return i::Foreign::cast(foreign)->foreign_address();
5359 } 5386 }
(...skipping 1059 matching lines...) Expand 10 before | Expand all | Expand 10 after
6419 } 6446 }
6420 6447
6421 6448
6422 Local<Promise::Resolver> Promise::Resolver::New(Isolate* isolate) { 6449 Local<Promise::Resolver> Promise::Resolver::New(Isolate* isolate) {
6423 RETURN_TO_LOCAL_UNCHECKED(New(isolate->GetCurrentContext()), 6450 RETURN_TO_LOCAL_UNCHECKED(New(isolate->GetCurrentContext()),
6424 Promise::Resolver); 6451 Promise::Resolver);
6425 } 6452 }
6426 6453
6427 6454
6428 Local<Promise> Promise::Resolver::GetPromise() { 6455 Local<Promise> Promise::Resolver::GetPromise() {
6429 i::Handle<i::JSObject> promise = Utils::OpenHandle(this); 6456 i::Handle<i::JSReceiver> promise = Utils::OpenHandle(this);
6430 return Local<Promise>::Cast(Utils::ToLocal(promise)); 6457 return Local<Promise>::Cast(Utils::ToLocal(promise));
6431 } 6458 }
6432 6459
6433 6460
6434 Maybe<bool> Promise::Resolver::Resolve(Local<Context> context, 6461 Maybe<bool> Promise::Resolver::Resolve(Local<Context> context,
6435 Local<Value> value) { 6462 Local<Value> value) {
6436 PREPARE_FOR_EXECUTION_PRIMITIVE(context, "Promise::Resolver::Resolve", bool); 6463 PREPARE_FOR_EXECUTION_PRIMITIVE(context, "Promise::Resolver::Resolve", bool);
6437 auto self = Utils::OpenHandle(this); 6464 auto self = Utils::OpenHandle(this);
6438 i::Handle<i::Object> argv[] = {self, Utils::OpenHandle(*value)}; 6465 i::Handle<i::Object> argv[] = {self, Utils::OpenHandle(*value)};
6439 has_pending_exception = 6466 has_pending_exception =
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
6527 } 6554 }
6528 6555
6529 6556
6530 Local<Promise> Promise::Then(Local<Function> handler) { 6557 Local<Promise> Promise::Then(Local<Function> handler) {
6531 auto context = ContextFromHeapObject(Utils::OpenHandle(this)); 6558 auto context = ContextFromHeapObject(Utils::OpenHandle(this));
6532 RETURN_TO_LOCAL_UNCHECKED(Then(context, handler), Promise); 6559 RETURN_TO_LOCAL_UNCHECKED(Then(context, handler), Promise);
6533 } 6560 }
6534 6561
6535 6562
6536 bool Promise::HasHandler() { 6563 bool Promise::HasHandler() {
6537 i::Handle<i::JSObject> promise = Utils::OpenHandle(this); 6564 i::Handle<i::JSReceiver> promise = Utils::OpenHandle(this);
6538 i::Isolate* isolate = promise->GetIsolate(); 6565 i::Isolate* isolate = promise->GetIsolate();
6539 LOG_API(isolate, "Promise::HasRejectHandler"); 6566 LOG_API(isolate, "Promise::HasRejectHandler");
6540 ENTER_V8(isolate); 6567 ENTER_V8(isolate);
6541 i::Handle<i::Symbol> key = isolate->factory()->promise_has_handler_symbol(); 6568 i::Handle<i::Symbol> key = isolate->factory()->promise_has_handler_symbol();
6542 return i::JSReceiver::GetDataProperty(promise, key)->IsTrue(); 6569 return i::JSReceiver::GetDataProperty(promise, key)->IsTrue();
6543 } 6570 }
6544 6571
6545 6572
6546 bool v8::ArrayBuffer::IsExternal() const { 6573 bool v8::ArrayBuffer::IsExternal() const {
6547 return Utils::OpenHandle(this)->is_external(); 6574 return Utils::OpenHandle(this)->is_external();
(...skipping 1264 matching lines...) Expand 10 before | Expand all | Expand 10 after
7812 i::Debug* isolate_debug = isolate->debug(); 7839 i::Debug* isolate_debug = isolate->debug();
7813 has_pending_exception = !isolate_debug->Load(); 7840 has_pending_exception = !isolate_debug->Load();
7814 RETURN_ON_FAILED_EXECUTION(Value); 7841 RETURN_ON_FAILED_EXECUTION(Value);
7815 i::Handle<i::JSObject> debug(isolate_debug->debug_context()->global_object()); 7842 i::Handle<i::JSObject> debug(isolate_debug->debug_context()->global_object());
7816 auto name = isolate->factory()->NewStringFromStaticChars("MakeMirror"); 7843 auto name = isolate->factory()->NewStringFromStaticChars("MakeMirror");
7817 auto fun_obj = i::Object::GetProperty(debug, name).ToHandleChecked(); 7844 auto fun_obj = i::Object::GetProperty(debug, name).ToHandleChecked();
7818 auto v8_fun = Utils::CallableToLocal(i::Handle<i::JSFunction>::cast(fun_obj)); 7845 auto v8_fun = Utils::CallableToLocal(i::Handle<i::JSFunction>::cast(fun_obj));
7819 const int kArgc = 1; 7846 const int kArgc = 1;
7820 v8::Local<v8::Value> argv[kArgc] = {obj}; 7847 v8::Local<v8::Value> argv[kArgc] = {obj};
7821 Local<Value> result; 7848 Local<Value> result;
7822 has_pending_exception = !v8_fun->Call(context, Utils::ToLocal(debug), kArgc, 7849 has_pending_exception =
7823 argv).ToLocal(&result); 7850 !v8_fun->Call(context, Utils::ToLocal(debug), kArgc, argv)
7851 .ToLocal(&result);
7824 RETURN_ON_FAILED_EXECUTION(Value); 7852 RETURN_ON_FAILED_EXECUTION(Value);
7825 RETURN_ESCAPED(result); 7853 RETURN_ESCAPED(result);
7826 } 7854 }
7827 7855
7828 7856
7829 Local<Value> Debug::GetMirror(v8::Local<v8::Value> obj) { 7857 Local<Value> Debug::GetMirror(v8::Local<v8::Value> obj) {
7830 RETURN_TO_LOCAL_UNCHECKED(GetMirror(Local<Context>(), obj), Value); 7858 RETURN_TO_LOCAL_UNCHECKED(GetMirror(Local<Context>(), obj), Value);
7831 } 7859 }
7832 7860
7833 7861
(...skipping 666 matching lines...) Expand 10 before | Expand all | Expand 10 after
8500 Address callback_address = 8528 Address callback_address =
8501 reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback)); 8529 reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback));
8502 VMState<EXTERNAL> state(isolate); 8530 VMState<EXTERNAL> state(isolate);
8503 ExternalCallbackScope call_scope(isolate, callback_address); 8531 ExternalCallbackScope call_scope(isolate, callback_address);
8504 callback(info); 8532 callback(info);
8505 } 8533 }
8506 8534
8507 8535
8508 } // namespace internal 8536 } // namespace internal
8509 } // namespace v8 8537 } // namespace v8
OLDNEW
« no previous file with comments | « src/api.h ('k') | src/objects.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698