| function noLoop(arr1, arr2) { |
| let i=0 |
| if (arr1.size%2==0) |
| i = 0 |
| else i = 0 |
| arr2[i] = arr1[i] |
| return arr2 |
| } |
| noInline(noLoop); |
| |
| function invalidStart(arr1, arr2) { |
| if (arr1.length != arr2.length) |
| return [] |
| let i = 0 |
| do { |
| ++i |
| arr2[i] = arr1[i] |
| } while (i < arr1.length-1) |
| return arr2 |
| } |
| noInline(invalidStart); |
| |
| const size = 10 |
| let arr1 = new Int32Array(size) |
| let arr2 = new Int32Array(size) |
| for (let i=0; i<arr1.length; ++i) { |
| arr1[i] = i |
| } |
| |
| const iterationCount = $vm.useJIT() ? 10000000 : 100; |
| for (let i=0; i<iterationCount; ++i) noLoop(arr1, arr2) |
| for (let i=0; i<iterationCount; ++i) invalidStart(arr1, arr2) |
| |
| arr2 = new Int32Array(arr1.length) |
| invalidStart(arr1, arr2) |
| |
| for (let i=1; i<arr1.length; ++i) { |
| if (arr2[i] != arr1[i] || arr2[0] != 0) |
| throw "Error: bad copy: " + i + " " + arr1[i] + " " + arr2[i] |
| } |