[Pkg-javascript-commits] [uglifyjs] 14/50: avoid `arguments` and `eval` in `reduce_vars` (#1924)
Jonas Smedegaard
dr at jones.dk
Thu Aug 17 23:06:44 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 f631d6437a7706ed8354105e73867a63d85ca490
Author: Alex Lam S.L <alexlamsl at gmail.com>
Date: Fri May 12 12:34:55 2017 +0800
avoid `arguments` and `eval` in `reduce_vars` (#1924)
fixes #1922
---
lib/compress.js | 16 +++++++++----
test/compress/reduce_vars.js | 57 ++++++++++++++++++++++++++++++++++++++++----
2 files changed, 63 insertions(+), 10 deletions(-)
diff --git a/lib/compress.js b/lib/compress.js
index f9dcd0f..d0f9668 100644
--- a/lib/compress.js
+++ b/lib/compress.js
@@ -326,10 +326,14 @@ merge(Compressor.prototype, {
// So existing transformation rules can work on them.
node.argnames.forEach(function(arg, i) {
var d = arg.definition();
- d.fixed = function() {
- return iife.args[i] || make_node(AST_Undefined, iife);
- };
- mark(d, true);
+ if (!node.uses_arguments && d.fixed === undefined) {
+ d.fixed = function() {
+ return iife.args[i] || make_node(AST_Undefined, iife);
+ };
+ mark(d, true);
+ } else {
+ d.fixed = false;
+ }
});
}
if (node instanceof AST_If || node instanceof AST_DWLoop) {
@@ -414,7 +418,9 @@ merge(Compressor.prototype, {
function reset_def(def) {
def.escaped = false;
- if (toplevel || !def.global || def.orig[0] instanceof AST_SymbolConst) {
+ if (def.scope.uses_eval) {
+ def.fixed = false;
+ } else if (toplevel || !def.global || def.orig[0] instanceof AST_SymbolConst) {
def.fixed = undefined;
} else {
def.fixed = false;
diff --git a/test/compress/reduce_vars.js b/test/compress/reduce_vars.js
index 6726bab..767311d 100644
--- a/test/compress/reduce_vars.js
+++ b/test/compress/reduce_vars.js
@@ -41,22 +41,22 @@ reduce_vars: {
var A = 1;
(function() {
console.log(-3);
- console.log(-4);
+ console.log(A - 5);
})();
(function f1() {
var a = 2;
- console.log(-3);
+ console.log(a - 5);
eval("console.log(a);");
})();
(function f2(eval) {
var a = 2;
- console.log(-3);
+ console.log(a - 5);
eval("console.log(a);");
})(eval);
(function() {
return "yes";
})();
- console.log(2);
+ console.log(A + 1);
}
expect_stdout: true
}
@@ -1732,7 +1732,10 @@ redefine_arguments_3: {
console.log(function() {
var arguments;
return typeof arguments;
- }(), "number", "undefined");
+ }(), "number", function(x) {
+ var arguments = x;
+ return typeof arguments;
+ }());
}
expect_stdout: "object number undefined"
}
@@ -2122,3 +2125,47 @@ issue_1865: {
}
expect_stdout: true
}
+
+issue_1922_1: {
+ options = {
+ evaluate: true,
+ reduce_vars: true,
+ unused: true,
+ }
+ input: {
+ console.log(function(a) {
+ arguments[0] = 2;
+ return a;
+ }(1));
+ }
+ expect: {
+ console.log(function(a) {
+ arguments[0] = 2;
+ return a;
+ }(1));
+ }
+ expect_stdout: "2"
+}
+
+issue_1922_2: {
+ options = {
+ evaluate: true,
+ reduce_vars: true,
+ unused: true,
+ }
+ input: {
+ console.log(function() {
+ var a;
+ eval("a = 1");
+ return a;
+ }(1));
+ }
+ expect: {
+ console.log(function() {
+ var a;
+ eval("a = 1");
+ return a;
+ }(1));
+ }
+ expect_stdout: "1"
+}
--
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