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)) { |