@@ -597,9 +597,10 @@ merge(Compressor.prototype, {
|
||||
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(),
|
||||
@@ -614,8 +615,10 @@ merge(Compressor.prototype, {
|
||||
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);
|
||||
@@ -1112,6 +1115,13 @@ merge(Compressor.prototype, {
|
||||
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);
|
||||
@@ -1129,13 +1139,6 @@ merge(Compressor.prototype, {
|
||||
// - 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() {
|
||||
|
||||
@@ -1647,3 +1647,40 @@ issue_4312: {
|
||||
expect_stdout: "PASS"
|
||||
node_version: ">=6"
|
||||
}
|
||||
|
||||
issue_4315: {
|
||||
options = {
|
||||
conditionals: true,
|
||||
dead_code: true,
|
||||
evaluate: true,
|
||||
inline: true,
|
||||
passes: 2,
|
||||
reduce_funcs: true,
|
||||
reduce_vars: true,
|
||||
side_effects: true,
|
||||
toplevel: true,
|
||||
unused: true,
|
||||
}
|
||||
input: {
|
||||
function f() {
|
||||
console;
|
||||
}
|
||||
var a = function() {
|
||||
if ([ 0[f && f] ] = [])
|
||||
return this;
|
||||
}(), b;
|
||||
do {
|
||||
console.log("PASS");
|
||||
} while (0 && (b = 0), b && a);
|
||||
}
|
||||
expect: {
|
||||
[ 0[function() {
|
||||
console
|
||||
}] ] = [];
|
||||
do {
|
||||
console.log("PASS");
|
||||
} while (void 0);
|
||||
}
|
||||
expect_stdout: "PASS"
|
||||
node_version: ">=6"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user