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 +