Chromium Code Reviews| Index: test/mjsunit/array-literal-transitions.js |
| diff --git a/test/mjsunit/array-literal-transitions.js b/test/mjsunit/array-literal-transitions.js |
| index 321340c4b63c7102c7890b0321d027b275c26e05..53488b385eb75e489474ae9ce0952c2bcbd17ea8 100644 |
| --- a/test/mjsunit/array-literal-transitions.js |
| +++ b/test/mjsunit/array-literal-transitions.js |
| @@ -122,4 +122,76 @@ if (support_smi_only_arrays) { |
| } |
| %OptimizeFunctionOnNextCall(test_large_literal); |
| test_large_literal(); |
| + |
| + function deopt_array(use_literal) { |
| + if (use_literal) { |
| + return [.5, 3, 4]; |
| + } else { |
| + return new Array(); |
| + } |
| + } |
| + |
| + deopt_array(false); |
| + deopt_array(false); |
| + deopt_array(false); |
| + %OptimizeFunctionOnNextCall(deopt_array); |
| + var array = deopt_array(false); |
| + assertTrue(2 != %GetOptimizationStatus(deopt_array)); |
| + deopt_array(true); |
| + assertTrue(1 != %GetOptimizationStatus(deopt_array)); |
| + array = deopt_array(false); |
| + assertTrue(1 != %GetOptimizationStatus(deopt_array)); |
| + |
| + // Check that unexpected changes in the objects stored into the boilerplate |
| + // also force a deopt. |
| + function deopt_array_literal_all_smis(a) { |
| + return [0, 1, a]; |
| + } |
| + |
| + deopt_array_literal_all_smis(2); |
| + deopt_array_literal_all_smis(3); |
| + deopt_array_literal_all_smis(4); |
| + array = deopt_array_literal_all_smis(4); |
| + assertEquals(0, array[0]); |
| + assertEquals(1, array[1]); |
| + assertEquals(4, array[2]); |
| + %OptimizeFunctionOnNextCall(deopt_array_literal_all_smis); |
| + array = deopt_array_literal_all_smis(5); |
| + array = deopt_array_literal_all_smis(6); |
| + assertTrue(2 != %GetOptimizationStatus(deopt_array_literal_all_smis)); |
| + assertEquals(0, array[0]); |
| + assertEquals(1, array[1]); |
| + assertEquals(6, array[2]); |
| + |
| + array = deopt_array_literal_all_smis(.5); |
| + assertTrue(1 != %GetOptimizationStatus(deopt_array_literal_all_smis)); |
| + assertEquals(0, array[0]); |
| + assertEquals(1, array[1]); |
| + assertEquals(.5, array[2]); |
| + |
| + function deopt_array_literal_all_doubles(a) { |
| + return [0.5, 1, a]; |
| + } |
| + |
| + deopt_array_literal_all_doubles(.5); |
| + deopt_array_literal_all_doubles(.5); |
| + deopt_array_literal_all_doubles(.5); |
| + array = deopt_array_literal_all_doubles(0.5); |
| + assertEquals(0.5, array[0]); |
| + assertEquals(1, array[1]); |
| + assertEquals(0.5, array[2]); |
| + %OptimizeFunctionOnNextCall(deopt_array_literal_all_doubles); |
| + array = deopt_array_literal_all_doubles(5); |
| + array = deopt_array_literal_all_doubles(6); |
| + assertTrue(2 != %GetOptimizationStatus(deopt_array_literal_all_doubles)); |
| + assertEquals(0.5, array[0]); |
| + assertEquals(1, array[1]); |
| + assertEquals(6, array[2]); |
| + |
| + var foo = new Object(); |
| + array = deopt_array_literal_all_doubles(foo);; |
|
Jakob Kummerow
2011/11/30 14:04:51
nit: duplicate semicolon
danno
2011/12/01 14:41:11
Done.
|
| + assertTrue(1 != %GetOptimizationStatus(deopt_array_literal_all_doubles)); |
| + assertEquals(0.5, array[0]); |
| + assertEquals(1, array[1]); |
| + assertEquals(foo, array[2]); |
| } |