8000 Merge branch 'transforms-transformer' into transforms-printer · nycdotnet/TypeScript@98ab964 · GitHub
[go: up one dir, main page]

Skip to content

Commit 98ab964

Browse files
committed
Merge branch 'transforms-transformer' into transforms-printer
2 parents 61f3ba6 + 0937cec commit 98ab964

File tree

2 files changed

+132
-79
lines changed

2 files changed

+132
-79
lines changed

src/compiler/factory.ts

Lines changed: 52 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -250,7 +250,7 @@ namespace ts {
250250
node.decorators = undefined;
251251
node.modifiers = undefined;
252252
node.typeParameters = undefined;
253-
node.parameters = createSynthesizedNodeArray(parameters);
253+
node.parameters = createNodeArray(parameters);
254254
node.type = undefined;
255255
node.body = body;
256256
return node;
@@ -286,15 +286,15 @@ namespace ts {
286286
node.name = typeof name === "string" ? createIdentifier(name) : name;
287287
node.questionToken = undefined;
288288
node.type = undefined;
289-
node.initializer = initializer;
289+
node.initializer = initializer ? parenthesizeExpressionForList(initializer) : undefined;
290290
return node;
291291
}
292292

293293
// Expression
294294

295295
export function createArrayLiteral(elements?: Expression[]) {
296296
const node = <ArrayLiteralExpression>createNode(SyntaxKind.ArrayLiteralExpression);
297-
node.elements = createNodeArray(elements);
297+
node.elements = parenthesizeListElements(createNodeArray(elements));
298298
return node;
299299
}
300300

@@ -322,14 +322,16 @@ namespace ts {
322322
export function createCall(expression: Expression, argumentsArray: Expression[], location?: TextRange) {
323323
const node = <CallExpression>createNode(SyntaxKind.CallExpression, location);
324324
node.expression = parenthesizeForAccess(expression);
325-
node.arguments = createNodeArray(argumentsArray);
325+
node.arguments = parenthesizeListElements(createNodeArray(argumentsArray));
326326
return node;
327327
}
328328

329329
export function createNew(expression: Expression, argumentsArray: Expression[], location?: TextRange) {
330330
const node = <NewExpression>createNode(SyntaxKind.NewExpression, location);
331331
node.expression = parenthesizeForAccess(expression);
332-
node.arguments = argumentsArray ? createNodeArray(argumentsArray) : undefined;
332+
node.arguments = argumentsArray
333+
? parenthesizeListElements(createNodeArray(argumentsArray))
334+
: undefined;
333335
return node;
334336
}
335337

@@ -358,7 +360,7 @@ namespace ts {
358360
node.parameters = createNodeArray(parameters);
359361
node.type = undefined;
360362
node.equalsGreaterThanToken = createNode(SyntaxKind.EqualsGreaterThanToken);
361-
node.body = body;
363+
node.body = parenthesizeConciseBody(body);
362364
return node;
363365
}
364366

@@ -414,7 +416,7 @@ namespace ts {
414416

415417
export function createSpread(expression: Expression) {
416418
const node = <SpreadElementExpression>createNode(SyntaxKind.SpreadElementExpression);
417-
node.expression = expression;
419+
node.expression = parenthesizeExpressionForList(expression);
418420
return node;
419421
}
420422

@@ -424,8 +426,8 @@ namespace ts {
424426
node.modifiers = undefined;
425427
node.name = name;
426428
node.typeParameters = undefined;
427-
node.heritageClauses = createSynthesizedNodeArray(heritageClauses);
428-
node.members = createSynthesizedNodeArray(members);
429+
node.heritageClauses = createNodeArray(heritageClauses);
430+
node.members = createNodeArray(members);
429431
return node;
430432
}
431433

@@ -469,7 +471,7 @@ namespace ts {
469471
export function createVariableDeclaration(name: string | BindingPattern | Identifier, initializer?: Expression, location?: TextRange): VariableDeclaration {
470472
const node = <VariableDeclaration>createNode(SyntaxKind.VariableDeclaration, location);
471473
node.name = typeof name === "string" ? createIdentifier(name) : name;
472-
node.initializer = initializer;
474+
node.initializer = initializer !== undefined ? parenthesizeExpressionForList(initializer) : undefined;
473475
return node;
474476
}
475477

@@ -479,7 +481,7 @@ namespace ts {
479481

480482
export function createStatement(expression: Expression, location?: TextRange): ExpressionStatement {
481483
const node = <ExpressionStatement>createNode(SyntaxKind.ExpressionStatement, location);
482-
node.expression = expression;
484+
node.expression = parenthesizeExpressionForExpressionStatement(expression);
483485
return node;
484486
}
485487

@@ -562,8 +564,8 @@ namespace ts {
562564
setModifiers(node, modifiers);
563565
node.name = name;
564566
node.typeParameters = undefined;
565-
node.heritageClauses = createSynthesizedNodeArray(heritageClauses);
566-
node.members = createSynthesizedNodeArray(members);
567+
node.heritageClauses = createNodeArray(heritageClauses);
568+
node.members = createNodeArray(members);
567569
return node;
568570
}
569571

@@ -599,7 +601,14 @@ namespace ts {
599601
export function createHeritageClause(token: SyntaxKind, types: ExpressionWithTypeArguments[], location?: TextRange) {
600602
const node = <HeritageClause>createNode(SyntaxKind.HeritageClause, location);
601603
node.token = token;
602-
node.types = createSynthesizedNodeArray(types);
604+
node.types = createNodeArray(types);
605+
return node;
606+
}
607+
608+
export function createCaseClause(expression: Expression, statements: Statement[], location?: TextRange) {
609+
const node = <CaseClause>createNode(SyntaxKind.CaseClause, location);
610+
node.expression = parenthesizeExpressionForList(expression);
611+
node.statements = createNodeArray(statements);
603612
return node;
604613
}
605614

@@ -609,7 +618,7 @@ namespace ts {
609618
const node = <PropertyAssignment>createNode(SyntaxKind.PropertyAssignment, location);
610619
node.name = typeof name === "string" ? createIdentifier(name) : name;
611620
node.questionToken = undefined;
612-
node.initializer = initializer;
621+
node.initializer = initializer !== undefined ? parenthesizeExpressionForList(initializer) : undefined;
613622
return node;
614623
}
615624

@@ -1206,6 +1215,26 @@ namespace ts {
12061215
: createParen(operand, /*location*/ operand);
12071216
}
12081217

1218+
function parenthesizeListElements(elements: NodeArray<Expression>) {
1219+
let result: Expression[];
1220+
for (let i = 0; i < elements.length; i++) {
1221+
const element = parenthesizeExpressionForList(elements[i]);
1222+
if (result !== undefined || element !== elements[i]) {
1223+
if (result === undefined) {
1224+
result = elements.slice(0, i);
1225+
}
1226+
1227+
result.push(element);
1228+
}
1229+
}
1230+
1231+
if (result !== undefined) {
1232+
return createNodeArray(result, elements, elements.hasTrailingComma);
1233+
}
1234+
1235+
return elements;
1236+
}
1237+
12091238
export function parenthesizeExpressionForList(expression: Expression) {
12101239
const expressionPrecedence = getExpressionPrecedence(expression);
12111240
const commaPrecedence = getOperatorPrecedence(SyntaxKind.BinaryExpression, SyntaxKind.CommaToken);
@@ -1231,6 +1260,14 @@ namespace ts {
12311260
return expression;
12321261
}
12331262

1263+
export function parenthesizeConciseBody(body: ConciseBody): ConciseBody {
1264+
if (body.kind === SyntaxKind.ObjectLiteralExpression) {
1265+
return createParen(<Expression>body, /*location*/ body);
1266+
}
1267+
1268+
return body;
1269+
}
1270+
12341271
function getLeftmostExpression(node: Expression): Expression {
12351272
while (true) {
12361273
switch (node.kind) {

0 commit comments

Comments
 (0)
0