@@ -884,15 +884,12 @@ merge(Compressor.prototype, {
884
884
}
885
885
if (ld && right instanceof AST_LambdaExpression) {
886
886
walk_assign();
887
- if (ld.escaped.length) {
888
- right.walk(tw);
889
- } else {
890
- right.parent_scope.resolve().fn_defs.push(right);
891
- right.safe_ids = null;
892
- if (!node.write_only) mark_fn_def(tw, ld, right);
893
- }
887
+ right.parent_scope.resolve().fn_defs.push(right);
888
+ right.safe_ids = null;
889
+ if (!ld.fixed || !node.write_only) mark_fn_def(tw, ld, right);
894
890
return true;
895
- } else if (scan) {
891
+ }
892
+ if (scan) {
896
893
right.walk(tw);
897
894
walk_assign();
898
895
return true;
@@ -1397,31 +1394,38 @@ merge(Compressor.prototype, {
1397
1394
var node = this;
1398
1395
var value = node.value;
1399
1396
if (value instanceof AST_LambdaExpression && node.name instanceof AST_SymbolDeclaration) {
1397
+ walk_defn();
1400
1398
value.parent_scope.resolve().fn_defs.push(value);
1401
1399
value.safe_ids = null;
1400
+ var ld = node.name.definition();
1401
+ if (!ld.fixed) mark_fn_def(tw, ld, value);
1402
1402
} else if (value) {
1403
1403
value.walk(tw);
1404
- } else if (!(tw.parent() instanceof AST_Let)) {
1405
- return;
1404
+ walk_defn();
1405
+ } else if (tw.parent() instanceof AST_Let) {
1406
+ walk_defn();
1406
1407
}
1407
- scan_declaration(tw, compressor, node.name, function() {
1408
- return node.value || make_node(AST_Undefined, node);
1409
- }, function(name, fixed) {
1410
- var d = name.definition();
1411
- if (fixed && safe_to_assign(tw, d, true)) {
1412
- mark(tw, d);
1413
- tw.loop_ids[d.id] = tw.in_loop;
1414
- d.fixed = fixed;
1415
- d.fixed.assigns = [ node ];
1416
- if (name instanceof AST_SymbolConst && d.redefined()
1417
- || !(can_drop_symbol(name) || is_safe_lexical(d))) {
1418
- d.single_use = false;
1419
- }
1420
- } else {
1421
- d.fixed = false;
1422
- }
1423
- });
1424
1408
return true;
1409
+
1410
+ function walk_defn() {
1411
+ scan_declaration(tw, compressor, node.name, function() {
1412
+ return node.value || make_node(AST_Undefined, node);
1413
+ }, function(name, fixed) {
1414
+ var d = name.definition();
1415
+ if (fixed && safe_to_assign(tw, d, true)) {
1416
+ mark(tw, d);
1417
+ tw.loop_ids[d.id] = tw.in_loop;
1418
+ d.fixed = fixed;
1419
+ d.fixed.assigns = [ node ];
1420
+ if (name instanceof AST_SymbolConst && d.redefined()
1421
+ || !(can_drop_symbol(name) || is_safe_lexical(d))) {
1422
+ d.single_use = false;
1423
+ }
1424
+ } else {
1425
+ d.fixed = false;
1426
+ }
1427
+ });
1428
+ }
1425
1429
});
1426
1430
def(AST_While, function(tw, descend) {
1427
1431
var save_loop = tw.in_loop;
0 commit comments