From 0819ca897cf2dc61f8e60f51870e192ae28c764b Mon Sep 17 00:00:00 2001 From: Anders Hejlsberg Date: Fri, 6 Feb 2015 07:39:11 -0800 Subject: [PATCH] Addressing CR feedback --- src/compiler/emitter.ts | 27 ++++++++++++++++----------- src/compiler/parser.ts | 10 +++------- 2 files changed, 19 insertions(+), 18 deletions(-) diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index 86d85f37199..ef4603de575 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -2374,7 +2374,7 @@ module ts { i++; } write("["); - emitList(elements, pos, i - pos, multiLine, trailingComma); + emitList(elements, pos, i - pos, multiLine, trailingComma && i === length); write("]"); pos = i; } @@ -2389,17 +2389,17 @@ module ts { var elements = node.elements; if (elements.length === 0) { write("[]"); - return; } - if (languageVersion >= ScriptTarget.ES6) { + else if (languageVersion >= ScriptTarget.ES6) { write("["); - emitList(elements, 0, elements.length, /*multiLine*/(node.flags & NodeFlags.MultiLine) !== 0, + emitList(elements, 0, elements.length, /*multiLine*/ (node.flags & NodeFlags.MultiLine) !== 0, /*trailingComma*/ elements.hasTrailingComma); write("]"); - return; } - emitListWithSpread(elements, /*multiLine*/(node.flags & NodeFlags.MultiLine) !== 0, - /*trailingComma*/ elements.hasTrailingComma); + else { + emitListWithSpread(elements, /*multiLine*/ (node.flags & NodeFlags.MultiLine) !== 0, + /*trailingComma*/ elements.hasTrailingComma); + } } function emitObjectLiteral(node: ObjectLiteralExpression) { @@ -2502,12 +2502,12 @@ module ts { function skipParentheses(node: Expression): Expression { while (node.kind === SyntaxKind.ParenthesizedExpression || node.kind === SyntaxKind.TypeAssertionExpression) { - node = (node).expression; + node = (node).expression; } return node; } - function emitTarget(node: Expression): Expression { + function emitCallTarget(node: Expression): Expression { if (node.kind === SyntaxKind.Identifier || node.kind === SyntaxKind.ThisKeyword || node.kind === SyntaxKind.SuperKeyword) { emit(node); return node; @@ -2526,12 +2526,14 @@ module ts { var target: Expression; var expr = skipParentheses(node.expression); if (expr.kind === SyntaxKind.PropertyAccessExpression) { - target = emitTarget((expr).expression); + // Target will be emitted as "this" argument + target = emitCallTarget((expr).expression); write("."); emit((expr).name); } else if (expr.kind === SyntaxKind.ElementAccessExpression) { - target = emitTarget((expr).expression); + // Target will be emitted as "this" argument + target = emitCallTarget((expr).expression); write("["); emit((expr).argumentExpression); write("]"); @@ -2546,13 +2548,16 @@ module ts { write(".apply("); if (target) { if (target.kind === SyntaxKind.SuperKeyword) { + // Calls of form super(...) and super.foo(...) emitThis(target); } else { + // Calls of form obj.foo(...) emit(target); } } else { + // Calls of form foo(...) write("void 0"); } write(", "); diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 163c8c1272b..937aa2808e1 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -3530,12 +3530,6 @@ module ts { return finishNode(node); } - function parseAssignmentExpressionOrOmittedExpression(): Expression { - return token === SyntaxKind.CommaToken - ? createNode(SyntaxKind.OmittedExpression) - : parseAssignmentExpressionOrHigher(); - } - function parseSpreadElement(): Expression { var node = createNode(SyntaxKind.SpreadElementExpression); parseExpected(SyntaxKind.DotDotDotToken); @@ -3544,7 +3538,9 @@ module ts { } function parseArgumentOrArrayLiteralElement(): Expression { - return token === SyntaxKind.DotDotDotToken ? parseSpreadElement() : parseAssignmentExpressionOrOmittedExpression(); + return token === SyntaxKind.DotDotDotToken ? parseSpreadElement() : + token === SyntaxKind.CommaToken ? createNode(SyntaxKind.OmittedExpression) : + parseAssignmentExpressionOrHigher(); } function parseArgumentExpression(): Expression {