Skip to content

Commit c4dc2ae

Browse files
committed
Merge branch 'transforms-transformer' into transforms-transformer-ts
2 parents f948b14 + 0f16e68 commit c4dc2ae

9 files changed

Lines changed: 643 additions & 482 deletions

File tree

src/compiler/binder.ts

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -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

src/compiler/core.ts

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -188,8 +188,19 @@ namespace ts {
188188
export function concatenate<T>(array1: T[], array2: T[]): T[] {
189189
if (!array2 || !array2.length) return array1;
190190
if (!array1 || !array1.length) return array2;
191+
return [...array1, ...array2];
192+
}
193+
194+
export function append<T>(array: T[], value: T): T[] {
195+
if (value === undefined) return array;
196+
if (!array || !array.length) return [value];
197+
return [...array, value];
198+
}
191199

192-
return array1.concat(array2);
200+
export function prepend<T>(array: T[], value: T): T[] {
201+
if (value === undefined) return array;
202+
if (!array || !array.length) return [value];
203+
return [value, ...array];
193204
}
194205

195206
export function deduplicate<T>(array: T[]): T[] {

0 commit comments

Comments
 (0)