Skip to content

Commit

Permalink
fix variable accounting in inline (#2085)
Browse files Browse the repository at this point in the history
fixes #2084
  • Loading branch information
alexlamsl committed Jun 12, 2017
1 parent 5ef7cb3 commit 2bdc880
Show file tree
Hide file tree
Showing 3 changed files with 67 additions and 20 deletions.
34 changes: 21 additions & 13 deletions lib/compress.js
Expand Up @@ -3171,16 +3171,16 @@ merge(Compressor.prototype, {
&& !exp.uses_arguments
&& !exp.uses_eval
&& !self.has_pure_annotation(compressor)) {
var body;
var value;
if (stat instanceof AST_Return) {
body = stat.value.clone(true);
value = stat.value.clone(true);
} else if (stat instanceof AST_SimpleStatement) {
body = [];
merge_sequence(body, stat.body.clone(true));
merge_sequence(body, make_node(AST_Undefined, self));
body = make_sequence(self, body);
value = make_node(AST_UnaryPrefix, stat, {
operator: "void",
expression: stat.body.clone(true)
});
}
if (body) {
if (value) {
var fn = exp.clone();
fn.argnames = [];
fn.body = [];
Expand All @@ -3200,17 +3200,25 @@ merge(Compressor.prototype, {
}));
}
fn.body.push(make_node(AST_Return, self, {
value: body
value: value
}));
body = fn.transform(compressor).body;
var body = fn.transform(compressor).body;
if (body.length == 0) return make_node(AST_Undefined, self);
if (body.length == 1 && body[0] instanceof AST_Return) {
if (!body[0].value) return make_node(AST_Undefined, self);
body = best_of(compressor, body[0].value, self);
value = body[0].value;
if (!value) return make_node(AST_Undefined, self);
value.walk(new TreeWalker(function(node) {
if (value === self) return true;
if (node instanceof AST_SymbolRef && exp.variables.has(node.name)) {
value = self;
return true;
}
}));
if (value !== self) value = best_of(compressor, value, self);
} else {
body = self;
value = self;
}
if (body !== self) return body;
if (value !== self) return value;
}
}
if (compressor.option("side_effects") && all(exp.body, is_empty)) {
Expand Down
39 changes: 39 additions & 0 deletions test/compress/functions.js
Expand Up @@ -297,3 +297,42 @@ webkit: {
expect_exact: "console.log((function(){1+1}).a=1);"
expect_stdout: "1"
}

issue_2084: {
options = {
collapse_vars: true,
conditionals: true,
evaluate: true,
inline: true,
passes: 2,
reduce_vars: true,
sequences: true,
side_effects: true,
unused: true,
}
input: {
var c = 0;
!function() {
!function(c) {
c = 1 + c;
var c = 0;
function f14(a_1) {
if (c = 1 + c, 0 !== 23..toString())
c = 1 + c, a_1 && (a_1[0] = 0);
}
f14();
}(-1);
}();
console.log(c);
}
expect: {
var c = 0;
!function(c) {
c = 1 + c,
c = 1 + (c = 0),
0 !== 23..toString() && (c = 1 + c);
}(-1),
console.log(c);
}
expect_stdout: "0"
}
14 changes: 7 additions & 7 deletions test/compress/issue-281.js
Expand Up @@ -151,7 +151,7 @@ negate_iife_4: {
})();
}
expect: {
t ? console.log(true) : console.log(false), console.log("something"), void 0;
t ? console.log(true) : console.log(false), void console.log("something");
}
}

Expand All @@ -174,7 +174,7 @@ negate_iife_5: {
})();
}
expect: {
t ? foo(true) : bar(false), console.log("something"), void 0;
t ? foo(true) : bar(false), void console.log("something");
}
}

Expand All @@ -197,7 +197,7 @@ negate_iife_5_off: {
})();
}
expect: {
t ? foo(true) : bar(false), console.log("something"), void 0;
t ? foo(true) : bar(false), void console.log("something");
}
}

Expand All @@ -214,7 +214,7 @@ issue_1254_negate_iife_true: {
};
})()();
}
expect_exact: 'console.log("test"),void 0;'
expect_exact: 'void console.log("test");'
expect_stdout: true
}

Expand All @@ -231,7 +231,7 @@ issue_1254_negate_iife_nested: {
};
})()()()()();
}
expect_exact: '(console.log("test"),void 0)()()();'
expect_exact: '(void console.log("test"))()()();'
}

negate_iife_issue_1073: {
Expand Down Expand Up @@ -382,7 +382,7 @@ wrap_iife: {
};
})()();
}
expect_exact: 'console.log("test"),void 0;'
expect_exact: 'void console.log("test");'
}

wrap_iife_in_expression: {
Expand Down Expand Up @@ -416,7 +416,7 @@ wrap_iife_in_return_call: {
})();
})()();
}
expect_exact: '(console.log("test"),void 0)();'
expect_exact: '(void console.log("test"))();'
}

pure_annotation: {
Expand Down

0 comments on commit 2bdc880

Please sign in to comment.