aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorAlex Lam S.L <alexlamsl@gmail.com>2019-10-20 03:53:20 +0800
committerGitHub <noreply@github.com>2019-10-20 03:53:20 +0800
commitca6dce43feb9d92cb5004c6ee4d5b2e0b4336d93 (patch)
tree993c51498c77a037410589184a907e765f72282f /lib
parent543dd7d3d750e83b00e50bbf74fa786a7c1d243e (diff)
downloadtracifyjs-ca6dce43feb9d92cb5004c6ee4d5b2e0b4336d93.tar.gz
tracifyjs-ca6dce43feb9d92cb5004c6ee4d5b2e0b4336d93.zip
fix corner case in `collapse_vars` (#3501)
Diffstat (limited to 'lib')
-rw-r--r--lib/compress.js48
1 files changed, 9 insertions, 39 deletions
diff --git a/lib/compress.js b/lib/compress.js
index 0888c107..8ef94e43 100644
--- a/lib/compress.js
+++ b/lib/compress.js
@@ -1465,50 +1465,20 @@ merge(Compressor.prototype, {
hit_stack.pop();
}
- function find_stop(node, level, write_only) {
+ function find_stop(node, level) {
var parent = scanner.parent(level);
- if (parent instanceof AST_Assign) {
- if (write_only
- && !(parent.left instanceof AST_PropAccess
- || parent.left.name in lvalues)) {
- return find_stop(parent, level + 1, write_only);
- }
- return node;
- }
- if (parent instanceof AST_Binary) {
- if (write_only && (!lazy_op[parent.operator] || parent.left === node)) {
- return find_stop(parent, level + 1, write_only);
- }
- return node;
- }
+ if (parent instanceof AST_Assign) return node;
+ if (parent instanceof AST_Binary) return node;
if (parent instanceof AST_Call) return node;
if (parent instanceof AST_Case) return node;
- if (parent instanceof AST_Conditional) {
- if (write_only && parent.condition === node) {
- return find_stop(parent, level + 1, write_only);
- }
- return node;
- }
- if (parent instanceof AST_Definitions) {
- return find_stop(parent, level + 1, true);
- }
- if (parent instanceof AST_Exit) {
- return write_only ? find_stop(parent, level + 1, write_only) : node;
- }
- if (parent instanceof AST_If) {
- if (write_only && parent.condition === node) {
- return find_stop(parent, level + 1, write_only);
- }
- return node;
- }
+ if (parent instanceof AST_Conditional) return node;
+ if (parent instanceof AST_Definitions) return find_stop(parent, level + 1);
+ if (parent instanceof AST_Exit) return node;
+ if (parent instanceof AST_If) return node;
if (parent instanceof AST_IterationStatement) return node;
if (parent instanceof AST_PropAccess) return node;
- if (parent instanceof AST_Sequence) {
- return find_stop(parent, level + 1, parent.tail_node() !== node);
- }
- if (parent instanceof AST_SimpleStatement) {
- return find_stop(parent, level + 1, true);
- }
+ if (parent instanceof AST_Sequence) return find_stop(parent, level + 1);
+ if (parent instanceof AST_SimpleStatement) return find_stop(parent, level + 1);
if (parent instanceof AST_Switch) return node;
if (parent instanceof AST_Unary) return node;
if (parent instanceof AST_VarDef) return node;