@@ -1120,11 +1120,15 @@ namespace ts {
11201120 // We add the nodes within the `try` block to the `finally`'s antecedents if there's no catch block
11211121 // (If there is a `catch` block, it will have all these antecedents instead, and the `finally` will
11221122 // have the end of the `try` block and the end of the `catch` block)
1123+ let preFinallyPrior = preTryFlow ;
11231124 if ( ! node . catchClause ) {
11241125 if ( tryPriors . length ) {
1126+ const preFinallyFlow = createBranchLabel ( ) ;
1127+ addAntecedent ( preFinallyFlow , preTryFlow ) ;
11251128 for ( const p of tryPriors ) {
1126- addAntecedent ( preFinallyLabel , p ) ;
1129+ addAntecedent ( preFinallyFlow , p ) ;
11271130 }
1131+ preFinallyPrior = finishFlowLabel ( preFinallyFlow ) ;
11281132 }
11291133 }
11301134
@@ -1156,7 +1160,7 @@ namespace ts {
11561160 //
11571161 // extra edges that we inject allows to control this behavior
11581162 // if when walking the flow we step on post-finally edge - we can mark matching pre-finally edge as locked so it will be skipped.
1159- const preFinallyFlow : PreFinallyFlow = { flags : FlowFlags . PreFinally , antecedent : preTryFlow , lock : { } } ;
1163+ const preFinallyFlow : PreFinallyFlow = { flags : FlowFlags . PreFinally , antecedent : preFinallyPrior , lock : { } } ;
11601164 addAntecedent ( preFinallyLabel , preFinallyFlow ) ;
11611165
11621166 currentFlow = finishFlowLabel ( preFinallyLabel ) ;
@@ -3137,8 +3141,8 @@ namespace ts {
31373141
31383142 if ( operatorTokenKind === SyntaxKind . EqualsToken && leftKind === SyntaxKind . ObjectLiteralExpression ) {
31393143 // Destructuring object assignments with are ES2015 syntax
3140- // and possibly ESNext if they contain rest
3141- transformFlags |= TransformFlags . AssertESNext | TransformFlags . AssertES2015 | TransformFlags . AssertDestructuringAssignment ;
3144+ // and possibly ES2018 if they contain rest
3145+ transformFlags |= TransformFlags . AssertES2018 | TransformFlags . AssertES2015 | TransformFlags . AssertDestructuringAssignment ;
31423146 }
31433147 else if ( operatorTokenKind === SyntaxKind . EqualsToken && leftKind === SyntaxKind . ArrayLiteralExpression ) {
31443148 // Destructuring assignments are ES2015 syntax.
@@ -3174,9 +3178,9 @@ namespace ts {
31743178 transformFlags |= TransformFlags . AssertTypeScript | TransformFlags . ContainsTypeScriptClassSyntax ;
31753179 }
31763180
3177- // parameters with object rest destructuring are ES Next syntax
3181+ // parameters with object rest destructuring are ES2018 syntax
31783182 if ( subtreeFlags & TransformFlags . ContainsObjectRestOrSpread ) {
3179- transformFlags |= TransformFlags . AssertESNext ;
3183+ transformFlags |= TransformFlags . AssertES2018 ;
31803184 }
31813185
31823186 // If a parameter has an initializer, a binding pattern or a dotDotDot token, then
@@ -3326,9 +3330,9 @@ namespace ts {
33263330 transformFlags |= TransformFlags . AssertTypeScript ;
33273331 }
33283332
3329- // function declarations with object rest destructuring are ES Next syntax
3333+ // function declarations with object rest destructuring are ES2018 syntax
33303334 if ( subtreeFlags & TransformFlags . ContainsObjectRestOrSpread ) {
3331- transformFlags |= TransformFlags . AssertESNext ;
3335+ transformFlags |= TransformFlags . AssertES2018 ;
33323336 }
33333337
33343338 node . transformFlags = transformFlags | TransformFlags . HasComputedFlags ;
@@ -3350,14 +3354,14 @@ namespace ts {
33503354 transformFlags |= TransformFlags . AssertTypeScript ;
33513355 }
33523356
3353- // function declarations with object rest destructuring are ES Next syntax
3357+ // function declarations with object rest destructuring are ES2018 syntax
33543358 if ( subtreeFlags & TransformFlags . ContainsObjectRestOrSpread ) {
3355- transformFlags |= TransformFlags . AssertESNext ;
3359+ transformFlags |= TransformFlags . AssertES2018 ;
33563360 }
33573361
33583362 // An async method declaration is ES2017 syntax.
33593363 if ( hasModifier ( node , ModifierFlags . Async ) ) {
3360- transformFlags |= node . asteriskToken ? TransformFlags . AssertESNext : TransformFlags . AssertES2017 ;
3364+ transformFlags |= node . asteriskToken ? TransformFlags . AssertES2018 : TransformFlags . AssertES2017 ;
33613365 }
33623366
33633367 if ( node . asteriskToken ) {
@@ -3381,9 +3385,9 @@ namespace ts {
33813385 transformFlags |= TransformFlags . AssertTypeScript ;
33823386 }
33833387
3384- // function declarations with object rest destructuring are ES Next syntax
3388+ // function declarations with object rest destructuring are ES2018 syntax
33853389 if ( subtreeFlags & TransformFlags . ContainsObjectRestOrSpread ) {
3386- transformFlags |= TransformFlags . AssertESNext ;
3390+ transformFlags |= TransformFlags . AssertES2018 ;
33873391 }
33883392
33893393 node . transformFlags = transformFlags | TransformFlags . HasComputedFlags ;
@@ -3427,12 +3431,12 @@ namespace ts {
34273431
34283432 // An async function declaration is ES2017 syntax.
34293433 if ( modifierFlags & ModifierFlags . Async ) {
3430- transformFlags |= node . asteriskToken ? TransformFlags . AssertESNext : TransformFlags . AssertES2017 ;
3434+ transformFlags |= node . asteriskToken ? TransformFlags . AssertES2018 : TransformFlags . AssertES2017 ;
34313435 }
34323436
3433- // function declarations with object rest destructuring are ES Next syntax
3437+ // function declarations with object rest destructuring are ES2018 syntax
34343438 if ( subtreeFlags & TransformFlags . ContainsObjectRestOrSpread ) {
3435- transformFlags |= TransformFlags . AssertESNext ;
3439+ transformFlags |= TransformFlags . AssertES2018 ;
34363440 }
34373441
34383442 // If a FunctionDeclaration's subtree has marked the container as needing to capture the
@@ -3469,12 +3473,12 @@ namespace ts {
34693473
34703474 // An async function expression is ES2017 syntax.
34713475 if ( hasModifier ( node , ModifierFlags . Async ) ) {
3472- transformFlags |= node . asteriskToken ? TransformFlags . AssertESNext : TransformFlags . AssertES2017 ;
3476+ transformFlags |= node . asteriskToken ? TransformFlags . AssertES2018 : TransformFlags . AssertES2017 ;
34733477 }
34743478
3475- // function expressions with object rest destructuring are ES Next syntax
3479+ // function expressions with object rest destructuring are ES2018 syntax
34763480 if ( subtreeFlags & TransformFlags . ContainsObjectRestOrSpread ) {
3477- transformFlags |= TransformFlags . AssertESNext ;
3481+ transformFlags |= TransformFlags . AssertES2018 ;
34783482 }
34793483
34803484
@@ -3513,9 +3517,9 @@ namespace ts {
35133517 transformFlags |= TransformFlags . AssertES2017 ;
35143518 }
35153519
3516- // arrow functions with object rest destructuring are ES Next syntax
3520+ // arrow functions with object rest destructuring are ES2018 syntax
35173521 if ( subtreeFlags & TransformFlags . ContainsObjectRestOrSpread ) {
3518- transformFlags |= TransformFlags . AssertESNext ;
3522+ transformFlags |= TransformFlags . AssertES2018 ;
35193523 }
35203524
35213525 // If an ArrowFunction contains a lexical this, its container must capture the lexical this.
@@ -3535,8 +3539,8 @@ namespace ts {
35353539 if ( transformFlags & TransformFlags . Super ) {
35363540 transformFlags ^= TransformFlags . Super ;
35373541 // super inside of an async function requires hoisting the super access (ES2017).
3538- // same for super inside of an async generator, which is ESNext .
3539- transformFlags |= TransformFlags . ContainsSuper | TransformFlags . ContainsES2017 | TransformFlags . ContainsESNext ;
3542+ // same for super inside of an async generator, which is ES2018 .
3543+ transformFlags |= TransformFlags . ContainsSuper | TransformFlags . ContainsES2017 | TransformFlags . ContainsES2018 ;
35403544 }
35413545
35423546 node . transformFlags = transformFlags | TransformFlags . HasComputedFlags ;
@@ -3553,8 +3557,8 @@ namespace ts {
35533557 if ( expressionFlags & TransformFlags . Super ) {
35543558 transformFlags &= ~ TransformFlags . Super ;
35553559 // super inside of an async function requires hoisting the super access (ES2017).
3556- // same for super inside of an async generator, which is ESNext .
3557- transformFlags |= TransformFlags . ContainsSuper | TransformFlags . ContainsES2017 | TransformFlags . ContainsESNext ;
3560+ // same for super inside of an async generator, which is ES2018 .
3561+ transformFlags |= TransformFlags . ContainsSuper | TransformFlags . ContainsES2017 | TransformFlags . ContainsES2018 ;
35583562 }
35593563
35603564 node . transformFlags = transformFlags | TransformFlags . HasComputedFlags ;
@@ -3565,9 +3569,9 @@ namespace ts {
35653569 let transformFlags = subtreeFlags ;
35663570 transformFlags |= TransformFlags . AssertES2015 | TransformFlags . ContainsBindingPattern ;
35673571
3568- // A VariableDeclaration containing ObjectRest is ESNext syntax
3572+ // A VariableDeclaration containing ObjectRest is ES2018 syntax
35693573 if ( subtreeFlags & TransformFlags . ContainsObjectRestOrSpread ) {
3570- transformFlags |= TransformFlags . AssertESNext ;
3574+ transformFlags |= TransformFlags . AssertES2018 ;
35713575 }
35723576
35733577 // Type annotations are TypeScript syntax.
@@ -3674,8 +3678,8 @@ namespace ts {
36743678 switch ( kind ) {
36753679 case SyntaxKind . AsyncKeyword :
36763680 case SyntaxKind . AwaitExpression :
3677- // async/await is ES2017 syntax, but may be ESNext syntax (for async generators)
3678- transformFlags |= TransformFlags . AssertESNext | TransformFlags . AssertES2017 ;
3681+ // async/await is ES2017 syntax, but may be ES2018 syntax (for async generators)
3682+ transformFlags |= TransformFlags . AssertES2018 | TransformFlags . AssertES2017 ;
36793683 break ;
36803684
36813685 case SyntaxKind . TypeAssertionExpression :
@@ -3747,15 +3751,15 @@ namespace ts {
37473751 case SyntaxKind . ForOfStatement :
37483752 // This node is either ES2015 syntax or ES2017 syntax (if it is a for-await-of).
37493753 if ( ( < ForOfStatement > node ) . awaitModifier ) {
3750- transformFlags |= TransformFlags . AssertESNext ;
3754+ transformFlags |= TransformFlags . AssertES2018 ;
37513755 }
37523756 transformFlags |= TransformFlags . AssertES2015 ;
37533757 break ;
37543758
37553759 case SyntaxKind . YieldExpression :
37563760 // This node is either ES2015 syntax (in a generator) or ES2017 syntax (in an async
37573761 // generator).
3758- transformFlags |= TransformFlags . AssertESNext | TransformFlags . AssertES2015 | TransformFlags . ContainsYield ;
3762+ transformFlags |= TransformFlags . AssertES2018 | TransformFlags . AssertES2015 | TransformFlags . ContainsYield ;
37593763 break ;
37603764
37613765 case SyntaxKind . AnyKeyword :
@@ -3824,7 +3828,7 @@ namespace ts {
38243828 break ;
38253829
38263830 case SyntaxKind . SpreadAssignment :
3827- transformFlags |= TransformFlags . AssertESNext | TransformFlags . ContainsObjectRestOrSpread ;
3831+ transformFlags |= TransformFlags . AssertES2018 | TransformFlags . ContainsObjectRestOrSpread ;
38283832 break ;
38293833
38303834 case SyntaxKind . SuperKeyword :
@@ -3841,7 +3845,7 @@ namespace ts {
38413845 case SyntaxKind . ObjectBindingPattern :
38423846 transformFlags |= TransformFlags . AssertES2015 | TransformFlags . ContainsBindingPattern ;
38433847 if ( subtreeFlags & TransformFlags . ContainsRestOrSpread ) {
3844- transformFlags |= TransformFlags . AssertESNext | TransformFlags . ContainsObjectRestOrSpread ;
3848+ transformFlags |= TransformFlags . AssertES2018 | TransformFlags . ContainsObjectRestOrSpread ;
38453849 }
38463850 excludeFlags = TransformFlags . BindingPatternExcludes ;
38473851 break ;
@@ -3879,8 +3883,8 @@ namespace ts {
38793883
38803884 if ( subtreeFlags & TransformFlags . ContainsObjectRestOrSpread ) {
38813885 // If an ObjectLiteralExpression contains a spread element, then it
3882- // is an ES next node.
3883- transformFlags |= TransformFlags . AssertESNext ;
3886+ // is an ES2018 node.
3887+ transformFlags |= TransformFlags . AssertES2018 ;
38843888 }
38853889
38863890 break ;
@@ -3915,8 +3919,8 @@ namespace ts {
39153919 break ;
39163920
39173921 case SyntaxKind . ReturnStatement :
3918- // Return statements may require an `await` in ESNext .
3919- transformFlags |= TransformFlags . ContainsHoistedDeclarationOrCompletion | TransformFlags . AssertESNext ;
3922+ // Return statements may require an `await` in ES2018 .
3923+ transformFlags |= TransformFlags . ContainsHoistedDeclarationOrCompletion | TransformFlags . AssertES2018 ;
39203924 break ;
39213925
39223926 case SyntaxKind . ContinueStatement :
0 commit comments