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

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     1 // Call a function with no arguments.
     2 function a_g() {
     3 	return 5;
     4 }
     6 function a_f(g) {
     7 	return g();
     8 }
    10 a_g();
    11 assertEq(a_f(a_g), 5);
    13 ///////////////////////////////////////////////////////////////////////////////
    14 // Call a function with one argument.
    15 function b_g(a) {
    16 	return a;
    17 }
    19 function b_f(h,b) {
    20 	return h(5);
    21 }
    22 b_g(5);
    23 assertEq(b_f(b_g,4), 5);
    25 ///////////////////////////////////////////////////////////////////////////////
    26 // Try to confuse the register allocator.
    27 function c_g(a) {
    28 	return a;
    29 }
    30 function c_f(h,b) {
    31 	var x = h(5);
    32 	var y = x + 1;
    33 	var z = h(h(y + x + 2));
    34 	var k = 2 + z + 3;
    35 	return h(h(h(k)));
    36 }
    37 c_g(2); // prime g().
    38 assertEq(c_f(c_g,7), 18)
    40 ///////////////////////////////////////////////////////////////////////////////
    41 // Fail during unboxing, get kicked to interpreter.
    42 // Interpreter throws an exception; handle it.
    44 function d_f(a) {
    45 	return a(); // Call a known non-object. This fails in unboxing.
    46 }
    47 var d_x = 0;
    48 try {
    49 	d_f(1); // Don't assert.
    50 } catch(e) {
    51 	d_x = 1;
    52 }
    53 assertEq(d_x, 1);
    55 ///////////////////////////////////////////////////////////////////////////////
    56 // Try passing an uncompiled function.
    58 function e_uncompiled(a,b,c) {
    59 	return eval("b");
    60 }
    61 function e_f(h) {
    62 	return h(0,h(2,4,6),1);
    63 }
    64 assertEq(e_f(e_uncompiled),4);
    66 ///////////////////////////////////////////////////////////////////////////////
    67 // Try passing a native function.
    69 function f_app(f,n) {
    70 	return f(n);
    71 }
    72 assertEq(f_app(Math.sqrt, 16), 4);
    74 ///////////////////////////////////////////////////////////////////////////////
    75 // Handle the case where too few arguments are passed.
    76 function g_g(a,b,c,d,e) {
    77 	return e;
    78 }
    80 function g_f(g) {
    81 	return g(2);
    82 }
    84 g_g();
    85 assertEq(g_f(g_g), undefined);
    87 ///////////////////////////////////////////////////////////////////////////////
    88 // Don't assert when given a non-function object.
    89 function h_f(a) {
    90 	return a();
    91 }
    93 var x = new Object();
    94 var h_ret = 0;
    95 try {
    96 	h_f(x); // don't assert.
    97 } catch (e) {
    98 	h_ret = 1;
    99 }
   100 assertEq(h_ret, 1);

mercurial