| Index: src/objects.cc
|
| diff --git a/src/objects.cc b/src/objects.cc
|
| index 79dda37866f3e452ed6d1a33862e8375d5fe68b5..b626e447b75a48cdccb0398b98ebd512610e1157 100644
|
| --- a/src/objects.cc
|
| +++ b/src/objects.cc
|
| @@ -4829,11 +4829,9 @@ Handle<Map> Map::TransitionElementsTo(Handle<Map> map,
|
| } else if (IsFastElementsKind(from_kind) && IsFastElementsKind(to_kind)) {
|
| // Reuse map transitions for JSArrays.
|
| DisallowHeapAllocation no_gc;
|
| - Strength strength = map->is_strong() ? Strength::STRONG : Strength::WEAK;
|
| - if (native_context->get(Context::ArrayMapIndex(from_kind, strength)) ==
|
| - *map) {
|
| + if (native_context->get(Context::ArrayMapIndex(from_kind)) == *map) {
|
| Object* maybe_transitioned_map =
|
| - native_context->get(Context::ArrayMapIndex(to_kind, strength));
|
| + native_context->get(Context::ArrayMapIndex(to_kind));
|
| if (maybe_transitioned_map->IsMap()) {
|
| return handle(Map::cast(maybe_transitioned_map), isolate);
|
| }
|
| @@ -6203,15 +6201,12 @@ Maybe<bool> JSReceiver::DeleteProperty(LookupIterator* it,
|
| }
|
| // Fall through.
|
| case LookupIterator::ACCESSOR: {
|
| - if (!it->IsConfigurable() || receiver->map()->is_strong()) {
|
| - // Fail if the property is not configurable, or on a strong object.
|
| + if (!it->IsConfigurable()) {
|
| + // Fail if the property is not configurable.
|
| if (is_strict(language_mode)) {
|
| - MessageTemplate::Template templ =
|
| - receiver->map()->is_strong()
|
| - ? MessageTemplate::kStrongDeleteProperty
|
| - : MessageTemplate::kStrictDeleteProperty;
|
| isolate->Throw(*isolate->factory()->NewTypeError(
|
| - templ, it->GetName(), receiver));
|
| + MessageTemplate::kStrictDeleteProperty, it->GetName(),
|
| + receiver));
|
| return Nothing<bool>();
|
| }
|
| return Just(false);
|
| @@ -6631,14 +6626,6 @@ Maybe<bool> JSReceiver::ValidateAndApplyPropertyDescriptor(
|
| } else if (current_is_data_descriptor && desc_is_data_descriptor) {
|
| // 8a. If the [[Configurable]] field of current is false, then:
|
| if (!current->configurable()) {
|
| - // [Strong mode] Disallow changing writable -> readonly for
|
| - // non-configurable properties.
|
| - if (it != NULL && current->writable() && desc->has_writable() &&
|
| - !desc->writable() && object->map()->is_strong()) {
|
| - RETURN_FAILURE(isolate, should_throw,
|
| - NewTypeError(MessageTemplate::kStrongRedefineDisallowed,
|
| - object, it->GetName()));
|
| - }
|
| // 8a i. Return false, if the [[Writable]] field of current is false and
|
| // the [[Writable]] field of Desc is true.
|
| if (!current->writable() && desc->has_writable() && desc->writable()) {
|
| @@ -7482,8 +7469,7 @@ Maybe<bool> JSReceiver::SetIntegrityLevel(Handle<JSReceiver> receiver,
|
| if (receiver->IsJSObject()) {
|
| Handle<JSObject> object = Handle<JSObject>::cast(receiver);
|
| if (!object->HasSloppyArgumentsElements() &&
|
| - !object->map()->is_observed() &&
|
| - (!object->map()->is_strong() || level == SEALED)) { // Fast path.
|
| + !object->map()->is_observed()) { // Fast path.
|
| if (level == SEALED) {
|
| return JSObject::PreventExtensionsWithTransition<SEALED>(object,
|
| should_throw);
|
| @@ -9258,16 +9244,14 @@ Handle<Map> Map::CopyInitialMap(Handle<Map> map, int instance_size,
|
| int unused_property_fields) {
|
| #ifdef DEBUG
|
| Isolate* isolate = map->GetIsolate();
|
| - // Strict and strong function maps have Function as a constructor but the
|
| + // Strict function maps have Function as a constructor but the
|
| // Function's initial map is a sloppy function map. Same holds for
|
| // GeneratorFunction and its initial map.
|
| Object* constructor = map->GetConstructor();
|
| DCHECK(constructor->IsJSFunction());
|
| DCHECK(*map == JSFunction::cast(constructor)->initial_map() ||
|
| *map == *isolate->strict_function_map() ||
|
| - *map == *isolate->strong_function_map() ||
|
| - *map == *isolate->strict_generator_function_map() ||
|
| - *map == *isolate->strong_generator_function_map());
|
| + *map == *isolate->strict_generator_function_map());
|
| #endif
|
| // Initial maps must always own their descriptors and it's descriptor array
|
| // does not contain descriptors that do not belong to the map.
|
| @@ -12256,7 +12240,6 @@ bool CheckEquivalent(Map* first, Map* second) {
|
| first->instance_type() == second->instance_type() &&
|
| first->bit_field() == second->bit_field() &&
|
| first->is_extensible() == second->is_extensible() &&
|
| - first->is_strong() == second->is_strong() &&
|
| first->new_target_is_base() == second->new_target_is_base() &&
|
| first->has_hidden_prototype() == second->has_hidden_prototype();
|
| }
|
| @@ -12846,12 +12829,10 @@ Handle<Object> CacheInitialJSArrayMaps(
|
| Handle<Context> native_context, Handle<Map> initial_map) {
|
| // Replace all of the cached initial array maps in the native context with
|
| // the appropriate transitioned elements kind maps.
|
| - Strength strength =
|
| - initial_map->is_strong() ? Strength::STRONG : Strength::WEAK;
|
| Handle<Map> current_map = initial_map;
|
| ElementsKind kind = current_map->elements_kind();
|
| DCHECK_EQ(GetInitialFastElementsKind(), kind);
|
| - native_context->set(Context::ArrayMapIndex(kind, strength), *current_map);
|
| + native_context->set(Context::ArrayMapIndex(kind), *current_map);
|
| for (int i = GetSequenceIndexFromFastElementsKind(kind) + 1;
|
| i < kFastElementsKindCount; ++i) {
|
| Handle<Map> new_map;
|
| @@ -12863,7 +12844,7 @@ Handle<Object> CacheInitialJSArrayMaps(
|
| current_map, next_kind, INSERT_TRANSITION);
|
| }
|
| DCHECK_EQ(next_kind, new_map->elements_kind());
|
| - native_context->set(Context::ArrayMapIndex(next_kind, strength), *new_map);
|
| + native_context->set(Context::ArrayMapIndex(next_kind), *new_map);
|
| current_map = new_map;
|
| }
|
| return initial_map;
|
| @@ -12895,9 +12876,6 @@ void JSFunction::SetInstancePrototype(Handle<JSFunction> function,
|
| function->set_prototype_or_initial_map(*value);
|
| } else {
|
| Handle<Map> new_map = Map::Copy(initial_map, "SetInstancePrototype");
|
| - if (function->map()->is_strong()) {
|
| - new_map->set_is_strong();
|
| - }
|
| JSFunction::SetInitialMap(function, new_map, value);
|
|
|
| // If the function is used as the global Array function, cache the
|
| @@ -12909,9 +12887,6 @@ void JSFunction::SetInstancePrototype(Handle<JSFunction> function,
|
| if (array_function->IsJSFunction() &&
|
| *function == JSFunction::cast(*array_function)) {
|
| CacheInitialJSArrayMaps(native_context, new_map);
|
| - Handle<Map> new_strong_map = Map::Copy(new_map, "SetInstancePrototype");
|
| - new_strong_map->set_is_strong();
|
| - CacheInitialJSArrayMaps(native_context, new_strong_map);
|
| }
|
| }
|
|
|
| @@ -13096,9 +13071,6 @@ void JSFunction::EnsureHasInitialMap(Handle<JSFunction> function) {
|
| &in_object_properties);
|
|
|
| Handle<Map> map = isolate->factory()->NewMap(instance_type, instance_size);
|
| - if (function->map()->is_strong()) {
|
| - map->set_is_strong();
|
| - }
|
|
|
| // Fetch or allocate prototype.
|
| Handle<Object> prototype;
|
| @@ -15719,12 +15691,6 @@ Maybe<bool> JSObject::SetPrototypeUnobserved(Handle<JSObject> object,
|
| DCHECK(!object->IsAccessCheckNeeded());
|
| }
|
|
|
| - // Strong objects may not have their prototype set via __proto__ or
|
| - // setPrototypeOf.
|
| - if (from_javascript && object->map()->is_strong()) {
|
| - RETURN_FAILURE(isolate, should_throw,
|
| - NewTypeError(MessageTemplate::kStrongSetProto, object));
|
| - }
|
| Heap* heap = isolate->heap();
|
| // Silently ignore the change if value is not a JSObject or null.
|
| // SpiderMonkey behaves this way.
|
|
|