From 85e587e1d330fdeea3b806477b03410be125c242 Mon Sep 17 00:00:00 2001 From: Ron Buckton Date: Tue, 20 Oct 2015 10:59:23 -0700 Subject: [PATCH 1/2] Fixes issue in emitExpressionIdentifier when combining --target ES6 with --module. Fixes #5315. --- src/compiler/emitter.ts | 55 ++++++++++++++++++++++------------------- 1 file changed, 30 insertions(+), 25 deletions(-) diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index f2468e7244d..70ab3606c6c 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -1769,34 +1769,39 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promi write("."); } } - else if (modulekind !== ModuleKind.ES6) { - let declaration = resolver.getReferencedImportDeclaration(node); - if (declaration) { - if (declaration.kind === SyntaxKind.ImportClause) { - // Identifier references default import - write(getGeneratedNameForNode(declaration.parent)); - write(languageVersion === ScriptTarget.ES3 ? "[\"default\"]" : ".default"); - return; - } - else if (declaration.kind === SyntaxKind.ImportSpecifier) { - // Identifier references named import - write(getGeneratedNameForNode(declaration.parent.parent.parent)); - let name = (declaration).propertyName || (declaration).name; - let identifier = getSourceTextOfNodeFromSourceFile(currentSourceFile, name); - if (languageVersion === ScriptTarget.ES3 && identifier === "default") { - write(`["default"]`); + else { + if (modulekind !== ModuleKind.ES6) { + let declaration = resolver.getReferencedImportDeclaration(node); + if (declaration) { + if (declaration.kind === SyntaxKind.ImportClause) { + // Identifier references default import + write(getGeneratedNameForNode(declaration.parent)); + write(languageVersion === ScriptTarget.ES3 ? "[\"default\"]" : ".default"); + return; } - else { - write("."); - write(identifier); + else if (declaration.kind === SyntaxKind.ImportSpecifier) { + // Identifier references named import + write(getGeneratedNameForNode(declaration.parent.parent.parent)); + let name = (declaration).propertyName || (declaration).name; + let identifier = getSourceTextOfNodeFromSourceFile(currentSourceFile, name); + if (languageVersion === ScriptTarget.ES3 && identifier === "default") { + write(`["default"]`); + } + else { + write("."); + write(identifier); + } + return; } - return; } } - declaration = resolver.getReferencedNestedRedeclaration(node); - if (declaration) { - write(getGeneratedNameForNode(declaration.name)); - return; + + if (languageVersion !== ScriptTarget.ES6) { + let declaration = resolver.getReferencedNestedRedeclaration(node); + if (declaration) { + write(getGeneratedNameForNode(declaration.name)); + return; + } } } @@ -2785,7 +2790,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promi /** * Emit ES7 exponentiation operator downlevel using Math.pow - * @param node a binary expression node containing exponentiationOperator (**, **=) + * @param node a binary expression node containing exponentiationOperator (**, **=) */ function emitExponentiationOperator(node: BinaryExpression) { let leftHandSideExpression = node.left; From c627802a438ec2e4e5a748d78f0dd12906b9d761 Mon Sep 17 00:00:00 2001 From: Ron Buckton Date: Tue, 20 Oct 2015 12:32:49 -0700 Subject: [PATCH 2/2] Tests --- .../reference/nestedRedeclarationInES6AMD.js | 15 +++++++++++++++ .../reference/nestedRedeclarationInES6AMD.symbols | 11 +++++++++++ .../reference/nestedRedeclarationInES6AMD.types | 14 ++++++++++++++ .../cases/compiler/nestedRedeclarationInES6AMD.ts | 8 ++++++++ 4 files changed, 48 insertions(+) create mode 100644 tests/baselines/reference/nestedRedeclarationInES6AMD.js create mode 100644 tests/baselines/reference/nestedRedeclarationInES6AMD.symbols create mode 100644 tests/baselines/reference/nestedRedeclarationInES6AMD.types create mode 100644 tests/cases/compiler/nestedRedeclarationInES6AMD.ts diff --git a/tests/baselines/reference/nestedRedeclarationInES6AMD.js b/tests/baselines/reference/nestedRedeclarationInES6AMD.js new file mode 100644 index 00000000000..bb90759dc8b --- /dev/null +++ b/tests/baselines/reference/nestedRedeclarationInES6AMD.js @@ -0,0 +1,15 @@ +//// [nestedRedeclarationInES6AMD.ts] +function a() { + { + let status = 1; + status = 2; + } +} + +//// [nestedRedeclarationInES6AMD.js] +function a() { + { + let status = 1; + status = 2; + } +} diff --git a/tests/baselines/reference/nestedRedeclarationInES6AMD.symbols b/tests/baselines/reference/nestedRedeclarationInES6AMD.symbols new file mode 100644 index 00000000000..65f310a7ed2 --- /dev/null +++ b/tests/baselines/reference/nestedRedeclarationInES6AMD.symbols @@ -0,0 +1,11 @@ +=== tests/cases/compiler/nestedRedeclarationInES6AMD.ts === +function a() { +>a : Symbol(a, Decl(nestedRedeclarationInES6AMD.ts, 0, 0)) + { + let status = 1; +>status : Symbol(status, Decl(nestedRedeclarationInES6AMD.ts, 2, 11)) + + status = 2; +>status : Symbol(status, Decl(nestedRedeclarationInES6AMD.ts, 2, 11)) + } +} diff --git a/tests/baselines/reference/nestedRedeclarationInES6AMD.types b/tests/baselines/reference/nestedRedeclarationInES6AMD.types new file mode 100644 index 00000000000..2b8d971e3c1 --- /dev/null +++ b/tests/baselines/reference/nestedRedeclarationInES6AMD.types @@ -0,0 +1,14 @@ +=== tests/cases/compiler/nestedRedeclarationInES6AMD.ts === +function a() { +>a : () => void + { + let status = 1; +>status : number +>1 : number + + status = 2; +>status = 2 : number +>status : number +>2 : number + } +} diff --git a/tests/cases/compiler/nestedRedeclarationInES6AMD.ts b/tests/cases/compiler/nestedRedeclarationInES6AMD.ts new file mode 100644 index 00000000000..e518e354cd0 --- /dev/null +++ b/tests/cases/compiler/nestedRedeclarationInES6AMD.ts @@ -0,0 +1,8 @@ +// @target: ES6 +// @module: AMD +function a() { + { + let status = 1; + status = 2; + } +} \ No newline at end of file