js/src/jit-test/tests/ion/bug670484.js

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/js/src/jit-test/tests/ion/bug670484.js	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,101 @@
     1.4 +// Call a function with no arguments.
     1.5 +function a_g() {
     1.6 +	return 5;
     1.7 +}
     1.8 +
     1.9 +function a_f(g) {
    1.10 +	return g();
    1.11 +}
    1.12 +
    1.13 +a_g();
    1.14 +assertEq(a_f(a_g), 5);
    1.15 +
    1.16 +///////////////////////////////////////////////////////////////////////////////
    1.17 +// Call a function with one argument.
    1.18 +function b_g(a) {
    1.19 +	return a;
    1.20 +}
    1.21 +
    1.22 +function b_f(h,b) {
    1.23 +	return h(5);
    1.24 +}
    1.25 +b_g(5);
    1.26 +assertEq(b_f(b_g,4), 5);
    1.27 +
    1.28 +///////////////////////////////////////////////////////////////////////////////
    1.29 +// Try to confuse the register allocator.
    1.30 +function c_g(a) {
    1.31 +	return a;
    1.32 +}
    1.33 +function c_f(h,b) {
    1.34 +	var x = h(5);
    1.35 +	var y = x + 1;
    1.36 +	var z = h(h(y + x + 2));
    1.37 +	var k = 2 + z + 3;
    1.38 +	return h(h(h(k)));
    1.39 +}
    1.40 +c_g(2); // prime g().
    1.41 +assertEq(c_f(c_g,7), 18)
    1.42 +
    1.43 +///////////////////////////////////////////////////////////////////////////////
    1.44 +// Fail during unboxing, get kicked to interpreter.
    1.45 +// Interpreter throws an exception; handle it.
    1.46 +
    1.47 +function d_f(a) {
    1.48 +	return a(); // Call a known non-object. This fails in unboxing.
    1.49 +}
    1.50 +var d_x = 0;
    1.51 +try {
    1.52 +	d_f(1); // Don't assert.
    1.53 +} catch(e) {
    1.54 +	d_x = 1;
    1.55 +}
    1.56 +assertEq(d_x, 1);
    1.57 +
    1.58 +///////////////////////////////////////////////////////////////////////////////
    1.59 +// Try passing an uncompiled function.
    1.60 +
    1.61 +function e_uncompiled(a,b,c) {
    1.62 +	return eval("b");
    1.63 +}
    1.64 +function e_f(h) {
    1.65 +	return h(0,h(2,4,6),1);
    1.66 +}
    1.67 +assertEq(e_f(e_uncompiled),4);
    1.68 +
    1.69 +///////////////////////////////////////////////////////////////////////////////
    1.70 +// Try passing a native function.
    1.71 +
    1.72 +function f_app(f,n) {
    1.73 +	return f(n);
    1.74 +}
    1.75 +assertEq(f_app(Math.sqrt, 16), 4);
    1.76 +
    1.77 +///////////////////////////////////////////////////////////////////////////////
    1.78 +// Handle the case where too few arguments are passed.
    1.79 +function g_g(a,b,c,d,e) {
    1.80 +	return e;
    1.81 +}
    1.82 +
    1.83 +function g_f(g) {
    1.84 +	return g(2);
    1.85 +}
    1.86 +
    1.87 +g_g();
    1.88 +assertEq(g_f(g_g), undefined);
    1.89 +
    1.90 +///////////////////////////////////////////////////////////////////////////////
    1.91 +// Don't assert when given a non-function object.
    1.92 +function h_f(a) {
    1.93 +	return a();
    1.94 +}
    1.95 +
    1.96 +var x = new Object();
    1.97 +var h_ret = 0;
    1.98 +try {
    1.99 +	h_f(x); // don't assert.
   1.100 +} catch (e) {
   1.101 +	h_ret = 1;
   1.102 +}
   1.103 +assertEq(h_ret, 1);
   1.104 +

mercurial