bug813784.js (4937B)
1 /* Test an inlined argument returns the arguments from the right function */ 2 function get_arg_2() { return arguments[2]; } 3 function test() { return get_arg_2(1,2,3); } 4 5 assertEq(test("a","b","c"), 3); 6 assertEq(test("a","b","c"), 3); 7 8 /* Test the right length of the argument vector gets returned */ 9 function arg_len() { return arguments.length; } 10 function test2() { return arg_len(1,2,3); } 11 12 assertEq(test2("a","b","c","d"), 3); 13 assertEq(test2("a","b","c","d"), 3); 14 15 /* Test returning the argument vector */ 16 function get_arg() { return arguments; } 17 function test3() { return get_arg(1,2,3) } 18 19 var arg = test3("a","b","c","d","e"); 20 assertEq(arg.length, 3); 21 assertEq(arg[0], 1); 22 assertEq(arg[1], 2); 23 assertEq(arg[2], 3); 24 var arg = test3("a","b","c","d","e"); 25 assertEq(arg.length, 3); 26 assertEq(arg[0], 1); 27 assertEq(arg[1], 2); 28 assertEq(arg[2], 3); 29 30 /* Test funapply with arguments */ 31 function return0(a, b, c) { return 0; } 32 function funapply() { return return0.apply(undefined, arguments); } 33 function test4() { return funapply(1,2,3) } 34 35 assertEq(test4("a","b","c","d","e"), 0); 36 assertEq(test4("a","b","c","d","e"), 0); 37 38 /* Test if funapply gets the right arguments */ 39 function apply3(a, b, c) { 40 assertEq(a,1) 41 assertEq(b,2) 42 assertEq(c,3) 43 } 44 function funapply2() { return apply3.apply(undefined, arguments); } 45 function test5() { return funapply2(1,2,3) } 46 47 test5("a","b","c","d","e"); 48 test5("a","b","c","d","e"); 49 50 /* Test funapply when argument vector has less args than callee and callee known */ 51 function apply_fun1(a, b, c) { assertEq(c, undefined) } 52 function funapply3() { return apply_fun1.apply(undefined, arguments); } 53 function test7() { return funapply3(1,2) } 54 55 test7("a","b","c","d","e"); 56 test7("a","b","c","d","e"); 57 58 /* Test funapply when argument vector has less args than callee and callee unknown */ 59 var fun; 60 function apply_fun2(a, b, c) { assertEq(c, undefined) } 61 function funapply4() { return fun.apply(undefined, arguments); } 62 function test8() { return funapply4(1,2) } 63 64 fun = apply_fun1; 65 test8("a","b","c","d","e"); 66 fun = apply_fun2; 67 test8("a","b","c","d","e"); 68 fun = apply_fun1; 69 test8("a","b","c","d","e"); 70 fun = apply_fun2; 71 test8("a","b","c","d","e"); 72 73 //////////// 74 75 function dumpArgs(i) { if (i == 90) return funapply5.arguments.length; return [i]; } 76 function funapply5() { return dumpArgs.apply(undefined, arguments); } 77 function test9(i) { return funapply5(i); } 78 79 assertEq(test9(89)[0], 89); 80 assertEq(test9(90), 1); 81 82 ///////////// 83 84 function notinlined() { 85 assertEq(arguments[0], 4); 86 assertEq(arguments[1], 5); 87 assertEq(arguments[2], 6); 88 } 89 90 function inline2(a) { return notinlined(4,5,6); } 91 function inline() { return inline2(1,2,3); } 92 function base1() { return inline(-1,-2,-3); } 93 94 base1(10,11,12); 95 base1(10,11,12); 96 97 //////////////// 98 99 function inlined(a) { 100 if (a == 11) { 101 a = undefined; 102 return arguments; 103 } 104 } 105 106 function inline4(a) { return inlined(a,5,6); } 107 function inline3(a) { return inline4(a,2,3); } 108 function base2(a) { return inline3(a,-2,-3); } 109 110 var args = base2(10,11,12); 111 assertEq(args, undefined); 112 var args = base2(11,11,12); 113 assertEq(args[0], undefined); 114 assertEq(args[1], 5); 115 assertEq(args[2], 6); 116 var args = base2(10,11,12); 117 assertEq(args, undefined); 118 var args = base2(11,11,12); 119 assertEq(args[0], undefined); 120 assertEq(args[1], 5); 121 assertEq(args[2], 6); 122 123 ////////////////// 124 125 function arg_len2() { assertEq(arguments.length, 4); } 126 function bailing_arg_len(a) { 127 if (a == 90) { 128 bailout(); 129 arg_len.apply(undefined, arguments); 130 } 131 assertEq(arguments.length, 4); 132 return arguments; 133 } 134 function test10(i) { return bailing_arg_len(i,2,3,4); } 135 136 var args = test10(1, "b"); 137 assertEq(args.length, 4) 138 assertEq(args[0], 1) 139 assertEq(args[1], 2) 140 assertEq(args[2], 3) 141 assertEq(args[3], 4) 142 143 var args = test10(90, 'b'); 144 assertEq(args.length, 4) 145 assertEq(args[0], 90) 146 assertEq(args[1], 2) 147 assertEq(args[2], 3) 148 assertEq(args[3], 4) 149 150 //////////// 151 152 function dumpArgs11(i) { return funapply11.arguments; eval(""); } 153 function funapply11(i) { return dumpArgs11(i); } 154 function test11(i) { return funapply11(i); } 155 156 assertEq(test11(89)[0], 89); 157 assertEq(test11(90)[0], 90); 158 159 //////////// 160 161 function dumpArgs12(i) { if (i == 90) return funapply12.arguments; return [i]; } 162 function noion12(i) { return dumpArgs12(i); eval(""); } 163 function funapply12(i) { return noion12(i); } 164 function test12(i) { return funapply12(i); } 165 166 assertEq(test12("89")[0], "89"); 167 assertEq(test12("90")[0], "90"); 168 169 //////////// 170 171 function f13(i) { if (i == "90") return f13.arguments; return [i]; } 172 function test13(i,b) { return f13(i,b); } 173 174 assertEq(test13("89", 1)[0], "89"); 175 assertEq(test13("90", 2)[1], 2); 176 177 /////////// 178 179 function noion14(i) { if (i == 2) { return funapply14.arguments; } return [i]; eval(""); } 180 function funapply14(i) { if (i == 90) { i = "2"; } return noion14(i); } 181 function test14(i) { return funapply14(i); } 182 183 assertEq(test14("89")[0], "89"); 184 assertEq(test14("90")[0], "2");