diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 422aff11286..83830e16eb2 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -3244,7 +3244,7 @@ module ts { switch (node.kind) { case SyntaxKind.FunctionExpression: case SyntaxKind.ArrowFunction: - return !(node).typeParameters && !forEach((node).parameters, p => p.type); + return isContextSensitiveFunctionLikeDeclaration(node); case SyntaxKind.ObjectLiteralExpression: return forEach((node).properties, isContextSensitiveExpression); case SyntaxKind.ArrayLiteralExpression: @@ -3259,7 +3259,7 @@ module ts { return isContextSensitiveExpression((node).initializer); case SyntaxKind.Method: if (isObjectLiteralMethod(node)) { - return !(node).typeParameters && !forEach((node).parameters, p => p.type); + return isContextSensitiveFunctionLikeDeclaration(node); } return false; } @@ -3267,6 +3267,10 @@ module ts { return false; } + function isContextSensitiveFunctionLikeDeclaration(node: FunctionLikeDeclaration) { + return !(node).typeParameters && !forEach((node).parameters, p => p.type); + } + function getTypeWithoutConstructors(type: Type): Type { if (type.flags & TypeFlags.ObjectType) { var resolved = resolveObjectOrUnionTypeMembers(type); diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index ba48eef2f85..9fccef4d6bf 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -2228,7 +2228,11 @@ module ts { write("]"); } - function emitObjectLiteralMethod(node: MethodDeclaration) { + function emitDownlevelMethod(node: MethodDeclaration) { + if (!isObjectLiteralMethod(node)) { + return; + } + emitLeadingComments(node); emit(node.name); write(": "); @@ -2236,6 +2240,17 @@ module ts { emitSignatureAndBody(node); emitTrailingComments(node); } + + function emitMethod(node: MethodDeclaration) { + if (!isObjectLiteralMethod(node)) { + return; + } + + emitLeadingComments(node); + emit(node.name); + emitSignatureAndBody(node); + emitTrailingComments(node); + } function emitPropertyAssignment(node: PropertyDeclaration) { emitLeadingComments(node); @@ -3536,11 +3551,6 @@ module ts { return emitObjectLiteral(node); case SyntaxKind.LonghandPropertyAssignment: return emitPropertyAssignment(node); - case SyntaxKind.Method: - if (isObjectLiteralMethod(node)) { - return emitObjectLiteralMethod(node); - } - break; case SyntaxKind.ComputedPropertyName: return emitComputedPropertyName(node); case SyntaxKind.PropertyAccessExpression: @@ -3643,6 +3653,8 @@ module ts { switch (node.kind) { case SyntaxKind.ShorthandPropertyAssignment: return emitDownlevelShorthandPropertyAssignment(node); + case SyntaxKind.Method: + return emitDownlevelMethod(node); } } else { @@ -3651,6 +3663,8 @@ module ts { switch (node.kind) { case SyntaxKind.ShorthandPropertyAssignment: return emitShorthandPropertyAssignment(node); + case SyntaxKind.Method: + return emitMethod(node); } } } diff --git a/tests/baselines/reference/constDeclarations-scopes.js b/tests/baselines/reference/constDeclarations-scopes.js index 800dd856422..aa1d59aee81 100644 --- a/tests/baselines/reference/constDeclarations-scopes.js +++ b/tests/baselines/reference/constDeclarations-scopes.js @@ -265,7 +265,7 @@ var C = (function () { })(); // object literals var o = { - f: function () { + f() { const c = 0; n = c; }, diff --git a/tests/baselines/reference/constDeclarations-validContexts.js b/tests/baselines/reference/constDeclarations-validContexts.js index 355f39af2f2..8be43633d70 100644 --- a/tests/baselines/reference/constDeclarations-validContexts.js +++ b/tests/baselines/reference/constDeclarations-validContexts.js @@ -220,7 +220,7 @@ var C = (function () { })(); // object literals var o = { - f: function () { + f() { const c28 = 0; }, f2: function () { diff --git a/tests/baselines/reference/letDeclarations-scopes.js b/tests/baselines/reference/letDeclarations-scopes.js index fb16a03f569..d0f70693d7c 100644 --- a/tests/baselines/reference/letDeclarations-scopes.js +++ b/tests/baselines/reference/letDeclarations-scopes.js @@ -282,7 +282,7 @@ var C = (function () { })(); // object literals var o = { - f: function () { + f() { let l = 0; n = l; }, diff --git a/tests/baselines/reference/letDeclarations-validContexts.js b/tests/baselines/reference/letDeclarations-validContexts.js index 13eaafb0712..fe9ed903bf5 100644 --- a/tests/baselines/reference/letDeclarations-validContexts.js +++ b/tests/baselines/reference/letDeclarations-validContexts.js @@ -240,7 +240,7 @@ var C = (function () { })(); // object literals var o = { - f: function () { + f() { let l28 = 0; }, f2: function () { diff --git a/tests/baselines/reference/objectLiteralShorthandPropertiesES6.js b/tests/baselines/reference/objectLiteralShorthandPropertiesES6.js index b398a231351..c65087a8da7 100644 --- a/tests/baselines/reference/objectLiteralShorthandPropertiesES6.js +++ b/tests/baselines/reference/objectLiteralShorthandPropertiesES6.js @@ -32,7 +32,7 @@ var x3 = { a: 0, b, c, - d: function () { + d() { }, x3, parent: x3 diff --git a/tests/baselines/reference/parserComputedPropertyName3.js b/tests/baselines/reference/parserComputedPropertyName3.js index edb8533ad81..2e73fe87d3a 100644 --- a/tests/baselines/reference/parserComputedPropertyName3.js +++ b/tests/baselines/reference/parserComputedPropertyName3.js @@ -2,5 +2,5 @@ var v = { [e]() { } }; //// [parserComputedPropertyName3.js] -var v = { [e]: function () { +var v = { [e]() { } };