OLD | NEW |
1 // Copyright 2016 the V8 project authors. All rights reserved. | 1 // Copyright 2016 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 // Flags: --allow-natives-syntax --harmony-explicit-tailcalls | 5 // Flags: --allow-natives-syntax --harmony-explicit-tailcalls |
6 // Flags: --harmony-do-expressions | 6 // Flags: --harmony-do-expressions --harmony-async-await |
7 "use strict"; | 7 "use strict"; |
8 | 8 |
9 var SyntaxErrorTests = [ | 9 var SyntaxErrorTests = [ |
10 { msg: "Unexpected expression inside tail call", | 10 { msg: "Unexpected expression inside tail call", |
11 tests: [ | 11 tests: [ |
12 { src: `()=>{ return continue foo ; }`, | 12 { src: `()=>{ return continue foo ; }`, |
13 err: ` ^^^`, | 13 err: ` ^^^`, |
14 }, | 14 }, |
15 { src: `()=>{ return continue 42 ; }`, | 15 { src: `()=>{ return continue 42 ; }`, |
16 err: ` ^^`, | 16 err: ` ^^`, |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
121 { src: `()=>{ return bar instanceof continue foo() ; }`, | 121 { src: `()=>{ return bar instanceof continue foo() ; }`, |
122 err: ` ^^^^^^^^^^^^^^`, | 122 err: ` ^^^^^^^^^^^^^^`, |
123 }, | 123 }, |
124 { src: `()=>{ return continue foo() in bar ; }`, | 124 { src: `()=>{ return continue foo() in bar ; }`, |
125 err: ` ^^^^^^^^^^^^^^`, | 125 err: ` ^^^^^^^^^^^^^^`, |
126 }, | 126 }, |
127 { src: `()=>{ return bar in continue foo() ; }`, | 127 { src: `()=>{ return bar in continue foo() ; }`, |
128 err: ` ^^^^^^^^^^^^^^`, | 128 err: ` ^^^^^^^^^^^^^^`, |
129 }, | 129 }, |
130 { src: `()=>{ function* G() { yield continue foo(); } }`, | 130 { src: `()=>{ function* G() { yield continue foo(); } }`, |
131 err: ` ^^^^^^^^^^^^^^`, | 131 err: ` ^^^^^`, |
| 132 }, |
| 133 { src: `()=>{ function* G() { return continue foo(); } }`, |
| 134 err: ` ^^^^^`, |
132 }, | 135 }, |
133 { src: `()=>{ (1, 2, 3, continue f() ) => {} }`, | 136 { src: `()=>{ (1, 2, 3, continue f() ) => {} }`, |
134 err: ` ^^^^^^^^^^^^`, | 137 err: ` ^^^^^^^^^^^^`, |
135 }, | 138 }, |
136 { src: `()=>{ (... continue f()) => {} }`, | 139 { src: `()=>{ (... continue f()) => {} }`, |
137 err: ` ^^^^^^^^^^^^`, | 140 err: ` ^^^^^^^^^^^^`, |
138 }, | 141 }, |
139 { src: `()=>{ (a, b, c, ... continue f() ) => {} }`, | 142 { src: `()=>{ (a, b, c, ... continue f() ) => {} }`, |
140 err: ` ^^^^^^^^^^^^`, | 143 err: ` ^^^^^^^^^^^^`, |
141 }, | 144 }, |
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
228 }, | 231 }, |
229 { src: `()=>{ const c = continue foo() }`, | 232 { src: `()=>{ const c = continue foo() }`, |
230 err: ` ^^^^^^^^^^^^^^^`, | 233 err: ` ^^^^^^^^^^^^^^^`, |
231 }, | 234 }, |
232 { src: `class A {}; class B extends A { constructor() { return continue fo
o () ; } }`, | 235 { src: `class A {}; class B extends A { constructor() { return continue fo
o () ; } }`, |
233 err: ` ^^^^^^^^^^^
^^^^`, | 236 err: ` ^^^^^^^^^^^
^^^^`, |
234 }, | 237 }, |
235 { src: `class A extends continue f () {}; }`, | 238 { src: `class A extends continue f () {}; }`, |
236 err: ` ^^^^^^^^^^^^^`, | 239 err: ` ^^^^^^^^^^^^^`, |
237 }, | 240 }, |
| 241 { src: `async() => continue foo()`, |
| 242 err: ` ^^^^^`, |
| 243 }, |
238 ], | 244 ], |
239 }, | 245 }, |
240 { msg: "Tail call expression in try block", | 246 { msg: "Tail call expression in try block", |
241 tests: [ | 247 tests: [ |
242 { src: `()=>{ try { return continue f ( ) ; } catch(e) {} }`, | 248 { src: `()=>{ try { return continue f ( ) ; } catch(e) {} }`, |
243 err: ` ^^^^^^^^^^^^^^^^`, | 249 err: ` ^^^^^^^^^^^^^^^^`, |
244 }, | 250 }, |
245 { src: `()=>{ try { try { smth; } catch(e) { return continue f( ) ; } }`
, | 251 { src: `()=>{ try { try { smth; } catch(e) { return continue f( ) ; } }`
, |
246 err: ` ^^^^^^^^^^^^^^`, | 252 err: ` ^^^^^^^^^^^^^^`, |
247 }, | 253 }, |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
304 `()=>{ return continue a.b.c.foo () ; }`, | 310 `()=>{ return continue a.b.c.foo () ; }`, |
305 `()=>{ return continue a().b.c().d.foo () ; }`, | 311 `()=>{ return continue a().b.c().d.foo () ; }`, |
306 `()=>{ return continue foo (1)(2)(3, 4) ; }`, | 312 `()=>{ return continue foo (1)(2)(3, 4) ; }`, |
307 `()=>{ return continue (0, eval)(); }`, | 313 `()=>{ return continue (0, eval)(); }`, |
308 `()=>{ return ( continue b() ) ; }`, | 314 `()=>{ return ( continue b() ) ; }`, |
309 "()=>{ return continue bar`ab cd ef` ; }", | 315 "()=>{ return continue bar`ab cd ef` ; }", |
310 "()=>{ return continue bar`ab ${cd} ef` ; }", | 316 "()=>{ return continue bar`ab ${cd} ef` ; }", |
311 `()=>{ return a || continue f() ; }`, | 317 `()=>{ return a || continue f() ; }`, |
312 `()=>{ return a && continue f() ; }`, | 318 `()=>{ return a && continue f() ; }`, |
313 `()=>{ return a , continue f() ; }`, | 319 `()=>{ return a , continue f() ; }`, |
314 `()=>{ function* G() { return continue foo(); } }`, | |
315 `()=>{ class A { foo() { return continue super.f() ; } } }`, | 320 `()=>{ class A { foo() { return continue super.f() ; } } }`, |
316 `()=>{ function B() { return continue new.target() ; } }`, | 321 `()=>{ function B() { return continue new.target() ; } }`, |
317 `()=>{ return continue do { x ? foo() : bar() ; }() }`, | 322 `()=>{ return continue do { x ? foo() : bar() ; }() }`, |
318 `()=>{ return continue (do { x ? foo() : bar() ; })() }`, | 323 `()=>{ return continue (do { x ? foo() : bar() ; })() }`, |
319 `()=>{ return do { 1, continue foo() } }`, | 324 `()=>{ return do { 1, continue foo() } }`, |
320 `()=>{ return do { x ? continue foo() : y } }`, | 325 `()=>{ return do { x ? continue foo() : y } }`, |
321 `()=>{ return a || (b && continue c()); }`, | 326 `()=>{ return a || (b && continue c()); }`, |
322 `()=>{ return a && (b || continue c()); }`, | 327 `()=>{ return a && (b || continue c()); }`, |
323 `()=>{ return a || (b ? c : continue d()); }`, | 328 `()=>{ return a || (b ? c : continue d()); }`, |
324 `()=>{ return 1, 2, 3, a || (b ? c : continue d()); }`, | 329 `()=>{ return 1, 2, 3, a || (b ? c : continue d()); }`, |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
379 (function() { | 384 (function() { |
380 for (var src of NoErrorTests) { | 385 for (var src of NoErrorTests) { |
381 print("======================================="); | 386 print("======================================="); |
382 print("Source | " + src); | 387 print("Source | " + src); |
383 src = `"use strict"; ` + src; | 388 src = `"use strict"; ` + src; |
384 Realm.eval(0, src); | 389 Realm.eval(0, src); |
385 print("PASSED"); | 390 print("PASSED"); |
386 print(); | 391 print(); |
387 } | 392 } |
388 })(); | 393 })(); |
OLD | NEW |