diff --git a/Jakefile.js b/Jakefile.js
index 76ac1b19b2c..c561b72f472 100644
--- a/Jakefile.js
+++ b/Jakefile.js
@@ -70,14 +70,15 @@ var compilerSources = [
"visitor.ts",
"transformers/destructuring.ts",
"transformers/ts.ts",
- "transformers/module/es2015.ts",
- "transformers/module/system.ts",
- "transformers/module/module.ts",
"transformers/jsx.ts",
"transformers/es2017.ts",
"transformers/es2016.ts",
"transformers/es2015.ts",
+ "transformers/es5.ts",
"transformers/generators.ts",
+ "transformers/module/es2015.ts",
+ "transformers/module/system.ts",
+ "transformers/module/module.ts",
"transformer.ts",
"sourcemap.ts",
"comments.ts",
@@ -105,14 +106,14 @@ var servicesSources = [
"visitor.ts",
"transformers/destructuring.ts",
"transformers/ts.ts",
- "transformers/module/es2015.ts",
- "transformers/module/system.ts",
- "transformers/module/module.ts",
"transformers/jsx.ts",
"transformers/es2017.ts",
"transformers/es2016.ts",
"transformers/es2015.ts",
"transformers/generators.ts",
+ "transformers/module/es2015.ts",
+ "transformers/module/system.ts",
+ "transformers/module/module.ts",
"transformer.ts",
"sourcemap.ts",
"comments.ts",
diff --git a/src/compiler/transformer.ts b/src/compiler/transformer.ts
index fc656e08bf9..82e1843b70b 100644
--- a/src/compiler/transformer.ts
+++ b/src/compiler/transformer.ts
@@ -4,6 +4,7 @@
///
///
///
+///
///
///
///
@@ -129,6 +130,10 @@ namespace ts {
transformers.push(transformGenerators);
}
+ if (languageVersion < ScriptTarget.ES5) {
+ transformers.push(transformES5);
+ }
+
return transformers;
}
diff --git a/src/compiler/transformers/es5.ts b/src/compiler/transformers/es5.ts
new file mode 100644
index 00000000000..9e5a72c2bad
--- /dev/null
+++ b/src/compiler/transformers/es5.ts
@@ -0,0 +1,83 @@
+///
+///
+
+/*@internal*/
+namespace ts {
+ /**
+ * Transforms ES5 syntax into ES3 syntax.
+ *
+ * @param context Context and state information for the transformation.
+ */
+ export function transformES5(context: TransformationContext) {
+ const previousOnSubstituteNode = context.onSubstituteNode;
+ context.onSubstituteNode = onSubstituteNode;
+ context.enableSubstitution(SyntaxKind.PropertyAccessExpression);
+ context.enableSubstitution(SyntaxKind.PropertyAssignment);
+ return transformSourceFile;
+
+ /**
+ * Transforms an ES5 source file to ES3.
+ *
+ * @param node A SourceFile
+ */
+ function transformSourceFile(node: SourceFile) {
+ return node;
+ }
+
+ /**
+ * Hooks node substitutions.
+ *
+ * @param emitContext The context for the emitter.
+ * @param node The node to substitute.
+ */
+ function onSubstituteNode(emitContext: EmitContext, node: Node) {
+ node = previousOnSubstituteNode(emitContext, node);
+ if (isPropertyAccessExpression(node)) {
+ return substitutePropertyAccessExpression(node);
+ }
+ else if (isPropertyAssignment(node)) {
+ return substitutePropertyAssignment(node);
+ }
+ return node;
+ }
+
+ /**
+ * Substitutes a PropertyAccessExpression whose name is a reserved word.
+ *
+ * @param node A PropertyAccessExpression
+ */
+ function substitutePropertyAccessExpression(node: PropertyAccessExpression): Expression {
+ const literalName = trySubstituteReservedName(node.name);
+ if (literalName) {
+ return createElementAccess(node.expression, literalName, /*location*/ node);
+ }
+ return node;
+ }
+
+ /**
+ * Substitutes a PropertyAssignment whose name is a reserved word.
+ *
+ * @param node A PropertyAssignment
+ */
+ function substitutePropertyAssignment(node: PropertyAssignment): PropertyAssignment {
+ const literalName = isIdentifier(node.name) && trySubstituteReservedName(node.name);
+ if (literalName) {
+ return updatePropertyAssignment(node, literalName, node.initializer);
+ }
+ return node;
+ }
+
+ /**
+ * If an identifier name is a reserved word, returns a string literal for the name.
+ *
+ * @param name An Identifier
+ */
+ function trySubstituteReservedName(name: Identifier) {
+ const token = name.originalKeywordKind || (nodeIsSynthesized(name) ? stringToToken(name.text) : undefined);
+ if (token >= SyntaxKind.FirstReservedWord && token <= SyntaxKind.LastReservedWord) {
+ return createLiteral(name, /*location*/ name);
+ }
+ return undefined;
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/compiler/transformers/module/module.ts b/src/compiler/transformers/module/module.ts
index b91f67382cd..1cca7a21777 100644
--- a/src/compiler/transformers/module/module.ts
+++ b/src/compiler/transformers/module/module.ts
@@ -958,39 +958,19 @@ namespace ts {
const declaration = resolver.getReferencedImportDeclaration(node);
if (declaration) {
if (isImportClause(declaration)) {
- if (languageVersion >= ScriptTarget.ES5) {
- return createPropertyAccess(
- getGeneratedNameForNode(declaration.parent),
- createIdentifier("default"),
- /*location*/ node
- );
- }
- else {
- // TODO: ES3 transform to handle x.default -> x["default"]
- return createElementAccess(
- getGeneratedNameForNode(declaration.parent),
- createLiteral("default"),
- /*location*/ node
- );
- }
+ return createPropertyAccess(
+ getGeneratedNameForNode(declaration.parent),
+ createIdentifier("default"),
+ /*location*/ node
+ );
}
else if (isImportSpecifier(declaration)) {
const name = declaration.propertyName || declaration.name;
- if (name.originalKeywordKind === SyntaxKind.DefaultKeyword && languageVersion <= ScriptTarget.ES3) {
- // TODO: ES3 transform to handle x.default -> x["default"]
- return createElementAccess(
- getGeneratedNameForNode(declaration.parent.parent.parent),
- createLiteral(name.text),
- /*location*/ node
- );
- }
- else {
- return createPropertyAccess(
- getGeneratedNameForNode(declaration.parent.parent.parent),
- getSynthesizedClone(name),
- /*location*/ node
- );
- }
+ return createPropertyAccess(
+ getGeneratedNameForNode(declaration.parent.parent.parent),
+ getSynthesizedClone(name),
+ /*location*/ node
+ );
}
}
}
@@ -1027,15 +1007,10 @@ namespace ts {
function createExportAssignment(name: Identifier, value: Expression) {
return createAssignment(
- name.originalKeywordKind === SyntaxKind.DefaultKeyword && languageVersion === ScriptTarget.ES3
- ? createElementAccess(
- createIdentifier("exports"),
- createLiteral(name.text)
- )
- : createPropertyAccess(
- createIdentifier("exports"),
- getSynthesizedClone(name)
- ),
+ createPropertyAccess(
+ createIdentifier("exports"),
+ getSynthesizedClone(name)
+ ),
value
);
}
diff --git a/src/compiler/transformers/module/system.ts b/src/compiler/transformers/module/system.ts
index b33b3058f8c..775d8fc34f9 100644
--- a/src/compiler/transformers/module/system.ts
+++ b/src/compiler/transformers/module/system.ts
@@ -19,7 +19,6 @@ namespace ts {
const compilerOptions = context.getCompilerOptions();
const resolver = context.getEmitResolver();
const host = context.getEmitHost();
- const languageVersion = getEmitScriptTarget(compilerOptions);
const previousOnSubstituteNode = context.onSubstituteNode;
const previousOnEmitNode = context.onEmitNode;
context.onSubstituteNode = onSubstituteNode;
@@ -1317,12 +1316,7 @@ namespace ts {
return undefined;
}
- if (name.originalKeywordKind && languageVersion === ScriptTarget.ES3) {
- return createElementAccess(importAlias, createLiteral(name.text));
- }
- else {
- return createPropertyAccess(importAlias, getSynthesizedClone(name));
- }
+ return createPropertyAccess(importAlias, getSynthesizedClone(name));
}
function collectDependencyGroups(externalImports: (ImportDeclaration | ImportEqualsDeclaration | ExportDeclaration)[]) {
diff --git a/src/compiler/tsconfig.json b/src/compiler/tsconfig.json
index da356c0b4d3..cc1f3125166 100644
--- a/src/compiler/tsconfig.json
+++ b/src/compiler/tsconfig.json
@@ -27,6 +27,7 @@
"transformers/es2017.ts",
"transformers/es2016.ts",
"transformers/es2015.ts",
+ "transformers/es5.ts",
"transformers/generators.ts",
"transformers/destructuring.ts",
"transformers/module/module.ts",
diff --git a/src/harness/tsconfig.json b/src/harness/tsconfig.json
index 5d7a81d1a74..e5e14266ec7 100644
--- a/src/harness/tsconfig.json
+++ b/src/harness/tsconfig.json
@@ -29,6 +29,7 @@
"../compiler/transformers/es2017.ts",
"../compiler/transformers/es2016.ts",
"../compiler/transformers/es2015.ts",
+ "../compiler/transformers/es5.ts",
"../compiler/transformers/generators.ts",
"../compiler/transformers/destructuring.ts",
"../compiler/transformers/module/module.ts",
diff --git a/src/services/tsconfig.json b/src/services/tsconfig.json
index 03d04935068..1033a3aa553 100644
--- a/src/services/tsconfig.json
+++ b/src/services/tsconfig.json
@@ -28,6 +28,7 @@
"../compiler/transformers/es2017.ts",
"../compiler/transformers/es2016.ts",
"../compiler/transformers/es2015.ts",
+ "../compiler/transformers/es5.ts",
"../compiler/transformers/generators.ts",
"../compiler/transformers/destructuring.ts",
"../compiler/transformers/module/module.ts",
diff --git a/tests/baselines/reference/allowSyntheticDefaultImports10.js b/tests/baselines/reference/allowSyntheticDefaultImports10.js
index 746997c4c89..396cd75b574 100644
--- a/tests/baselines/reference/allowSyntheticDefaultImports10.js
+++ b/tests/baselines/reference/allowSyntheticDefaultImports10.js
@@ -13,5 +13,5 @@ Foo.default.default.foo();
//// [a.js]
"use strict";
var Foo = require("./b");
-Foo.default.bar();
-Foo.default.default.foo();
+Foo["default"].bar();
+Foo["default"]["default"].foo();
diff --git a/tests/baselines/reference/bluebirdStaticThis.js b/tests/baselines/reference/bluebirdStaticThis.js
index 301f32319a7..606f778323f 100644
--- a/tests/baselines/reference/bluebirdStaticThis.js
+++ b/tests/baselines/reference/bluebirdStaticThis.js
@@ -146,12 +146,12 @@ var x;
var arr;
var foo;
var fooProm;
-fooProm = Promise.try(Promise, function () {
+fooProm = Promise["try"](Promise, function () {
return foo;
});
-fooProm = Promise.try(Promise, function () {
+fooProm = Promise["try"](Promise, function () {
return foo;
}, arr);
-fooProm = Promise.try(Promise, function () {
+fooProm = Promise["try"](Promise, function () {
return foo;
}, arr, x);
diff --git a/tests/baselines/reference/classMethodWithKeywordName1.js b/tests/baselines/reference/classMethodWithKeywordName1.js
index 6e1faee005c..a7cb994bfb3 100644
--- a/tests/baselines/reference/classMethodWithKeywordName1.js
+++ b/tests/baselines/reference/classMethodWithKeywordName1.js
@@ -7,6 +7,6 @@ class C {
var C = (function () {
function C() {
}
- C.try = function () { };
+ C["try"] = function () { };
return C;
}());
diff --git a/tests/baselines/reference/constructorWithIncompleteTypeAnnotation.js b/tests/baselines/reference/constructorWithIncompleteTypeAnnotation.js
index 2e3190c15c8..1ee309b0eb4 100644
--- a/tests/baselines/reference/constructorWithIncompleteTypeAnnotation.js
+++ b/tests/baselines/reference/constructorWithIncompleteTypeAnnotation.js
@@ -292,7 +292,7 @@ var TypeScriptAllInOne;
(function (TypeScriptAllInOne) {
var Program = (function () {
function Program() {
- this.case = bfs.STATEMENTS(4);
+ this["case"] = bfs.STATEMENTS(4);
}
Program.Main = function () {
var args = [];
@@ -305,13 +305,13 @@ var TypeScriptAllInOne;
retValue = bfs.VARIABLES();
if (retValue != 0)
^= {
- return: 1
+ "return": 1
};
}
finally {
}
};
- Program.prototype.if = function (retValue) {
+ Program.prototype["if"] = function (retValue) {
if (retValue === void 0) { retValue = != 0; }
return 1;
^
@@ -327,7 +327,7 @@ var TypeScriptAllInOne;
return 1;
}
};
- Program.prototype.catch = function (e) {
+ Program.prototype["catch"] = function (e) {
console.log(e);
};
return Program;
@@ -364,7 +364,7 @@ var BasicFeatures = (function () {
;
var quoted = '"', quoted2 = "'";
var reg = /\w*/;
- var objLit = { "var": number = 42, equals: function (x) { return x["var"] === 42; }, instanceof: function () { return 'objLit{42}'; } };
+ var objLit = { "var": number = 42, equals: function (x) { return x["var"] === 42; }, "instanceof": function () { return 'objLit{42}'; } };
var weekday = Weekdays.Monday;
var con = char + f + hexchar + float.toString() + float2.toString() + reg.toString() + objLit + weekday;
//
diff --git a/tests/baselines/reference/convertKeywordsYes.js b/tests/baselines/reference/convertKeywordsYes.js
index ba3c661d1d0..b7bd60e4a95 100644
--- a/tests/baselines/reference/convertKeywordsYes.js
+++ b/tests/baselines/reference/convertKeywordsYes.js
@@ -344,43 +344,43 @@ var bigObject = {
string: 0,
get: 0,
yield: 0,
- break: 0,
- case: 0,
- catch: 0,
- class: 0,
- continue: 0,
- const: 0,
- debugger: 0,
+ "break": 0,
+ "case": 0,
+ "catch": 0,
+ "class": 0,
+ "continue": 0,
+ "const": 0,
+ "debugger": 0,
declare: 0,
- default: 0,
- delete: 0,
- do: 0,
- else: 0,
- enum: 0,
- export: 0,
- extends: 0,
- false: 0,
- finally: 0,
- for: 0,
- function: 0,
- if: 0,
- import: 0,
- in: 0,
- instanceof: 0,
- new: 0,
- null: 0,
- return: 0,
- super: 0,
- switch: 0,
- this: 0,
- throw: 0,
- true: 0,
- try: 0,
- typeof: 0,
- var: 0,
- void: 0,
- while: 0,
- with: 0
+ "default": 0,
+ "delete": 0,
+ "do": 0,
+ "else": 0,
+ "enum": 0,
+ "export": 0,
+ "extends": 0,
+ "false": 0,
+ "finally": 0,
+ "for": 0,
+ "function": 0,
+ "if": 0,
+ "import": 0,
+ "in": 0,
+ "instanceof": 0,
+ "new": 0,
+ "null": 0,
+ "return": 0,
+ "super": 0,
+ "switch": 0,
+ "this": 0,
+ "throw": 0,
+ "true": 0,
+ "try": 0,
+ "typeof": 0,
+ "var": 0,
+ "void": 0,
+ "while": 0,
+ "with": 0
};
var bigClass = (function () {
function bigClass() {
@@ -401,43 +401,43 @@ var bigClass = (function () {
this.string = 0;
this.get = 0;
this.yield = 0;
- this.break = 0;
- this.case = 0;
- this.catch = 0;
- this.class = 0;
- this.continue = 0;
- this.const = 0;
- this.debugger = 0;
+ this["break"] = 0;
+ this["case"] = 0;
+ this["catch"] = 0;
+ this["class"] = 0;
+ this["continue"] = 0;
+ this["const"] = 0;
+ this["debugger"] = 0;
this.declare = 0;
- this.default = 0;
- this.delete = 0;
- this.do = 0;
- this.else = 0;
- this.enum = 0;
- this.export = 0;
- this.extends = 0;
- this.false = 0;
- this.finally = 0;
- this.for = 0;
- this.function = 0;
- this.if = 0;
- this.import = 0;
- this.in = 0;
- this.instanceof = 0;
- this.new = 0;
- this.null = 0;
- this.return = 0;
- this.super = 0;
- this.switch = 0;
- this.this = 0;
- this.throw = 0;
- this.true = 0;
- this.try = 0;
- this.typeof = 0;
- this.var = 0;
- this.void = 0;
- this.while = 0;
- this.with = 0;
+ this["default"] = 0;
+ this["delete"] = 0;
+ this["do"] = 0;
+ this["else"] = 0;
+ this["enum"] = 0;
+ this["export"] = 0;
+ this["extends"] = 0;
+ this["false"] = 0;
+ this["finally"] = 0;
+ this["for"] = 0;
+ this["function"] = 0;
+ this["if"] = 0;
+ this["import"] = 0;
+ this["in"] = 0;
+ this["instanceof"] = 0;
+ this["new"] = 0;
+ this["null"] = 0;
+ this["return"] = 0;
+ this["super"] = 0;
+ this["switch"] = 0;
+ this["this"] = 0;
+ this["throw"] = 0;
+ this["true"] = 0;
+ this["try"] = 0;
+ this["typeof"] = 0;
+ this["var"] = 0;
+ this["void"] = 0;
+ this["while"] = 0;
+ this["with"] = 0;
}
return bigClass;
}());
diff --git a/tests/baselines/reference/destructuringParameterDeclaration6.js b/tests/baselines/reference/destructuringParameterDeclaration6.js
index ad86b2983b3..03307415b65 100644
--- a/tests/baselines/reference/destructuringParameterDeclaration6.js
+++ b/tests/baselines/reference/destructuringParameterDeclaration6.js
@@ -27,7 +27,7 @@ b2({ while: 1 });
"use strict";
// Error
function a(_a) {
- var = _a.while;
+ var = _a["while"];
}
function a1(_a) {
var public = _a.public;
@@ -56,13 +56,13 @@ function a7() {
a[_i - 0] = arguments[_i];
}
}
-a({ while: 1 });
+a({ "while": 1 });
// No Error
function b1(_a) {
var x = _a.public;
}
function b2(_a) {
- var y = _a.while;
+ var y = _a["while"];
}
b1({ public: 1 });
-b2({ while: 1 });
+b2({ "while": 1 });
diff --git a/tests/baselines/reference/es6ClassTest5.js b/tests/baselines/reference/es6ClassTest5.js
index b909fac58b5..7d4238fda65 100644
--- a/tests/baselines/reference/es6ClassTest5.js
+++ b/tests/baselines/reference/es6ClassTest5.js
@@ -23,7 +23,7 @@ var C1T5 = (function () {
}());
var bigClass = (function () {
function bigClass() {
- this.break = 1;
+ this["break"] = 1;
}
return bigClass;
}());
diff --git a/tests/baselines/reference/fatarrowfunctionsErrors.js b/tests/baselines/reference/fatarrowfunctionsErrors.js
index 2ac20f1966a..ced4660d8d1 100644
--- a/tests/baselines/reference/fatarrowfunctionsErrors.js
+++ b/tests/baselines/reference/fatarrowfunctionsErrors.js
@@ -20,7 +20,7 @@ foo(function () {
}
return 0;
});
-foo((1), { return: 0 });
+foo((1), { "return": 0 });
foo(function (x) { return x; });
foo(function (x) {
if (x === void 0) { x = 0; }
diff --git a/tests/baselines/reference/keywordField.js b/tests/baselines/reference/keywordField.js
index 581d5afa14a..a146cffade8 100644
--- a/tests/baselines/reference/keywordField.js
+++ b/tests/baselines/reference/keywordField.js
@@ -12,7 +12,7 @@ var q = a["if"];
//// [keywordField.js]
var obj = {};
-obj.if = 1;
-var a = { if: "test" };
-var n = a.if;
+obj["if"] = 1;
+var a = { "if": "test" };
+var n = a["if"];
var q = a["if"];
diff --git a/tests/baselines/reference/keywordInJsxIdentifier.js b/tests/baselines/reference/keywordInJsxIdentifier.js
index 6009e1980e6..d9c3b51e9a3 100644
--- a/tests/baselines/reference/keywordInJsxIdentifier.js
+++ b/tests/baselines/reference/keywordInJsxIdentifier.js
@@ -9,6 +9,6 @@ declare var React: any;
//// [keywordInJsxIdentifier.js]
React.createElement("foo", { "class-id": true });
-React.createElement("foo", { class: true });
+React.createElement("foo", { "class": true });
React.createElement("foo", { "class-id": "1" });
-React.createElement("foo", { class: "1" });
+React.createElement("foo", { "class": "1" });
diff --git a/tests/baselines/reference/nestedClassDeclaration.js b/tests/baselines/reference/nestedClassDeclaration.js
index 04e2f6348ef..cc300ec75a3 100644
--- a/tests/baselines/reference/nestedClassDeclaration.js
+++ b/tests/baselines/reference/nestedClassDeclaration.js
@@ -38,5 +38,5 @@ function foo() {
}());
}
var x = {
- class: C4
+ "class": C4
}, _a = void 0;
diff --git a/tests/baselines/reference/objectBindingPatternKeywordIdentifiers01.js b/tests/baselines/reference/objectBindingPatternKeywordIdentifiers01.js
index cd339bb5907..a905e53f221 100644
--- a/tests/baselines/reference/objectBindingPatternKeywordIdentifiers01.js
+++ b/tests/baselines/reference/objectBindingPatternKeywordIdentifiers01.js
@@ -3,4 +3,4 @@
var { while } = { while: 1 }
//// [objectBindingPatternKeywordIdentifiers01.js]
-var = { while: 1 }.while;
+var = { "while": 1 }["while"];
diff --git a/tests/baselines/reference/objectBindingPatternKeywordIdentifiers02.js b/tests/baselines/reference/objectBindingPatternKeywordIdentifiers02.js
index 0286a78ba82..5bc6e1f9963 100644
--- a/tests/baselines/reference/objectBindingPatternKeywordIdentifiers02.js
+++ b/tests/baselines/reference/objectBindingPatternKeywordIdentifiers02.js
@@ -3,4 +3,4 @@
var { while: while } = { while: 1 }
//// [objectBindingPatternKeywordIdentifiers02.js]
-var _a = { while: 1 }, = _a.while, = _a.while;
+var _a = { "while": 1 }, = _a["while"], = _a["while"];
diff --git a/tests/baselines/reference/objectBindingPatternKeywordIdentifiers03.js b/tests/baselines/reference/objectBindingPatternKeywordIdentifiers03.js
index 4bbb1afb4cb..3d8643d63ce 100644
--- a/tests/baselines/reference/objectBindingPatternKeywordIdentifiers03.js
+++ b/tests/baselines/reference/objectBindingPatternKeywordIdentifiers03.js
@@ -3,4 +3,4 @@
var { "while" } = { while: 1 }
//// [objectBindingPatternKeywordIdentifiers03.js]
-var = { while: 1 }["while"];
+var = { "while": 1 }["while"];
diff --git a/tests/baselines/reference/objectBindingPatternKeywordIdentifiers04.js b/tests/baselines/reference/objectBindingPatternKeywordIdentifiers04.js
index 4e53b13c0a6..de7608a77d2 100644
--- a/tests/baselines/reference/objectBindingPatternKeywordIdentifiers04.js
+++ b/tests/baselines/reference/objectBindingPatternKeywordIdentifiers04.js
@@ -3,4 +3,4 @@
var { "while": while } = { while: 1 }
//// [objectBindingPatternKeywordIdentifiers04.js]
-var _a = { while: 1 }, = _a["while"], = _a.while;
+var _a = { "while": 1 }, = _a["while"], = _a["while"];
diff --git a/tests/baselines/reference/objectLiteralShorthandPropertiesErrorFromNotUsingIdentifier.js b/tests/baselines/reference/objectLiteralShorthandPropertiesErrorFromNotUsingIdentifier.js
index b72f0351b9c..7b9c9f5d328 100644
--- a/tests/baselines/reference/objectLiteralShorthandPropertiesErrorFromNotUsingIdentifier.js
+++ b/tests/baselines/reference/objectLiteralShorthandPropertiesErrorFromNotUsingIdentifier.js
@@ -27,15 +27,15 @@ var y = {
42: ,
get e() { },
set f() { },
- this: ,
- super: ,
- var: ,
- class: ,
- typeof:
+ "this": ,
+ "super": ,
+ "var": ,
+ "class": ,
+ "typeof":
};
var x = {
a: .b,
a: ["ss"],
a: [1]
};
-var v = { class: }; // error
+var v = { "class": }; // error
diff --git a/tests/baselines/reference/objectTypesIdentityWithConstructSignatures2.js b/tests/baselines/reference/objectTypesIdentityWithConstructSignatures2.js
index 315e079d429..0a422dbda6f 100644
--- a/tests/baselines/reference/objectTypesIdentityWithConstructSignatures2.js
+++ b/tests/baselines/reference/objectTypesIdentityWithConstructSignatures2.js
@@ -91,7 +91,7 @@ var C = (function () {
return C;
}());
var a;
-var b = { new: function (x) { return ''; } }; // not a construct signature, function called new
+var b = { "new": function (x) { return ''; } }; // not a construct signature, function called new
function foo1b(x) { }
function foo1c(x) { }
function foo2(x) { }
diff --git a/tests/baselines/reference/objectTypesIdentityWithConstructSignaturesDifferingParamCounts.js b/tests/baselines/reference/objectTypesIdentityWithConstructSignaturesDifferingParamCounts.js
index a61bedfd52f..5fa148b541d 100644
--- a/tests/baselines/reference/objectTypesIdentityWithConstructSignaturesDifferingParamCounts.js
+++ b/tests/baselines/reference/objectTypesIdentityWithConstructSignaturesDifferingParamCounts.js
@@ -91,7 +91,7 @@ var C = (function () {
return C;
}());
var a;
-var b = { new: function (x) { return ''; } }; // not a construct signature, function called new
+var b = { "new": function (x) { return ''; } }; // not a construct signature, function called new
function foo1b(x) { }
function foo1c(x) { }
function foo2(x) { }
diff --git a/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesDifferingByConstraints.js b/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesDifferingByConstraints.js
index c15c53b9bf8..6a66e8bbda3 100644
--- a/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesDifferingByConstraints.js
+++ b/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesDifferingByConstraints.js
@@ -92,7 +92,7 @@ var C = (function () {
return C;
}());
var a;
-var b = { new: function (x) { return ''; } }; // not a construct signature, function called new
+var b = { "new": function (x) { return ''; } }; // not a construct signature, function called new
function foo1b(x) { }
function foo1c(x) { }
function foo2(x) { }
diff --git a/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesDifferingByConstraints2.js b/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesDifferingByConstraints2.js
index f8aff596dc9..e19837a9f7f 100644
--- a/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesDifferingByConstraints2.js
+++ b/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesDifferingByConstraints2.js
@@ -109,7 +109,7 @@ var D = (function () {
return D;
}());
var a;
-var b = { new: function (x, y) { return ''; } }; // not a construct signature, function called new
+var b = { "new": function (x, y) { return ''; } }; // not a construct signature, function called new
function foo1b(x) { }
function foo1c(x) { }
function foo2(x) { }
diff --git a/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesDifferingByConstraints3.js b/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesDifferingByConstraints3.js
index 141aa86823b..735c5bdc2d6 100644
--- a/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesDifferingByConstraints3.js
+++ b/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesDifferingByConstraints3.js
@@ -128,7 +128,7 @@ var D = (function () {
return D;
}());
var a;
-var b = { new: function (x, y) { return ''; } }; // not a construct signature, function called new
+var b = { "new": function (x, y) { return ''; } }; // not a construct signature, function called new
function foo1b(x) { }
function foo1c(x) { }
function foo2(x) { }
diff --git a/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesDifferingByReturnType.js b/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesDifferingByReturnType.js
index b651d368f33..6eab84a49dd 100644
--- a/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesDifferingByReturnType.js
+++ b/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesDifferingByReturnType.js
@@ -99,7 +99,7 @@ var C = (function () {
return C;
}());
var a;
-var b = { new: function (x) { return null; } }; // not a construct signature, function called new
+var b = { "new": function (x) { return null; } }; // not a construct signature, function called new
function foo1b(x) { }
function foo1c(x) { }
function foo2(x) { }
diff --git a/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesDifferingByReturnType2.js b/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesDifferingByReturnType2.js
index ff7095c4ea1..d927a8e082a 100644
--- a/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesDifferingByReturnType2.js
+++ b/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesDifferingByReturnType2.js
@@ -95,7 +95,7 @@ var C = (function () {
return C;
}());
var a;
-var b = { new: function (x) { return null; } }; // not a construct signature, function called new
+var b = { "new": function (x) { return null; } }; // not a construct signature, function called new
function foo1b(x) { }
function foo1c(x) { }
function foo2(x) { }
diff --git a/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesDifferingTypeParameterCounts.js b/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesDifferingTypeParameterCounts.js
index 314eb700c4b..512bebb3b0e 100644
--- a/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesDifferingTypeParameterCounts.js
+++ b/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesDifferingTypeParameterCounts.js
@@ -87,7 +87,7 @@ var C = (function () {
return C;
}());
var a;
-var b = { new: function (x) { return x; } };
+var b = { "new": function (x) { return x; } };
function foo1b(x) { }
function foo1c(x) { }
function foo2(x) { }
diff --git a/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesDifferingTypeParameterNames.js b/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesDifferingTypeParameterNames.js
index 182cf8263b7..80cfcd23ec9 100644
--- a/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesDifferingTypeParameterNames.js
+++ b/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesDifferingTypeParameterNames.js
@@ -87,7 +87,7 @@ var C = (function () {
return C;
}());
var a;
-var b = { new: function (x) { return new C(x); } };
+var b = { "new": function (x) { return new C(x); } };
function foo1b(x) { }
function foo1c(x) { }
function foo2(x) { }
diff --git a/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesOptionalParams.js b/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesOptionalParams.js
index 5c5dd26c331..87cb0b33531 100644
--- a/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesOptionalParams.js
+++ b/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesOptionalParams.js
@@ -91,7 +91,7 @@ var C = (function () {
return C;
}());
var a;
-var b = { new: function (x, y) { return new C(x, y); } }; // not a construct signature, function called new
+var b = { "new": function (x, y) { return new C(x, y); } }; // not a construct signature, function called new
function foo1b(x) { }
function foo1c(x) { }
function foo2(x) { }
diff --git a/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesOptionalParams2.js b/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesOptionalParams2.js
index 14b2ec3c0ca..6b0e91f817f 100644
--- a/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesOptionalParams2.js
+++ b/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesOptionalParams2.js
@@ -91,7 +91,7 @@ var C = (function () {
return C;
}());
var a;
-var b = { new: function (x, y) { return new C(x, y); } }; // not a construct signature, function called new
+var b = { "new": function (x, y) { return new C(x, y); } }; // not a construct signature, function called new
function foo1b(x) { }
function foo1c(x) { }
function foo2(x) { }
diff --git a/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesOptionalParams3.js b/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesOptionalParams3.js
index ffc238cacae..55f2a0217e9 100644
--- a/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesOptionalParams3.js
+++ b/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesOptionalParams3.js
@@ -91,7 +91,7 @@ var C = (function () {
return C;
}());
var a;
-var b = { new: function (x, y) { return new C(x, y); } }; // not a construct signature, function called new
+var b = { "new": function (x, y) { return new C(x, y); } }; // not a construct signature, function called new
function foo1b(x) { }
function foo1c(x) { }
function foo2(x) { }
diff --git a/tests/baselines/reference/parserErrorRecovery_ObjectLiteral2.js b/tests/baselines/reference/parserErrorRecovery_ObjectLiteral2.js
index 6a703759fff..c206a30237a 100644
--- a/tests/baselines/reference/parserErrorRecovery_ObjectLiteral2.js
+++ b/tests/baselines/reference/parserErrorRecovery_ObjectLiteral2.js
@@ -4,4 +4,4 @@ return;
//// [parserErrorRecovery_ObjectLiteral2.js]
var v = { a: ,
- return: };
+ "return": };
diff --git a/tests/baselines/reference/parserErrorRecovery_ObjectLiteral3.js b/tests/baselines/reference/parserErrorRecovery_ObjectLiteral3.js
index eecf45fea4f..6cee2b42725 100644
--- a/tests/baselines/reference/parserErrorRecovery_ObjectLiteral3.js
+++ b/tests/baselines/reference/parserErrorRecovery_ObjectLiteral3.js
@@ -4,4 +4,4 @@ return;
//// [parserErrorRecovery_ObjectLiteral3.js]
var v = { a: ,
- return: };
+ "return": };
diff --git a/tests/baselines/reference/parserErrorRecovery_ObjectLiteral4.js b/tests/baselines/reference/parserErrorRecovery_ObjectLiteral4.js
index 87a1a31437e..23d17c8047b 100644
--- a/tests/baselines/reference/parserErrorRecovery_ObjectLiteral4.js
+++ b/tests/baselines/reference/parserErrorRecovery_ObjectLiteral4.js
@@ -4,4 +4,4 @@ return;
//// [parserErrorRecovery_ObjectLiteral4.js]
var v = { a: 1,
- return: };
+ "return": };
diff --git a/tests/baselines/reference/parserErrorRecovery_ObjectLiteral5.js b/tests/baselines/reference/parserErrorRecovery_ObjectLiteral5.js
index 97e618946a0..7b83132bf0f 100644
--- a/tests/baselines/reference/parserErrorRecovery_ObjectLiteral5.js
+++ b/tests/baselines/reference/parserErrorRecovery_ObjectLiteral5.js
@@ -4,4 +4,4 @@ return;
//// [parserErrorRecovery_ObjectLiteral5.js]
var v = { a: 1,
- return: };
+ "return": };
diff --git a/tests/baselines/reference/parserExportAsFunctionIdentifier.js b/tests/baselines/reference/parserExportAsFunctionIdentifier.js
index 7ed76bb87d9..62429c76855 100644
--- a/tests/baselines/reference/parserExportAsFunctionIdentifier.js
+++ b/tests/baselines/reference/parserExportAsFunctionIdentifier.js
@@ -9,4 +9,4 @@ var x = f.export();
//// [parserExportAsFunctionIdentifier.js]
var f;
-var x = f.export();
+var x = f["export"]();
diff --git a/tests/baselines/reference/parserKeywordsAsIdentifierName1.js b/tests/baselines/reference/parserKeywordsAsIdentifierName1.js
index c0c8c844364..a717abcc08b 100644
--- a/tests/baselines/reference/parserKeywordsAsIdentifierName1.js
+++ b/tests/baselines/reference/parserKeywordsAsIdentifierName1.js
@@ -8,7 +8,7 @@ var big = {
//// [parserKeywordsAsIdentifierName1.js]
var big = {
- break: 0,
- super: 0,
- const: 0
+ "break": 0,
+ "super": 0,
+ "const": 0
};
diff --git a/tests/baselines/reference/parserShorthandPropertyAssignment2.js b/tests/baselines/reference/parserShorthandPropertyAssignment2.js
index 0de0fa3829f..95d2f32ffad 100644
--- a/tests/baselines/reference/parserShorthandPropertyAssignment2.js
+++ b/tests/baselines/reference/parserShorthandPropertyAssignment2.js
@@ -2,4 +2,4 @@
var v = { class };
//// [parserShorthandPropertyAssignment2.js]
-var v = { class: };
+var v = { "class": };
diff --git a/tests/baselines/reference/parserSuperExpression3.js b/tests/baselines/reference/parserSuperExpression3.js
index f311efcd0f6..064353669c8 100644
--- a/tests/baselines/reference/parserSuperExpression3.js
+++ b/tests/baselines/reference/parserSuperExpression3.js
@@ -10,7 +10,7 @@ var C = (function () {
function C() {
}
C.prototype.M = function () {
- this.super(0);
+ this["super"](0);
};
return C;
}());
diff --git a/tests/baselines/reference/prototypeOnConstructorFunctions.js b/tests/baselines/reference/prototypeOnConstructorFunctions.js
index d2e5ddde925..de1fec1f7e8 100644
--- a/tests/baselines/reference/prototypeOnConstructorFunctions.js
+++ b/tests/baselines/reference/prototypeOnConstructorFunctions.js
@@ -12,4 +12,4 @@ i.const.prototype.prop = "yo";
//// [prototypeOnConstructorFunctions.js]
var i;
-i.const.prototype.prop = "yo";
+i["const"].prototype.prop = "yo";
diff --git a/tests/baselines/reference/reservedWords.js b/tests/baselines/reference/reservedWords.js
index 12fbcae0c65..3424c054181 100644
--- a/tests/baselines/reference/reservedWords.js
+++ b/tests/baselines/reference/reservedWords.js
@@ -19,16 +19,16 @@ var obj2 = {
//// [reservedWords.js]
var obj = {
- if: 0,
- debugger: 2,
- break: 3,
- function: 4
+ "if": 0,
+ "debugger": 2,
+ "break": 3,
+ "function": 4
};
//This compiles.
var obj2 = {
- if: 0,
- while: 1,
- debugger: 2,
- break: 3,
- function: 4
+ "if": 0,
+ "while": 1,
+ "debugger": 2,
+ "break": 3,
+ "function": 4
};
diff --git a/tests/baselines/reference/reservedWords2.js b/tests/baselines/reference/reservedWords2.js
index a79a0564c78..d9c8105c35f 100644
--- a/tests/baselines/reference/reservedWords2.js
+++ b/tests/baselines/reference/reservedWords2.js
@@ -27,8 +27,8 @@ function () { }
throw function () { };
module;
void {};
-var _a = { while: 1, return: 2 }, = _a.while, = _a.return;
-var _b = { this: 1, switch: { continue: 2 } }, = _b.this, = _b.switch.continue;
+var _a = { "while": 1, "return": 2 }, = _a["while"], = _a["return"];
+var _b = { "this": 1, "switch": { "continue": 2 } }, = _b["this"], = _b["switch"]["continue"];
var _c = void 0;
debugger;
if ()
diff --git a/tests/baselines/reference/super1.js b/tests/baselines/reference/super1.js
index 9f1289dce55..0094f696faf 100644
--- a/tests/baselines/reference/super1.js
+++ b/tests/baselines/reference/super1.js
@@ -97,7 +97,7 @@ var SubSub1 = (function (_super) {
return _super.apply(this, arguments) || this;
}
SubSub1.prototype.bar = function () {
- return _super.prototype.super.foo;
+ return _super.prototype["super"].foo;
};
return SubSub1;
}(Sub1));
diff --git a/tests/baselines/reference/tsxReactEmitNesting.js b/tests/baselines/reference/tsxReactEmitNesting.js
index 29e948f687b..eaee315c340 100644
--- a/tests/baselines/reference/tsxReactEmitNesting.js
+++ b/tests/baselines/reference/tsxReactEmitNesting.js
@@ -38,21 +38,21 @@ let render = (ctrl, model) =>
//// [file.js]
// A simple render function with nesting and control statements
var render = function (ctrl, model) {
- return vdom.createElement("section", { class: "todoapp" },
- vdom.createElement("header", { class: "header" },
+ return vdom.createElement("section", { "class": "todoapp" },
+ vdom.createElement("header", { "class": "header" },
vdom.createElement("h1", null, "todos "),
- vdom.createElement("input", { class: "new-todo", autofocus: true, autocomplete: "off", placeholder: "What needs to be done?", value: model.newTodo, onKeyup: ctrl.addTodo.bind(ctrl, model) })),
- vdom.createElement("section", { class: "main", style: { display: (model.todos && model.todos.length) ? "block" : "none" } },
- vdom.createElement("input", { class: "toggle-all", type: "checkbox", onChange: ctrl.toggleAll.bind(ctrl) }),
- vdom.createElement("ul", { class: "todo-list" }, model.filteredTodos.map(function (todo) {
- return vdom.createElement("li", { class: { todo: true, completed: todo.completed, editing: todo == model.editedTodo } },
- vdom.createElement("div", { class: "view" },
+ vdom.createElement("input", { "class": "new-todo", autofocus: true, autocomplete: "off", placeholder: "What needs to be done?", value: model.newTodo, onKeyup: ctrl.addTodo.bind(ctrl, model) })),
+ vdom.createElement("section", { "class": "main", style: { display: (model.todos && model.todos.length) ? "block" : "none" } },
+ vdom.createElement("input", { "class": "toggle-all", type: "checkbox", onChange: ctrl.toggleAll.bind(ctrl) }),
+ vdom.createElement("ul", { "class": "todo-list" }, model.filteredTodos.map(function (todo) {
+ return vdom.createElement("li", { "class": { todo: true, completed: todo.completed, editing: todo == model.editedTodo } },
+ vdom.createElement("div", { "class": "view" },
(!todo.editable) ?
- vdom.createElement("input", { class: "toggle", type: "checkbox" })
+ vdom.createElement("input", { "class": "toggle", type: "checkbox" })
: null,
vdom.createElement("label", { onDoubleClick: function () { ctrl.editTodo(todo); } }, todo.title),
- vdom.createElement("button", { class: "destroy", onClick: ctrl.removeTodo.bind(ctrl, todo) }),
- vdom.createElement("div", { class: "iconBorder" },
- vdom.createElement("div", { class: "icon" }))));
+ vdom.createElement("button", { "class": "destroy", onClick: ctrl.removeTodo.bind(ctrl, todo) }),
+ vdom.createElement("div", { "class": "iconBorder" },
+ vdom.createElement("div", { "class": "icon" }))));
}))));
};
diff --git a/tests/baselines/reference/typeQueryWithReservedWords.js b/tests/baselines/reference/typeQueryWithReservedWords.js
index 7561eeddb75..09c3b642a36 100644
--- a/tests/baselines/reference/typeQueryWithReservedWords.js
+++ b/tests/baselines/reference/typeQueryWithReservedWords.js
@@ -21,9 +21,9 @@ var Controller = (function () {
}
Controller.prototype.create = function () {
};
- Controller.prototype.delete = function () {
+ Controller.prototype["delete"] = function () {
};
- Controller.prototype.var = function () {
+ Controller.prototype["var"] = function () {
};
return Controller;
}());