| Index: src/objects.cc
|
| diff --git a/src/objects.cc b/src/objects.cc
|
| index 261afd83723f185a7661529371859ac8e78560ce..3be25f274d35850541732db7416d90882214fa96 100644
|
| --- a/src/objects.cc
|
| +++ b/src/objects.cc
|
| @@ -124,7 +124,7 @@ MaybeHandle<JSReceiver> Object::ConvertReceiver(Isolate* isolate,
|
| Handle<Object> object) {
|
| if (object->IsJSReceiver()) return Handle<JSReceiver>::cast(object);
|
| if (*object == isolate->heap()->null_value() ||
|
| - *object == isolate->heap()->undefined_value()) {
|
| + object->IsUndefined(isolate)) {
|
| return isolate->global_proxy();
|
| }
|
| return Object::ToObject(isolate, object);
|
| @@ -231,9 +231,11 @@ MaybeHandle<Object> Object::ToLength(Isolate* isolate, Handle<Object> input) {
|
|
|
|
|
| bool Object::BooleanValue() {
|
| - if (IsBoolean()) return IsTrue();
|
| if (IsSmi()) return Smi::cast(this)->value() != 0;
|
| - if (IsUndefined() || IsNull()) return false;
|
| + if (IsBoolean()) return IsTrue();
|
| + DCHECK(IsHeapObject());
|
| + Isolate* isolate = HeapObject::cast(this)->GetIsolate();
|
| + if (IsUndefined(isolate) || IsNull()) return false;
|
| if (IsUndetectable()) return false; // Undetectable object is false.
|
| if (IsString()) return String::cast(this)->length() != 0;
|
| if (IsHeapNumber()) return HeapNumber::cast(this)->HeapNumberBooleanValue();
|
| @@ -628,7 +630,7 @@ MaybeHandle<Object> Object::InstanceOf(Isolate* isolate, Handle<Object> object,
|
| JSReceiver::GetMethod(Handle<JSReceiver>::cast(callable),
|
| isolate->factory()->has_instance_symbol()),
|
| Object);
|
| - if (!inst_of_handler->IsUndefined()) {
|
| + if (!inst_of_handler->IsUndefined(isolate)) {
|
| // Call the {inst_of_handler} on the {callable}.
|
| Handle<Object> result;
|
| ASSIGN_RETURN_ON_EXCEPTION(
|
| @@ -692,7 +694,7 @@ MaybeHandle<Object> Object::GetMethod(Handle<JSReceiver> receiver,
|
| Isolate* isolate = receiver->GetIsolate();
|
| ASSIGN_RETURN_ON_EXCEPTION(isolate, func,
|
| JSReceiver::GetProperty(receiver, name), Object);
|
| - if (func->IsNull() || func->IsUndefined()) {
|
| + if (func->IsNull() || func->IsUndefined(isolate)) {
|
| return isolate->factory()->undefined_value();
|
| }
|
| if (!func->IsCallable()) {
|
| @@ -887,7 +889,7 @@ MaybeHandle<Object> JSProxy::GetProperty(Isolate* isolate,
|
| isolate, trap,
|
| Object::GetMethod(Handle<JSReceiver>::cast(handler), trap_name), Object);
|
| // 7. If trap is undefined, then
|
| - if (trap->IsUndefined()) {
|
| + if (trap->IsUndefined(isolate)) {
|
| // 7.a Return target.[[Get]](P, Receiver).
|
| LookupIterator it =
|
| LookupIterator::PropertyOrElement(isolate, receiver, name, target);
|
| @@ -927,8 +929,8 @@ MaybeHandle<Object> JSProxy::GetProperty(Isolate* isolate,
|
| // 10.b.i. If trapResult is not undefined, throw a TypeError exception.
|
| inconsistent = PropertyDescriptor::IsAccessorDescriptor(&target_desc) &&
|
| !target_desc.configurable() &&
|
| - target_desc.get()->IsUndefined() &&
|
| - !trap_result->IsUndefined();
|
| + target_desc.get()->IsUndefined(isolate) &&
|
| + !trap_result->IsUndefined(isolate);
|
| if (inconsistent) {
|
| THROW_NEW_ERROR(
|
| isolate,
|
| @@ -1020,7 +1022,7 @@ Object* FunctionTemplateInfo::GetCompatibleReceiver(Isolate* isolate,
|
| if (!receiver->IsJSObject()) return isolate->heap()->null_value();
|
| Object* recv_type = this->signature();
|
| // No signature, return holder.
|
| - if (recv_type->IsUndefined()) return receiver;
|
| + if (recv_type->IsUndefined(isolate)) return receiver;
|
| FunctionTemplateInfo* signature = FunctionTemplateInfo::cast(recv_type);
|
| // Check the receiver.
|
| for (PrototypeIterator iter(isolate, JSObject::cast(receiver),
|
| @@ -1099,7 +1101,7 @@ MaybeHandle<Object> JSProxy::GetPrototype(Handle<JSProxy> proxy) {
|
| ASSIGN_RETURN_ON_EXCEPTION(isolate, trap, GetMethod(handler, trap_name),
|
| Object);
|
| // 6. If trap is undefined, then return target.[[GetPrototypeOf]]().
|
| - if (trap->IsUndefined()) {
|
| + if (trap->IsUndefined(isolate)) {
|
| return JSReceiver::GetPrototype(isolate, target);
|
| }
|
| // 7. Let handlerProto be ? Call(trap, handler, «target»).
|
| @@ -1446,10 +1448,12 @@ void JSObject::SetNormalizedProperty(Handle<JSObject> object,
|
|
|
| int entry = property_dictionary->FindEntry(name);
|
| if (entry == GlobalDictionary::kNotFound) {
|
| - auto cell = object->GetIsolate()->factory()->NewPropertyCell();
|
| + Isolate* isolate = object->GetIsolate();
|
| + auto cell = isolate->factory()->NewPropertyCell();
|
| cell->set_value(*value);
|
| - auto cell_type = value->IsUndefined() ? PropertyCellType::kUndefined
|
| - : PropertyCellType::kConstant;
|
| + auto cell_type = value->IsUndefined(isolate)
|
| + ? PropertyCellType::kUndefined
|
| + : PropertyCellType::kConstant;
|
| details = details.set_cell_type(cell_type);
|
| value = cell;
|
| property_dictionary =
|
| @@ -1688,7 +1692,7 @@ MaybeHandle<Object> Object::ArraySpeciesConstructor(
|
| }
|
| }
|
| }
|
| - if (constructor->IsUndefined()) {
|
| + if (constructor->IsUndefined(isolate)) {
|
| return default_species;
|
| } else {
|
| if (!constructor->IsConstructor()) {
|
| @@ -1988,9 +1992,9 @@ void String::PrintUC16(std::ostream& os, int start, int end) { // NOLINT
|
| void JSObject::JSObjectShortPrint(StringStream* accumulator) {
|
| switch (map()->instance_type()) {
|
| case JS_ARRAY_TYPE: {
|
| - double length = JSArray::cast(this)->length()->IsUndefined()
|
| - ? 0
|
| - : JSArray::cast(this)->length()->Number();
|
| + double length = JSArray::cast(this)->length()->IsUndefined(GetIsolate())
|
| + ? 0
|
| + : JSArray::cast(this)->length()->Number();
|
| accumulator->Add("<JS Array[%u]>", static_cast<uint32_t>(length));
|
| break;
|
| }
|
| @@ -2226,6 +2230,7 @@ void JSObject::PrintInstanceMigration(FILE* file,
|
|
|
| void HeapObject::HeapObjectShortPrint(std::ostream& os) { // NOLINT
|
| Heap* heap = GetHeap();
|
| + Isolate* isolate = heap->isolate();
|
| if (!heap->Contains(this)) {
|
| os << "!!!INVALID POINTER!!!";
|
| return;
|
| @@ -2311,9 +2316,9 @@ void HeapObject::HeapObjectShortPrint(std::ostream& os) { // NOLINT
|
| break;
|
| }
|
| case ODDBALL_TYPE: {
|
| - if (IsUndefined()) {
|
| + if (IsUndefined(isolate)) {
|
| os << "<undefined>";
|
| - } else if (IsTheHole()) {
|
| + } else if (IsTheHole(isolate)) {
|
| os << "<the hole>";
|
| } else if (IsNull()) {
|
| os << "<null>";
|
| @@ -2722,8 +2727,9 @@ void JSObject::AddSlowProperty(Handle<JSObject> object,
|
| } else {
|
| auto cell = isolate->factory()->NewPropertyCell();
|
| cell->set_value(*value);
|
| - auto cell_type = value->IsUndefined() ? PropertyCellType::kUndefined
|
| - : PropertyCellType::kConstant;
|
| + auto cell_type = value->IsUndefined(isolate)
|
| + ? PropertyCellType::kUndefined
|
| + : PropertyCellType::kConstant;
|
| details = details.set_cell_type(cell_type);
|
| value = cell;
|
|
|
| @@ -3192,7 +3198,7 @@ void JSObject::MigrateToMap(Handle<JSObject> object, Handle<Map> new_map,
|
| // Ensure that no transition was inserted for prototype migrations.
|
| DCHECK_EQ(
|
| 0, TransitionArray::NumberOfTransitions(old_map->raw_transitions()));
|
| - DCHECK(new_map->GetBackPointer()->IsUndefined());
|
| + DCHECK(new_map->GetBackPointer()->IsUndefined(new_map->GetIsolate()));
|
| }
|
| } else {
|
| MigrateFastToSlow(object, new_map, expected_additional_properties);
|
| @@ -3304,17 +3310,18 @@ static inline bool EqualImmutableValues(Object* obj1, Object* obj2) {
|
| // proper sharing of descriptor arrays.
|
| void Map::ReplaceDescriptors(DescriptorArray* new_descriptors,
|
| LayoutDescriptor* new_layout_descriptor) {
|
| + Isolate* isolate = GetIsolate();
|
| // Don't overwrite the empty descriptor array or initial map's descriptors.
|
| - if (NumberOfOwnDescriptors() == 0 || GetBackPointer()->IsUndefined()) {
|
| + if (NumberOfOwnDescriptors() == 0 || GetBackPointer()->IsUndefined(isolate)) {
|
| return;
|
| }
|
|
|
| DescriptorArray* to_replace = instance_descriptors();
|
| - GetHeap()->incremental_marking()->IterateBlackObject(to_replace);
|
| + isolate->heap()->incremental_marking()->IterateBlackObject(to_replace);
|
| Map* current = this;
|
| while (current->instance_descriptors() == to_replace) {
|
| Object* next = current->GetBackPointer();
|
| - if (next->IsUndefined()) break; // Stop overwriting at initial map.
|
| + if (next->IsUndefined(isolate)) break; // Stop overwriting at initial map.
|
| current->SetEnumLength(kInvalidEnumCacheSentinel);
|
| current->UpdateDescriptors(new_descriptors, new_layout_descriptor);
|
| current = Map::cast(next);
|
| @@ -3325,9 +3332,10 @@ void Map::ReplaceDescriptors(DescriptorArray* new_descriptors,
|
|
|
| Map* Map::FindRootMap() {
|
| Map* result = this;
|
| + Isolate* isolate = GetIsolate();
|
| while (true) {
|
| Object* back = result->GetBackPointer();
|
| - if (back->IsUndefined()) {
|
| + if (back->IsUndefined(isolate)) {
|
| // Initial map always owns descriptors and doesn't have unused entries
|
| // in the descriptor array.
|
| DCHECK(result->owns_descriptors());
|
| @@ -3385,9 +3393,10 @@ Map* Map::FindFieldOwner(int descriptor) {
|
| DisallowHeapAllocation no_allocation;
|
| DCHECK_EQ(DATA, instance_descriptors()->GetDetails(descriptor).type());
|
| Map* result = this;
|
| + Isolate* isolate = GetIsolate();
|
| while (true) {
|
| Object* back = result->GetBackPointer();
|
| - if (back->IsUndefined()) break;
|
| + if (back->IsUndefined(isolate)) break;
|
| Map* parent = Map::cast(back);
|
| if (parent->NumberOfOwnDescriptors() <= descriptor) break;
|
| result = parent;
|
| @@ -4204,7 +4213,7 @@ Maybe<bool> JSObject::SetPropertyWithInterceptor(LookupIterator* it,
|
|
|
| DCHECK_EQ(LookupIterator::INTERCEPTOR, it->state());
|
| Handle<InterceptorInfo> interceptor(it->GetInterceptor());
|
| - if (interceptor->setter()->IsUndefined()) return Just(false);
|
| + if (interceptor->setter()->IsUndefined(isolate)) return Just(false);
|
|
|
| Handle<JSObject> holder = it->GetHolder<JSObject>();
|
| bool result;
|
| @@ -4515,7 +4524,7 @@ Maybe<bool> Object::SetDataProperty(LookupIterator* it, Handle<Object> value) {
|
| Handle<Object> to_assign = value;
|
| // Convert the incoming value to a number for storing into typed arrays.
|
| if (it->IsElement() && receiver->HasFixedTypedArrayElements()) {
|
| - if (!value->IsNumber() && !value->IsUndefined()) {
|
| + if (!value->IsNumber() && !value->IsUndefined(it->isolate())) {
|
| ASSIGN_RETURN_ON_EXCEPTION_VALUE(
|
| it->isolate(), to_assign, Object::ToNumber(value), Nothing<bool>());
|
| // We have to recheck the length. However, it can only change if the
|
| @@ -4654,13 +4663,14 @@ void Map::EnsureDescriptorSlack(Handle<Map> map, int slack) {
|
| new_descriptors->CopyEnumCacheFrom(*descriptors);
|
| }
|
|
|
| + Isolate* isolate = map->GetIsolate();
|
| // Replace descriptors by new_descriptors in all maps that share it.
|
| - map->GetHeap()->incremental_marking()->IterateBlackObject(*descriptors);
|
| + isolate->heap()->incremental_marking()->IterateBlackObject(*descriptors);
|
|
|
| Map* current = *map;
|
| while (current->instance_descriptors() == *descriptors) {
|
| Object* next = current->GetBackPointer();
|
| - if (next->IsUndefined()) break; // Stop overwriting at initial map.
|
| + if (next->IsUndefined(isolate)) break; // Stop overwriting at initial map.
|
| current->UpdateDescriptors(*new_descriptors, layout_descriptor);
|
| current = Map::cast(next);
|
| }
|
| @@ -4918,7 +4928,7 @@ Handle<Map> Map::TransitionElementsTo(Handle<Map> map,
|
| }
|
| }
|
|
|
| - DCHECK(!map->IsUndefined());
|
| + DCHECK(!map->IsUndefined(isolate));
|
| // Check if we can go back in the elements kind transition chain.
|
| if (IsHoleyElementsKind(from_kind) &&
|
| to_kind == GetPackedElementsKind(from_kind) &&
|
| @@ -4992,7 +5002,7 @@ Maybe<bool> JSProxy::HasProperty(Isolate* isolate, Handle<JSProxy> proxy,
|
| isolate->factory()->has_string()),
|
| Nothing<bool>());
|
| // 7. If trap is undefined, then
|
| - if (trap->IsUndefined()) {
|
| + if (trap->IsUndefined(isolate)) {
|
| // 7a. Return target.[[HasProperty]](P).
|
| return JSReceiver::HasProperty(target, name);
|
| }
|
| @@ -5058,7 +5068,7 @@ Maybe<bool> JSProxy::SetProperty(Handle<JSProxy> proxy, Handle<Name> name,
|
| Handle<Object> trap;
|
| ASSIGN_RETURN_ON_EXCEPTION_VALUE(
|
| isolate, trap, Object::GetMethod(handler, trap_name), Nothing<bool>());
|
| - if (trap->IsUndefined()) {
|
| + if (trap->IsUndefined(isolate)) {
|
| LookupIterator it =
|
| LookupIterator::PropertyOrElement(isolate, receiver, name, target);
|
| return Object::SetSuperProperty(&it, value, language_mode,
|
| @@ -5094,7 +5104,7 @@ Maybe<bool> JSProxy::SetProperty(Handle<JSProxy> proxy, Handle<Name> name,
|
| }
|
| inconsistent = PropertyDescriptor::IsAccessorDescriptor(&target_desc) &&
|
| !target_desc.configurable() &&
|
| - target_desc.set()->IsUndefined();
|
| + target_desc.set()->IsUndefined(isolate);
|
| if (inconsistent) {
|
| isolate->Throw(*isolate->factory()->NewTypeError(
|
| MessageTemplate::kProxySetFrozenAccessor, name));
|
| @@ -5127,7 +5137,7 @@ Maybe<bool> JSProxy::DeletePropertyOrElement(Handle<JSProxy> proxy,
|
| Handle<Object> trap;
|
| ASSIGN_RETURN_ON_EXCEPTION_VALUE(
|
| isolate, trap, Object::GetMethod(handler, trap_name), Nothing<bool>());
|
| - if (trap->IsUndefined()) {
|
| + if (trap->IsUndefined(isolate)) {
|
| return JSReceiver::DeletePropertyOrElement(target, name, language_mode);
|
| }
|
|
|
| @@ -5476,7 +5486,7 @@ Maybe<bool> JSObject::DefineOwnPropertyIgnoreAttributes(
|
| MaybeHandle<Object> JSObject::SetOwnPropertyIgnoreAttributes(
|
| Handle<JSObject> object, Handle<Name> name, Handle<Object> value,
|
| PropertyAttributes attributes) {
|
| - DCHECK(!value->IsTheHole());
|
| + DCHECK(!value->IsTheHole(object->GetIsolate()));
|
| LookupIterator it(object, name, object, LookupIterator::OWN);
|
| return DefineOwnPropertyIgnoreAttributes(&it, value, attributes);
|
| }
|
| @@ -5521,7 +5531,7 @@ Maybe<PropertyAttributes> JSObject::GetPropertyAttributesWithInterceptor(
|
| }
|
| PropertyCallbackArguments args(isolate, interceptor->data(), *receiver,
|
| *holder, Object::DONT_THROW);
|
| - if (!interceptor->query()->IsUndefined()) {
|
| + if (!interceptor->query()->IsUndefined(isolate)) {
|
| Handle<Object> result;
|
| if (it->IsElement()) {
|
| uint32_t index = it->index();
|
| @@ -5541,7 +5551,7 @@ Maybe<PropertyAttributes> JSObject::GetPropertyAttributesWithInterceptor(
|
| CHECK(result->ToInt32(&value));
|
| return Just(static_cast<PropertyAttributes>(value));
|
| }
|
| - } else if (!interceptor->getter()->IsUndefined()) {
|
| + } else if (!interceptor->getter()->IsUndefined(isolate)) {
|
| // TODO(verwaest): Use GetPropertyWithInterceptor?
|
| Handle<Object> result;
|
| if (it->IsElement()) {
|
| @@ -5961,7 +5971,7 @@ Maybe<bool> JSObject::DeletePropertyWithInterceptor(LookupIterator* it,
|
|
|
| DCHECK_EQ(LookupIterator::INTERCEPTOR, it->state());
|
| Handle<InterceptorInfo> interceptor(it->GetInterceptor());
|
| - if (interceptor->deleter()->IsUndefined()) return Nothing<bool>();
|
| + if (interceptor->deleter()->IsUndefined(isolate)) return Nothing<bool>();
|
|
|
| Handle<JSObject> holder = it->GetHolder<JSObject>();
|
| Handle<Object> receiver = it->GetReceiver();
|
| @@ -6898,7 +6908,7 @@ Maybe<bool> JSProxy::DefineOwnProperty(Isolate* isolate, Handle<JSProxy> proxy,
|
| Object::GetMethod(Handle<JSReceiver>::cast(handler), trap_name),
|
| Nothing<bool>());
|
| // 7. If trap is undefined, then:
|
| - if (trap->IsUndefined()) {
|
| + if (trap->IsUndefined(isolate)) {
|
| // 7a. Return target.[[DefineOwnProperty]](P, Desc).
|
| return JSReceiver::DefineOwnProperty(isolate, target, key, desc,
|
| should_throw);
|
| @@ -7116,7 +7126,7 @@ Maybe<bool> JSProxy::GetOwnPropertyDescriptor(Isolate* isolate,
|
| Object::GetMethod(Handle<JSReceiver>::cast(handler), trap_name),
|
| Nothing<bool>());
|
| // 7. If trap is undefined, then
|
| - if (trap->IsUndefined()) {
|
| + if (trap->IsUndefined(isolate)) {
|
| // 7a. Return target.[[GetOwnProperty]](P).
|
| return JSReceiver::GetOwnPropertyDescriptor(isolate, target, name, desc);
|
| }
|
| @@ -7129,7 +7139,8 @@ Maybe<bool> JSProxy::GetOwnPropertyDescriptor(Isolate* isolate,
|
| Nothing<bool>());
|
| // 9. If Type(trapResultObj) is neither Object nor Undefined, throw a
|
| // TypeError exception.
|
| - if (!trap_result_obj->IsJSReceiver() && !trap_result_obj->IsUndefined()) {
|
| + if (!trap_result_obj->IsJSReceiver() &&
|
| + !trap_result_obj->IsUndefined(isolate)) {
|
| isolate->Throw(*isolate->factory()->NewTypeError(
|
| MessageTemplate::kProxyGetOwnPropertyDescriptorInvalid, name));
|
| return Nothing<bool>();
|
| @@ -7140,7 +7151,7 @@ Maybe<bool> JSProxy::GetOwnPropertyDescriptor(Isolate* isolate,
|
| JSReceiver::GetOwnPropertyDescriptor(isolate, target, name, &target_desc);
|
| MAYBE_RETURN(found, Nothing<bool>());
|
| // 11. If trapResultObj is undefined, then
|
| - if (trap_result_obj->IsUndefined()) {
|
| + if (trap_result_obj->IsUndefined(isolate)) {
|
| // 11a. If targetDesc is undefined, return undefined.
|
| if (!found.FromJust()) return Just(false);
|
| // 11b. If targetDesc.[[Configurable]] is false, throw a TypeError
|
| @@ -7205,19 +7216,20 @@ Maybe<bool> JSProxy::GetOwnPropertyDescriptor(Isolate* isolate,
|
| bool JSObject::ReferencesObjectFromElements(FixedArray* elements,
|
| ElementsKind kind,
|
| Object* object) {
|
| + Isolate* isolate = elements->GetIsolate();
|
| if (IsFastObjectElementsKind(kind) || kind == FAST_STRING_WRAPPER_ELEMENTS) {
|
| int length = IsJSArray()
|
| ? Smi::cast(JSArray::cast(this)->length())->value()
|
| : elements->length();
|
| for (int i = 0; i < length; ++i) {
|
| Object* element = elements->get(i);
|
| - if (!element->IsTheHole() && element == object) return true;
|
| + if (!element->IsTheHole(isolate) && element == object) return true;
|
| }
|
| } else {
|
| DCHECK(kind == DICTIONARY_ELEMENTS || kind == SLOW_STRING_WRAPPER_ELEMENTS);
|
| Object* key =
|
| SeededNumberDictionary::cast(elements)->SlowReverseLookup(object);
|
| - if (!key->IsUndefined()) return true;
|
| + if (!key->IsUndefined(isolate)) return true;
|
| }
|
| return false;
|
| }
|
| @@ -7241,7 +7253,7 @@ bool JSObject::ReferencesObject(Object* obj) {
|
|
|
| // Check if the object is among the named properties.
|
| Object* key = SlowReverseLookup(obj);
|
| - if (!key->IsUndefined()) {
|
| + if (!key->IsUndefined(heap->isolate())) {
|
| return true;
|
| }
|
|
|
| @@ -7279,7 +7291,7 @@ bool JSObject::ReferencesObject(Object* obj) {
|
| int length = parameter_map->length();
|
| for (int i = 2; i < length; ++i) {
|
| Object* value = parameter_map->get(i);
|
| - if (!value->IsTheHole() && value == obj) return true;
|
| + if (!value->IsTheHole(heap->isolate()) && value == obj) return true;
|
| }
|
| // Check the arguments.
|
| FixedArray* arguments = FixedArray::cast(parameter_map->get(1));
|
| @@ -7466,7 +7478,7 @@ Maybe<bool> JSProxy::PreventExtensions(Handle<JSProxy> proxy,
|
| Handle<Object> trap;
|
| ASSIGN_RETURN_ON_EXCEPTION_VALUE(
|
| isolate, trap, Object::GetMethod(handler, trap_name), Nothing<bool>());
|
| - if (trap->IsUndefined()) {
|
| + if (trap->IsUndefined(isolate)) {
|
| return JSReceiver::PreventExtensions(target, should_throw);
|
| }
|
|
|
| @@ -7568,7 +7580,7 @@ Maybe<bool> JSProxy::IsExtensible(Handle<JSProxy> proxy) {
|
| Handle<Object> trap;
|
| ASSIGN_RETURN_ON_EXCEPTION_VALUE(
|
| isolate, trap, Object::GetMethod(handler, trap_name), Nothing<bool>());
|
| - if (trap->IsUndefined()) {
|
| + if (trap->IsUndefined(isolate)) {
|
| return JSReceiver::IsExtensible(target);
|
| }
|
|
|
| @@ -8020,7 +8032,7 @@ MaybeHandle<Object> JSReceiver::ToPrimitive(Handle<JSReceiver> receiver,
|
| ASSIGN_RETURN_ON_EXCEPTION(
|
| isolate, exotic_to_prim,
|
| GetMethod(receiver, isolate->factory()->to_primitive_symbol()), Object);
|
| - if (!exotic_to_prim->IsUndefined()) {
|
| + if (!exotic_to_prim->IsUndefined(isolate)) {
|
| Handle<Object> hint_string;
|
| switch (hint) {
|
| case ToPrimitiveHint::kDefault:
|
| @@ -8398,10 +8410,10 @@ MaybeHandle<Object> JSObject::DefineAccessor(LookupIterator* it,
|
| return it->factory()->undefined_value();
|
| }
|
|
|
| - DCHECK(getter->IsCallable() || getter->IsUndefined() || getter->IsNull() ||
|
| - getter->IsFunctionTemplateInfo());
|
| - DCHECK(setter->IsCallable() || setter->IsUndefined() || setter->IsNull() ||
|
| - getter->IsFunctionTemplateInfo());
|
| + DCHECK(getter->IsCallable() || getter->IsUndefined(isolate) ||
|
| + getter->IsNull() || getter->IsFunctionTemplateInfo());
|
| + DCHECK(setter->IsCallable() || setter->IsUndefined(isolate) ||
|
| + setter->IsNull() || getter->IsFunctionTemplateInfo());
|
| it->TransitionToAccessorProperty(getter, setter, attributes);
|
|
|
| return isolate->factory()->undefined_value();
|
| @@ -8519,7 +8531,8 @@ Handle<Map> Map::Normalize(Handle<Map> fast_map, PropertyNormalizationMode mode,
|
| Isolate* isolate = fast_map->GetIsolate();
|
| Handle<Object> maybe_cache(isolate->native_context()->normalized_map_cache(),
|
| isolate);
|
| - bool use_cache = !fast_map->is_prototype_map() && !maybe_cache->IsUndefined();
|
| + bool use_cache =
|
| + !fast_map->is_prototype_map() && !maybe_cache->IsUndefined(isolate);
|
| Handle<NormalizedMapCache> cache;
|
| if (use_cache) cache = Handle<NormalizedMapCache>::cast(maybe_cache);
|
|
|
| @@ -8730,7 +8743,7 @@ void Map::TraceAllTransitions(Map* map) {
|
|
|
| void Map::ConnectTransition(Handle<Map> parent, Handle<Map> child,
|
| Handle<Name> name, SimpleTransitionFlag flag) {
|
| - if (!parent->GetBackPointer()->IsUndefined()) {
|
| + if (!parent->GetBackPointer()->IsUndefined(parent->GetIsolate())) {
|
| parent->set_owns_descriptors(false);
|
| } else {
|
| // |parent| is initial map and it must keep the ownership, there must be no
|
| @@ -9317,7 +9330,7 @@ Handle<Map> Map::CopyAddDescriptor(Handle<Map> map,
|
|
|
| // Share descriptors only if map owns descriptors and it not an initial map.
|
| if (flag == INSERT_TRANSITION && map->owns_descriptors() &&
|
| - !map->GetBackPointer()->IsUndefined() &&
|
| + !map->GetBackPointer()->IsUndefined(map->GetIsolate()) &&
|
| TransitionArray::CanHaveMoreTransitions(map)) {
|
| return ShareDescriptor(map, descriptors, descriptor);
|
| }
|
| @@ -10213,7 +10226,9 @@ MaybeHandle<String> Name::ToFunctionName(Handle<Name> name) {
|
| // ES6 section 9.2.11 SetFunctionName, step 4.
|
| Isolate* const isolate = name->GetIsolate();
|
| Handle<Object> description(Handle<Symbol>::cast(name)->name(), isolate);
|
| - if (description->IsUndefined()) return isolate->factory()->empty_string();
|
| + if (description->IsUndefined(isolate)) {
|
| + return isolate->factory()->empty_string();
|
| + }
|
| IncrementalStringBuilder builder(isolate);
|
| builder.AppendCharacter('[');
|
| builder.AppendString(Handle<String>::cast(description));
|
| @@ -11770,7 +11785,7 @@ static void StopSlackTracking(Map* map, void* data) {
|
|
|
| void Map::CompleteInobjectSlackTracking() {
|
| // Has to be an initial map.
|
| - DCHECK(GetBackPointer()->IsUndefined());
|
| + DCHECK(GetBackPointer()->IsUndefined(GetIsolate()));
|
|
|
| int slack = unused_property_fields();
|
| TransitionArray::TraverseTransitionTree(this, &GetMinInobjectSlack, &slack);
|
| @@ -12582,7 +12597,7 @@ int Script::GetEvalPosition() {
|
| // Due to laziness, the position may not have been translated from code
|
| // offset yet, which would be encoded as negative integer. In that case,
|
| // translate and set the position.
|
| - if (eval_from_shared()->IsUndefined()) {
|
| + if (eval_from_shared()->IsUndefined(GetIsolate())) {
|
| position = 0;
|
| } else {
|
| SharedFunctionInfo* shared = SharedFunctionInfo::cast(eval_from_shared());
|
| @@ -12595,12 +12610,11 @@ int Script::GetEvalPosition() {
|
| }
|
|
|
| void Script::InitLineEnds(Handle<Script> script) {
|
| - if (!script->line_ends()->IsUndefined()) return;
|
| -
|
| Isolate* isolate = script->GetIsolate();
|
| + if (!script->line_ends()->IsUndefined(isolate)) return;
|
|
|
| if (!script->source()->IsString()) {
|
| - DCHECK(script->source()->IsUndefined());
|
| + DCHECK(script->source()->IsUndefined(isolate));
|
| Handle<FixedArray> empty = isolate->factory()->NewFixedArray(0);
|
| script->set_line_ends(*empty);
|
| DCHECK(script->line_ends()->IsFixedArray());
|
| @@ -12717,7 +12731,9 @@ int Script::GetLineNumber(Handle<Script> script, int code_pos) {
|
|
|
| int Script::GetLineNumber(int code_pos) {
|
| DisallowHeapAllocation no_allocation;
|
| - if (!line_ends()->IsUndefined()) return GetLineNumberWithArray(code_pos);
|
| + if (!line_ends()->IsUndefined(GetIsolate())) {
|
| + return GetLineNumberWithArray(code_pos);
|
| + }
|
|
|
| // Slow mode: we do not have line_ends. We have to iterate through source.
|
| if (!source()->IsString()) return -1;
|
| @@ -12756,7 +12772,7 @@ Handle<Object> Script::GetNameOrSourceURL(Handle<Script> script) {
|
|
|
| Handle<JSObject> Script::GetWrapper(Handle<Script> script) {
|
| Isolate* isolate = script->GetIsolate();
|
| - if (!script->wrapper()->IsUndefined()) {
|
| + if (!script->wrapper()->IsUndefined(isolate)) {
|
| DCHECK(script->wrapper()->IsWeakCell());
|
| Handle<WeakCell> cell(WeakCell::cast(script->wrapper()));
|
| if (!cell->cleared()) {
|
| @@ -12921,8 +12937,9 @@ bool SharedFunctionInfo::PassesFilter(const char* raw_filter) {
|
| }
|
|
|
| bool SharedFunctionInfo::HasSourceCode() const {
|
| - return !script()->IsUndefined() &&
|
| - !reinterpret_cast<Script*>(script())->source()->IsUndefined();
|
| + Isolate* isolate = GetIsolate();
|
| + return !script()->IsUndefined(isolate) &&
|
| + !reinterpret_cast<Script*>(script())->source()->IsUndefined(isolate);
|
| }
|
|
|
|
|
| @@ -14249,7 +14266,7 @@ void Code::Disassemble(const char* name, std::ostream& os) { // NOLINT
|
| os << "\n";
|
| }
|
| #ifdef OBJECT_PRINT
|
| - if (!type_feedback_info()->IsUndefined()) {
|
| + if (!type_feedback_info()->IsUndefined(GetIsolate())) {
|
| TypeFeedbackInfo::cast(type_feedback_info())->TypeFeedbackInfoPrint(os);
|
| os << "\n";
|
| }
|
| @@ -14721,7 +14738,7 @@ Maybe<bool> JSProxy::SetPrototype(Handle<JSProxy> proxy, Handle<Object> value,
|
| Object::GetMethod(Handle<JSReceiver>::cast(handler), trap_name),
|
| Nothing<bool>());
|
| // 7. If trap is undefined, then return target.[[SetPrototypeOf]]().
|
| - if (trap->IsUndefined()) {
|
| + if (trap->IsUndefined(isolate)) {
|
| return JSReceiver::SetPrototype(target, value, from_javascript,
|
| should_throw);
|
| }
|
| @@ -15369,7 +15386,7 @@ MaybeHandle<Object> JSObject::GetPropertyWithInterceptor(LookupIterator* it,
|
|
|
| DCHECK_EQ(LookupIterator::INTERCEPTOR, it->state());
|
| Handle<InterceptorInfo> interceptor = it->GetInterceptor();
|
| - if (interceptor->getter()->IsUndefined()) {
|
| + if (interceptor->getter()->IsUndefined(isolate)) {
|
| return isolate->factory()->undefined_value();
|
| }
|
|
|
| @@ -15628,7 +15645,7 @@ const char* Symbol::PrivateSymbolToName() const {
|
|
|
| void Symbol::SymbolShortPrint(std::ostream& os) {
|
| os << "<Symbol:";
|
| - if (!name()->IsUndefined()) {
|
| + if (!name()->IsUndefined(GetIsolate())) {
|
| os << " ";
|
| HeapStringAllocator allocator;
|
| StringStream accumulator(&allocator);
|
| @@ -16065,13 +16082,13 @@ int NameDictionaryBase<Derived, Shape>::FindEntry(Handle<Name> key) {
|
| uint32_t capacity = this->Capacity();
|
| uint32_t entry = Derived::FirstProbe(key->Hash(), capacity);
|
| uint32_t count = 1;
|
| -
|
| + Isolate* isolate = this->GetIsolate();
|
| while (true) {
|
| int index = Derived::EntryToIndex(entry);
|
| Object* element = this->get(index);
|
| - if (element->IsUndefined()) break; // Empty entry.
|
| + if (element->IsUndefined(isolate)) break; // Empty entry.
|
| if (*key == element) return entry;
|
| - DCHECK(element->IsTheHole() || element->IsUniqueName());
|
| + DCHECK(element->IsTheHole(isolate) || element->IsUniqueName());
|
| entry = Derived::NextProbe(entry, count++, capacity);
|
| }
|
| return Derived::kNotFound;
|
| @@ -16491,7 +16508,7 @@ Handle<Object> JSObject::PrepareSlowElementsForSort(
|
|
|
| uint32_t key = NumberToUint32(k);
|
| if (key < limit) {
|
| - if (value->IsUndefined()) {
|
| + if (value->IsUndefined(isolate)) {
|
| undefs++;
|
| } else if (pos > static_cast<uint32_t>(Smi::kMaxValue)) {
|
| // Adding an entry with the key beyond smi-range requires
|
| @@ -16641,10 +16658,10 @@ Handle<Object> JSObject::PrepareElementsForSort(Handle<JSObject> object,
|
| // number of stores of non-undefined, non-the-hole values.
|
| for (unsigned int i = 0; i < undefs; i++) {
|
| Object* current = elements->get(i);
|
| - if (current->IsTheHole()) {
|
| + if (current->IsTheHole(isolate)) {
|
| holes--;
|
| undefs--;
|
| - } else if (current->IsUndefined()) {
|
| + } else if (current->IsUndefined(isolate)) {
|
| undefs--;
|
| } else {
|
| continue;
|
| @@ -16652,10 +16669,10 @@ Handle<Object> JSObject::PrepareElementsForSort(Handle<JSObject> object,
|
| // Position i needs to be filled.
|
| while (undefs > i) {
|
| current = elements->get(undefs);
|
| - if (current->IsTheHole()) {
|
| + if (current->IsTheHole(isolate)) {
|
| holes--;
|
| undefs--;
|
| - } else if (current->IsUndefined()) {
|
| + } else if (current->IsUndefined(isolate)) {
|
| undefs--;
|
| } else {
|
| elements->set(i, current, write_barrier);
|
| @@ -16723,8 +16740,9 @@ void JSGlobalObject::InvalidatePropertyCell(Handle<JSGlobalObject> global,
|
| // TODO(ishell): rename to EnsureEmptyPropertyCell or something.
|
| Handle<PropertyCell> JSGlobalObject::EnsurePropertyCell(
|
| Handle<JSGlobalObject> global, Handle<Name> name) {
|
| + Isolate* isolate = global->GetIsolate();
|
| DCHECK(!global->HasFastProperties());
|
| - auto dictionary = handle(global->global_dictionary());
|
| + auto dictionary = handle(global->global_dictionary(), isolate);
|
| int entry = dictionary->FindEntry(name);
|
| Handle<PropertyCell> cell;
|
| if (entry != GlobalDictionary::kNotFound) {
|
| @@ -16735,10 +16753,9 @@ Handle<PropertyCell> JSGlobalObject::EnsurePropertyCell(
|
| PropertyCellType::kUninitialized ||
|
| cell->property_details().cell_type() ==
|
| PropertyCellType::kInvalidated);
|
| - DCHECK(cell->value()->IsTheHole());
|
| + DCHECK(cell->value()->IsTheHole(isolate));
|
| return cell;
|
| }
|
| - Isolate* isolate = global->GetIsolate();
|
| cell = isolate->factory()->NewPropertyCell();
|
| PropertyDetails details(NONE, DATA, 0, PropertyCellType::kUninitialized);
|
| dictionary = GlobalDictionary::Add(dictionary, name, cell, details);
|
| @@ -17522,7 +17539,7 @@ Object* ObjectHashTable::Lookup(Handle<Object> key) {
|
|
|
| // If the object does not have an identity hash, it was never used as a key.
|
| Object* hash = key->GetHash();
|
| - if (hash->IsUndefined()) {
|
| + if (hash->IsUndefined(isolate)) {
|
| return isolate->heap()->the_hole_value();
|
| }
|
| return Lookup(isolate, key, Smi::cast(hash)->value());
|
| @@ -17537,10 +17554,11 @@ Object* ObjectHashTable::Lookup(Handle<Object> key, int32_t hash) {
|
| Handle<ObjectHashTable> ObjectHashTable::Put(Handle<ObjectHashTable> table,
|
| Handle<Object> key,
|
| Handle<Object> value) {
|
| + Isolate* isolate = table->GetIsolate();
|
| +
|
| DCHECK(table->IsKey(*key));
|
| - DCHECK(!value->IsTheHole());
|
| + DCHECK(!value->IsTheHole(isolate));
|
|
|
| - Isolate* isolate = table->GetIsolate();
|
| // Make sure the key object has an identity hash code.
|
| int32_t hash = Object::GetOrCreateHash(isolate, key)->value();
|
|
|
| @@ -17552,11 +17570,11 @@ Handle<ObjectHashTable> ObjectHashTable::Put(Handle<ObjectHashTable> table,
|
| Handle<Object> key,
|
| Handle<Object> value,
|
| int32_t hash) {
|
| - DCHECK(table->IsKey(*key));
|
| - DCHECK(!value->IsTheHole());
|
| -
|
| Isolate* isolate = table->GetIsolate();
|
|
|
| + DCHECK(table->IsKey(*key));
|
| + DCHECK(!value->IsTheHole(isolate));
|
| +
|
| int entry = table->FindEntry(isolate, key, hash);
|
|
|
| // Key is already in table, just overwrite value.
|
| @@ -17584,7 +17602,7 @@ Handle<ObjectHashTable> ObjectHashTable::Remove(Handle<ObjectHashTable> table,
|
| DCHECK(table->IsKey(*key));
|
|
|
| Object* hash = key->GetHash();
|
| - if (hash->IsUndefined()) {
|
| + if (hash->IsUndefined(table->GetIsolate())) {
|
| *was_present = false;
|
| return table;
|
| }
|
| @@ -17922,7 +17940,8 @@ void OrderedHashTableIterator<Derived, TableType>::Transition() {
|
| template<class Derived, class TableType>
|
| bool OrderedHashTableIterator<Derived, TableType>::HasMore() {
|
| DisallowHeapAllocation no_allocation;
|
| - if (this->table()->IsUndefined()) return false;
|
| + Isolate* isolate = this->GetIsolate();
|
| + if (this->table()->IsUndefined(isolate)) return false;
|
|
|
| Transition();
|
|
|
| @@ -17930,7 +17949,7 @@ bool OrderedHashTableIterator<Derived, TableType>::HasMore() {
|
| int index = Smi::cast(this->index())->value();
|
| int used_capacity = table->UsedCapacity();
|
|
|
| - while (index < used_capacity && table->KeyAt(index)->IsTheHole()) {
|
| + while (index < used_capacity && table->KeyAt(index)->IsTheHole(isolate)) {
|
| index++;
|
| }
|
|
|
| @@ -17938,7 +17957,7 @@ bool OrderedHashTableIterator<Derived, TableType>::HasMore() {
|
|
|
| if (index < used_capacity) return true;
|
|
|
| - set_table(GetHeap()->undefined_value());
|
| + set_table(isolate->heap()->undefined_value());
|
| return false;
|
| }
|
|
|
| @@ -18064,7 +18083,7 @@ bool DebugInfo::HasBreakPoint(int code_offset) {
|
|
|
| // If there is no break point info object or no break points in the break
|
| // point info object there is no break point at this code offset.
|
| - if (break_point_info->IsUndefined()) return false;
|
| + if (break_point_info->IsUndefined(GetIsolate())) return false;
|
| return BreakPointInfo::cast(break_point_info)->GetBreakPointCount() > 0;
|
| }
|
|
|
| @@ -18081,9 +18100,10 @@ Object* DebugInfo::GetBreakPointInfo(int code_offset) {
|
| // Clear a break point at the specified code offset.
|
| void DebugInfo::ClearBreakPoint(Handle<DebugInfo> debug_info, int code_offset,
|
| Handle<Object> break_point_object) {
|
| + Isolate* isolate = debug_info->GetIsolate();
|
| Handle<Object> break_point_info(debug_info->GetBreakPointInfo(code_offset),
|
| - debug_info->GetIsolate());
|
| - if (break_point_info->IsUndefined()) return;
|
| + isolate);
|
| + if (break_point_info->IsUndefined(isolate)) return;
|
| BreakPointInfo::ClearBreakPoint(
|
| Handle<BreakPointInfo>::cast(break_point_info),
|
| break_point_object);
|
| @@ -18095,7 +18115,7 @@ void DebugInfo::SetBreakPoint(Handle<DebugInfo> debug_info, int code_offset,
|
| Isolate* isolate = debug_info->GetIsolate();
|
| Handle<Object> break_point_info(debug_info->GetBreakPointInfo(code_offset),
|
| isolate);
|
| - if (!break_point_info->IsUndefined()) {
|
| + if (!break_point_info->IsUndefined(isolate)) {
|
| BreakPointInfo::SetBreakPoint(
|
| Handle<BreakPointInfo>::cast(break_point_info),
|
| break_point_object);
|
| @@ -18106,15 +18126,15 @@ void DebugInfo::SetBreakPoint(Handle<DebugInfo> debug_info, int code_offset,
|
| // break points before. Try to find a free slot.
|
| int index = kNoBreakPointInfo;
|
| for (int i = 0; i < debug_info->break_points()->length(); i++) {
|
| - if (debug_info->break_points()->get(i)->IsUndefined()) {
|
| + if (debug_info->break_points()->get(i)->IsUndefined(isolate)) {
|
| index = i;
|
| break;
|
| }
|
| }
|
| if (index == kNoBreakPointInfo) {
|
| // No free slot - extend break point info array.
|
| - Handle<FixedArray> old_break_points =
|
| - Handle<FixedArray>(FixedArray::cast(debug_info->break_points()));
|
| + Handle<FixedArray> old_break_points = Handle<FixedArray>(
|
| + FixedArray::cast(debug_info->break_points()), isolate);
|
| Handle<FixedArray> new_break_points =
|
| isolate->factory()->NewFixedArray(
|
| old_break_points->length() +
|
| @@ -18143,21 +18163,22 @@ void DebugInfo::SetBreakPoint(Handle<DebugInfo> debug_info, int code_offset,
|
| // Get the break point objects for a code offset.
|
| Handle<Object> DebugInfo::GetBreakPointObjects(int code_offset) {
|
| Object* break_point_info = GetBreakPointInfo(code_offset);
|
| - if (break_point_info->IsUndefined()) {
|
| - return GetIsolate()->factory()->undefined_value();
|
| + Isolate* isolate = GetIsolate();
|
| + if (break_point_info->IsUndefined(isolate)) {
|
| + return isolate->factory()->undefined_value();
|
| }
|
| return Handle<Object>(
|
| - BreakPointInfo::cast(break_point_info)->break_point_objects(),
|
| - GetIsolate());
|
| + BreakPointInfo::cast(break_point_info)->break_point_objects(), isolate);
|
| }
|
|
|
|
|
| // Get the total number of break points.
|
| int DebugInfo::GetBreakPointCount() {
|
| - if (break_points()->IsUndefined()) return 0;
|
| + Isolate* isolate = GetIsolate();
|
| + if (break_points()->IsUndefined(isolate)) return 0;
|
| int count = 0;
|
| for (int i = 0; i < break_points()->length(); i++) {
|
| - if (!break_points()->get(i)->IsUndefined()) {
|
| + if (!break_points()->get(i)->IsUndefined(isolate)) {
|
| BreakPointInfo* break_point_info =
|
| BreakPointInfo::cast(break_points()->get(i));
|
| count += break_point_info->GetBreakPointCount();
|
| @@ -18170,9 +18191,9 @@ int DebugInfo::GetBreakPointCount() {
|
| Handle<Object> DebugInfo::FindBreakPointInfo(
|
| Handle<DebugInfo> debug_info, Handle<Object> break_point_object) {
|
| Isolate* isolate = debug_info->GetIsolate();
|
| - if (!debug_info->break_points()->IsUndefined()) {
|
| + if (!debug_info->break_points()->IsUndefined(isolate)) {
|
| for (int i = 0; i < debug_info->break_points()->length(); i++) {
|
| - if (!debug_info->break_points()->get(i)->IsUndefined()) {
|
| + if (!debug_info->break_points()->get(i)->IsUndefined(isolate)) {
|
| Handle<BreakPointInfo> break_point_info = Handle<BreakPointInfo>(
|
| BreakPointInfo::cast(debug_info->break_points()->get(i)), isolate);
|
| if (BreakPointInfo::HasBreakPointObject(break_point_info,
|
| @@ -18189,9 +18210,10 @@ Handle<Object> DebugInfo::FindBreakPointInfo(
|
| // Find the index of the break point info object for the specified code
|
| // position.
|
| int DebugInfo::GetBreakPointInfoIndex(int code_offset) {
|
| - if (break_points()->IsUndefined()) return kNoBreakPointInfo;
|
| + Isolate* isolate = GetIsolate();
|
| + if (break_points()->IsUndefined(isolate)) return kNoBreakPointInfo;
|
| for (int i = 0; i < break_points()->length(); i++) {
|
| - if (!break_points()->get(i)->IsUndefined()) {
|
| + if (!break_points()->get(i)->IsUndefined(isolate)) {
|
| BreakPointInfo* break_point_info =
|
| BreakPointInfo::cast(break_points()->get(i));
|
| if (break_point_info->code_offset() == code_offset) {
|
| @@ -18208,7 +18230,7 @@ void BreakPointInfo::ClearBreakPoint(Handle<BreakPointInfo> break_point_info,
|
| Handle<Object> break_point_object) {
|
| Isolate* isolate = break_point_info->GetIsolate();
|
| // If there are no break points just ignore.
|
| - if (break_point_info->break_point_objects()->IsUndefined()) return;
|
| + if (break_point_info->break_point_objects()->IsUndefined(isolate)) return;
|
| // If there is a single break point clear it if it is the same.
|
| if (!break_point_info->break_point_objects()->IsFixedArray()) {
|
| if (break_point_info->break_point_objects() == *break_point_object) {
|
| @@ -18244,7 +18266,7 @@ void BreakPointInfo::SetBreakPoint(Handle<BreakPointInfo> break_point_info,
|
| Isolate* isolate = break_point_info->GetIsolate();
|
|
|
| // If there was no break point objects before just set it.
|
| - if (break_point_info->break_point_objects()->IsUndefined()) {
|
| + if (break_point_info->break_point_objects()->IsUndefined(isolate)) {
|
| break_point_info->set_break_point_objects(*break_point_object);
|
| return;
|
| }
|
| @@ -18279,7 +18301,10 @@ bool BreakPointInfo::HasBreakPointObject(
|
| Handle<BreakPointInfo> break_point_info,
|
| Handle<Object> break_point_object) {
|
| // No break point.
|
| - if (break_point_info->break_point_objects()->IsUndefined()) return false;
|
| + Isolate* isolate = break_point_info->GetIsolate();
|
| + if (break_point_info->break_point_objects()->IsUndefined(isolate)) {
|
| + return false;
|
| + }
|
| // Single break point.
|
| if (!break_point_info->break_point_objects()->IsFixedArray()) {
|
| return break_point_info->break_point_objects() == *break_point_object;
|
| @@ -18298,7 +18323,7 @@ bool BreakPointInfo::HasBreakPointObject(
|
| // Get the number of break points.
|
| int BreakPointInfo::GetBreakPointCount() {
|
| // No break point.
|
| - if (break_point_objects()->IsUndefined()) return 0;
|
| + if (break_point_objects()->IsUndefined(GetIsolate())) return 0;
|
| // Single break point.
|
| if (!break_point_objects()->IsFixedArray()) return 1;
|
| // Multiple break points.
|
| @@ -18625,7 +18650,7 @@ Handle<PropertyCell> PropertyCell::InvalidateEntry(
|
| auto new_cell = isolate->factory()->NewPropertyCell();
|
| new_cell->set_value(cell->value());
|
| dictionary->ValueAtPut(entry, *new_cell);
|
| - bool is_the_hole = cell->value()->IsTheHole();
|
| + bool is_the_hole = cell->value()->IsTheHole(isolate);
|
| // Cell is officially mutable henceforth.
|
| PropertyDetails details = cell->property_details();
|
| details = details.set_cell_type(is_the_hole ? PropertyCellType::kInvalidated
|
| @@ -18669,12 +18694,13 @@ PropertyCellType PropertyCell::UpdatedType(Handle<PropertyCell> cell,
|
| Handle<Object> value,
|
| PropertyDetails details) {
|
| PropertyCellType type = details.cell_type();
|
| - DCHECK(!value->IsTheHole());
|
| - if (cell->value()->IsTheHole()) {
|
| + Isolate* isolate = cell->GetIsolate();
|
| + DCHECK(!value->IsTheHole(isolate));
|
| + if (cell->value()->IsTheHole(isolate)) {
|
| switch (type) {
|
| // Only allow a cell to transition once into constant state.
|
| case PropertyCellType::kUninitialized:
|
| - if (value->IsUndefined()) return PropertyCellType::kUndefined;
|
| + if (value->IsUndefined(isolate)) return PropertyCellType::kUndefined;
|
| return PropertyCellType::kConstant;
|
| case PropertyCellType::kInvalidated:
|
| return PropertyCellType::kMutable;
|
| @@ -18704,7 +18730,8 @@ PropertyCellType PropertyCell::UpdatedType(Handle<PropertyCell> cell,
|
|
|
| void PropertyCell::UpdateCell(Handle<GlobalDictionary> dictionary, int entry,
|
| Handle<Object> value, PropertyDetails details) {
|
| - DCHECK(!value->IsTheHole());
|
| + Isolate* isolate = dictionary->GetIsolate();
|
| + DCHECK(!value->IsTheHole(isolate));
|
| DCHECK(dictionary->ValueAt(entry)->IsPropertyCell());
|
| Handle<PropertyCell> cell(PropertyCell::cast(dictionary->ValueAt(entry)));
|
| const PropertyDetails original_details = cell->property_details();
|
| @@ -18715,7 +18742,7 @@ void PropertyCell::UpdateCell(Handle<GlobalDictionary> dictionary, int entry,
|
| PropertyCellType old_type = original_details.cell_type();
|
| // Preserve the enumeration index unless the property was deleted or never
|
| // initialized.
|
| - if (cell->value()->IsTheHole()) {
|
| + if (cell->value()->IsTheHole(isolate)) {
|
| index = dictionary->NextEnumerationIndex();
|
| dictionary->SetNextEnumerationIndex(index + 1);
|
| // Negative lookup cells must be invalidated.
|
| @@ -18735,7 +18762,6 @@ void PropertyCell::UpdateCell(Handle<GlobalDictionary> dictionary, int entry,
|
| // Deopt when transitioning from a constant type.
|
| if (!invalidate && (old_type != new_type ||
|
| original_details.IsReadOnly() != details.IsReadOnly())) {
|
| - Isolate* isolate = dictionary->GetIsolate();
|
| cell->dependent_code()->DeoptimizeDependentCodeGroup(
|
| isolate, DependentCode::kPropertyCellChangedGroup);
|
| }
|
|
|