| Index: src/ic.cc
|
| diff --git a/src/ic.cc b/src/ic.cc
|
| index c1d11bbb90678b646f8904673d61e3874f0bb872..71f2c30652ffc32acda8c1dee7eea7151fc34f09 100644
|
| --- a/src/ic.cc
|
| +++ b/src/ic.cc
|
| @@ -1771,6 +1771,26 @@ Handle<Code> KeyedStoreIC::StoreElementStub(Handle<JSObject> receiver,
|
| }
|
| }
|
|
|
| + // If the store mode isn't the standard mode, make sure that all polymorphic
|
| + // receivers are either external arrays, or all "normal" arrays. Otherwise,
|
| + // use the generic stub.
|
| + if (store_mode != STANDARD_STORE) {
|
| + int external_arrays = 0;
|
| + for (int i = 0; i < target_receiver_maps.length(); ++i) {
|
| + if (target_receiver_maps[i]->has_external_array_elements()) {
|
| + external_arrays++;
|
| + }
|
| + }
|
| + if (external_arrays != 0 &&
|
| + external_arrays != target_receiver_maps.length()) {
|
| + TRACE_GENERIC_IC(isolate(), "KeyedIC",
|
| + "unsupported combination of external and normal arrays");
|
| + return strict_mode == kStrictMode
|
| + ? generic_stub_strict()
|
| + : generic_stub();
|
| + }
|
| + }
|
| +
|
| return isolate()->stub_cache()->ComputeStoreElementPolymorphic(
|
| &target_receiver_maps, store_mode, strict_mode);
|
| }
|
|
|