Merge pull request #9914 from webpack/bugfix/import-free-variables

fix bug where importing variables with special free names is broken
This commit is contained in:
Tobias Koppers 2019-10-30 14:15:12 +01:00 committed by GitHub
commit 3f135f59b0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 27 additions and 12 deletions

View File

@ -2131,17 +2131,17 @@ class JavascriptParser {
const callee = this.evaluateExpression(expression.callee); const callee = this.evaluateExpression(expression.callee);
if (callee.isIdentifier()) { if (callee.isIdentifier()) {
const result1 = this.callHooksForInfo( const result1 = this.callHooksForInfo(
this.hooks.call,
callee.identifier,
expression
);
if (result1 === true) return;
const result2 = this.callHooksForInfo(
this.hooks.callMemberChain, this.hooks.callMemberChain,
callee.rootInfo, callee.rootInfo,
expression, expression,
callee.getMembers() callee.getMembers()
); );
if (result1 === true) return;
const result2 = this.callHooksForInfo(
this.hooks.call,
callee.identifier,
expression
);
if (result2 === true) return; if (result2 === true) return;
} }
@ -2167,17 +2167,17 @@ class JavascriptParser {
walkMemberExpressionWithExpressionName(expression, name, rootInfo, members) { walkMemberExpressionWithExpressionName(expression, name, rootInfo, members) {
const result1 = this.callHooksForInfo( const result1 = this.callHooksForInfo(
this.hooks.expression,
name,
expression
);
if (result1 === true) return;
const result2 = this.callHooksForInfo(
this.hooks.expressionMemberChain, this.hooks.expressionMemberChain,
rootInfo, rootInfo,
expression, expression,
members members
); );
if (result1 === true) return;
const result2 = this.callHooksForInfo(
this.hooks.expression,
name,
expression
);
if (result2 === true) return; if (result2 === true) return;
if (expression.object.type === "MemberExpression") { if (expression.object.type === "MemberExpression") {
// optimize case where expression.object is a MemberExpression too. // optimize case where expression.object is a MemberExpression too.

View File

@ -0,0 +1,12 @@
import define from "./module";
const i = x => x;
it("should allow to import a variable named define (call)", () => {
expect(define()).toBe("ok");
});
it("should allow to import a variable named define (expresion)", () => {
const d = i(define);
expect(d()).toBe("ok");
});

View File

@ -0,0 +1,3 @@
export const define = () => "ok";
export { define as default };