Parse and compress destructuring VarDefs

This commit is contained in:
Fábio Santos
2015-08-14 00:20:21 +01:00
committed by Richard van Velzen
parent 824ecfb8a2
commit c44c2d6c21
7 changed files with 105 additions and 8 deletions

View File

@@ -1056,6 +1056,7 @@ merge(Compressor.prototype, {
}
if (node instanceof AST_Definitions && scope === self) {
node.definitions.forEach(function(def){
if (def.is_destructuring()) return; /* Destructurings are type assertions! */
if (def.value) {
initializations.add(def.name.name, def.value);
if (def.value.has_side_effects(compressor)) {
@@ -1142,6 +1143,7 @@ merge(Compressor.prototype, {
}
if (node instanceof AST_Definitions && !(tt.parent() instanceof AST_ForIn)) {
var def = node.definitions.filter(function(def){
if (def.is_destructuring()) return true;
if (member(def.name.definition(), in_use)) return true;
var w = {
name : def.name.name,
@@ -1262,6 +1264,7 @@ merge(Compressor.prototype, {
}
if (node instanceof AST_Var && hoist_vars) {
node.definitions.forEach(function(def){
if (def.is_destructuring()) { return; }
vars.set(def.name.name, def);
++vars_found;
});
@@ -1702,13 +1705,23 @@ merge(Compressor.prototype, {
AST_Definitions.DEFMETHOD("to_assignments", function(){
var assignments = this.definitions.reduce(function(a, def){
if (def.value) {
if (def.value && !def.is_destructuring()) {
var name = make_node(AST_SymbolRef, def.name, def.name);
a.push(make_node(AST_Assign, def, {
operator : "=",
left : name,
right : def.value
}));
} else if (def.value) {
// Because it's a destructuring, do not turn into an assignment.
var varDef = make_node(AST_VarDef, def, {
name: def.name,
value: def.value
});
var var_ = make_node(AST_Var, def, {
definitions: [ varDef ]
});
a.push(var_);
}
return a;
}, []);