diff options
Diffstat (limited to 'chromium/v8/src/compiler/js-native-context-specialization.cc')
-rw-r--r-- | chromium/v8/src/compiler/js-native-context-specialization.cc | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/chromium/v8/src/compiler/js-native-context-specialization.cc b/chromium/v8/src/compiler/js-native-context-specialization.cc index b72d3ec8bed..c32ee269a08 100644 --- a/chromium/v8/src/compiler/js-native-context-specialization.cc +++ b/chromium/v8/src/compiler/js-native-context-specialization.cc @@ -2256,7 +2256,19 @@ bool JSNativeContextSpecialization::ExtractReceiverMaps( bool JSNativeContextSpecialization::InferReceiverMaps( Node* receiver, Node* effect, MapHandleList* receiver_maps) { ZoneHandleSet<Map> maps; - if (NodeProperties::InferReceiverMaps(receiver, effect, &maps)) { + NodeProperties::InferReceiverMapsResult result = + NodeProperties::InferReceiverMaps(receiver, effect, &maps); + if (result == NodeProperties::kReliableReceiverMaps) { + for (size_t i = 0; i < maps.size(); ++i) { + receiver_maps->Add(maps[i]); + } + return true; + } else if (result == NodeProperties::kUnreliableReceiverMaps) { + // For untrusted receiver maps, we can still use the information + // if the maps are stable. + for (size_t i = 0; i < maps.size(); ++i) { + if (!maps[i]->is_stable()) return false; + } for (size_t i = 0; i < maps.size(); ++i) { receiver_maps->Add(maps[i]); } |