Index: test/mjsunit/elements-transition.js |
diff --git a/test/mjsunit/elements-transition.js b/test/mjsunit/elements-transition.js |
index 7298e68a12cb77047f03d794b6aff732fcdd8cba..f6a8188e2f5a55c2f1ed9f1615618b9963770aa5 100644 |
--- a/test/mjsunit/elements-transition.js |
+++ b/test/mjsunit/elements-transition.js |
@@ -25,107 +25,95 @@ |
// (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 |
+// Flags: --allow-natives-syntax |
// Flags: --nostress-opt |
-support_smi_only_arrays = %HasFastSmiElements(new Array(1,2,3,4,5,6,7,8)); |
- |
-if (support_smi_only_arrays) { |
- print("Tests include smi-only arrays."); |
-} else { |
- print("Tests do NOT include 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)); |
} |
-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 = make_array(length); |
- var array_2 = make_array(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 = 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++) { |
- if (i == length - 5 && test_double) { |
- // Trigger conversion to fast double elements at length-5. |
- set(array_1, i, 0.5); |
- set(array_2, i, 0.5); |
- assertTrue(%HasFastDoubleElements(array_1)); |
- assertTrue(%HasFastDoubleElements(array_2)); |
- } else if (i == length - 3 && test_object) { |
- // Trigger conversion to fast object elements at length-3. |
- set(array_1, i, 'object'); |
- set(array_2, i, 'object'); |
- assertTrue(%HasFastObjectElements(array_1)); |
- assertTrue(%HasFastObjectElements(array_2)); |
- } else if (i != length - 7) { |
- // Set the element to an integer but leave a hole at length-7. |
- set(array_1, i, 2*i+1); |
- set(array_2, i, 2*i+1); |
- } |
+ // false, true, nice setter function, 20 |
+ assertTrue(%HasFastSmiElements(array_1)); |
+ assertTrue(%HasFastSmiElements(array_2)); |
+ for (var i = 0; i < length; i++) { |
+ if (i == length - 5 && test_double) { |
+ // Trigger conversion to fast double elements at length-5. |
+ set(array_1, i, 0.5); |
+ set(array_2, i, 0.5); |
+ assertTrue(%HasFastDoubleElements(array_1)); |
+ assertTrue(%HasFastDoubleElements(array_2)); |
+ } else if (i == length - 3 && test_object) { |
+ // Trigger conversion to fast object elements at length-3. |
+ set(array_1, i, 'object'); |
+ set(array_2, i, 'object'); |
+ assertTrue(%HasFastObjectElements(array_1)); |
+ assertTrue(%HasFastObjectElements(array_2)); |
+ } else if (i != length - 7) { |
+ // Set the element to an integer but leave a hole at length-7. |
+ set(array_1, i, 2*i+1); |
+ set(array_2, i, 2*i+1); |
} |
+ } |
- for (var i = 0; i < length; i++) { |
- if (i == length - 5 && test_double) { |
- assertEquals(0.5, array_1[i]); |
- assertEquals(0.5, array_2[i]); |
- } else if (i == length - 3 && test_object) { |
- assertEquals('object', array_1[i]); |
- assertEquals('object', array_2[i]); |
- } else if (i != length - 7) { |
- assertEquals(2*i+1, array_1[i]); |
- assertEquals(2*i+1, array_2[i]); |
- } else { |
- assertEquals(undefined, array_1[i]); |
- assertEquals(undefined, array_2[i]); |
- } |
+ for (var i = 0; i < length; i++) { |
+ if (i == length - 5 && test_double) { |
+ assertEquals(0.5, array_1[i]); |
+ assertEquals(0.5, array_2[i]); |
+ } else if (i == length - 3 && test_object) { |
+ assertEquals('object', array_1[i]); |
+ assertEquals('object', array_2[i]); |
+ } else if (i != length - 7) { |
+ assertEquals(2*i+1, array_1[i]); |
+ assertEquals(2*i+1, array_2[i]); |
+ } else { |
+ assertEquals(undefined, array_1[i]); |
+ assertEquals(undefined, array_2[i]); |
} |
- |
- assertEquals(length, array_1.length); |
- assertEquals(length, array_2.length); |
} |
- function run_test(test_double, test_object, set, length) { |
- test(test_double, test_object, set, length); |
+ assertEquals(length, array_1.length); |
+ assertEquals(length, array_2.length); |
+} |
+ |
+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); |
+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); |
- 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); |
+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]; } |
+// Check COW arrays |
+function get_cow() { return [1, 2, 3]; } |
- function transition(x) { x[0] = 1.5; } |
+function transition(x) { x[0] = 1.5; } |
- var ignore = get_cow(); |
- transition(ignore); // Handled by runtime. |
- var a = get_cow(); |
- var b = get_cow(); |
- transition(a); // Handled by IC. |
- assertEquals(1.5, a[0]); |
- assertEquals(1, b[0]); |
-} else { |
- print("Test skipped because smi only arrays are not supported."); |
-} |
+var ignore = get_cow(); |
+transition(ignore); // Handled by runtime. |
+var a = get_cow(); |
+var b = get_cow(); |
+transition(a); // Handled by IC. |
+assertEquals(1.5, a[0]); |
+assertEquals(1, b[0]); |