@@ -641,7 +641,7 @@ Compressor.prototype.compress = function(node) {
641641 var defined_ids = Object.create(tw.defined_ids);
642642 var safe_ids = Object.create(tw.safe_ids);
643643 if (!sequential) {
644- defined_ids.seq = {} ;
644+ defined_ids.seq = Object.create(null) ;
645645 safe_ids.seq = {};
646646 }
647647 tw.defined_ids = defined_ids;
@@ -654,18 +654,22 @@ Compressor.prototype.compress = function(node) {
654654 }
655655
656656 function access(tw, def) {
657- tw.defined_ids[def.id] = tw.defined_ids.seq;
657+ var seq = tw.defined_ids.seq;
658+ tw.defined_ids[def.id] = seq;
659+ seq[def.id] = true;
658660 }
659661
660662 function assign(tw, def) {
661- tw.assigned_ids[def.id] = tw.defined_ids.seq;
662- tw.defined_ids[def.id] = false;
663+ var seq = tw.defined_ids.seq;
664+ tw.assigned_ids[def.id] = seq;
665+ seq[def.id] = false;
663666 }
664667
665668 function safe_to_access(tw, def) {
666669 var seq = tw.defined_ids.seq;
667670 var defined = tw.defined_ids[def.id];
668671 if (defined !== seq) return false;
672+ if (!defined[def.id]) return false;
669673 var assigned = tw.assigned_ids[def.id];
670674 return !assigned || assigned === seq;
671675 }
@@ -1399,22 +1403,13 @@ Compressor.prototype.compress = function(node) {
13991403 }
14001404 });
14011405 if (!first) pop(tw);
1402- var defined_ids = tw.defined_ids;
1403- var safe_ids = tw.safe_ids;
1404- node.body.forEach(function(branch) {
1405- push(tw, true);
1406- branch.walk(tw);
1407- if (aborts(branch)) {
1408- tw.defined_ids = defined_ids;
1409- tw.safe_ids = safe_ids;
1410- }
1411- });
1412- tw.defined_ids = defined_ids;
1413- tw.safe_ids = safe_ids;
1406+ walk_body(node, tw);
14141407 return true;
14151408 });
14161409 def(AST_SwitchBranch, function(tw) {
1410+ push(tw, true);
14171411 walk_body(this, tw);
1412+ pop(tw);
14181413 return true;
14191414 });
14201415 def(AST_SymbolCatch, function() {
0 commit comments