function scan_declaration(tw, lhs, fixed, visit) {
var scanner = new TreeWalker(function(node) {
if (node instanceof AST_DestructuredArray) {
+ reset_flags(node);
var save = fixed;
node.elements.forEach(function(node, index) {
- if (node instanceof AST_Hole) return;
+ if (node instanceof AST_Hole) return reset_flags(node);
fixed = function() {
return make_node(AST_Sub, node, {
expression: save(),
return true;
}
if (node instanceof AST_DestructuredObject) {
+ reset_flags(node);
var save = fixed;
node.properties.forEach(function(node) {
+ reset_flags(node);
if (node.key instanceof AST_Node) {
push(tw);
node.key.walk(tw);
node.DEFMETHOD("reduce_vars", func);
});
+ function reset_flags(node) {
+ node._squeezed = false;
+ node._optimized = false;
+ delete node.fixed;
+ if (node instanceof AST_Scope) delete node._var_names;
+ }
+
AST_Toplevel.DEFMETHOD("reset_opt_flags", function(compressor) {
var tw = new TreeWalker(compressor.option("reduce_vars") ? function(node, descend) {
reset_flags(node);
// - backup & restore via `save_ids` when visiting out-of-order sections
tw.safe_ids = Object.create(null);
this.walk(tw);
-
- function reset_flags(node) {
- node._squeezed = false;
- node._optimized = false;
- delete node.fixed;
- if (node instanceof AST_Scope) delete node._var_names;
- }
});
AST_Symbol.DEFMETHOD("fixed_value", function() {