| Index: src/ic/ic.cc
|
| diff --git a/src/ic/ic.cc b/src/ic/ic.cc
|
| index a4ccc489aad30e1c1678771a56aed9cc610d31d7..502d9e2056b92e4582c47a80291b762c7aaea782 100644
|
| --- a/src/ic/ic.cc
|
| +++ b/src/ic/ic.cc
|
| @@ -852,8 +852,7 @@ bool LoadIC::IsPrototypeValidityCellCheckEnough(Handle<Map> receiver_map,
|
|
|
| // The following kinds of receiver maps require custom handler compilation.
|
| if (receiver_map->IsPrimitiveMap() || receiver_map->IsJSGlobalProxyMap() ||
|
| - receiver_map->IsJSGlobalObjectMap() ||
|
| - receiver_map->is_dictionary_map()) {
|
| + receiver_map->IsJSGlobalObjectMap()) {
|
| return false;
|
| }
|
|
|
| @@ -863,12 +862,12 @@ bool LoadIC::IsPrototypeValidityCellCheckEnough(Handle<Map> receiver_map,
|
| JSObject* current = iter.GetCurrent<JSObject>();
|
| if (current == *holder) break;
|
| Map* current_map = current->map();
|
| - if (current_map->IsJSGlobalObjectMap() ||
|
| - current_map->IsJSGlobalProxyMap() || current_map->is_dictionary_map()) {
|
| + if (current_map->IsJSGlobalObjectMap()) {
|
| + return false;
|
| + } else if (current_map->is_dictionary_map()) {
|
| + DCHECK(!current_map->IsJSGlobalProxyMap()); // Proxy maps are fast.
|
| return false;
|
| }
|
| - // Only objects that do not require access checks are allowed in stubs.
|
| - DCHECK(!current_map->is_access_check_needed());
|
| }
|
| return true;
|
| }
|
| @@ -878,6 +877,14 @@ Handle<Object> LoadIC::SimpleLoadFromPrototype(Handle<Map> receiver_map,
|
| Handle<Object> smi_handler) {
|
| DCHECK(IsPrototypeValidityCellCheckEnough(receiver_map, holder));
|
|
|
| + if (receiver_map->IsJSGlobalProxyMap() ||
|
| + receiver_map->IsJSGlobalObjectMap()) {
|
| + UNREACHABLE();
|
| + } else if (receiver_map->is_dictionary_map()) {
|
| + smi_handler =
|
| + LoadHandler::EnableNegativeLookupOnReceiver(isolate(), smi_handler);
|
| + }
|
| +
|
| Handle<Cell> validity_cell =
|
| Map::GetOrCreatePrototypeChainValidityCell(receiver_map, isolate());
|
| DCHECK(!validity_cell.is_null());
|
|
|