| Index: src/compiler/access-info.cc
|
| diff --git a/src/compiler/access-info.cc b/src/compiler/access-info.cc
|
| index 3c3dbcbefaa84dba398739d82982a56083969eec..866b06086a2042df0f6a811e25c7fa8a1f36ce62 100644
|
| --- a/src/compiler/access-info.cc
|
| +++ b/src/compiler/access-info.cc
|
| @@ -94,6 +94,12 @@ PropertyAccessInfo PropertyAccessInfo::AccessorConstant(
|
| return PropertyAccessInfo(kAccessorConstant, holder, constant, receiver_maps);
|
| }
|
|
|
| +// static
|
| +PropertyAccessInfo PropertyAccessInfo::Generic(MapList const& receiver_maps) {
|
| + return PropertyAccessInfo(kGeneric, MaybeHandle<JSObject>(), Handle<Object>(),
|
| + receiver_maps);
|
| +}
|
| +
|
| PropertyAccessInfo::PropertyAccessInfo()
|
| : kind_(kInvalid),
|
| field_representation_(MachineRepresentation::kNone),
|
| @@ -167,6 +173,12 @@ bool PropertyAccessInfo::Merge(PropertyAccessInfo const* that) {
|
| }
|
| return false;
|
| }
|
| + case kGeneric: {
|
| + this->receiver_maps_.insert(this->receiver_maps_.end(),
|
| + that->receiver_maps_.begin(),
|
| + that->receiver_maps_.end());
|
| + return true;
|
| + }
|
| }
|
|
|
| UNREACHABLE();
|
| @@ -478,7 +490,10 @@ bool AccessInfoFactory::LookupTransition(Handle<Map> map, Handle<Name> name,
|
| MaybeHandle<JSObject> holder,
|
| PropertyAccessInfo* access_info) {
|
| // Check if the {map} has a data transition with the given {name}.
|
| - if (map->unused_property_fields() == 0) return false;
|
| + if (map->unused_property_fields() == 0) {
|
| + *access_info = PropertyAccessInfo::Generic(MapList{map});
|
| + return true;
|
| + }
|
| Handle<Map> transition_map;
|
| if (TransitionArray::SearchTransition(map, kData, name, NONE)
|
| .ToHandle(&transition_map)) {
|
|
|