@@ -1280,7 +1280,7 @@ namespace ts {
1280
1280
function bindInitializedVariableFlow ( node : VariableDeclaration | ArrayBindingElement ) {
1281
1281
const name = ! isOmittedExpression ( node ) ? node . name : undefined ;
1282
1282
if ( isBindingPattern ( name ) ) {
1283
- for ( const child of name . elements ) {
1283
+ for ( const child of < ArrayBindingElement [ ] > name . elements ) {
1284
1284
bindInitializedVariableFlow ( child ) ;
1285
1285
}
1286
1286
}
@@ -2629,7 +2629,7 @@ namespace ts {
2629
2629
}
2630
2630
2631
2631
// parameters with object rest destructuring are ES Next syntax
2632
- if ( subtreeFlags & ( TransformFlags . ContainsRest | TransformFlags . ContainsObjectRest ) ) {
2632
+ if ( subtreeFlags & TransformFlags . ContainsObjectRest ) {
2633
2633
transformFlags |= TransformFlags . AssertESNext ;
2634
2634
}
2635
2635
@@ -2867,7 +2867,7 @@ namespace ts {
2867
2867
}
2868
2868
2869
2869
// function declarations with object rest destructuring are ES Next syntax
2870
- if ( subtreeFlags & ( TransformFlags . ContainsRest | TransformFlags . ContainsObjectRest ) ) {
2870
+ if ( subtreeFlags & TransformFlags . ContainsObjectRest ) {
2871
2871
transformFlags |= TransformFlags . AssertESNext ;
2872
2872
}
2873
2873
@@ -2909,7 +2909,7 @@ namespace ts {
2909
2909
}
2910
2910
2911
2911
// function expressions with object rest destructuring are ES Next syntax
2912
- if ( subtreeFlags & ( TransformFlags . ContainsRest | TransformFlags . ContainsObjectRest ) ) {
2912
+ if ( subtreeFlags & TransformFlags . ContainsObjectRest ) {
2913
2913
transformFlags |= TransformFlags . AssertESNext ;
2914
2914
}
2915
2915
@@ -2952,7 +2952,7 @@ namespace ts {
2952
2952
}
2953
2953
2954
2954
// arrow functions with object rest destructuring are ES Next syntax
2955
- if ( subtreeFlags & ( TransformFlags . ContainsRest | TransformFlags . ContainsObjectRest ) ) {
2955
+ if ( subtreeFlags & TransformFlags . ContainsObjectRest ) {
2956
2956
transformFlags |= TransformFlags . AssertESNext ;
2957
2957
}
2958
2958
@@ -2982,16 +2982,11 @@ namespace ts {
2982
2982
2983
2983
function computeVariableDeclaration ( node : VariableDeclaration , subtreeFlags : TransformFlags ) {
2984
2984
let transformFlags = subtreeFlags ;
2985
- const nameKind = node . name . kind ;
2985
+ transformFlags |= TransformFlags . AssertES2015 | TransformFlags . ContainsBindingPattern ;
2986
2986
2987
- // A VariableDeclaration with an object binding pattern is ES2015 syntax
2988
- // and possibly ESNext syntax if it contains an object binding pattern
2989
- if ( nameKind === SyntaxKind . ObjectBindingPattern ) {
2990
- transformFlags |= TransformFlags . AssertESNext | TransformFlags . AssertES2015 | TransformFlags . ContainsBindingPattern ;
2991
- }
2992
- // A VariableDeclaration with an object binding pattern is ES2015 syntax.
2993
- else if ( nameKind === SyntaxKind . ArrayBindingPattern ) {
2994
- transformFlags |= TransformFlags . AssertES2015 | TransformFlags . ContainsBindingPattern ;
2987
+ // A VariableDeclaration containing ObjectRest is ESNext syntax
2988
+ if ( subtreeFlags & TransformFlags . ContainsObjectRest ) {
2989
+ transformFlags |= TransformFlags . AssertESNext ;
2995
2990
}
2996
2991
2997
2992
// Type annotations are TypeScript syntax.
@@ -3213,13 +3208,6 @@ namespace ts {
3213
3208
transformFlags |= TransformFlags . AssertESNext | TransformFlags . ContainsSpread | TransformFlags . ContainsObjectSpread ;
3214
3209
break ;
3215
3210
3216
- case SyntaxKind . BindingElement :
3217
- transformFlags |= TransformFlags . AssertES2015 ;
3218
- if ( ( < BindingElement > node ) . dotDotDotToken ) {
3219
- transformFlags |= TransformFlags . ContainsRest ;
3220
- }
3221
- break ;
3222
-
3223
3211
case SyntaxKind . SuperKeyword :
3224
3212
// This node is ES6 syntax.
3225
3213
transformFlags |= TransformFlags . AssertES2015 ;
@@ -3232,7 +3220,7 @@ namespace ts {
3232
3220
3233
3221
case SyntaxKind . ObjectBindingPattern :
3234
3222
transformFlags |= TransformFlags . AssertES2015 | TransformFlags . ContainsBindingPattern ;
3235
- if ( subtreeFlags & TransformFlags . ContainsSpread ) {
3223
+ if ( subtreeFlags & TransformFlags . ContainsRest ) {
3236
3224
transformFlags |= TransformFlags . AssertESNext | TransformFlags . ContainsObjectRest ;
3237
3225
}
3238
3226
excludeFlags = TransformFlags . BindingPatternExcludes ;
@@ -3243,6 +3231,13 @@ namespace ts {
3243
3231
excludeFlags = TransformFlags . BindingPatternExcludes ;
3244
3232
break ;
3245
3233
3234
+ case SyntaxKind . BindingElement :
3235
+ transformFlags |= TransformFlags . AssertES2015 ;
3236
+ if ( ( < BindingElement > node ) . dotDotDotToken ) {
3237
+ transformFlags |= TransformFlags . ContainsRest ;
3238
+ }
3239
+ break ;
3240
+
3246
3241
case SyntaxKind . Decorator :
3247
3242
// This node is TypeScript syntax, and marks its container as also being TypeScript syntax.
3248
3243
transformFlags |= TransformFlags . AssertTypeScript | TransformFlags . ContainsDecorators ;
0 commit comments