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 "test/cctest/compiler/function-tester.h" | 7 #include "test/cctest/compiler/function-tester.h" |
8 | 8 |
9 #if V8_TURBOFAN_TARGET | 9 #if V8_TURBOFAN_TARGET |
10 | 10 |
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
184 "function bar(s,t) { return foo(foo(s)); };" | 184 "function bar(s,t) { return foo(foo(s)); };" |
185 "return bar;" | 185 "return bar;" |
186 "})();", | 186 "})();", |
187 CompilationInfo::kInliningEnabled | | 187 CompilationInfo::kInliningEnabled | |
188 CompilationInfo::kContextSpecializing); | 188 CompilationInfo::kContextSpecializing); |
189 | 189 |
190 InstallAssertStackDepthHelper(CcTest::isolate()); | 190 InstallAssertStackDepthHelper(CcTest::isolate()); |
191 T.CheckCall(T.Val(-11), T.Val(11), T.Val(4)); | 191 T.CheckCall(T.Val(-11), T.Val(11), T.Val(4)); |
192 } | 192 } |
193 | 193 |
194 | |
195 TEST(InlineLoop) { | |
196 FunctionTester T( | |
197 "(function () {" | |
198 "var x = 41;" | |
199 "function foo(s) { AssertStackDepth(1); while (s > 0) {" | |
200 " s = s - 1; }; return s; };" | |
201 "function bar(s,t) { return foo(foo(s)); };" | |
202 "return bar;" | |
203 "})();", | |
204 CompilationInfo::kInliningEnabled | | |
205 CompilationInfo::kContextSpecializing); | |
206 | |
207 InstallAssertStackDepthHelper(CcTest::isolate()); | |
208 T.CheckCall(T.Val(0.0), T.Val(11), T.Val(4)); | |
209 } | |
210 | |
211 | |
212 TEST(InlineStrictIntoNonStrict) { | |
213 FunctionTester T( | |
214 "(function () {" | |
215 "var x = {};" | |
216 "Object.defineProperty(x, \"y\", { value: 42, writable: false });" | |
217 "function foo(s) { 'use strict';" | |
218 " x.y = 9; };" | |
219 "function bar(s,t) { return foo(s); };" | |
220 "return bar;" | |
221 "})();", | |
222 CompilationInfo::kInliningEnabled | | |
223 CompilationInfo::kContextSpecializing); | |
224 | |
225 InstallAssertStackDepthHelper(CcTest::isolate()); | |
226 T.CheckThrows(T.undefined(), T.undefined()); | |
227 } | |
228 | |
229 | |
230 TEST(InlineNonStrictIntoStrict) { | |
231 FunctionTester T( | |
232 "(function () {" | |
233 "var x = {};" | |
234 "Object.defineProperty(obj1, \"y\", { value: 42, writable: false });" | |
Michael Starzinger
2014/08/28 09:49:00
It seems "obj1" is never defined. This means that
sigurds
2014/08/28 11:05:37
That's a mistake, thanks for catching!
| |
235 "function foo(s) { x.y = 9; return 42; };" | |
Michael Starzinger
2014/08/28 09:49:00
You could use "return x.y" here as an additional v
sigurds
2014/08/28 11:05:37
Done.
| |
236 "function bar(s,t) { \'use strict\'; return foo(s); };" | |
237 "return bar;" | |
238 "})();", | |
239 CompilationInfo::kInliningEnabled | | |
240 CompilationInfo::kContextSpecializing); | |
241 | |
242 InstallAssertStackDepthHelper(CcTest::isolate()); | |
243 T.CheckCall(T.Val(42), T.undefined(), T.undefined()); | |
244 } | |
245 | |
246 | |
194 #endif // V8_TURBOFAN_TARGET | 247 #endif // V8_TURBOFAN_TARGET |
OLD | NEW |