Fix regressions when handling assignments and expression statements with side effects #1591
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This will resolve #1589 and #1592.
For #1589: In Identifier.js, I assumed that all declarations have assignedExpressions, which is certainly not true for SyntheticNamespaceDeclarations. To be cautious, for now we assume that those always have effects when mutated.
For #1592: It seems that people are calling getters for side-effects and this is something that rollup is not (and was never) prepared for yet. The better solution, as suggested by @kzc , is probably to start adding flags for certain more aggressive aspects of tree-shaking such as assuming that all getters are pure. Until then with this PR, rollup will keep all expression statements that are not usually called as statements because we assume that they are called for side-effects. That seems to cover the cases listed in #1592 and also keep things like 'use strict'.