| OLD | NEW |
| 1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "src/v8.h" | 5 #include "src/v8.h" |
| 6 | 6 |
| 7 #include "src/frames-inl.h" | 7 #include "src/frames-inl.h" |
| 8 #include "test/cctest/compiler/function-tester.h" | 8 #include "test/cctest/compiler/function-tester.h" |
| 9 | 9 |
| 10 using namespace v8::internal; | 10 using namespace v8::internal; |
| (...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 154 InstallAssertInlineCountHelper(CcTest::isolate()); | 154 InstallAssertInlineCountHelper(CcTest::isolate()); |
| 155 T.CheckCall(T.Val(42), T.Val("x"), T.undefined()); | 155 T.CheckCall(T.Val(42), T.Val("x"), T.undefined()); |
| 156 } | 156 } |
| 157 | 157 |
| 158 | 158 |
| 159 TEST(InlineOmitArguments) { | 159 TEST(InlineOmitArguments) { |
| 160 FunctionTester T( | 160 FunctionTester T( |
| 161 "(function () {" | 161 "(function () {" |
| 162 " var x = 42;" | 162 " var x = 42;" |
| 163 " function bar(s, t, u, v) { AssertInlineCount(2); return x + s; };" | 163 " function bar(s, t, u, v) { AssertInlineCount(2); return x + s; };" |
| 164 " return (function (s,t) { return bar(s); });" | 164 " function foo(s, t) { return bar(s); };" |
| 165 " return foo;" |
| 165 "})();", | 166 "})();", |
| 166 kInlineFlags); | 167 kInlineFlags); |
| 167 | 168 |
| 168 InstallAssertInlineCountHelper(CcTest::isolate()); | 169 InstallAssertInlineCountHelper(CcTest::isolate()); |
| 169 T.CheckCall(T.Val(42 + 12), T.Val(12), T.undefined()); | 170 T.CheckCall(T.Val(42 + 12), T.Val(12), T.undefined()); |
| 170 } | 171 } |
| 171 | 172 |
| 172 | 173 |
| 174 TEST(InlineOmitArgumentsObject) { |
| 175 FunctionTester T( |
| 176 "(function () {" |
| 177 " function bar(s, t, u, v) { AssertInlineCount(2); return arguments; };" |
| 178 " function foo(s, t) { var args = bar(s);" |
| 179 " return args.length == 1 &&" |
| 180 " args[0] == 11; };" |
| 181 " return foo;" |
| 182 "})();", |
| 183 kInlineFlags); |
| 184 |
| 185 InstallAssertInlineCountHelper(CcTest::isolate()); |
| 186 T.CheckCall(T.true_value(), T.Val(11), T.undefined()); |
| 187 } |
| 188 |
| 189 |
| 173 TEST(InlineOmitArgumentsDeopt) { | 190 TEST(InlineOmitArgumentsDeopt) { |
| 174 FunctionTester T( | 191 FunctionTester T( |
| 175 "(function () {" | 192 "(function () {" |
| 176 " function foo(s,t,u,v) { AssertInlineCount(2);" | 193 " function foo(s,t,u,v) { AssertInlineCount(2);" |
| 177 " %DeoptimizeFunction(bar); return baz(); };" | 194 " %DeoptimizeFunction(bar); return baz(); };" |
| 178 " function bar() { return foo(11); };" | 195 " function bar() { return foo(11); };" |
| 179 " function baz() { return foo.arguments.length == 1 &&" | 196 " function baz() { return foo.arguments.length == 1 &&" |
| 180 " foo.arguments[0] == 11; }" | 197 " foo.arguments[0] == 11; }" |
| 181 " return bar;" | 198 " return bar;" |
| 182 "})();", | 199 "})();", |
| 183 kInlineFlags); | 200 kInlineFlags); |
| 184 | 201 |
| 185 InstallAssertInlineCountHelper(CcTest::isolate()); | 202 InstallAssertInlineCountHelper(CcTest::isolate()); |
| 186 T.CheckCall(T.true_value(), T.Val(12), T.Val(14)); | 203 T.CheckCall(T.true_value(), T.Val(12), T.Val(14)); |
| 187 } | 204 } |
| 188 | 205 |
| 189 | 206 |
| 190 TEST(InlineSurplusArguments) { | 207 TEST(InlineSurplusArguments) { |
| 191 FunctionTester T( | 208 FunctionTester T( |
| 192 "(function () {" | 209 "(function () {" |
| 193 " var x = 42;" | 210 " var x = 42;" |
| 194 " function foo(s) { AssertInlineCount(2); return x + s; };" | 211 " function foo(s) { AssertInlineCount(2); return x + s; };" |
| 195 " function bar(s,t) { return foo(s,t,13); };" | 212 " function bar(s, t) { return foo(s, t, 13); };" |
| 196 " return bar;" | 213 " return bar;" |
| 197 "})();", | 214 "})();", |
| 198 kInlineFlags); | 215 kInlineFlags); |
| 199 | 216 |
| 200 InstallAssertInlineCountHelper(CcTest::isolate()); | 217 InstallAssertInlineCountHelper(CcTest::isolate()); |
| 201 T.CheckCall(T.Val(42 + 12), T.Val(12), T.undefined()); | 218 T.CheckCall(T.Val(42 + 12), T.Val(12), T.undefined()); |
| 202 } | 219 } |
| 203 | 220 |
| 204 | 221 |
| 222 TEST(InlineSurplusArgumentsObject) { |
| 223 FunctionTester T( |
| 224 "(function () {" |
| 225 " function foo(s) { AssertInlineCount(2); return arguments; };" |
| 226 " function bar(s, t) { var args = foo(s, t, 13);" |
| 227 " return args.length == 3 &&" |
| 228 " args[0] == 11 &&" |
| 229 " args[1] == 12 &&" |
| 230 " args[2] == 13; };" |
| 231 " return bar;" |
| 232 "})();", |
| 233 kInlineFlags); |
| 234 |
| 235 InstallAssertInlineCountHelper(CcTest::isolate()); |
| 236 T.CheckCall(T.true_value(), T.Val(11), T.Val(12)); |
| 237 } |
| 238 |
| 239 |
| 205 TEST(InlineSurplusArgumentsDeopt) { | 240 TEST(InlineSurplusArgumentsDeopt) { |
| 206 FunctionTester T( | 241 FunctionTester T( |
| 207 "(function () {" | 242 "(function () {" |
| 208 " function foo(s) { AssertInlineCount(2); %DeoptimizeFunction(bar);" | 243 " function foo(s) { AssertInlineCount(2); %DeoptimizeFunction(bar);" |
| 209 " return baz(); };" | 244 " return baz(); };" |
| 210 " function bar() { return foo(13, 14, 15); };" | 245 " function bar() { return foo(13, 14, 15); };" |
| 211 " function baz() { return foo.arguments.length == 3 &&" | 246 " function baz() { return foo.arguments.length == 3 &&" |
| 212 " foo.arguments[0] == 13 &&" | 247 " foo.arguments[0] == 13 &&" |
| 213 " foo.arguments[1] == 14 &&" | 248 " foo.arguments[1] == 14 &&" |
| 214 " foo.arguments[2] == 15; }" | 249 " foo.arguments[2] == 15; }" |
| (...skipping 337 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 552 " if (x == 1) return bar(42);" | 587 " if (x == 1) return bar(42);" |
| 553 " return x;" | 588 " return x;" |
| 554 " }" | 589 " }" |
| 555 " return foo;" | 590 " return foo;" |
| 556 "})();", | 591 "})();", |
| 557 kInlineFlags); | 592 kInlineFlags); |
| 558 | 593 |
| 559 InstallAssertInlineCountHelper(CcTest::isolate()); | 594 InstallAssertInlineCountHelper(CcTest::isolate()); |
| 560 T.CheckCall(T.Val(42), T.Val(1)); | 595 T.CheckCall(T.Val(42), T.Val(1)); |
| 561 } | 596 } |
| OLD | NEW |