@@ -800,14 +800,6 @@ merge(Compressor.prototype, {
800
800
|| compressor.option("unsafe") && global_names(this.name);
801
801
});
802
802
803
-
function drop_decl(def) {
804
-
def.eliminated++;
805
-
if (def.orig.length == def.eliminated) {
806
-
def.scope.functions.del(def.name);
807
-
def.scope.variables.del(def.name);
808
-
}
809
-
}
810
-
811
803
function is_identifier_atom(node) {
812
804
return node instanceof AST_Infinity
813
805
|| node instanceof AST_NaN
@@ -1138,7 +1130,6 @@ merge(Compressor.prototype, {
1138
1130
if (node === expr || node.body === expr) {
1139
1131
found = true;
1140
1132
if (node instanceof AST_VarDef) {
1141
-
drop_decl(node.name.definition());
1142
1133
node.value = null;
1143
1134
return node;
1144
1135
}
@@ -2484,7 +2475,7 @@ merge(Compressor.prototype, {
2484
2475
var def = node.name.definition();
2485
2476
if (!(def.id in in_use_ids)) {
2486
2477
compressor[node.name.unreferenced() ? "warn" : "info"]("Dropping unused function {name} [{file}:{line},{col}]", template(node.name));
2487
-
drop_decl(def);
2478
+
def.eliminated++;
2488
2479
return make_node(AST_EmptyStatement, node);
2489
2480
}
2490
2481
return node;
@@ -2503,10 +2494,17 @@ merge(Compressor.prototype, {
2503
2494
if (!drop_vars || sym.id in in_use_ids) {
2504
2495
if (def.name instanceof AST_SymbolVar) {
2505
2496
var var_defs = var_defs_by_id.get(sym.id);
2506
-
if (var_defs.length > 1 && !def.value) {
2497
+
if (var_defs.length > 1 && (!def.value || sym.orig.indexOf(def.name) > sym.eliminated)) {
2507
2498
compressor.warn("Dropping duplicated definition of variable {name} [{file}:{line},{col}]", template(def.name));
2499
+
if (def.value) {
2500
+
merge_sequence(side_effects, make_node(AST_Assign, def, {
2501
+
operator: "=",
2502
+
left: make_node(AST_SymbolRef, def.name, def.name),
2503
+
right: def.value
2504
+
}));
2505
+
}
2508
2506
remove(var_defs, def);
2509
-
drop_decl(sym);
2507
+
sym.eliminated++;
2510
2508
return;
2511
2509
}
2512
2510
}
@@ -2539,25 +2537,9 @@ merge(Compressor.prototype, {
2539
2537
} else {
2540
2538
compressor[def.name.unreferenced() ? "warn" : "info"]("Dropping unused variable {name} [{file}:{line},{col}]", template(def.name));
2541
2539
}
2542
-
drop_decl(sym);
2540
+
sym.eliminated++;
2543
2541
}
2544
2542
});
2545
-
if (head.length == 0 && tail.length == 1 && tail[0].name instanceof AST_SymbolVar) {
2546
-
var var_defs = var_defs_by_id.get(tail[0].name.definition().id);
2547
-
if (var_defs.length > 1) {
2548
-
var def = tail.pop();
2549
-
compressor.warn("Converting duplicated definition of variable {name} to assignment [{file}:{line},{col}]", template(def.name));
2550
-
remove(var_defs, def);
2551
-
side_effects.unshift(make_node(AST_Assign, def, {
2552
-
operator: "=",
2553
-
left: make_node(AST_SymbolRef, def.name, def.name),
2554
-
right: def.value
2555
-
}));
2556
-
def = def.name.definition();
2557
-
drop_decl(def);
2558
-
def.replaced--;
2559
-
}
2560
-
}
2561
2543
if (head.length > 0 || tail.length > 0) {
2562
2544
node.definitions = head.concat(tail);
2563
2545
body.push(node);
@@ -3385,7 +3367,9 @@ merge(Compressor.prototype, {
3385
3367
}));
3386
3368
if (reduce_vars) name.definition().fixed = false;
3387
3369
}
3388
-
drop_decl(def.name.definition());
3370
+
def = def.name.definition();
3371
+
def.eliminated++;
3372
+
def.replaced--;
3389
3373
return a;
3390
3374
}, []);
3391
3375
if (assignments.length == 0) return null;
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4