diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index 086a402efb2..e6f3a08453e 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -271,7 +271,7 @@ module ts { }); } - function getAllAccessorDeclarations(node: ClassDeclaration, accessor: AccessorDeclaration) { + function getAllAccessorDeclarations(declarations: NodeArray, accessor: AccessorDeclaration) { var firstAccessor: AccessorDeclaration; var getAccessor: AccessorDeclaration; var setAccessor: AccessorDeclaration; @@ -288,7 +288,7 @@ module ts { } } else { - forEach(node.members,(member: Declaration) => { + forEach(declarations, (member: Declaration) => { if ((member.kind === SyntaxKind.GetAccessor || member.kind === SyntaxKind.SetAccessor) && (member.name).text === (accessor.name).text && (member.flags & NodeFlags.Static) === (accessor.flags & NodeFlags.Static)) { @@ -1116,8 +1116,8 @@ module ts { if (hasDynamicName(node)) { return; } - - var accessors = getAllAccessorDeclarations(node.parent, node); + + var accessors = getAllAccessorDeclarations((node.parent).members, node); if (node === accessors.firstAccessor) { emitJsDocComments(accessors.getAccessor); emitJsDocComments(accessors.setAccessor); @@ -2220,7 +2220,10 @@ module ts { // This function specifically handles numeric/string literals for enum and accessor 'identifiers'. // In a sense, it does not actually emit identifiers as much as it declares a name for a specific property. + // For example, this is utilized when feeding in a result to Object.defineProperty. function emitExpressionForPropertyName(node: DeclarationName) { + Debug.assert(node.kind !== SyntaxKind.BindingElement); + if (node.kind === SyntaxKind.StringLiteral) { emitLiteral(node); } @@ -2417,22 +2420,167 @@ module ts { } } - function emitObjectLiteral(node: ObjectLiteralExpression) { + function emitObjectLiteralBody(node: ObjectLiteralExpression, numElements: number) { write("{"); - var properties = node.properties; - if (properties.length) { + + if (numElements > 0) { + var properties = node.properties; var multiLine = (node.flags & NodeFlags.MultiLine) !== 0; if (!multiLine) { write(" "); } - emitList(properties, 0, properties.length, /*multiLine*/ multiLine, + emitList(properties, 0, numElements, /*multiLine*/ multiLine, /*trailingComma*/ properties.hasTrailingComma && languageVersion >= ScriptTarget.ES5); if (!multiLine) { write(" "); } } + write("}"); } + + function emitDownlevelObjectLiteralWithComputedProperties(node: ObjectLiteralExpression, firstComputedPropertyIndex: number) { + var multiLine = (node.flags & NodeFlags.MultiLine) !== 0; + var properties = node.properties; + + write("("); + + // For computed properties, we need to create a unique handle to the object + // literal so we can modify it without risking internal assignments tainting the object. + var tempVar = createTempVariable(node); + recordTempDeclaration(tempVar); + + // Write out the first non-computed properties + // (or all properties if none of them are computed), + // then emit the rest through indexing on the temp variable. + emit(tempVar) + write(" = "); + emitObjectLiteralBody(node, firstComputedPropertyIndex); + + if (multiLine) { + increaseIndent(); + } + + for (var i = firstComputedPropertyIndex, n = properties.length; i < n; i++) { + writeSeparator(); + + var property = properties[i]; + + emitStart(property) + if (property.kind === SyntaxKind.GetAccessor || property.kind === SyntaxKind.SetAccessor) { + // TODO (drosen): Reconcile with 'emitMemberFunctions'. + var accessors = getAllAccessorDeclarations(node.properties, property); + write("Object.defineProperty("); + emit(tempVar); + write(", "); + emitStart(node.name); + emitExpressionForPropertyName(property.name); + emitEnd(property.name); + write(", {"); + increaseIndent(); + if (accessors.getAccessor) { + writeLine() + emitLeadingComments(accessors.getAccessor); + write("get: "); + emitStart(accessors.getAccessor); + write("function "); + emitSignatureAndBody(accessors.getAccessor); + emitEnd(accessors.getAccessor); + emitTrailingComments(accessors.getAccessor); + write(","); + } + if (accessors.setAccessor) { + writeLine(); + emitLeadingComments(accessors.setAccessor); + write("set: "); + emitStart(accessors.setAccessor); + write("function "); + emitSignatureAndBody(accessors.setAccessor); + emitEnd(accessors.setAccessor); + emitTrailingComments(accessors.setAccessor); + write(","); + } + writeLine(); + write("enumerable: true,"); + writeLine(); + write("configurable: true"); + decreaseIndent(); + writeSeparator(); + write("})"); + emitEnd(property); + } + else { + emitLeadingComments(property); + emitStart(property.name); + emit(tempVar); + emitMemberAccessForPropertyName(property.name); + emitEnd(property.name); + + write(" = "); + + if (property.kind === SyntaxKind.PropertyAssignment) { + emit((property).initializer); + } + else if (property.kind === SyntaxKind.ShorthandPropertyAssignment) { + emitExpressionIdentifier((property).name); + } + else if (property.kind === SyntaxKind.MethodDeclaration) { + emitFunctionDeclaration(property); + } + else { + Debug.fail("ObjectLiteralElement type not accounted for: " + property.kind); + } + } + + emitEnd(property); + } + + writeSeparator(); + emit(tempVar); + + write(")"); + + if (multiLine) { + decreaseIndent(); + } + + function writeSeparator() { + if (multiLine) { + write(","); + writeLine(); + } + else { + write(", "); + } + } + } + + function emitObjectLiteral(node: ObjectLiteralExpression) { + if (languageVersion >= ScriptTarget.ES6) { + emitObjectLiteralBody(node, node.properties.length); + return; + } + + var properties = node.properties; + + // Find the first computed property. + // Everything until that point can be emitted as part of the initial object literal. + var numInitialNonComputedProperties = properties.length; + forEach(properties, (property, i) => { + if (hasDynamicName(properties[i])) { + numInitialNonComputedProperties = i; + return true; + } + }); + + var hasComputedProperty = numInitialNonComputedProperties !== properties.length; + if (hasComputedProperty) { + emitDownlevelObjectLiteralWithComputedProperties(node, numInitialNonComputedProperties); + } + else { + emitObjectLiteralBody(node, properties.length); + } + } function emitComputedPropertyName(node: ComputedPropertyName) { write("["); @@ -2464,7 +2612,7 @@ module ts { // export var obj = { y }; // } // The short-hand property in obj need to emit as such ... = { y : m.y } regardless of the TargetScript version - if (languageVersion < ScriptTarget.ES6 || resolver.getExpressionNamePrefix(node.name)) { + if (languageVersion <= ScriptTarget.ES5 || resolver.getExpressionNamePrefix(node.name)) { // Emit identifier as an identifier write(": "); // Even though this is stored as identifier treat it as an expression @@ -3446,6 +3594,7 @@ module ts { } function emitMemberAccessForPropertyName(memberName: DeclarationName) { + // TODO: (jfreeman,drosen): comment on why this is emitNode instead of emit here. if (memberName.kind === SyntaxKind.StringLiteral || memberName.kind === SyntaxKind.NumericLiteral) { write("["); emitNode(memberName); @@ -3495,13 +3644,14 @@ module ts { emitLeadingComments(member); emitStart(member); emitStart((member).name); - emitNode(node.name); + emitNode(node.name); // TODO (shkamat,drosen): comment for why emitNode instead of emit. if (!(member.flags & NodeFlags.Static)) { write(".prototype"); } emitMemberAccessForPropertyName((member).name); emitEnd((member).name); write(" = "); + // TODO (drosen): Should we performing emitStart twice on emitStart(member)? emitStart(member); emitFunctionDeclaration(member); emitEnd(member); @@ -3510,7 +3660,7 @@ module ts { emitTrailingComments(member); } else if (member.kind === SyntaxKind.GetAccessor || member.kind === SyntaxKind.SetAccessor) { - var accessors = getAllAccessorDeclarations(node, member); + var accessors = getAllAccessorDeclarations(node.members, member); if (member === accessors.firstAccessor) { writeLine(); emitStart(member); @@ -3521,6 +3671,7 @@ module ts { write(".prototype"); } write(", "); + // TODO: Shouldn't emitStart on name occur *here*? emitExpressionForPropertyName((member).name); emitEnd((member).name); write(", {"); diff --git a/tests/baselines/reference/FunctionDeclaration8_es6.js b/tests/baselines/reference/FunctionDeclaration8_es6.js index 5f9f0a2a49e..64f6bff50c0 100644 --- a/tests/baselines/reference/FunctionDeclaration8_es6.js +++ b/tests/baselines/reference/FunctionDeclaration8_es6.js @@ -2,4 +2,5 @@ var v = { [yield]: foo } //// [FunctionDeclaration8_es6.js] -var v = { [yield]: foo }; +var v = (_a = {}, _a[yield] = foo, _a); +var _a; diff --git a/tests/baselines/reference/FunctionDeclaration9_es6.js b/tests/baselines/reference/FunctionDeclaration9_es6.js index 388275ed4fa..bca309d2d62 100644 --- a/tests/baselines/reference/FunctionDeclaration9_es6.js +++ b/tests/baselines/reference/FunctionDeclaration9_es6.js @@ -5,5 +5,6 @@ function * foo() { //// [FunctionDeclaration9_es6.js] function foo() { - var v = { []: foo }; + var v = (_a = {}, _a[] = foo, _a); + var _a; } diff --git a/tests/baselines/reference/FunctionPropertyAssignments5_es6.js b/tests/baselines/reference/FunctionPropertyAssignments5_es6.js index 2bfc675acff..5cd36bdce30 100644 --- a/tests/baselines/reference/FunctionPropertyAssignments5_es6.js +++ b/tests/baselines/reference/FunctionPropertyAssignments5_es6.js @@ -2,5 +2,6 @@ var v = { *[foo()]() { } } //// [FunctionPropertyAssignments5_es6.js] -var v = { [foo()]: function () { -} }; +var v = (_a = {}, _a[foo()] = function () { +}, _a); +var _a; diff --git a/tests/baselines/reference/computedPropertyNames10_ES5.js b/tests/baselines/reference/computedPropertyNames10_ES5.js index cb015e76dff..5d8ff398d6c 100644 --- a/tests/baselines/reference/computedPropertyNames10_ES5.js +++ b/tests/baselines/reference/computedPropertyNames10_ES5.js @@ -20,27 +20,28 @@ var v = { var s; var n; var a; -var v = { - [s]: function () { +var v = (_a = {}, + _a[s] = function () { }, - [n]: function () { + _a[n] = function () { }, - [s + s]: function () { + _a[s + s] = function () { }, - [s + n]: function () { + _a[s + n] = function () { }, - [+s]: function () { + _a[+s] = function () { }, - [""]: function () { + _a[""] = function () { }, - [0]: function () { + _a[0] = function () { }, - [a]: function () { + _a[a] = function () { }, - [true]: function () { + _a[true] = function () { }, - ["hello bye"]: function () { + _a["hello bye"] = function () { }, - ["hello " + a + " bye"]: function () { - } -}; + _a["hello " + a + " bye"] = function () { + }, + _a); +var _a; diff --git a/tests/baselines/reference/computedPropertyNames11_ES5.js b/tests/baselines/reference/computedPropertyNames11_ES5.js index e716515b95c..7005e392748 100644 --- a/tests/baselines/reference/computedPropertyNames11_ES5.js +++ b/tests/baselines/reference/computedPropertyNames11_ES5.js @@ -20,33 +20,78 @@ var v = { var s; var n; var a; -var v = { - get [s]() { - return 0; - }, - set [n](v) { - }, - get [s + s]() { - return 0; - }, - set [s + n](v) { - }, - get [+s]() { - return 0; - }, - set [""](v) { - }, - get [0]() { - return 0; - }, - set [a](v) { - }, - get [true]() { - return 0; - }, - set ["hello bye"](v) { - }, - get ["hello " + a + " bye"]() { - return 0; - } -}; +var v = (_a = {}, + Object.defineProperty(_a, s, { + get: function () { + return 0; + }, + enumerable: true, + configurable: true, + }), + Object.defineProperty(_a, n, { + set: function (v) { + }, + enumerable: true, + configurable: true, + }), + Object.defineProperty(_a, s + s, { + get: function () { + return 0; + }, + enumerable: true, + configurable: true, + }), + Object.defineProperty(_a, s + n, { + set: function (v) { + }, + enumerable: true, + configurable: true, + }), + Object.defineProperty(_a, +s, { + get: function () { + return 0; + }, + enumerable: true, + configurable: true, + }), + Object.defineProperty(_a, "", { + set: function (v) { + }, + enumerable: true, + configurable: true, + }), + Object.defineProperty(_a, 0, { + get: function () { + return 0; + }, + enumerable: true, + configurable: true, + }), + Object.defineProperty(_a, a, { + set: function (v) { + }, + enumerable: true, + configurable: true, + }), + Object.defineProperty(_a, true, { + get: function () { + return 0; + }, + enumerable: true, + configurable: true, + }), + Object.defineProperty(_a, "hello bye", { + set: function (v) { + }, + enumerable: true, + configurable: true, + }), + Object.defineProperty(_a, "hello " + a + " bye", { + get: function () { + return 0; + }, + enumerable: true, + configurable: true, + }), + _a); +var _a; diff --git a/tests/baselines/reference/computedPropertyNames18_ES5.js b/tests/baselines/reference/computedPropertyNames18_ES5.js index 8472e355cd1..a62af506531 100644 --- a/tests/baselines/reference/computedPropertyNames18_ES5.js +++ b/tests/baselines/reference/computedPropertyNames18_ES5.js @@ -7,7 +7,8 @@ function foo() { //// [computedPropertyNames18_ES5.js] function foo() { - var obj = { - [this.bar]: 0 - }; + var obj = (_a = {}, + _a[this.bar] = 0, + _a); + var _a; } diff --git a/tests/baselines/reference/computedPropertyNames19_ES5.js b/tests/baselines/reference/computedPropertyNames19_ES5.js index 50fbd89595d..bda3e01bbed 100644 --- a/tests/baselines/reference/computedPropertyNames19_ES5.js +++ b/tests/baselines/reference/computedPropertyNames19_ES5.js @@ -8,7 +8,8 @@ module M { //// [computedPropertyNames19_ES5.js] var M; (function (M) { - var obj = { - [this.bar]: 0 - }; + var obj = (_a = {}, + _a[this.bar] = 0, + _a); + var _a; })(M || (M = {})); diff --git a/tests/baselines/reference/computedPropertyNames1_ES5.js b/tests/baselines/reference/computedPropertyNames1_ES5.js index 3c58cca5b22..5e630a5b81d 100644 --- a/tests/baselines/reference/computedPropertyNames1_ES5.js +++ b/tests/baselines/reference/computedPropertyNames1_ES5.js @@ -5,10 +5,20 @@ var v = { } //// [computedPropertyNames1_ES5.js] -var v = { - get [0 + 1]() { - return 0; - }, - set [0 + 1](v) { - } //No error -}; +var v = (_a = {}, + Object.defineProperty(_a, 0 + 1, { + get: function () { + return 0; + }, + enumerable: true, + configurable: true, + }), + Object.defineProperty(_a, 0 + 1, { + set: function (v) { + } //No error + , + enumerable: true, + configurable: true, + }), + _a); +var _a; diff --git a/tests/baselines/reference/computedPropertyNames20_ES5.js b/tests/baselines/reference/computedPropertyNames20_ES5.js index 347bbd71abc..1eec0a7bcdb 100644 --- a/tests/baselines/reference/computedPropertyNames20_ES5.js +++ b/tests/baselines/reference/computedPropertyNames20_ES5.js @@ -4,6 +4,7 @@ var obj = { } //// [computedPropertyNames20_ES5.js] -var obj = { - [this.bar]: 0 -}; +var obj = (_a = {}, + _a[this.bar] = 0, + _a); +var _a; diff --git a/tests/baselines/reference/computedPropertyNames22_ES5.js b/tests/baselines/reference/computedPropertyNames22_ES5.js index a3881b01845..b28e0ea68e2 100644 --- a/tests/baselines/reference/computedPropertyNames22_ES5.js +++ b/tests/baselines/reference/computedPropertyNames22_ES5.js @@ -13,11 +13,12 @@ var C = (function () { function C() { } C.prototype.bar = function () { - var obj = { - [this.bar()]: function () { - } - }; + var obj = (_a = {}, + _a[this.bar()] = function () { + }, + _a); return 0; + var _a; }; return C; })(); diff --git a/tests/baselines/reference/computedPropertyNames23_ES5.js b/tests/baselines/reference/computedPropertyNames23_ES5.js index 6e0e63dcf6a..aa3998db260 100644 --- a/tests/baselines/reference/computedPropertyNames23_ES5.js +++ b/tests/baselines/reference/computedPropertyNames23_ES5.js @@ -15,7 +15,8 @@ var C = (function () { C.prototype.bar = function () { return 0; }; - C.prototype[{ [this.bar()]: 1 }[0]] = function () { + C.prototype[(_a = {}, _a[this.bar()] = 1, _a)[0]] = function () { }; return C; })(); +var _a; diff --git a/tests/baselines/reference/computedPropertyNames25_ES5.js b/tests/baselines/reference/computedPropertyNames25_ES5.js index 532751416f2..4bcf877c571 100644 --- a/tests/baselines/reference/computedPropertyNames25_ES5.js +++ b/tests/baselines/reference/computedPropertyNames25_ES5.js @@ -34,11 +34,12 @@ var C = (function (_super) { _super.apply(this, arguments); } C.prototype.foo = function () { - var obj = { - [_super.prototype.bar.call(this)]: function () { - } - }; + var obj = (_a = {}, + _a[_super.prototype.bar.call(this)] = function () { + }, + _a); return 0; + var _a; }; return C; })(Base); diff --git a/tests/baselines/reference/computedPropertyNames26_ES5.js b/tests/baselines/reference/computedPropertyNames26_ES5.js index fd76bf20ed8..705eaaf53e3 100644 --- a/tests/baselines/reference/computedPropertyNames26_ES5.js +++ b/tests/baselines/reference/computedPropertyNames26_ES5.js @@ -34,7 +34,8 @@ var C = (function (_super) { } // Gets emitted as super, not _super, which is consistent with // use of super in static properties initializers. - C.prototype[{ [super.bar.call(this)]: 1 }[0]] = function () { + C.prototype[(_a = {}, _a[super.bar.call(this)] = 1, _a)[0]] = function () { }; return C; })(Base); +var _a; diff --git a/tests/baselines/reference/computedPropertyNames28_ES5.js b/tests/baselines/reference/computedPropertyNames28_ES5.js index c79357908da..418252784a2 100644 --- a/tests/baselines/reference/computedPropertyNames28_ES5.js +++ b/tests/baselines/reference/computedPropertyNames28_ES5.js @@ -26,10 +26,11 @@ var C = (function (_super) { __extends(C, _super); function C() { _super.call(this); - var obj = { - [(_super.call(this), "prop")]: function () { - } - }; + var obj = (_a = {}, + _a[(_super.call(this), "prop")] = function () { + }, + _a); + var _a; } return C; })(Base); diff --git a/tests/baselines/reference/computedPropertyNames29_ES5.js b/tests/baselines/reference/computedPropertyNames29_ES5.js index de0667a874c..93a80128d98 100644 --- a/tests/baselines/reference/computedPropertyNames29_ES5.js +++ b/tests/baselines/reference/computedPropertyNames29_ES5.js @@ -17,10 +17,11 @@ var C = (function () { C.prototype.bar = function () { var _this = this; (function () { - var obj = { - [_this.bar()]: function () { - } // needs capture - }; + var obj = (_a = {}, + _a[_this.bar()] = function () { + }, + _a); + var _a; }); return 0; }; diff --git a/tests/baselines/reference/computedPropertyNames30_ES5.js b/tests/baselines/reference/computedPropertyNames30_ES5.js index 995cb2f8bf0..30d314f1f6a 100644 --- a/tests/baselines/reference/computedPropertyNames30_ES5.js +++ b/tests/baselines/reference/computedPropertyNames30_ES5.js @@ -32,13 +32,14 @@ var C = (function (_super) { function C() { _super.call(this); (function () { - var obj = { + var obj = (_a = {}, // Ideally, we would capture this. But the reference is // illegal, and not capturing this is consistent with //treatment of other similar violations. - [(_super.call(this), "prop")]: function () { - } - }; + _a[(_super.call(this), "prop")] = function () { + }, + _a); + var _a; }); } return C; diff --git a/tests/baselines/reference/computedPropertyNames31_ES5.js b/tests/baselines/reference/computedPropertyNames31_ES5.js index 81d91a3ba31..a079b3fa449 100644 --- a/tests/baselines/reference/computedPropertyNames31_ES5.js +++ b/tests/baselines/reference/computedPropertyNames31_ES5.js @@ -38,10 +38,11 @@ var C = (function (_super) { C.prototype.foo = function () { var _this = this; (function () { - var obj = { - [_super.prototype.bar.call(_this)]: function () { - } // needs capture - }; + var obj = (_a = {}, + _a[_super.prototype.bar.call(_this)] = function () { + }, + _a); + var _a; }); return 0; }; diff --git a/tests/baselines/reference/computedPropertyNames33_ES5.js b/tests/baselines/reference/computedPropertyNames33_ES5.js index 982f6e69c46..24362351196 100644 --- a/tests/baselines/reference/computedPropertyNames33_ES5.js +++ b/tests/baselines/reference/computedPropertyNames33_ES5.js @@ -17,11 +17,12 @@ var C = (function () { function C() { } C.prototype.bar = function () { - var obj = { - [foo()]: function () { - } - }; + var obj = (_a = {}, + _a[foo()] = function () { + }, + _a); return 0; + var _a; }; return C; })(); diff --git a/tests/baselines/reference/computedPropertyNames34_ES5.js b/tests/baselines/reference/computedPropertyNames34_ES5.js index 3c588af07df..83e757222b0 100644 --- a/tests/baselines/reference/computedPropertyNames34_ES5.js +++ b/tests/baselines/reference/computedPropertyNames34_ES5.js @@ -17,11 +17,12 @@ var C = (function () { function C() { } C.bar = function () { - var obj = { - [foo()]: function () { - } - }; + var obj = (_a = {}, + _a[foo()] = function () { + }, + _a); return 0; + var _a; }; return C; })(); diff --git a/tests/baselines/reference/computedPropertyNames46_ES5.js b/tests/baselines/reference/computedPropertyNames46_ES5.js index 6c7a393ccbe..815f5769f3b 100644 --- a/tests/baselines/reference/computedPropertyNames46_ES5.js +++ b/tests/baselines/reference/computedPropertyNames46_ES5.js @@ -4,6 +4,7 @@ var o = { }; //// [computedPropertyNames46_ES5.js] -var o = { - ["" || 0]: 0 -}; +var o = (_a = {}, + _a["" || 0] = 0, + _a); +var _a; diff --git a/tests/baselines/reference/computedPropertyNames47_ES5.js b/tests/baselines/reference/computedPropertyNames47_ES5.js index 10e31bd9599..7d839e16ffb 100644 --- a/tests/baselines/reference/computedPropertyNames47_ES5.js +++ b/tests/baselines/reference/computedPropertyNames47_ES5.js @@ -14,6 +14,7 @@ var E2; (function (E2) { E2[E2["x"] = 0] = "x"; })(E2 || (E2 = {})); -var o = { - [0 /* x */ || 0 /* x */]: 0 -}; +var o = (_a = {}, + _a[0 /* x */ || 0 /* x */] = 0, + _a); +var _a; diff --git a/tests/baselines/reference/computedPropertyNames48_ES5.js b/tests/baselines/reference/computedPropertyNames48_ES5.js index eb1c50857c7..c5ca0d5b241 100644 --- a/tests/baselines/reference/computedPropertyNames48_ES5.js +++ b/tests/baselines/reference/computedPropertyNames48_ES5.js @@ -23,12 +23,13 @@ var E; E[E["x"] = 0] = "x"; })(E || (E = {})); var a; -extractIndexer({ - [a]: "" -}); // Should return string -extractIndexer({ - [0 /* x */]: "" -}); // Should return string -extractIndexer({ - ["" || 0]: "" -}); // Should return any (widened form of undefined) +extractIndexer((_a = {}, + _a[a] = "", + _a)); // Should return string +extractIndexer((_b = {}, + _b[0 /* x */] = "", + _b)); // Should return string +extractIndexer((_c = {}, + _c["" || 0] = "", + _c)); // Should return any (widened form of undefined) +var _a, _b, _c; diff --git a/tests/baselines/reference/computedPropertyNames4_ES5.js b/tests/baselines/reference/computedPropertyNames4_ES5.js index f5a41bd58aa..ac0fa8ec937 100644 --- a/tests/baselines/reference/computedPropertyNames4_ES5.js +++ b/tests/baselines/reference/computedPropertyNames4_ES5.js @@ -20,16 +20,17 @@ var v = { var s; var n; var a; -var v = { - [s]: 0, - [n]: n, - [s + s]: 1, - [s + n]: 2, - [+s]: s, - [""]: 0, - [0]: 0, - [a]: 1, - [true]: 0, - ["hello bye"]: 0, - ["hello " + a + " bye"]: 0 -}; +var v = (_a = {}, + _a[s] = 0, + _a[n] = n, + _a[s + s] = 1, + _a[s + n] = 2, + _a[+s] = s, + _a[""] = 0, + _a[0] = 0, + _a[a] = 1, + _a[true] = 0, + _a["hello bye"] = 0, + _a["hello " + a + " bye"] = 0, + _a); +var _a; diff --git a/tests/baselines/reference/computedPropertyNames5_ES5.js b/tests/baselines/reference/computedPropertyNames5_ES5.js index 5bdeb8a6637..3367faa2c20 100644 --- a/tests/baselines/reference/computedPropertyNames5_ES5.js +++ b/tests/baselines/reference/computedPropertyNames5_ES5.js @@ -11,11 +11,12 @@ var v = { //// [computedPropertyNames5_ES5.js] var b; -var v = { - [b]: 0, - [true]: 1, - [[]]: 0, - [{}]: 0, - [undefined]: undefined, - [null]: null -}; +var v = (_a = {}, + _a[b] = 0, + _a[true] = 1, + _a[[]] = 0, + _a[{}] = 0, + _a[undefined] = undefined, + _a[null] = null, + _a); +var _a; diff --git a/tests/baselines/reference/computedPropertyNames6_ES5.js b/tests/baselines/reference/computedPropertyNames6_ES5.js index 5772dc9ab89..29d035bfcbf 100644 --- a/tests/baselines/reference/computedPropertyNames6_ES5.js +++ b/tests/baselines/reference/computedPropertyNames6_ES5.js @@ -12,8 +12,9 @@ var v = { var p1; var p2; var p3; -var v = { - [p1]: 0, - [p2]: 1, - [p3]: 2 -}; +var v = (_a = {}, + _a[p1] = 0, + _a[p2] = 1, + _a[p3] = 2, + _a); +var _a; diff --git a/tests/baselines/reference/computedPropertyNames7_ES5.js b/tests/baselines/reference/computedPropertyNames7_ES5.js index 32a0bdc70d1..9c23dcab20d 100644 --- a/tests/baselines/reference/computedPropertyNames7_ES5.js +++ b/tests/baselines/reference/computedPropertyNames7_ES5.js @@ -11,6 +11,7 @@ var E; (function (E) { E[E["member"] = 0] = "member"; })(E || (E = {})); -var v = { - [0 /* member */]: 0 -}; +var v = (_a = {}, + _a[0 /* member */] = 0, + _a); +var _a; diff --git a/tests/baselines/reference/computedPropertyNames8_ES5.js b/tests/baselines/reference/computedPropertyNames8_ES5.js index 8381a681534..82d262c7e4e 100644 --- a/tests/baselines/reference/computedPropertyNames8_ES5.js +++ b/tests/baselines/reference/computedPropertyNames8_ES5.js @@ -12,8 +12,9 @@ function f() { function f() { var t; var u; - var v = { - [t]: 0, - [u]: 1 - }; + var v = (_a = {}, + _a[t] = 0, + _a[u] = 1, + _a); + var _a; } diff --git a/tests/baselines/reference/computedPropertyNames9_ES5.js b/tests/baselines/reference/computedPropertyNames9_ES5.js index e1092d0d3ec..1b4fa16de2d 100644 --- a/tests/baselines/reference/computedPropertyNames9_ES5.js +++ b/tests/baselines/reference/computedPropertyNames9_ES5.js @@ -13,8 +13,9 @@ var v = { //// [computedPropertyNames9_ES5.js] function f(x) { } -var v = { - [f("")]: 0, - [f(0)]: 0, - [f(true)]: 0 -}; +var v = (_a = {}, + _a[f("")] = 0, + _a[f(0)] = 0, + _a[f(true)] = 0, + _a); +var _a; diff --git a/tests/baselines/reference/computedPropertyNamesContextualType10_ES5.js b/tests/baselines/reference/computedPropertyNamesContextualType10_ES5.js index 0435789b210..d8a33951d4a 100644 --- a/tests/baselines/reference/computedPropertyNamesContextualType10_ES5.js +++ b/tests/baselines/reference/computedPropertyNamesContextualType10_ES5.js @@ -9,7 +9,8 @@ var o: I = { } //// [computedPropertyNamesContextualType10_ES5.js] -var o = { - [+"foo"]: "", - [+"bar"]: 0 -}; +var o = (_a = {}, + _a[+"foo"] = "", + _a[+"bar"] = 0, + _a); +var _a; diff --git a/tests/baselines/reference/computedPropertyNamesContextualType1_ES5.js b/tests/baselines/reference/computedPropertyNamesContextualType1_ES5.js index e58a4dfc86b..e79d8c82df8 100644 --- a/tests/baselines/reference/computedPropertyNamesContextualType1_ES5.js +++ b/tests/baselines/reference/computedPropertyNamesContextualType1_ES5.js @@ -10,9 +10,10 @@ var o: I = { } //// [computedPropertyNamesContextualType1_ES5.js] -var o = { - ["" + 0]: function (y) { +var o = (_a = {}, + _a["" + 0] = function (y) { return y.length; }, - ["" + 1]: function (y) { return y.length; } -}; + _a["" + 1] = function (y) { return y.length; }, + _a); +var _a; diff --git a/tests/baselines/reference/computedPropertyNamesContextualType2_ES5.js b/tests/baselines/reference/computedPropertyNamesContextualType2_ES5.js index d7ebdedddbb..30085fe8366 100644 --- a/tests/baselines/reference/computedPropertyNamesContextualType2_ES5.js +++ b/tests/baselines/reference/computedPropertyNamesContextualType2_ES5.js @@ -10,9 +10,10 @@ var o: I = { } //// [computedPropertyNamesContextualType2_ES5.js] -var o = { - [+"foo"]: function (y) { +var o = (_a = {}, + _a[+"foo"] = function (y) { return y.length; }, - [+"bar"]: function (y) { return y.length; } -}; + _a[+"bar"] = function (y) { return y.length; }, + _a); +var _a; diff --git a/tests/baselines/reference/computedPropertyNamesContextualType3_ES5.js b/tests/baselines/reference/computedPropertyNamesContextualType3_ES5.js index 92a18b720fe..02f8702bd6a 100644 --- a/tests/baselines/reference/computedPropertyNamesContextualType3_ES5.js +++ b/tests/baselines/reference/computedPropertyNamesContextualType3_ES5.js @@ -9,9 +9,10 @@ var o: I = { } //// [computedPropertyNamesContextualType3_ES5.js] -var o = { - [+"foo"]: function (y) { +var o = (_a = {}, + _a[+"foo"] = function (y) { return y.length; }, - [+"bar"]: function (y) { return y.length; } -}; + _a[+"bar"] = function (y) { return y.length; }, + _a); +var _a; diff --git a/tests/baselines/reference/computedPropertyNamesContextualType4_ES5.js b/tests/baselines/reference/computedPropertyNamesContextualType4_ES5.js index 8777f196d7c..0c319a526f4 100644 --- a/tests/baselines/reference/computedPropertyNamesContextualType4_ES5.js +++ b/tests/baselines/reference/computedPropertyNamesContextualType4_ES5.js @@ -10,7 +10,8 @@ var o: I = { } //// [computedPropertyNamesContextualType4_ES5.js] -var o = { - ["" + "foo"]: "", - ["" + "bar"]: 0 -}; +var o = (_a = {}, + _a["" + "foo"] = "", + _a["" + "bar"] = 0, + _a); +var _a; diff --git a/tests/baselines/reference/computedPropertyNamesContextualType5_ES5.js b/tests/baselines/reference/computedPropertyNamesContextualType5_ES5.js index e1197bddd30..51d78be59d4 100644 --- a/tests/baselines/reference/computedPropertyNamesContextualType5_ES5.js +++ b/tests/baselines/reference/computedPropertyNamesContextualType5_ES5.js @@ -10,7 +10,8 @@ var o: I = { } //// [computedPropertyNamesContextualType5_ES5.js] -var o = { - [+"foo"]: "", - [+"bar"]: 0 -}; +var o = (_a = {}, + _a[+"foo"] = "", + _a[+"bar"] = 0, + _a); +var _a; diff --git a/tests/baselines/reference/computedPropertyNamesContextualType6_ES5.js b/tests/baselines/reference/computedPropertyNamesContextualType6_ES5.js index 65bc1fd667c..f11e5e4a5bb 100644 --- a/tests/baselines/reference/computedPropertyNamesContextualType6_ES5.js +++ b/tests/baselines/reference/computedPropertyNamesContextualType6_ES5.js @@ -14,11 +14,13 @@ foo({ }); //// [computedPropertyNamesContextualType6_ES5.js] -foo({ +foo((_a = { p: "", 0: function () { - }, - ["hi" + "bye"]: true, - [0 + 1]: 0, - [+"hi"]: [0] -}); + } +}, + _a["hi" + "bye"] = true, + _a[0 + 1] = 0, + _a[+"hi"] = [0], + _a)); +var _a; diff --git a/tests/baselines/reference/computedPropertyNamesContextualType7_ES5.js b/tests/baselines/reference/computedPropertyNamesContextualType7_ES5.js index 2b87d4732ff..0b15794e577 100644 --- a/tests/baselines/reference/computedPropertyNamesContextualType7_ES5.js +++ b/tests/baselines/reference/computedPropertyNamesContextualType7_ES5.js @@ -14,11 +14,13 @@ foo({ }); //// [computedPropertyNamesContextualType7_ES5.js] -foo({ +foo((_a = { p: "", 0: function () { - }, - ["hi" + "bye"]: true, - [0 + 1]: 0, - [+"hi"]: [0] -}); + } +}, + _a["hi" + "bye"] = true, + _a[0 + 1] = 0, + _a[+"hi"] = [0], + _a)); +var _a; diff --git a/tests/baselines/reference/computedPropertyNamesContextualType8_ES5.js b/tests/baselines/reference/computedPropertyNamesContextualType8_ES5.js index 1729c08fe5b..24f6218864c 100644 --- a/tests/baselines/reference/computedPropertyNamesContextualType8_ES5.js +++ b/tests/baselines/reference/computedPropertyNamesContextualType8_ES5.js @@ -10,7 +10,8 @@ var o: I = { } //// [computedPropertyNamesContextualType8_ES5.js] -var o = { - ["" + "foo"]: "", - ["" + "bar"]: 0 -}; +var o = (_a = {}, + _a["" + "foo"] = "", + _a["" + "bar"] = 0, + _a); +var _a; diff --git a/tests/baselines/reference/computedPropertyNamesContextualType9_ES5.js b/tests/baselines/reference/computedPropertyNamesContextualType9_ES5.js index 8f57c58804f..340802da2af 100644 --- a/tests/baselines/reference/computedPropertyNamesContextualType9_ES5.js +++ b/tests/baselines/reference/computedPropertyNamesContextualType9_ES5.js @@ -10,7 +10,8 @@ var o: I = { } //// [computedPropertyNamesContextualType9_ES5.js] -var o = { - [+"foo"]: "", - [+"bar"]: 0 -}; +var o = (_a = {}, + _a[+"foo"] = "", + _a[+"bar"] = 0, + _a); +var _a; diff --git a/tests/baselines/reference/computedPropertyNamesDeclarationEmit5_ES5.js b/tests/baselines/reference/computedPropertyNamesDeclarationEmit5_ES5.js index 9f05669d823..38161f1573e 100644 --- a/tests/baselines/reference/computedPropertyNamesDeclarationEmit5_ES5.js +++ b/tests/baselines/reference/computedPropertyNamesDeclarationEmit5_ES5.js @@ -7,16 +7,25 @@ var v = { } //// [computedPropertyNamesDeclarationEmit5_ES5.js] -var v = { - ["" + ""]: 0, - ["" + ""]: function () { +var v = (_a = {}, + _a["" + ""] = 0, + _a["" + ""] = function () { }, - get ["" + ""]() { - return 0; - }, - set ["" + ""](x) { - } -}; + Object.defineProperty(_a, "" + "", { + get: function () { + return 0; + }, + enumerable: true, + configurable: true, + }), + Object.defineProperty(_a, "" + "", { + set: function (x) { + }, + enumerable: true, + configurable: true, + }), + _a); +var _a; //// [computedPropertyNamesDeclarationEmit5_ES5.d.ts] diff --git a/tests/baselines/reference/computedPropertyNamesSourceMap2_ES5.js b/tests/baselines/reference/computedPropertyNamesSourceMap2_ES5.js index 6d11c62050c..972aaf9b52f 100644 --- a/tests/baselines/reference/computedPropertyNamesSourceMap2_ES5.js +++ b/tests/baselines/reference/computedPropertyNamesSourceMap2_ES5.js @@ -6,9 +6,10 @@ var v = { } //// [computedPropertyNamesSourceMap2_ES5.js] -var v = { - ["hello"]: function () { +var v = (_a = {}, + _a["hello"] = function () { debugger; - } -}; + }, + _a); +var _a; //# sourceMappingURL=computedPropertyNamesSourceMap2_ES5.js.map \ No newline at end of file diff --git a/tests/baselines/reference/computedPropertyNamesSourceMap2_ES5.js.map b/tests/baselines/reference/computedPropertyNamesSourceMap2_ES5.js.map index 9f985290f09..01cb2673516 100644 --- a/tests/baselines/reference/computedPropertyNamesSourceMap2_ES5.js.map +++ b/tests/baselines/reference/computedPropertyNamesSourceMap2_ES5.js.map @@ -1,2 +1,2 @@ //// [computedPropertyNamesSourceMap2_ES5.js.map] -{"version":3,"file":"computedPropertyNamesSourceMap2_ES5.js","sourceRoot":"","sources":["computedPropertyNamesSourceMap2_ES5.ts"],"names":["[\"hello\"]"],"mappings":"AAAA,IAAI,CAAC,GAAG;IACJ,CAAC,OAAO,CAAC;QACLA,QAAQA,CAACA;IACbA,CAACA;CACJ,CAAA"} \ No newline at end of file +{"version":3,"file":"computedPropertyNamesSourceMap2_ES5.js","sourceRoot":"","sources":["computedPropertyNamesSourceMap2_ES5.ts"],"names":["[\"hello\"]"],"mappings":"AAAA,IAAI,CAAC,GAAG,CAAR,EAAA;IACI,AADJ,EAAA,CACK,OAAO,CAAC;QACLA,QAAQA,CAACA;IACbA,CAACA;IAHL,EAAA,CAIC,CAAA;IAJD,EAAA"} \ No newline at end of file diff --git a/tests/baselines/reference/computedPropertyNamesSourceMap2_ES5.sourcemap.txt b/tests/baselines/reference/computedPropertyNamesSourceMap2_ES5.sourcemap.txt index ff49e979ae3..b8e1e073b08 100644 --- a/tests/baselines/reference/computedPropertyNamesSourceMap2_ES5.sourcemap.txt +++ b/tests/baselines/reference/computedPropertyNamesSourceMap2_ES5.sourcemap.txt @@ -8,36 +8,49 @@ sources: computedPropertyNamesSourceMap2_ES5.ts emittedFile:tests/cases/conformance/es6/computedProperties/computedPropertyNamesSourceMap2_ES5.js sourceFile:computedPropertyNamesSourceMap2_ES5.ts ------------------------------------------------------------------- ->>>var v = { +>>>var v = (_a = {}, 1 > 2 >^^^^ 3 > ^ 4 > ^^^ -5 > ^^^^^^^^^^^^^^^^^^^^^-> +5 > ^ +6 > ^^ +7 > ^^^^^^^^^^^^^^^^^^^^^-> 1 > 2 >var 3 > v 4 > = +5 > +6 > 1 >Emitted(1, 1) Source(1, 1) + SourceIndex(0) 2 >Emitted(1, 5) Source(1, 5) + SourceIndex(0) 3 >Emitted(1, 6) Source(1, 6) + SourceIndex(0) 4 >Emitted(1, 9) Source(1, 9) + SourceIndex(0) +5 >Emitted(1, 10) Source(1, 1) + SourceIndex(0) +6 >Emitted(1, 12) Source(1, 1) + SourceIndex(0) --- ->>> ["hello"]: function () { +>>> _a["hello"] = function () { 1->^^^^ -2 > ^ -3 > ^^^^^^^ -4 > ^ -5 > ^^^^^-> -1->{ +2 > +3 > ^^ +4 > ^ +5 > ^^^^^^^ +6 > ^ +7 > ^^^-> +1->var v = { > -2 > [ -3 > "hello" -4 > ] +2 > +3 > +4 > var v = { + > [ +5 > "hello" +6 > ] 1->Emitted(2, 5) Source(2, 5) + SourceIndex(0) -2 >Emitted(2, 6) Source(2, 6) + SourceIndex(0) -3 >Emitted(2, 13) Source(2, 13) + SourceIndex(0) -4 >Emitted(2, 14) Source(2, 14) + SourceIndex(0) +2 >Emitted(2, 5) Source(1, 1) + SourceIndex(0) +3 >Emitted(2, 7) Source(1, 1) + SourceIndex(0) +4 >Emitted(2, 8) Source(2, 6) + SourceIndex(0) +5 >Emitted(2, 15) Source(2, 13) + SourceIndex(0) +6 >Emitted(2, 16) Source(2, 14) + SourceIndex(0) --- >>> debugger; 1->^^^^^^^^ @@ -51,23 +64,41 @@ sourceFile:computedPropertyNamesSourceMap2_ES5.ts 2 >Emitted(3, 17) Source(3, 17) + SourceIndex(0) name (["hello"]) 3 >Emitted(3, 18) Source(3, 18) + SourceIndex(0) name (["hello"]) --- ->>> } +>>> }, 1 >^^^^ 2 > ^ +3 > ^^^^-> 1 > > 2 > } 1 >Emitted(4, 5) Source(4, 5) + SourceIndex(0) name (["hello"]) 2 >Emitted(4, 6) Source(4, 6) + SourceIndex(0) name (["hello"]) --- ->>>}; -1 >^ -2 > ^ -3 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> -1 > - >} -2 > -1 >Emitted(5, 2) Source(5, 2) + SourceIndex(0) -2 >Emitted(5, 3) Source(5, 2) + SourceIndex(0) +>>> _a); +1->^^^^ +2 > ^^ +3 > ^ +4 > ^ +1-> +2 > +3 > var v = { + > ["hello"]() { + > debugger; + > } + > } +4 > +1->Emitted(5, 5) Source(1, 1) + SourceIndex(0) +2 >Emitted(5, 7) Source(1, 1) + SourceIndex(0) +3 >Emitted(5, 8) Source(5, 2) + SourceIndex(0) +4 >Emitted(5, 9) Source(5, 2) + SourceIndex(0) +--- +>>>var _a; +1 >^^^^ +2 > ^^ +3 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +1 > +2 > +1 >Emitted(6, 5) Source(1, 1) + SourceIndex(0) +2 >Emitted(6, 7) Source(1, 1) + SourceIndex(0) --- >>>//# sourceMappingURL=computedPropertyNamesSourceMap2_ES5.js.map \ No newline at end of file diff --git a/tests/baselines/reference/parserES5ComputedPropertyName2.js b/tests/baselines/reference/parserES5ComputedPropertyName2.js index 861716a3cde..4569c00d7b3 100644 --- a/tests/baselines/reference/parserES5ComputedPropertyName2.js +++ b/tests/baselines/reference/parserES5ComputedPropertyName2.js @@ -2,4 +2,5 @@ var v = { [e]: 1 }; //// [parserES5ComputedPropertyName2.js] -var v = { [e]: 1 }; +var v = (_a = {}, _a[e] = 1, _a); +var _a; diff --git a/tests/baselines/reference/parserES5ComputedPropertyName3.js b/tests/baselines/reference/parserES5ComputedPropertyName3.js index 4e07049b29d..3f93f226ed4 100644 --- a/tests/baselines/reference/parserES5ComputedPropertyName3.js +++ b/tests/baselines/reference/parserES5ComputedPropertyName3.js @@ -2,5 +2,6 @@ var v = { [e]() { } }; //// [parserES5ComputedPropertyName3.js] -var v = { [e]: function () { -} }; +var v = (_a = {}, _a[e] = function () { +}, _a); +var _a; diff --git a/tests/baselines/reference/parserES5ComputedPropertyName4.js b/tests/baselines/reference/parserES5ComputedPropertyName4.js index 50e240dcf20..b54a53993d6 100644 --- a/tests/baselines/reference/parserES5ComputedPropertyName4.js +++ b/tests/baselines/reference/parserES5ComputedPropertyName4.js @@ -2,5 +2,9 @@ var v = { get [e]() { } }; //// [parserES5ComputedPropertyName4.js] -var v = { get [e]() { -} }; +var v = (_a = {}, Object.defineProperty(_a, e, { + get: function () { + }, + enumerable: true, + configurable: true, }), _a); +var _a; diff --git a/tests/baselines/reference/privateIndexer2.js b/tests/baselines/reference/privateIndexer2.js index 13849216ca0..a90e03a5bc2 100644 --- a/tests/baselines/reference/privateIndexer2.js +++ b/tests/baselines/reference/privateIndexer2.js @@ -11,8 +11,9 @@ var y: { //// [privateIndexer2.js] // private indexers not allowed -var x = { - [x]: string, - string: -}; +var x = (_a = {}, + _a[x] = string, + _a.string = , + _a); var y; +var _a;