summaryrefslogtreecommitdiff
path: root/chromium/v8/src/compiler/js-native-context-specialization.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/v8/src/compiler/js-native-context-specialization.cc')
-rw-r--r--chromium/v8/src/compiler/js-native-context-specialization.cc14
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]);
}