Plumb Isolate through HasProperty and friends

Currently the Isolate is gotten off of the object that the operation is
being performed on. Shared objects return the shared Isolate, which is
incorrect as it shouldn't be used to run JS, nor does it have
HandleScopes open. Plumb the executing Isolate through.

Bug: v8:12547
Change-Id: I52d5a172ea602f4ad058d979003d51a80cdb4405
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3441022
Reviewed-by: Adam Klein <adamk@chromium.org>
Commit-Queue: Shu-yu Guo <syg@chromium.org>
Cr-Commit-Position: refs/heads/main@{#78961}
This commit is contained in:
Shu-yu Guo 2022-02-04 13:22:43 -08:00 committed by V8 LUCI CQ
parent d4baeee65f
commit 33457e544a
16 changed files with 94 additions and 87 deletions

View File

@ -2895,7 +2895,7 @@ MaybeLocal<Value> v8::TryCatch::StackTrace(Local<Context> context,
PREPARE_FOR_EXECUTION(context, TryCatch, StackTrace, Value);
auto obj = i::Handle<i::JSObject>::cast(i_exception);
i::Handle<i::String> name = isolate->factory()->stack_string();
Maybe<bool> maybe = i::JSReceiver::HasProperty(obj, name);
Maybe<bool> maybe = i::JSReceiver::HasProperty(isolate, obj, name);
has_pending_exception = maybe.IsNothing();
RETURN_ON_FAILED_EXECUTION(Value);
if (!maybe.FromJust()) return v8::Local<Value>();
@ -4748,12 +4748,12 @@ Maybe<bool> v8::Object::Has(Local<Context> context, Local<Value> key) {
// Check if the given key is an array index.
uint32_t index = 0;
if (key_obj->ToArrayIndex(&index)) {
maybe = i::JSReceiver::HasElement(self, index);
maybe = i::JSReceiver::HasElement(isolate, self, index);
} else {
// Convert the key to a name - possibly by calling back into JavaScript.
i::Handle<i::Name> name;
if (i::Object::ToName(isolate, key_obj).ToHandle(&name)) {
maybe = i::JSReceiver::HasProperty(self, name);
maybe = i::JSReceiver::HasProperty(isolate, self, name);
}
}
has_pending_exception = maybe.IsNothing();
@ -4779,7 +4779,7 @@ Maybe<bool> v8::Object::Has(Local<Context> context, uint32_t index) {
auto isolate = reinterpret_cast<i::Isolate*>(context->GetIsolate());
ENTER_V8(isolate, context, Object, Has, Nothing<bool>(), i::HandleScope);
auto self = Utils::OpenHandle(this);
auto maybe = i::JSReceiver::HasElement(self, index);
auto maybe = i::JSReceiver::HasElement(isolate, self, index);
has_pending_exception = maybe.IsNothing();
RETURN_ON_FAILED_EXECUTION_PRIMITIVE(bool);
return maybe;
@ -4882,7 +4882,7 @@ Maybe<bool> v8::Object::HasOwnProperty(Local<Context> context,
i::HandleScope);
auto self = Utils::OpenHandle(this);
auto key_val = Utils::OpenHandle(*key);
auto result = i::JSReceiver::HasOwnProperty(self, key_val);
auto result = i::JSReceiver::HasOwnProperty(isolate, self, key_val);
has_pending_exception = result.IsNothing();
RETURN_ON_FAILED_EXECUTION_PRIMITIVE(bool);
return result;
@ -4893,7 +4893,7 @@ Maybe<bool> v8::Object::HasOwnProperty(Local<Context> context, uint32_t index) {
ENTER_V8(isolate, context, Object, HasOwnProperty, Nothing<bool>(),
i::HandleScope);
auto self = Utils::OpenHandle(this);
auto result = i::JSReceiver::HasOwnProperty(self, index);
auto result = i::JSReceiver::HasOwnProperty(isolate, self, index);
has_pending_exception = result.IsNothing();
RETURN_ON_FAILED_EXECUTION_PRIMITIVE(bool);
return result;
@ -4908,7 +4908,7 @@ Maybe<bool> v8::Object::HasRealNamedProperty(Local<Context> context,
if (!self->IsJSObject()) return Just(false);
auto key_val = Utils::OpenHandle(*key);
auto result = i::JSObject::HasRealNamedProperty(
i::Handle<i::JSObject>::cast(self), key_val);
isolate, i::Handle<i::JSObject>::cast(self), key_val);
has_pending_exception = result.IsNothing();
RETURN_ON_FAILED_EXECUTION_PRIMITIVE(bool);
return result;
@ -4922,7 +4922,7 @@ Maybe<bool> v8::Object::HasRealIndexedProperty(Local<Context> context,
auto self = Utils::OpenHandle(this);
if (!self->IsJSObject()) return Just(false);
auto result = i::JSObject::HasRealElementProperty(
i::Handle<i::JSObject>::cast(self), index);
isolate, i::Handle<i::JSObject>::cast(self), index);
has_pending_exception = result.IsNothing();
RETURN_ON_FAILED_EXECUTION_PRIMITIVE(bool);
return result;
@ -4937,7 +4937,7 @@ Maybe<bool> v8::Object::HasRealNamedCallbackProperty(Local<Context> context,
if (!self->IsJSObject()) return Just(false);
auto key_val = Utils::OpenHandle(*key);
auto result = i::JSObject::HasRealNamedCallbackProperty(
i::Handle<i::JSObject>::cast(self), key_val);
isolate, i::Handle<i::JSObject>::cast(self), key_val);
has_pending_exception = result.IsNothing();
RETURN_ON_FAILED_EXECUTION_PRIMITIVE(bool);
return result;

View File

@ -537,7 +537,8 @@ V8_WARN_UNUSED_RESULT Object GenericArrayShift(Isolate* isolate,
// c. Let fromPresent be ? HasProperty(O, from).
bool from_present;
MAYBE_ASSIGN_RETURN_FAILURE_ON_EXCEPTION(
isolate, from_present, JSReceiver::HasProperty(receiver, from));
isolate, from_present,
JSReceiver::HasProperty(isolate, receiver, from));
// d. If fromPresent is true, then.
if (from_present) {
@ -1046,7 +1047,7 @@ void CollectElementIndices(Isolate* isolate, Handle<JSObject> object,
bool IterateElementsSlow(Isolate* isolate, Handle<JSReceiver> receiver,
uint32_t length, ArrayConcatVisitor* visitor) {
FOR_WITH_HANDLE_SCOPE(isolate, uint32_t, i = 0, i, i < length, ++i, {
Maybe<bool> maybe = JSReceiver::HasElement(receiver, i);
Maybe<bool> maybe = JSReceiver::HasElement(isolate, receiver, i);
if (maybe.IsNothing()) return false;
if (maybe.FromJust()) {
Handle<Object> element_value;
@ -1123,7 +1124,7 @@ bool IterateElements(Isolate* isolate, Handle<JSReceiver> receiver,
if (!element_value->IsTheHole(isolate)) {
if (!visitor->visit(j, element_value)) return false;
} else {
Maybe<bool> maybe = JSReceiver::HasElement(array, j);
Maybe<bool> maybe = JSReceiver::HasElement(isolate, array, j);
if (maybe.IsNothing()) return false;
if (maybe.FromJust()) {
// Call GetElement on array, not its prototype, or getters won't
@ -1161,7 +1162,7 @@ bool IterateElements(Isolate* isolate, Handle<JSReceiver> receiver,
isolate->factory()->NewNumber(double_value);
if (!visitor->visit(j, element_value)) return false;
} else {
Maybe<bool> maybe = JSReceiver::HasElement(array, j);
Maybe<bool> maybe = JSReceiver::HasElement(isolate, array, j);
if (maybe.IsNothing()) return false;
if (maybe.FromJust()) {
// Call GetElement on array, not its prototype, or getters won't

View File

@ -565,7 +565,7 @@ Handle<JSObject> ScopeIterator::ScopeObject(Mode mode) {
if (value->IsTheHole(isolate_)) {
// Reflect variables under TDZ as undefined in scope object.
if (scope_type == ScopeTypeScript &&
JSReceiver::HasOwnProperty(scope, name).FromMaybe(true)) {
JSReceiver::HasOwnProperty(isolate_, scope, name).FromMaybe(true)) {
// We also use the hole to represent overridden let-declarations via
// REPL mode in a script context. Catch this case.
return false;

View File

@ -2765,7 +2765,8 @@ void Isolate::InstallConditionalFeatures(Handle<Context> context) {
Handle<JSGlobalObject> global = handle(context->global_object(), this);
Handle<String> sab_name = factory()->SharedArrayBuffer_string();
if (IsSharedArrayBufferConstructorEnabled(context)) {
if (!JSObject::HasRealNamedProperty(global, sab_name).FromMaybe(true)) {
if (!JSObject::HasRealNamedProperty(this, global, sab_name)
.FromMaybe(true)) {
JSObject::AddProperty(this, global, factory()->SharedArrayBuffer_string(),
shared_array_buffer_fun(), DONT_ENUM);
}

View File

@ -557,7 +557,8 @@ MaybeHandle<JSObject> ErrorUtils::Construct(
Handle<Name> cause_string = isolate->factory()->cause_string();
if (options->IsJSReceiver()) {
Handle<JSReceiver> js_options = Handle<JSReceiver>::cast(options);
Maybe<bool> has_cause = JSObject::HasProperty(js_options, cause_string);
Maybe<bool> has_cause =
JSObject::HasProperty(isolate, js_options, cause_string);
if (has_cause.IsNothing()) {
DCHECK((isolate)->has_pending_exception());
return MaybeHandle<JSObject>();

View File

@ -707,19 +707,18 @@ DEF_GETTER(JSReceiver, property_array, PropertyArray) {
return PropertyArray::cast(prop);
}
Maybe<bool> JSReceiver::HasProperty(Handle<JSReceiver> object,
Maybe<bool> JSReceiver::HasProperty(Isolate* isolate, Handle<JSReceiver> object,
Handle<Name> name) {
Isolate* isolate = object->GetIsolate();
PropertyKey key(isolate, name);
LookupIterator it(isolate, object, key, object);
return HasProperty(&it);
}
Maybe<bool> JSReceiver::HasOwnProperty(Handle<JSReceiver> object,
Maybe<bool> JSReceiver::HasOwnProperty(Isolate* isolate,
Handle<JSReceiver> object,
uint32_t index) {
if (object->IsJSObject()) { // Shortcut.
LookupIterator it(object->GetIsolate(), object, index, object,
LookupIterator::OWN);
LookupIterator it(isolate, object, index, object, LookupIterator::OWN);
return HasProperty(&it);
}
@ -752,8 +751,9 @@ Maybe<PropertyAttributes> JSReceiver::GetOwnPropertyAttributes(
return GetPropertyAttributes(&it);
}
Maybe<bool> JSReceiver::HasElement(Handle<JSReceiver> object, uint32_t index) {
LookupIterator it(object->GetIsolate(), object, index, object);
Maybe<bool> JSReceiver::HasElement(Isolate* isolate, Handle<JSReceiver> object,
uint32_t index) {
LookupIterator it(isolate, object, index, object);
return HasProperty(&it);
}

View File

@ -120,16 +120,15 @@ Maybe<bool> JSReceiver::HasProperty(LookupIterator* it) {
}
// static
Maybe<bool> JSReceiver::HasOwnProperty(Handle<JSReceiver> object,
Maybe<bool> JSReceiver::HasOwnProperty(Isolate* isolate,
Handle<JSReceiver> object,
Handle<Name> name) {
if (object->IsJSModuleNamespace()) {
PropertyDescriptor desc;
return JSReceiver::GetOwnPropertyDescriptor(object->GetIsolate(), object,
name, &desc);
return JSReceiver::GetOwnPropertyDescriptor(isolate, object, name, &desc);
}
if (object->IsJSObject()) { // Shortcut.
Isolate* isolate = object->GetIsolate();
PropertyKey key(isolate, name);
LookupIterator it(isolate, object, key, LookupIterator::OWN);
return HasProperty(&it);
@ -5220,25 +5219,25 @@ MaybeHandle<Object> JSObject::GetPropertyWithInterceptor(LookupIterator* it,
return GetPropertyWithInterceptorInternal(it, it->GetInterceptor(), done);
}
Maybe<bool> JSObject::HasRealNamedProperty(Handle<JSObject> object,
Maybe<bool> JSObject::HasRealNamedProperty(Isolate* isolate,
Handle<JSObject> object,
Handle<Name> name) {
Isolate* isolate = object->GetIsolate();
PropertyKey key(isolate, name);
LookupIterator it(isolate, object, key, LookupIterator::OWN_SKIP_INTERCEPTOR);
return HasProperty(&it);
}
Maybe<bool> JSObject::HasRealElementProperty(Handle<JSObject> object,
Maybe<bool> JSObject::HasRealElementProperty(Isolate* isolate,
Handle<JSObject> object,
uint32_t index) {
Isolate* isolate = object->GetIsolate();
LookupIterator it(isolate, object, index, object,
LookupIterator::OWN_SKIP_INTERCEPTOR);
return HasProperty(&it);
}
Maybe<bool> JSObject::HasRealNamedCallbackProperty(Handle<JSObject> object,
Maybe<bool> JSObject::HasRealNamedCallbackProperty(Isolate* isolate,
Handle<JSObject> object,
Handle<Name> name) {
Isolate* isolate = object->GetIsolate();
PropertyKey key(isolate, name);
LookupIterator it(isolate, object, key, LookupIterator::OWN_SKIP_INTERCEPTOR);
Maybe<PropertyAttributes> maybe_result = GetPropertyAttributes(&it);

View File

@ -119,14 +119,14 @@ class JSReceiver : public TorqueGeneratedJSReceiver<JSReceiver, HeapObject> {
V8_EXPORT_PRIVATE V8_WARN_UNUSED_RESULT static Maybe<bool> HasProperty(
LookupIterator* it);
V8_WARN_UNUSED_RESULT static inline Maybe<bool> HasProperty(
Handle<JSReceiver> object, Handle<Name> name);
Isolate* isolate, Handle<JSReceiver> object, Handle<Name> name);
V8_WARN_UNUSED_RESULT static inline Maybe<bool> HasElement(
Handle<JSReceiver> object, uint32_t index);
Isolate* isolate, Handle<JSReceiver> object, uint32_t index);
V8_EXPORT_PRIVATE V8_WARN_UNUSED_RESULT static Maybe<bool> HasOwnProperty(
Handle<JSReceiver> object, Handle<Name> name);
Isolate* isolate, Handle<JSReceiver> object, Handle<Name> name);
V8_WARN_UNUSED_RESULT static inline Maybe<bool> HasOwnProperty(
Handle<JSReceiver> object, uint32_t index);
Isolate* isolate, Handle<JSReceiver> object, uint32_t index);
V8_WARN_UNUSED_RESULT static inline MaybeHandle<Object> GetProperty(
Isolate* isolate, Handle<JSReceiver> receiver, const char* key);
@ -587,11 +587,11 @@ class JSObject : public TorqueGeneratedJSObject<JSObject, JSReceiver> {
// Support functions for v8 api (needed for correct interceptor behavior).
V8_WARN_UNUSED_RESULT static Maybe<bool> HasRealNamedProperty(
Handle<JSObject> object, Handle<Name> name);
Isolate* isolate, Handle<JSObject> object, Handle<Name> name);
V8_WARN_UNUSED_RESULT static Maybe<bool> HasRealElementProperty(
Handle<JSObject> object, uint32_t index);
Isolate* isolate, Handle<JSObject> object, uint32_t index);
V8_WARN_UNUSED_RESULT static Maybe<bool> HasRealNamedCallbackProperty(
Handle<JSObject> object, Handle<Name> name);
Isolate* isolate, Handle<JSObject> object, Handle<Name> name);
// Get the header size for a JSObject. Used to compute the index of
// embedder fields as well as the number of embedder fields.

View File

@ -1330,7 +1330,7 @@ MaybeHandle<JSReceiver> ToTemporalCalendar(
// b. If ? HasProperty(temporalCalendarLike, "calendar") is false, return
// temporalCalendarLike.
Maybe<bool> maybe_has =
JSReceiver::HasProperty(obj, factory->calendar_string());
JSReceiver::HasProperty(isolate, obj, factory->calendar_string());
MAYBE_RETURN(maybe_has, Handle<JSReceiver>());
if (!maybe_has.FromJust()) {
@ -1345,7 +1345,8 @@ MaybeHandle<JSReceiver> ToTemporalCalendar(
if (temporal_calendar_like->IsJSReceiver()) {
obj = Handle<JSReceiver>::cast(temporal_calendar_like);
// and ? HasProperty(temporalCalendarLike, "calendar") is false,
maybe_has = JSReceiver::HasProperty(obj, factory->calendar_string());
maybe_has =
JSReceiver::HasProperty(isolate, obj, factory->calendar_string());
MAYBE_RETURN(maybe_has, Handle<JSReceiver>());
if (!maybe_has.FromJust()) {
// return temporalCalendarLike.
@ -1405,7 +1406,7 @@ MaybeHandle<JSReceiver> ToTemporalTimeZone(
Handle<JSReceiver> obj = Handle<JSReceiver>::cast(temporal_time_zone_like);
// b. If ? HasProperty(temporalTimeZoneLike, "timeZone") is false,
Maybe<bool> maybe_has =
JSReceiver::HasProperty(obj, factory->timeZone_string());
JSReceiver::HasProperty(isolate, obj, factory->timeZone_string());
MAYBE_RETURN(maybe_has, Handle<JSReceiver>());
if (!maybe_has.FromJust()) {
// return temporalTimeZoneLike.
@ -1421,7 +1422,8 @@ MaybeHandle<JSReceiver> ToTemporalTimeZone(
if (temporal_time_zone_like->IsJSReceiver()) {
// is Object and ? HasProperty(temporalTimeZoneLike, "timeZone") is false,
obj = Handle<JSReceiver>::cast(temporal_time_zone_like);
maybe_has = JSReceiver::HasProperty(obj, factory->timeZone_string());
maybe_has =
JSReceiver::HasProperty(isolate, obj, factory->timeZone_string());
MAYBE_RETURN(maybe_has, Handle<JSReceiver>());
if (!maybe_has.FromJust()) {
// return temporalTimeZoneLike.

View File

@ -428,7 +428,8 @@ namespace {
bool IsErrorObject(Isolate* isolate, Handle<Object> object) {
if (!object->IsJSReceiver()) return false;
Handle<Symbol> symbol = isolate->factory()->error_stack_symbol();
return JSReceiver::HasOwnProperty(Handle<JSReceiver>::cast(object), symbol)
return JSReceiver::HasOwnProperty(isolate, Handle<JSReceiver>::cast(object),
symbol)
.FromMaybe(false);
}
@ -3021,7 +3022,7 @@ Maybe<bool> JSProxy::HasProperty(Isolate* isolate, Handle<JSProxy> proxy,
// 7. If trap is undefined, then
if (trap->IsUndefined(isolate)) {
// 7a. Return target.[[HasProperty]](P).
return JSReceiver::HasProperty(target, name);
return JSReceiver::HasProperty(isolate, target, name);
}
// 8. Let booleanTrapResult be ToBoolean(? Call(trap, handler, «target, P»)).
Handle<Object> trap_result_obj;

View File

@ -77,7 +77,7 @@ MaybeHandle<Object> Runtime::HasProperty(Isolate* isolate,
Object);
// Lookup the {name} on {receiver}.
Maybe<bool> maybe = JSReceiver::HasProperty(receiver, name);
Maybe<bool> maybe = JSReceiver::HasProperty(isolate, receiver, name);
if (maybe.IsNothing()) return MaybeHandle<Object>();
return maybe.FromJust() ? ReadOnlyRoots(isolate).true_value_handle()
: ReadOnlyRoots(isolate).false_value_handle();
@ -969,7 +969,7 @@ RUNTIME_FUNCTION(Runtime_HasProperty) {
Object::ToName(isolate, key));
// Lookup the {name} on {receiver}.
Maybe<bool> maybe = JSReceiver::HasProperty(receiver, name);
Maybe<bool> maybe = JSReceiver::HasProperty(isolate, receiver, name);
if (maybe.IsNothing()) return ReadOnlyRoots(isolate).exception();
return isolate->heap()->ToBoolean(maybe.FromJust());
}

View File

@ -2989,7 +2989,8 @@ void WasmJs::InstallConditionalFeatures(Isolate* isolate,
Handle<JSObject> webassembly = Handle<JSObject>::cast(webassembly_obj);
// Setup Exception
Handle<String> tag_name = v8_str(isolate, "Tag");
if (JSObject::HasOwnProperty(webassembly, tag_name).FromMaybe(true)) {
if (JSObject::HasOwnProperty(isolate, webassembly, tag_name)
.FromMaybe(true)) {
// The {Exception} constructor already exists, there is nothing more to
// do.
return;

View File

@ -337,7 +337,8 @@ TEST(HeapObjects) {
Handle<String> object_string = Handle<String>::cast(factory->Object_string());
Handle<JSGlobalObject> global(CcTest::i_isolate()->context().global_object(),
isolate);
CHECK(Just(true) == JSReceiver::HasOwnProperty(global, object_string));
CHECK(Just(true) ==
JSReceiver::HasOwnProperty(isolate, global, object_string));
// Check ToString for oddballs
ReadOnlyRoots roots(heap);
@ -406,7 +407,7 @@ TEST(GarbageCollection) {
CcTest::CollectGarbage(NEW_SPACE);
// Function should be alive.
CHECK(Just(true) == JSReceiver::HasOwnProperty(global, name));
CHECK(Just(true) == JSReceiver::HasOwnProperty(isolate, global, name));
// Check function is retained.
Handle<Object> func_value =
Object::GetProperty(isolate, global, name).ToHandleChecked();
@ -424,7 +425,7 @@ TEST(GarbageCollection) {
// After gc, it should survive.
CcTest::CollectGarbage(NEW_SPACE);
CHECK(Just(true) == JSReceiver::HasOwnProperty(global, obj_name));
CHECK(Just(true) == JSReceiver::HasOwnProperty(isolate, global, obj_name));
Handle<Object> obj =
Object::GetProperty(isolate, global, obj_name).ToHandleChecked();
CHECK(obj->IsJSObject());
@ -800,60 +801,60 @@ TEST(ObjectProperties) {
Handle<Smi> two(Smi::FromInt(2), isolate);
// check for empty
CHECK(Just(false) == JSReceiver::HasOwnProperty(obj, first));
CHECK(Just(false) == JSReceiver::HasOwnProperty(isolate, obj, first));
// add first
Object::SetProperty(isolate, obj, first, one).Check();
CHECK(Just(true) == JSReceiver::HasOwnProperty(obj, first));
CHECK(Just(true) == JSReceiver::HasOwnProperty(isolate, obj, first));
// delete first
CHECK(Just(true) ==
JSReceiver::DeleteProperty(obj, first, LanguageMode::kSloppy));
CHECK(Just(false) == JSReceiver::HasOwnProperty(obj, first));
CHECK(Just(false) == JSReceiver::HasOwnProperty(isolate, obj, first));
// add first and then second
Object::SetProperty(isolate, obj, first, one).Check();
Object::SetProperty(isolate, obj, second, two).Check();
CHECK(Just(true) == JSReceiver::HasOwnProperty(obj, first));
CHECK(Just(true) == JSReceiver::HasOwnProperty(obj, second));
CHECK(Just(true) == JSReceiver::HasOwnProperty(isolate, obj, first));
CHECK(Just(true) == JSReceiver::HasOwnProperty(isolate, obj, second));
// delete first and then second
CHECK(Just(true) ==
JSReceiver::DeleteProperty(obj, first, LanguageMode::kSloppy));
CHECK(Just(true) == JSReceiver::HasOwnProperty(obj, second));
CHECK(Just(true) == JSReceiver::HasOwnProperty(isolate, obj, second));
CHECK(Just(true) ==
JSReceiver::DeleteProperty(obj, second, LanguageMode::kSloppy));
CHECK(Just(false) == JSReceiver::HasOwnProperty(obj, first));
CHECK(Just(false) == JSReceiver::HasOwnProperty(obj, second));
CHECK(Just(false) == JSReceiver::HasOwnProperty(isolate, obj, first));
CHECK(Just(false) == JSReceiver::HasOwnProperty(isolate, obj, second));
// add first and then second
Object::SetProperty(isolate, obj, first, one).Check();
Object::SetProperty(isolate, obj, second, two).Check();
CHECK(Just(true) == JSReceiver::HasOwnProperty(obj, first));
CHECK(Just(true) == JSReceiver::HasOwnProperty(obj, second));
CHECK(Just(true) == JSReceiver::HasOwnProperty(isolate, obj, first));
CHECK(Just(true) == JSReceiver::HasOwnProperty(isolate, obj, second));
// delete second and then first
CHECK(Just(true) ==
JSReceiver::DeleteProperty(obj, second, LanguageMode::kSloppy));
CHECK(Just(true) == JSReceiver::HasOwnProperty(obj, first));
CHECK(Just(true) == JSReceiver::HasOwnProperty(isolate, obj, first));
CHECK(Just(true) ==
JSReceiver::DeleteProperty(obj, first, LanguageMode::kSloppy));
CHECK(Just(false) == JSReceiver::HasOwnProperty(obj, first));
CHECK(Just(false) == JSReceiver::HasOwnProperty(obj, second));
CHECK(Just(false) == JSReceiver::HasOwnProperty(isolate, obj, first));
CHECK(Just(false) == JSReceiver::HasOwnProperty(isolate, obj, second));
// check string and internalized string match
const char* string1 = "fisk";
Handle<String> s1 = factory->NewStringFromAsciiChecked(string1);
Object::SetProperty(isolate, obj, s1, one).Check();
Handle<String> s1_string = factory->InternalizeUtf8String(string1);
CHECK(Just(true) == JSReceiver::HasOwnProperty(obj, s1_string));
CHECK(Just(true) == JSReceiver::HasOwnProperty(isolate, obj, s1_string));
// check internalized string and string match
const char* string2 = "fugl";
Handle<String> s2_string = factory->InternalizeUtf8String(string2);
Object::SetProperty(isolate, obj, s2_string, one).Check();
Handle<String> s2 = factory->NewStringFromAsciiChecked(string2);
CHECK(Just(true) == JSReceiver::HasOwnProperty(obj, s2));
CHECK(Just(true) == JSReceiver::HasOwnProperty(isolate, obj, s2));
}

View File

@ -154,7 +154,7 @@ HEAP_TEST(MarkCompactCollector) {
{ HandleScope scope(isolate);
Handle<String> func_name = factory->InternalizeUtf8String("theFunction");
CHECK(Just(true) == JSReceiver::HasOwnProperty(global, func_name));
CHECK(Just(true) == JSReceiver::HasOwnProperty(isolate, global, func_name));
Handle<Object> func_value =
Object::GetProperty(isolate, global, func_name).ToHandleChecked();
CHECK(func_value->IsJSFunction());
@ -172,7 +172,7 @@ HEAP_TEST(MarkCompactCollector) {
{ HandleScope scope(isolate);
Handle<String> obj_name = factory->InternalizeUtf8String("theObject");
CHECK(Just(true) == JSReceiver::HasOwnProperty(global, obj_name));
CHECK(Just(true) == JSReceiver::HasOwnProperty(isolate, global, obj_name));
Handle<Object> object =
Object::GetProperty(isolate, global, obj_name).ToHandleChecked();
CHECK(object->IsJSObject());

View File

@ -1340,7 +1340,7 @@ TEST(TryHasOwnProperty) {
for (Handle<JSObject> object : objects) {
for (size_t name_index = 0; name_index < arraysize(names); name_index++) {
Handle<Name> name = names[name_index];
CHECK(JSReceiver::HasProperty(object, name).FromJust());
CHECK(JSReceiver::HasProperty(isolate, object, name).FromJust());
ft.CheckTrue(object, name, expect_found);
}
}
@ -1360,7 +1360,7 @@ TEST(TryHasOwnProperty) {
for (size_t key_index = 0; key_index < arraysize(non_existing_names);
key_index++) {
Handle<Name> name = non_existing_names[key_index];
CHECK(!JSReceiver::HasProperty(object, name).FromJust());
CHECK(!JSReceiver::HasProperty(isolate, object, name).FromJust());
ft.CheckTrue(object, name, expect_not_found);
}
}
@ -1666,12 +1666,12 @@ TEST(TryLookupElement) {
Handle<Object> expect_not_found(Smi::FromInt(kNotFound), isolate);
Handle<Object> expect_bailout(Smi::FromInt(kBailout), isolate);
#define CHECK_FOUND(object, index) \
CHECK(JSReceiver::HasElement(object, index).FromJust()); \
#define CHECK_FOUND(object, index) \
CHECK(JSReceiver::HasElement(isolate, object, index).FromJust()); \
ft.CheckTrue(object, smi##index, expect_found);
#define CHECK_NOT_FOUND(object, index) \
CHECK(!JSReceiver::HasElement(object, index).FromJust()); \
#define CHECK_NOT_FOUND(object, index) \
CHECK(!JSReceiver::HasElement(isolate, object, index).FromJust()); \
ft.CheckTrue(object, smi##index, expect_not_found);
#define CHECK_ABSENT(object, index) \

View File

@ -539,12 +539,12 @@ TEST_P(MicrotaskQueueTest, DetachGlobal_HandlerContext) {
" results['stale_rejected_promise'] = true;"
"})");
microtask_queue()->RunMicrotasks(isolate());
EXPECT_TRUE(
JSReceiver::HasProperty(results, NameFromChars("stale_resolved_promise"))
.FromJust());
EXPECT_TRUE(
JSReceiver::HasProperty(results, NameFromChars("stale_rejected_promise"))
.FromJust());
EXPECT_TRUE(JSReceiver::HasProperty(isolate(), results,
NameFromChars("stale_resolved_promise"))
.FromJust());
EXPECT_TRUE(JSReceiver::HasProperty(isolate(), results,
NameFromChars("stale_rejected_promise"))
.FromJust());
// Set stale handlers to valid promises.
RunJS(
@ -554,12 +554,12 @@ TEST_P(MicrotaskQueueTest, DetachGlobal_HandlerContext) {
"Promise.reject("
" stale_handler.bind(null, results, 'stale_handler_reject'))");
microtask_queue()->RunMicrotasks(isolate());
EXPECT_FALSE(
JSReceiver::HasProperty(results, NameFromChars("stale_handler_resolve"))
.FromJust());
EXPECT_FALSE(
JSReceiver::HasProperty(results, NameFromChars("stale_handler_reject"))
.FromJust());
EXPECT_FALSE(JSReceiver::HasProperty(isolate(), results,
NameFromChars("stale_handler_resolve"))
.FromJust());
EXPECT_FALSE(JSReceiver::HasProperty(isolate(), results,
NameFromChars("stale_handler_reject"))
.FromJust());
}
TEST_P(MicrotaskQueueTest, DetachGlobal_Chain) {