Skip to content

Commit

Permalink
Merge pull request #12452 from webpack/bugfix/12044
Browse files Browse the repository at this point in the history
  • Loading branch information
sokra committed Jan 21, 2021
2 parents 20e205b + 65d3c38 commit f85f0d5
Show file tree
Hide file tree
Showing 5 changed files with 36 additions and 2 deletions.
11 changes: 9 additions & 2 deletions lib/javascript/JavascriptParser.js
Original file line number Diff line number Diff line change
Expand Up @@ -2625,21 +2625,28 @@ class JavascriptParser extends Parser {
}

walkCallExpression(expression) {
const isSimpleFunction = fn => {
return fn.params.every(p => p.type === "Identifier");
};
if (
expression.callee.type === "MemberExpression" &&
expression.callee.object.type.endsWith("FunctionExpression") &&
!expression.callee.computed &&
(expression.callee.property.name === "call" ||
expression.callee.property.name === "bind") &&
expression.arguments.length > 0
expression.arguments.length > 0 &&
isSimpleFunction(expression.callee.object)
) {
// (function(…) { }.call/bind(?, …))
this._walkIIFE(
expression.callee.object,
expression.arguments.slice(1),
expression.arguments[0]
);
} else if (expression.callee.type.endsWith("FunctionExpression")) {
} else if (
expression.callee.type.endsWith("FunctionExpression") &&
isSimpleFunction(expression.callee)
) {
// (function(…) { }(…))
this._walkIIFE(expression.callee, expression.arguments, null);
} else {
Expand Down
4 changes: 4 additions & 0 deletions test/cases/parsing/iife/a.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
export let a = 1e3;

export function b() { a = 1e2 }
export function c() { a = 1e1 }
10 changes: 10 additions & 0 deletions test/cases/parsing/iife/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import { a } from './a';
import { track1, track2 } from './side-effect-call';

it("should parse params", () => {
expect(a).toBe(1000);
track1();
expect(a).toBe(100);
track2();
expect(a).toBe(10);
});
9 changes: 9 additions & 0 deletions test/cases/parsing/iife/side-effect-call.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import { b, c } from './a'

export function track1() {
(function (a = b()) {})()
}

export function track2() {
((a = c()) => {})()
}
4 changes: 4 additions & 0 deletions test/cases/parsing/iife/test.filter.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
module.exports = function (config) {
// TODO fails due to minimizer bug: https://github.com/terser/terser/issues/880
return !config.minimize;
};

0 comments on commit f85f0d5

Please sign in to comment.