From ce51343e73949a7384a65316744c63de4b0627c7 Mon Sep 17 00:00:00 2001 From: Sheetal Nandi Date: Tue, 11 Nov 2014 23:38:18 -0800 Subject: [PATCH 1/2] Adding testcase for the incorrect eliding of the import declarations --- .../baselines/reference/elidingImportNames.js | 26 +++++++++++++++++ .../reference/elidingImportNames.types | 29 +++++++++++++++++++ tests/cases/compiler/elidingImportNames.ts | 15 ++++++++++ 3 files changed, 70 insertions(+) create mode 100644 tests/baselines/reference/elidingImportNames.js create mode 100644 tests/baselines/reference/elidingImportNames.types create mode 100644 tests/cases/compiler/elidingImportNames.ts diff --git a/tests/baselines/reference/elidingImportNames.js b/tests/baselines/reference/elidingImportNames.js new file mode 100644 index 00000000000..f14999f2412 --- /dev/null +++ b/tests/baselines/reference/elidingImportNames.js @@ -0,0 +1,26 @@ +//// [tests/cases/compiler/elidingImportNames.ts] //// + +//// [elidingImportNames_test.ts] + +import a = require('elidingImportNames_main'); // alias used in typeof +var b = a; +var x: typeof a; +import a2 = require('elidingImportNames_main1'); // alias not used in typeof +var b2 = a2; + + +//// [elidingImportNames_main.ts] +export var main = 10; + +//// [elidingImportNames_main1.ts] +export var main = 10; + +//// [elidingImportNames_main.js] +exports.main = 10; +//// [elidingImportNames_main1.js] +exports.main = 10; +//// [elidingImportNames_test.js] +var b = a; +var x; +var a2 = require('elidingImportNames_main1'); // alias not used in typeof +var b2 = a2; diff --git a/tests/baselines/reference/elidingImportNames.types b/tests/baselines/reference/elidingImportNames.types new file mode 100644 index 00000000000..ad93c72860b --- /dev/null +++ b/tests/baselines/reference/elidingImportNames.types @@ -0,0 +1,29 @@ +=== tests/cases/compiler/elidingImportNames_test.ts === + +import a = require('elidingImportNames_main'); // alias used in typeof +>a : typeof a + +var b = a; +>b : typeof a +>a : typeof a + +var x: typeof a; +>x : typeof a +>a : typeof a + +import a2 = require('elidingImportNames_main1'); // alias not used in typeof +>a2 : typeof a2 + +var b2 = a2; +>b2 : typeof a2 +>a2 : typeof a2 + + +=== tests/cases/compiler/elidingImportNames_main.ts === +export var main = 10; +>main : number + +=== tests/cases/compiler/elidingImportNames_main1.ts === +export var main = 10; +>main : number + diff --git a/tests/cases/compiler/elidingImportNames.ts b/tests/cases/compiler/elidingImportNames.ts new file mode 100644 index 00000000000..b5893461664 --- /dev/null +++ b/tests/cases/compiler/elidingImportNames.ts @@ -0,0 +1,15 @@ +// @module: commonjs + +// @Filename: elidingImportNames_test.ts +import a = require('elidingImportNames_main'); // alias used in typeof +var b = a; +var x: typeof a; +import a2 = require('elidingImportNames_main1'); // alias not used in typeof +var b2 = a2; + + +// @Filename: elidingImportNames_main.ts +export var main = 10; + +// @Filename: elidingImportNames_main1.ts +export var main = 10; \ No newline at end of file From b1297b2b6588419ed56346c93983c8f0f49cf1d7 Mon Sep 17 00:00:00 2001 From: Sheetal Nandi Date: Tue, 11 Nov 2014 23:49:57 -0800 Subject: [PATCH 2/2] Instead of setting fresh value, or the value with existing one of if alias is referenced in value position Fixes #1130 --- src/compiler/checker.ts | 2 +- tests/baselines/reference/aliasUsageInIndexerOfClass.js | 1 + tests/baselines/reference/elidingImportNames.js | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 825570c2eb9..5a990d4e9db 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -4474,7 +4474,7 @@ module ts { if (symbol.flags & SymbolFlags.Import) { // Mark the import as referenced so that we emit it in the final .js file. // exception: identifiers that appear in type queries, const enums, modules that contain only const enums - getSymbolLinks(symbol).referenced = !isInTypeQuery(node) && !isConstEnumOrConstEnumOnlyModule(resolveImport(symbol)); + getSymbolLinks(symbol).referenced = getSymbolLinks(symbol).referenced || (!isInTypeQuery(node) && !isConstEnumOrConstEnumOnlyModule(resolveImport(symbol))); } checkCollisionWithCapturedSuperVariable(node, node); diff --git a/tests/baselines/reference/aliasUsageInIndexerOfClass.js b/tests/baselines/reference/aliasUsageInIndexerOfClass.js index dfbb1982ca9..7b2907681e0 100644 --- a/tests/baselines/reference/aliasUsageInIndexerOfClass.js +++ b/tests/baselines/reference/aliasUsageInIndexerOfClass.js @@ -50,6 +50,7 @@ var VisualizationModel = (function (_super) { })(Backbone.Model); exports.VisualizationModel = VisualizationModel; //// [aliasUsageInIndexerOfClass_main.js] +var moduleA = require("aliasUsageInIndexerOfClass_moduleA"); var N = (function () { function N() { this.x = moduleA; diff --git a/tests/baselines/reference/elidingImportNames.js b/tests/baselines/reference/elidingImportNames.js index f14999f2412..3c61789a1a7 100644 --- a/tests/baselines/reference/elidingImportNames.js +++ b/tests/baselines/reference/elidingImportNames.js @@ -20,6 +20,7 @@ exports.main = 10; //// [elidingImportNames_main1.js] exports.main = 10; //// [elidingImportNames_test.js] +var a = require('elidingImportNames_main'); // alias used in typeof var b = a; var x; var a2 = require('elidingImportNames_main1'); // alias not used in typeof