diff --git a/src/Module.ts b/src/Module.ts index fa498192d3b..80eeb58d547 100644 --- a/src/Module.ts +++ b/src/Module.ts @@ -1061,14 +1061,16 @@ export default class Module { variable.include(); this.graph.needsTreeshakingPass = true; const variableModule = variable.module; - if (variableModule && variableModule !== this && variableModule instanceof Module) { + if (variableModule && variableModule instanceof Module) { if (!variableModule.isExecuted) { markModuleAndImpureDependenciesAsExecuted(variableModule); } - const sideEffectModules = getAndExtendSideEffectModules(variable, this); - for (const module of sideEffectModules) { - if (!module.isExecuted) { - markModuleAndImpureDependenciesAsExecuted(module); + if (variableModule !== this) { + const sideEffectModules = getAndExtendSideEffectModules(variable, this); + for (const module of sideEffectModules) { + if (!module.isExecuted) { + markModuleAndImpureDependenciesAsExecuted(module); + } } } } diff --git a/src/ast/nodes/shared/Node.ts b/src/ast/nodes/shared/Node.ts index 38e72ee3296..a7a1656aebd 100644 --- a/src/ast/nodes/shared/Node.ts +++ b/src/ast/nodes/shared/Node.ts @@ -286,5 +286,5 @@ export function locateNode(node: Node) { } export function logNode(node: Node) { - console.log(node.context.code.slice(node.start, node.end)); + return node.context.code.slice(node.start, node.end); } diff --git a/test/function/samples/side-effect-free-module-function/_config.js b/test/function/samples/side-effect-free-module-function/_config.js new file mode 100644 index 00000000000..7338de6c86e --- /dev/null +++ b/test/function/samples/side-effect-free-module-function/_config.js @@ -0,0 +1,11 @@ +module.exports = { + description: + 'correctly include functions with side effects from side-effect-free modules (#3942)', + options: { + plugins: { + transform() { + return { moduleSideEffects: false }; + } + } + } +}; diff --git a/test/function/samples/side-effect-free-module-function/curry.js b/test/function/samples/side-effect-free-module-function/curry.js new file mode 100644 index 00000000000..c4e015c5001 --- /dev/null +++ b/test/function/samples/side-effect-free-module-function/curry.js @@ -0,0 +1,4 @@ +export function curry(fn, args = []) { + return (..._args) => + (rest => (rest.length >= fn.length ? fn(...rest) : curry(fn, rest)))([...args, ..._args]); +} diff --git a/test/function/samples/side-effect-free-module-function/main.js b/test/function/samples/side-effect-free-module-function/main.js new file mode 100644 index 00000000000..12ab0b1a92b --- /dev/null +++ b/test/function/samples/side-effect-free-module-function/main.js @@ -0,0 +1,11 @@ +import { curry } from './curry'; +let result; + +function foo() { + result = 'foo'; +} + +var fooc = curry(foo); +fooc(); + +assert.strictEqual(result, 'foo');