From a2d7b0948880b53ab1d1486624d44d7ead88d8b5 Mon Sep 17 00:00:00 2001 From: Wesley Wigham Date: Wed, 16 Sep 2015 15:47:52 -0700 Subject: [PATCH 1/3] failing test --- .../reference/es3defaultAliasIsQuoted.js | 33 +++++++++++++++++ .../reference/es3defaultAliasIsQuoted.symbols | 30 +++++++++++++++ .../reference/es3defaultAliasIsQuoted.types | 37 +++++++++++++++++++ .../cases/compiler/es3defaultAliasIsQuoted.ts | 15 ++++++++ 4 files changed, 115 insertions(+) create mode 100644 tests/baselines/reference/es3defaultAliasIsQuoted.js create mode 100644 tests/baselines/reference/es3defaultAliasIsQuoted.symbols create mode 100644 tests/baselines/reference/es3defaultAliasIsQuoted.types create mode 100644 tests/cases/compiler/es3defaultAliasIsQuoted.ts diff --git a/tests/baselines/reference/es3defaultAliasIsQuoted.js b/tests/baselines/reference/es3defaultAliasIsQuoted.js new file mode 100644 index 00000000000..3ca828c1b4c --- /dev/null +++ b/tests/baselines/reference/es3defaultAliasIsQuoted.js @@ -0,0 +1,33 @@ +//// [tests/cases/compiler/es3defaultAliasIsQuoted.ts] //// + +//// [es3defaultAliasQuoted_file0.ts] + +export class Foo { + static CONSTANT = "Foo"; +} + +export default function assert(value: boolean) { + if (!value) throw new Error("Assertion failed!"); +} + +//// [es3defaultAliasQuoted_file1.ts] +import {Foo, default as assert} from "./es3defaultAliasQuoted_file0"; +assert(Foo.CONSTANT === "Foo"); + +//// [es3defaultAliasQuoted_file0.js] +var Foo = (function () { + function Foo() { + } + Foo.CONSTANT = "Foo"; + return Foo; +})(); +exports.Foo = Foo; +function assert(value) { + if (!value) + throw new Error("Assertion failed!"); +} +exports.__esModule = true; +exports["default"] = assert; +//// [es3defaultAliasQuoted_file1.js] +var es3defaultAliasQuoted_file0_1 = require("./es3defaultAliasQuoted_file0"); +es3defaultAliasQuoted_file0_1["default"](es3defaultAliasQuoted_file0_1.Foo.CONSTANT === "Foo"); diff --git a/tests/baselines/reference/es3defaultAliasIsQuoted.symbols b/tests/baselines/reference/es3defaultAliasIsQuoted.symbols new file mode 100644 index 00000000000..907f1d71b89 --- /dev/null +++ b/tests/baselines/reference/es3defaultAliasIsQuoted.symbols @@ -0,0 +1,30 @@ +=== tests/cases/compiler/es3defaultAliasQuoted_file0.ts === + +export class Foo { +>Foo : Symbol(Foo, Decl(es3defaultAliasQuoted_file0.ts, 0, 0)) + + static CONSTANT = "Foo"; +>CONSTANT : Symbol(Foo.CONSTANT, Decl(es3defaultAliasQuoted_file0.ts, 1, 18)) +} + +export default function assert(value: boolean) { +>assert : Symbol(assert, Decl(es3defaultAliasQuoted_file0.ts, 3, 1)) +>value : Symbol(value, Decl(es3defaultAliasQuoted_file0.ts, 5, 31)) + + if (!value) throw new Error("Assertion failed!"); +>value : Symbol(value, Decl(es3defaultAliasQuoted_file0.ts, 5, 31)) +>Error : Symbol(Error, Decl(lib.d.ts, 876, 38), Decl(lib.d.ts, 889, 11)) +} + +=== tests/cases/compiler/es3defaultAliasQuoted_file1.ts === +import {Foo, default as assert} from "./es3defaultAliasQuoted_file0"; +>Foo : Symbol(Foo, Decl(es3defaultAliasQuoted_file1.ts, 0, 8)) +>default : Symbol(assert, Decl(es3defaultAliasQuoted_file1.ts, 0, 12)) +>assert : Symbol(assert, Decl(es3defaultAliasQuoted_file1.ts, 0, 12)) + +assert(Foo.CONSTANT === "Foo"); +>assert : Symbol(assert, Decl(es3defaultAliasQuoted_file1.ts, 0, 12)) +>Foo.CONSTANT : Symbol(Foo.CONSTANT, Decl(es3defaultAliasQuoted_file0.ts, 1, 18)) +>Foo : Symbol(Foo, Decl(es3defaultAliasQuoted_file1.ts, 0, 8)) +>CONSTANT : Symbol(Foo.CONSTANT, Decl(es3defaultAliasQuoted_file0.ts, 1, 18)) + diff --git a/tests/baselines/reference/es3defaultAliasIsQuoted.types b/tests/baselines/reference/es3defaultAliasIsQuoted.types new file mode 100644 index 00000000000..d3b1ebf105b --- /dev/null +++ b/tests/baselines/reference/es3defaultAliasIsQuoted.types @@ -0,0 +1,37 @@ +=== tests/cases/compiler/es3defaultAliasQuoted_file0.ts === + +export class Foo { +>Foo : Foo + + static CONSTANT = "Foo"; +>CONSTANT : string +>"Foo" : string +} + +export default function assert(value: boolean) { +>assert : (value: boolean) => void +>value : boolean + + if (!value) throw new Error("Assertion failed!"); +>!value : boolean +>value : boolean +>new Error("Assertion failed!") : Error +>Error : ErrorConstructor +>"Assertion failed!" : string +} + +=== tests/cases/compiler/es3defaultAliasQuoted_file1.ts === +import {Foo, default as assert} from "./es3defaultAliasQuoted_file0"; +>Foo : typeof Foo +>default : (value: boolean) => void +>assert : (value: boolean) => void + +assert(Foo.CONSTANT === "Foo"); +>assert(Foo.CONSTANT === "Foo") : void +>assert : (value: boolean) => void +>Foo.CONSTANT === "Foo" : boolean +>Foo.CONSTANT : string +>Foo : typeof Foo +>CONSTANT : string +>"Foo" : string + diff --git a/tests/cases/compiler/es3defaultAliasIsQuoted.ts b/tests/cases/compiler/es3defaultAliasIsQuoted.ts new file mode 100644 index 00000000000..ccaa0268906 --- /dev/null +++ b/tests/cases/compiler/es3defaultAliasIsQuoted.ts @@ -0,0 +1,15 @@ +// @module: commonjs +// @target: es3 + +// @Filename: es3defaultAliasQuoted_file0.ts +export class Foo { + static CONSTANT = "Foo"; +} + +export default function assert(value: boolean) { + if (!value) throw new Error("Assertion failed!"); +} + +// @Filename: es3defaultAliasQuoted_file1.ts +import {Foo, default as assert} from "./es3defaultAliasQuoted_file0"; +assert(Foo.CONSTANT === "Foo"); \ No newline at end of file From 5dfca610f9ec5ffebba6967b9e45f0a66b09edce Mon Sep 17 00:00:00 2001 From: Wesley Wigham Date: Wed, 16 Sep 2015 17:33:49 -0700 Subject: [PATCH 2/3] When targeting ES3 emit default alias as indexer --- src/compiler/emitter.ts | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index 44e5a45b057..8928e437622 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -1515,8 +1515,14 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promi else if (declaration.kind === SyntaxKind.ImportSpecifier) { // Identifier references named import write(getGeneratedNameForNode(declaration.parent.parent.parent)); - write("."); - writeTextOfNode(currentSourceFile, (declaration).propertyName || (declaration).name); + var name = (declaration).propertyName || (declaration).name; + var identifier = getSourceTextOfNodeFromSourceFile(currentSourceFile, name); + if (languageVersion == ScriptTarget.ES3 && identifier === "default") { + write(`["default"]`); + } else { + write("."); + write(identifier); + } return; } } From f3062c59fded3c23d7523b8879b6f997489665ef Mon Sep 17 00:00:00 2001 From: Wesley Wigham Date: Thu, 17 Sep 2015 13:03:47 -0700 Subject: [PATCH 3/3] style nits --- src/compiler/emitter.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index 8928e437622..bd16b13bb09 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -1517,9 +1517,10 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promi write(getGeneratedNameForNode(declaration.parent.parent.parent)); var name = (declaration).propertyName || (declaration).name; var identifier = getSourceTextOfNodeFromSourceFile(currentSourceFile, name); - if (languageVersion == ScriptTarget.ES3 && identifier === "default") { + if (languageVersion === ScriptTarget.ES3 && identifier === "default") { write(`["default"]`); - } else { + } + else { write("."); write(identifier); }