[Pkg-javascript-commits] [uglifyjs] 135/228: fix assignment extraction from conditional (#1651)
Jonas Smedegaard
dr at jones.dk
Sat Apr 15 14:25:24 UTC 2017
This is an automated email from the git hooks/post-receive script.
js pushed a commit to branch master
in repository uglifyjs.
commit 0432a7abb98f3aec871daa88331aa9223979dde3
Author: Alex Lam S.L <alexlamsl at gmail.com>
Date: Fri Mar 24 18:52:48 2017 +0800
fix assignment extraction from conditional (#1651)
fixes #1645
fixes #1646
---
lib/compress.js | 16 +++++++---------
test/compress/conditionals.js | 40 ++++++++++++++++++++++++++++++++++++++++
2 files changed, 47 insertions(+), 9 deletions(-)
diff --git a/lib/compress.js b/lib/compress.js
index b3edb84..cbcb7b8 100644
--- a/lib/compress.js
+++ b/lib/compress.js
@@ -3550,19 +3550,17 @@ merge(Compressor.prototype, {
}
var consequent = self.consequent;
var alternative = self.alternative;
+ // if (foo) exp = something; else exp = something_else;
+ // |
+ // v
+ // exp = foo ? something : something_else;
if (consequent instanceof AST_Assign
&& alternative instanceof AST_Assign
&& consequent.operator == alternative.operator
&& consequent.left.equivalent_to(alternative.left)
- && (!consequent.left.has_side_effects(compressor)
- || !self.condition.has_side_effects(compressor))
- ) {
- /*
- * Stuff like this:
- * if (foo) exp = something; else exp = something_else;
- * ==>
- * exp = foo ? something : something_else;
- */
+ && (!self.condition.has_side_effects(compressor)
+ || consequent.operator == "="
+ && !consequent.left.has_side_effects(compressor))) {
return make_node(AST_Assign, self, {
operator: consequent.operator,
left: consequent.left,
diff --git a/test/compress/conditionals.js b/test/compress/conditionals.js
index 7c81cc8..c563983 100644
--- a/test/compress/conditionals.js
+++ b/test/compress/conditionals.js
@@ -893,3 +893,43 @@ equality_conditionals_true: {
}
expect_stdout: true
}
+
+issue_1645_1: {
+ options = {
+ conditionals: true,
+ }
+ input: {
+ var a = 100, b = 10;
+ (b = a) ? a++ + (b += a) ? b += a : b += a : b ^= a;
+ console.log(a, b);
+ }
+ expect: {
+ var a = 100, b = 10;
+ (b = a) ? (a++ + (b += a), b += a) : b ^= a;
+ console.log(a,b);
+ }
+ expect_stdout: true
+}
+
+issue_1645_2: {
+ options = {
+ conditionals: true,
+ }
+ input: {
+ var a = 0;
+ function f() {
+ return a++;
+ }
+ f() ? a += 2 : a += 4;
+ console.log(a);
+ }
+ expect: {
+ var a = 0;
+ function f(){
+ return a++;
+ }
+ f() ? a += 2 : a += 4;
+ console.log(a);
+ }
+ expect_stdout: true
+}
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-javascript/uglifyjs.git
More information about the Pkg-javascript-commits
mailing list