| Index: test/mjsunit/elements-transition.js
|
| diff --git a/test/mjsunit/elements-transition.js b/test/mjsunit/elements-transition.js
|
| index e28f3c3d64fe30a5bf406418f65622b537122a14..7298e68a12cb77047f03d794b6aff732fcdd8cba 100644
|
| --- a/test/mjsunit/elements-transition.js
|
| +++ b/test/mjsunit/elements-transition.js
|
| @@ -25,7 +25,8 @@
|
| // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
| // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
| -// Flags: --allow-natives-syntax --smi-only-arrays --notrack-allocation-sites
|
| +// Flags: --allow-natives-syntax --smi-only-arrays
|
| +// Flags: --nostress-opt
|
|
|
| support_smi_only_arrays = %HasFastSmiElements(new Array(1,2,3,4,5,6,7,8));
|
|
|
| @@ -36,14 +37,26 @@ if (support_smi_only_arrays) {
|
| }
|
|
|
| if (support_smi_only_arrays) {
|
| + // This code exists to eliminate the learning influence of AllocationSites
|
| + // on the following tests.
|
| + var __sequence = 0;
|
| + function make_array_string(length) {
|
| + this.__sequence = this.__sequence + 1;
|
| + return "/* " + this.__sequence + " */ new Array(" + length + ");";
|
| + }
|
| + function make_array(length) {
|
| + return eval(make_array_string(length));
|
| + }
|
| +
|
| function test(test_double, test_object, set, length) {
|
| // We apply the same operations to two identical arrays. The first array
|
| // triggers an IC miss, upon which the conversion stub is generated, but the
|
| // actual conversion is done in runtime. The second array, arriving at
|
| // the previously patched IC, is then converted using the conversion stub.
|
| - var array_1 = new Array(length);
|
| - var array_2 = new Array(length);
|
| + var array_1 = make_array(length);
|
| + var array_2 = make_array(length);
|
|
|
| + // false, true, nice setter function, 20
|
| assertTrue(%HasFastSmiElements(array_1));
|
| assertTrue(%HasFastSmiElements(array_2));
|
| for (var i = 0; i < length; i++) {
|
| @@ -86,15 +99,20 @@ if (support_smi_only_arrays) {
|
| assertEquals(length, array_2.length);
|
| }
|
|
|
| - test(false, false, function(a,i,v){ a[i] = v; }, 20);
|
| - test(true, false, function(a,i,v){ a[i] = v; }, 20);
|
| - test(false, true, function(a,i,v){ a[i] = v; }, 20);
|
| - test(true, true, function(a,i,v){ a[i] = v; }, 20);
|
| + function run_test(test_double, test_object, set, length) {
|
| + test(test_double, test_object, set, length);
|
| + %ClearFunctionTypeFeedback(test);
|
| + }
|
| +
|
| + run_test(false, false, function(a,i,v){ a[i] = v; }, 20);
|
| + run_test(true, false, function(a,i,v){ a[i] = v; }, 20);
|
| + run_test(false, true, function(a,i,v){ a[i] = v; }, 20);
|
| + run_test(true, true, function(a,i,v){ a[i] = v; }, 20);
|
|
|
| - test(false, false, function(a,i,v){ a[i] = v; }, 10000);
|
| - test(true, false, function(a,i,v){ a[i] = v; }, 10000);
|
| - test(false, true, function(a,i,v){ a[i] = v; }, 10000);
|
| - test(true, true, function(a,i,v){ a[i] = v; }, 10000);
|
| + run_test(false, false, function(a,i,v){ a[i] = v; }, 10000);
|
| + run_test(true, false, function(a,i,v){ a[i] = v; }, 10000);
|
| + run_test(false, true, function(a,i,v){ a[i] = v; }, 10000);
|
| + run_test(true, true, function(a,i,v){ a[i] = v; }, 10000);
|
|
|
| // Check COW arrays
|
| function get_cow() { return [1, 2, 3]; }
|
|
|