[Pkg-javascript-commits] [uglifyjs] 265/491: account for `eval` & `with` in `reduce_vars` (#2441)
Jonas Smedegaard
dr at jones.dk
Wed Feb 14 19:51:43 UTC 2018
This is an automated email from the git hooks/post-receive script.
js pushed a commit to annotated tag debian/3.3.10-1
in repository uglifyjs.
commit 2cfb5aa7dadd744bf7fbe16756696fc595f134a2
Author: Alex Lam S.L <alexlamsl at gmail.com>
Date: Mon Nov 6 16:10:57 2017 +0800
account for `eval` & `with` in `reduce_vars` (#2441)
fixes #2440
---
lib/compress.js | 15 +++---
test/compress/reduce_vars.js | 112 +++++++++++++++++++++++++++++++++++++++++++
2 files changed, 120 insertions(+), 7 deletions(-)
diff --git a/lib/compress.js b/lib/compress.js
index d848233..c123242 100644
--- a/lib/compress.js
+++ b/lib/compress.js
@@ -317,7 +317,7 @@ merge(Compressor.prototype, {
d.fixed = false;
} else if (d.fixed) {
var value = node.fixed_value();
- if (unused && value && d.references.length == 1) {
+ if (value && ref_once(d)) {
if (value instanceof AST_Lambda) {
d.single_use = d.scope === node.scope
&& !(d.orig[0] instanceof AST_SymbolFunarg)
@@ -385,7 +385,7 @@ merge(Compressor.prototype, {
} else {
d.fixed = node;
mark(d, true);
- if (unused && d.references.length == 1) {
+ if (ref_once(d)) {
d.single_use = d.scope === d.references[0].scope
|| node.is_constant_expression(d.references[0].scope);
}
@@ -564,7 +564,7 @@ merge(Compressor.prototype, {
function reset_def(def) {
def.direct_access = false;
def.escaped = false;
- if (def.scope.uses_eval) {
+ if (def.scope.uses_eval || def.scope.uses_with) {
def.fixed = false;
} else if (!compressor.exposed(def)) {
def.fixed = undefined;
@@ -576,6 +576,10 @@ merge(Compressor.prototype, {
def.single_use = undefined;
}
+ function ref_once(def) {
+ return unused && !def.scope.uses_eval && !def.scope.uses_with && def.references.length == 1;
+ }
+
function is_immutable(value) {
if (!value) return false;
return value.is_constant()
@@ -4237,10 +4241,7 @@ merge(Compressor.prototype, {
if (fixed instanceof AST_Defun) {
d.fixed = fixed = make_node(AST_Function, fixed, fixed);
}
- if (compressor.option("unused")
- && fixed
- && d.references.length == 1
- && d.single_use) {
+ if (fixed && d.single_use) {
var value = fixed.optimize(compressor);
return value === fixed ? fixed.clone(true) : value;
}
diff --git a/test/compress/reduce_vars.js b/test/compress/reduce_vars.js
index 1acd902..25f95ff 100644
--- a/test/compress/reduce_vars.js
+++ b/test/compress/reduce_vars.js
@@ -3542,3 +3542,115 @@ issue_2423_6: {
"2",
]
}
+
+issue_2440_eval_1: {
+ options = {
+ reduce_vars: true,
+ toplevel: true,
+ unused: true,
+ }
+ input: {
+ function foo() {
+ return bar();
+ }
+ baz = {
+ quux: foo
+ };
+ exec = function() {
+ return eval("foo()");
+ };
+ }
+ expect: {
+ function foo() {
+ return bar();
+ }
+ baz = {
+ quux: foo
+ };
+ exec = function() {
+ return eval("foo()");
+ };
+ }
+}
+
+issue_2440_eval_2: {
+ options = {
+ reduce_vars: true,
+ toplevel: true,
+ unused: true,
+ }
+ input: {
+ baz = {
+ quux: foo
+ };
+ exec = function() {
+ return eval("foo()");
+ };
+ function foo() {
+ return bar();
+ }
+ }
+ expect: {
+ baz = {
+ quux: foo
+ };
+ exec = function() {
+ return eval("foo()");
+ };
+ function foo() {
+ return bar();
+ }
+ }
+}
+
+issue_2440_with_1: {
+ options = {
+ reduce_vars: true,
+ toplevel: true,
+ unused: true,
+ }
+ input: {
+ function foo() {
+ return bar();
+ }
+ baz = {
+ quux: foo
+ };
+ with (o) whatever();
+ }
+ expect: {
+ function foo() {
+ return bar();
+ }
+ baz = {
+ quux: foo
+ };
+ with (o) whatever();
+ }
+}
+
+issue_2440_with_2: {
+ options = {
+ reduce_vars: true,
+ toplevel: true,
+ unused: true,
+ }
+ input: {
+ baz = {
+ quux: foo
+ };
+ with (o) whatever();
+ function foo() {
+ return bar();
+ }
+ }
+ expect: {
+ baz = {
+ quux: foo
+ };
+ with (o) whatever();
+ function foo() {
+ return bar();
+ }
+ }
+}
--
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