js/src/jit-test/tests/ion/bug813784.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/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");

mercurial