| 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 |