@@ -3703,14 +3703,6 @@ merge(Compressor.prototype, {
|
|||||||
|
|
||||||
var lazy_op = makePredicate("&& ||");
|
var lazy_op = makePredicate("&& ||");
|
||||||
|
|
||||||
function is_lhs(node, parent) {
|
|
||||||
if (parent instanceof AST_Assign) return parent.left === node && node;
|
|
||||||
if (parent instanceof AST_DefaultValue) return parent.name === node && node;
|
|
||||||
if (parent instanceof AST_Destructured) return node;
|
|
||||||
if (parent instanceof AST_DestructuredKeyVal) return node;
|
|
||||||
if (parent instanceof AST_Unary) return unary_side_effects[parent.operator] && parent.expression;
|
|
||||||
}
|
|
||||||
|
|
||||||
(function(def) {
|
(function(def) {
|
||||||
function to_node(value, orig) {
|
function to_node(value, orig) {
|
||||||
if (value instanceof AST_Node) return value.clone(true);
|
if (value instanceof AST_Node) return value.clone(true);
|
||||||
|
|||||||
11
lib/scope.js
11
lib/scope.js
@@ -101,6 +101,14 @@ SymbolDef.prototype = {
|
|||||||
|
|
||||||
var unary_side_effects = makePredicate("delete ++ --");
|
var unary_side_effects = makePredicate("delete ++ --");
|
||||||
|
|
||||||
|
function is_lhs(node, parent) {
|
||||||
|
if (parent instanceof AST_Assign) return parent.left === node && node;
|
||||||
|
if (parent instanceof AST_DefaultValue) return parent.name === node && node;
|
||||||
|
if (parent instanceof AST_Destructured) return node;
|
||||||
|
if (parent instanceof AST_DestructuredKeyVal) return node;
|
||||||
|
if (parent instanceof AST_Unary) return unary_side_effects[parent.operator] && parent.expression;
|
||||||
|
}
|
||||||
|
|
||||||
AST_Toplevel.DEFMETHOD("figure_out_scope", function(options) {
|
AST_Toplevel.DEFMETHOD("figure_out_scope", function(options) {
|
||||||
options = defaults(options, {
|
options = defaults(options, {
|
||||||
cache: null,
|
cache: null,
|
||||||
@@ -269,8 +277,7 @@ AST_Toplevel.DEFMETHOD("figure_out_scope", function(options) {
|
|||||||
sym = self.def_global(node);
|
sym = self.def_global(node);
|
||||||
} else if (name == "arguments" && is_arguments(sym)) {
|
} else if (name == "arguments" && is_arguments(sym)) {
|
||||||
var parent = tw.parent();
|
var parent = tw.parent();
|
||||||
if (parent instanceof AST_Assign && parent.left === node
|
if (is_lhs(node, parent)) {
|
||||||
|| parent instanceof AST_Unary && unary_side_effects[parent.operator]) {
|
|
||||||
sym.scope.uses_arguments = 3;
|
sym.scope.uses_arguments = 3;
|
||||||
} else if (sym.scope.uses_arguments < 2
|
} else if (sym.scope.uses_arguments < 2
|
||||||
&& !(parent instanceof AST_PropAccess && parent.expression === node)) {
|
&& !(parent instanceof AST_PropAccess && parent.expression === node)) {
|
||||||
|
|||||||
@@ -2514,3 +2514,45 @@ issue_4584: {
|
|||||||
expect_stdout: "PASS"
|
expect_stdout: "PASS"
|
||||||
node_version: ">=6"
|
node_version: ">=6"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
issue_4608_1: {
|
||||||
|
options = {
|
||||||
|
arguments: true,
|
||||||
|
keep_fargs: false,
|
||||||
|
}
|
||||||
|
input: {
|
||||||
|
(function() {
|
||||||
|
[ arguments ] = [ "foo" ];
|
||||||
|
console.log(arguments[0]);
|
||||||
|
})();
|
||||||
|
}
|
||||||
|
expect: {
|
||||||
|
(function() {
|
||||||
|
[ arguments ] = [ "foo" ];
|
||||||
|
console.log(arguments[0]);
|
||||||
|
})();
|
||||||
|
}
|
||||||
|
expect_stdout: "f"
|
||||||
|
node_version: ">=6"
|
||||||
|
}
|
||||||
|
|
||||||
|
issue_4608_2: {
|
||||||
|
options = {
|
||||||
|
arguments: true,
|
||||||
|
reduce_vars: true,
|
||||||
|
}
|
||||||
|
input: {
|
||||||
|
(function(a) {
|
||||||
|
[ arguments ] = [ "foo" ];
|
||||||
|
console.log(arguments[0]);
|
||||||
|
})();
|
||||||
|
}
|
||||||
|
expect: {
|
||||||
|
(function(a) {
|
||||||
|
[ arguments ] = [ "foo" ];
|
||||||
|
console.log(arguments[0]);
|
||||||
|
})();
|
||||||
|
}
|
||||||
|
expect_stdout: "f"
|
||||||
|
node_version: ">=6"
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user