var save = fixed;
if (save) fixed = function() {
var value = save();
- return is_undefined(value) ? make_sequence(node, [ value, node.value ]) : node.name;
+ return is_undefined(value) ? make_sequence(node, [ value, node.value ]) : node;
};
node.name.walk(scanner);
fixed = save;
var value = save();
return value instanceof AST_Array ? make_node(AST_Array, node, {
elements: value.elements.slice(node.elements.length),
- }) : node.rest;
+ }) : node;
};
node.rest.walk(scanner);
}
// quick ignores
if (node instanceof U.AST_Accessor) return;
- if (node instanceof U.AST_Destructured) return;
if (node instanceof U.AST_Directive) return;
if (!in_list && node instanceof U.AST_EmptyStatement) return;
if (node instanceof U.AST_Label) return;
if (node instanceof U.AST_LabelRef) return;
- if (!in_list && node instanceof U.AST_SymbolDeclaration) return;
if (node instanceof U.AST_Toplevel) return;
var parent = tt.parent();
if (node instanceof U.AST_SymbolFunarg && parent instanceof U.AST_Accessor) return;
+ if (!in_list && parent.rest !== node && node instanceof U.AST_SymbolDeclaration) return;
// ensure that the _permute prop is a number.
// can not use `node.start._permute |= 0;` as it will erase fractional part.
// ignore lvalues
if (parent instanceof U.AST_Assign && parent.left === node) return;
+ if (parent instanceof U.AST_DefaultValue && parent.name === node) return;
if (parent instanceof U.AST_DestructuredKeyVal && parent.value === node) return;
if (parent instanceof U.AST_Unary && parent.expression === node) switch (parent.operator) {
case "++":
CHANGED = true;
return node.name;
}
+ else if (node instanceof U.AST_DestructuredArray) {
+ var expr = node.elements[0];
+ if (expr && !(expr instanceof U.AST_Hole)) {
+ node.start._permute++;
+ CHANGED = true;
+ return expr;
+ }
+ }
+ else if (node instanceof U.AST_DestructuredObject) {
+ // first property's value
+ var expr = node.properties[0];
+ if (expr) {
+ node.start._permute++;
+ CHANGED = true;
+ return expr.value;
+ }
+ }
else if (node instanceof U.AST_Defun) {
switch (((node.start._permute += step) * steps | 0) % 2) {
case 0:
CHANGED = true;
return List.skip;
}
-
- // skip element/property from (destructured) array/object
- if (parent instanceof U.AST_Array
- || parent instanceof U.AST_Destructured
- || parent instanceof U.AST_Object) {
- node.start._permute++;
- CHANGED = true;
- return List.skip;
- }
} else if (parent.rest === node) {
node.start._permute++;
CHANGED = true;