From 2d30692f1b76c7cb2a7ff5c766616fe7aa4fdf1a Mon Sep 17 00:00:00 2001 From: Steven Fan Date: Wed, 26 Apr 2017 07:58:19 -0400 Subject: [PATCH] When collecting imported names to deshadow the current ModuleScope, use previously deshadowed names if available --- src/ast/scopes/ModuleScope.js | 2 +- .../already-deshadowed-import/_config.js | 3 +++ .../already-deshadowed-import/alice.js | 5 +++++ test/function/already-deshadowed-import/bob.js | 4 ++++ .../function/already-deshadowed-import/main.js | 18 ++++++++++++++++++ 5 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 test/function/already-deshadowed-import/_config.js create mode 100644 test/function/already-deshadowed-import/alice.js create mode 100644 test/function/already-deshadowed-import/bob.js create mode 100644 test/function/already-deshadowed-import/main.js diff --git a/src/ast/scopes/ModuleScope.js b/src/ast/scopes/ModuleScope.js index f0f5f7a90c7..9a1f9ee75a7 100644 --- a/src/ast/scopes/ModuleScope.js +++ b/src/ast/scopes/ModuleScope.js @@ -21,7 +21,7 @@ export default class ModuleScope extends Scope { if ( specifier.module.isExternal ) return; specifier.module.getExports().forEach( name => { - names.add( name ); + names.add( specifier.module.traceExport(name).name ); }); if ( specifier.name !== '*' ) { diff --git a/test/function/already-deshadowed-import/_config.js b/test/function/already-deshadowed-import/_config.js new file mode 100644 index 00000000000..92fce9cccd5 --- /dev/null +++ b/test/function/already-deshadowed-import/_config.js @@ -0,0 +1,3 @@ +module.exports = { + description: 'handle already module import names correctly if they are have already been deshadowed' +}; diff --git a/test/function/already-deshadowed-import/alice.js b/test/function/already-deshadowed-import/alice.js new file mode 100644 index 00000000000..ac67f5991c7 --- /dev/null +++ b/test/function/already-deshadowed-import/alice.js @@ -0,0 +1,5 @@ +import * as Bob from "./bob"; +export function foo() { + return "alice"; +} + diff --git a/test/function/already-deshadowed-import/bob.js b/test/function/already-deshadowed-import/bob.js new file mode 100644 index 00000000000..3067f0bd91d --- /dev/null +++ b/test/function/already-deshadowed-import/bob.js @@ -0,0 +1,4 @@ +import * as Alice from "./alice"; +export function foo() { + return "bob"; +} diff --git a/test/function/already-deshadowed-import/main.js b/test/function/already-deshadowed-import/main.js new file mode 100644 index 00000000000..dcecbeb1364 --- /dev/null +++ b/test/function/already-deshadowed-import/main.js @@ -0,0 +1,18 @@ +import * as Bob from "./bob"; +import * as Alice from "./alice"; + +function g() { + var foo = Bob.foo(); + return foo; +} + +function f() { + var foo = Alice.foo(); + return foo; +} + +assert.equal(f(), "alice"); +assert.equal(g(), "bob"); + + +