Index: src/array.js |
diff --git a/src/array.js b/src/array.js |
index 7cf744bedf29fc9c138b848d8d66d9021cd8afa0..323c8cf983ca9e704a3850790d555cdff44cf235 100644 |
--- a/src/array.js |
+++ b/src/array.js |
@@ -483,7 +483,23 @@ function ArrayConcat(arg1) { // length == 1 |
arrays[i + 1] = %_Arguments(i); |
} |
- return %ArrayConcat(arrays); |
+ var result = %ArrayConcat(arrays); |
+ if (!%_IsSmi(result)) return result; |
+ |
+ // The result is a smi as signal that %ArrayConcat failed because the result |
+ // exceeds the array size limit. Overflowing elements turn into properties. |
+ var offset = 0; |
+ var result = []; |
+ for (var i = 0; i < arrays.length; i++) { |
+ var array = arrays[i]; |
+ var keys = GetSortedArrayKeys(array, %GetArrayKeys(array, array.length)); |
+ for (var j = 0; j < keys.length; j++) { |
+ var key = keys[j]; |
+ result[key + offset] = array[key]; |
+ } |
+ offset += array.length; |
+ } |
+ return result; |
} |