// Set the length.
result_array->set_length(Smi::FromInt(result_len));
+
+ // Set the ElementsKind.
+ ElementsKind elements_kind = JSObject::cast(receiver)->GetElementsKind();
+ if (result_array->GetElementsKind() != elements_kind) {
+ MaybeObject* maybe = result_array->TransitionElementsKind(elements_kind);
+ if (maybe->IsFailure()) return maybe;
+ }
return result_array;
}
// Set the length.
result_array->set_length(Smi::FromInt(actual_delete_count));
+
+ // Set the ElementsKind.
+ ElementsKind elements_kind = array->GetElementsKind();
+ if (result_array->GetElementsKind() != elements_kind) {
+ MaybeObject* maybe = result_array->TransitionElementsKind(elements_kind);
+ if (maybe->IsFailure()) return maybe;
+ }
}
int item_count = (n_arguments > 1) ? (n_arguments - 2) : 0;
assertEquals([1, 2, 3, 4, 5], a);
}
+// Test that Array.splice() and Array.slice() return correct ElementsKinds.
+if (support_smi_only_arrays) {
+ var a = ["foo", "bar"];
+ assertKind(elements_kind.fast, a);
+ var b = a.splice(0, 1);
+ assertKind(elements_kind.fast, b);
+ var c = a.slice(0, 1);
+ assertKind(elements_kind.fast, c);
+}
+
// Throw away type information in the ICs for next stress run.
gc();