1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/js/src/jit-test/tests/ion/bug813784.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,184 @@ 1.4 +/* Test an inlined argument returns the arguments from the right function */ 1.5 +function get_arg_2() { return arguments[2]; } 1.6 +function test() { return get_arg_2(1,2,3); } 1.7 + 1.8 +assertEq(test("a","b","c"), 3); 1.9 +assertEq(test("a","b","c"), 3); 1.10 + 1.11 +/* Test the right length of the argument vector gets returned */ 1.12 +function arg_len() { return arguments.length; } 1.13 +function test2() { return arg_len(1,2,3); } 1.14 + 1.15 +assertEq(test2("a","b","c","d"), 3); 1.16 +assertEq(test2("a","b","c","d"), 3); 1.17 + 1.18 +/* Test returning the argument vector */ 1.19 +function get_arg() { return arguments; } 1.20 +function test3() { return get_arg(1,2,3) } 1.21 + 1.22 +var arg = test3("a","b","c","d","e"); 1.23 +assertEq(arg.length, 3); 1.24 +assertEq(arg[0], 1); 1.25 +assertEq(arg[1], 2); 1.26 +assertEq(arg[2], 3); 1.27 +var arg = test3("a","b","c","d","e"); 1.28 +assertEq(arg.length, 3); 1.29 +assertEq(arg[0], 1); 1.30 +assertEq(arg[1], 2); 1.31 +assertEq(arg[2], 3); 1.32 + 1.33 +/* Test funapply with arguments */ 1.34 +function return0(a, b, c) { return 0; } 1.35 +function funapply() { return return0.apply({}, arguments); } 1.36 +function test4() { return funapply(1,2,3) } 1.37 + 1.38 +assertEq(test4("a","b","c","d","e"), 0); 1.39 +assertEq(test4("a","b","c","d","e"), 0); 1.40 + 1.41 +/* Test if funapply gets the right arguments */ 1.42 +function apply3(a, b, c) { 1.43 + assertEq(a,1) 1.44 + assertEq(b,2) 1.45 + assertEq(c,3) 1.46 +} 1.47 +function funapply2() { return apply3.apply({}, arguments); } 1.48 +function test5() { return funapply2(1,2,3) } 1.49 + 1.50 +test5("a","b","c","d","e"); 1.51 +test5("a","b","c","d","e"); 1.52 + 1.53 +/* Test funapply when argument vector has less args than callee and callee known */ 1.54 +function apply_fun1(a, b, c) { assertEq(c, undefined) } 1.55 +function funapply3() { return apply_fun1.apply({}, arguments); } 1.56 +function test7() { return funapply3(1,2) } 1.57 + 1.58 +test7("a","b","c","d","e"); 1.59 +test7("a","b","c","d","e"); 1.60 + 1.61 +/* Test funapply when argument vector has less args than callee and callee unknown */ 1.62 +var fun; 1.63 +function apply_fun2(a, b, c) { assertEq(c, undefined) } 1.64 +function funapply4() { return fun.apply({}, arguments); } 1.65 +function test8() { return funapply4(1,2) } 1.66 + 1.67 +fun = apply_fun1; 1.68 +test8("a","b","c","d","e"); 1.69 +fun = apply_fun2; 1.70 +test8("a","b","c","d","e"); 1.71 +fun = apply_fun1; 1.72 +test8("a","b","c","d","e"); 1.73 +fun = apply_fun2; 1.74 +test8("a","b","c","d","e"); 1.75 + 1.76 +//////////// 1.77 + 1.78 +function dumpArgs(i) { if (i == 90) return funapply5.arguments.length; return [i]; } 1.79 +function funapply5() { return dumpArgs.apply({}, arguments); } 1.80 +function test9(i) { return funapply5(i); } 1.81 + 1.82 +assertEq(test9(89)[0], 89); 1.83 +assertEq(test9(90), 1); 1.84 + 1.85 +///////////// 1.86 + 1.87 +function notinlined() { 1.88 + assertEq(arguments[0], 4); 1.89 + assertEq(arguments[1], 5); 1.90 + assertEq(arguments[2], 6); 1.91 +} 1.92 + 1.93 +function inline2(a) { return notinlined(4,5,6); } 1.94 +function inline() { return inline2(1,2,3); } 1.95 +function base1() { return inline(-1,-2,-3); } 1.96 + 1.97 +base1(10,11,12); 1.98 +base1(10,11,12); 1.99 + 1.100 +//////////////// 1.101 + 1.102 +function inlined(a) { 1.103 + if (a == 11) { 1.104 + a = undefined; 1.105 + return arguments; 1.106 + } 1.107 +} 1.108 + 1.109 +function inline4(a) { return inlined(a,5,6); } 1.110 +function inline3(a) { return inline4(a,2,3); } 1.111 +function base2(a) { return inline3(a,-2,-3); } 1.112 + 1.113 +var args = base2(10,11,12); 1.114 +assertEq(args, undefined); 1.115 +var args = base2(11,11,12); 1.116 +assertEq(args[0], undefined); 1.117 +assertEq(args[1], 5); 1.118 +assertEq(args[2], 6); 1.119 +var args = base2(10,11,12); 1.120 +assertEq(args, undefined); 1.121 +var args = base2(11,11,12); 1.122 +assertEq(args[0], undefined); 1.123 +assertEq(args[1], 5); 1.124 +assertEq(args[2], 6); 1.125 + 1.126 +////////////////// 1.127 + 1.128 +function arg_len2() { assertEq(arguments.length, 4); } 1.129 +function bailing_arg_len(a) { 1.130 + if (a == 90) { 1.131 + bailout(); 1.132 + arg_len.apply({}, arguments); 1.133 + } 1.134 + assertEq(arguments.length, 4); 1.135 + return arguments; 1.136 +} 1.137 +function test10(i) { return bailing_arg_len(i,2,3,4); } 1.138 + 1.139 +var args = test10(1, "b"); 1.140 +assertEq(args.length, 4) 1.141 +assertEq(args[0], 1) 1.142 +assertEq(args[1], 2) 1.143 +assertEq(args[2], 3) 1.144 +assertEq(args[3], 4) 1.145 + 1.146 +var args = test10(90, 'b'); 1.147 +assertEq(args.length, 4) 1.148 +assertEq(args[0], 90) 1.149 +assertEq(args[1], 2) 1.150 +assertEq(args[2], 3) 1.151 +assertEq(args[3], 4) 1.152 + 1.153 +//////////// 1.154 + 1.155 +function dumpArgs11(i) { return funapply11.arguments; eval(""); } 1.156 +function funapply11(i) { return dumpArgs11(i); } 1.157 +function test11(i) { return funapply11(i); } 1.158 + 1.159 +assertEq(test11(89)[0], 89); 1.160 +assertEq(test11(90)[0], 90); 1.161 + 1.162 +//////////// 1.163 + 1.164 +function dumpArgs12(i) { if (i == 90) return funapply12.arguments; return [i]; } 1.165 +function noion12(i) { return dumpArgs12(i); eval(""); } 1.166 +function funapply12(i) { return noion12(i); } 1.167 +function test12(i) { return funapply12(i); } 1.168 + 1.169 +assertEq(test12("89")[0], "89"); 1.170 +assertEq(test12("90")[0], "90"); 1.171 + 1.172 +//////////// 1.173 + 1.174 +function f13(i) { if (i == "90") return f13.arguments; return [i]; } 1.175 +function test13(i,b) { return f13(i,b); } 1.176 + 1.177 +assertEq(test13("89", 1)[0], "89"); 1.178 +assertEq(test13("90", 2)[1], 2); 1.179 + 1.180 +/////////// 1.181 + 1.182 +function noion14(i) { if (i == 2) { return funapply14.arguments; } return [i]; eval(""); } 1.183 +function funapply14(i) { if (i == 90) { i = "2"; } return noion14(i); } 1.184 +function test14(i) { return funapply14(i); } 1.185 + 1.186 +assertEq(test14("89")[0], "89"); 1.187 +assertEq(test14("90")[0], "2");