@@ -1968,16 +1968,20 @@ namespace ts {
19681968 transformFlags = TransformFlags . AssertTypeScript ;
19691969 }
19701970 }
1971+
19711972 break ;
19721973
19731974 case SyntaxKind . ExpressionStatement :
1974- // if (node.flags & NodeFlags.Generated) {
1975- // let expression = (<ExpressionStatement>node).expression;
1976- // if (expression.kind === SyntaxKind.CallExpression
1977- // && (<CallExpression>expression).expression.kind === SyntaxKind.SuperKeyword) {
1978- // transformFlags |= TransformFlags.AssertES6;
1979- // }
1980- // }
1975+ if ( nodeIsSynthesized ( node ) ) {
1976+ const expression = ( < ExpressionStatement > node ) . expression ;
1977+ if ( nodeIsSynthesized ( expression )
1978+ && isCallExpression ( expression )
1979+ && expression . expression . kind === SyntaxKind . SuperKeyword ) {
1980+ // A synthesized call to `super` should be transformed to a cleaner emit
1981+ // when transpiling to ES5/3.
1982+ transformFlags |= TransformFlags . AssertES6 ;
1983+ }
1984+ }
19811985
19821986 break ;
19831987
@@ -2088,17 +2092,16 @@ namespace ts {
20882092
20892093 case SyntaxKind . VariableDeclarationList :
20902094 // If a VariableDeclarationList is `let` or `const`, then it is ES6 syntax.
2091- if ( node . flags & NodeFlags . Let
2092- || node . flags & NodeFlags . Const ) {
2095+ if ( node . flags & NodeFlags . BlockScoped ) {
20932096 transformFlags |= TransformFlags . AssertES6 ;
20942097 }
20952098
20962099 break ;
20972100
20982101 case SyntaxKind . VariableStatement :
2099- // If a VariableStatement is exported, then it is ES6 syntax.
2102+ // If a VariableStatement is exported, then it is either ES6 or TypeScript syntax.
21002103 if ( node . flags & NodeFlags . Export ) {
2101- transformFlags |= TransformFlags . AssertES6 ;
2104+ transformFlags |= TransformFlags . AssertES6 | TransformFlags . AssertTypeScript ;
21022105 }
21032106
21042107 break ;
@@ -2120,13 +2123,13 @@ namespace ts {
21202123 break ;
21212124
21222125 case SyntaxKind . HeritageClause :
2123- // An `extends` HertiageClause is ES6 syntax.
21242126 if ( ( < HeritageClause > node ) . token === SyntaxKind . ExtendsKeyword ) {
2127+ // An `extends` HeritageClause is ES6 syntax.
21252128 transformFlags |= TransformFlags . AssertES6 ;
21262129 }
2127-
2128- // An `implements` HeritageClause is TypeScript syntax.
2129- else if ( ( < HeritageClause > node ) . token === SyntaxKind . ImplementsKeyword ) {
2130+ else {
2131+ // An `implements` HeritageClause is TypeScript syntax.
2132+ Debug . assert ( ( < HeritageClause > node ) . token === SyntaxKind . ImplementsKeyword ) ;
21302133 transformFlags |= TransformFlags . AssertTypeScript ;
21312134 }
21322135
0 commit comments