Compare commits
5 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
57dc4fb32f | ||
|
|
b85a358deb | ||
|
|
43697958f3 | ||
|
|
3f961bbba0 | ||
|
|
0a1e523cd5 |
@@ -3209,10 +3209,15 @@ merge(Compressor.prototype, {
|
||||
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)) {
|
||||
if (node instanceof AST_SymbolRef && matches(node.scope.find_variable(node))
|
||||
|| node instanceof AST_This && matches(node)) {
|
||||
value = self;
|
||||
return true;
|
||||
}
|
||||
|
||||
function matches(ref) {
|
||||
return ref && ref.scope.parent_scope === fn.parent_scope;
|
||||
}
|
||||
}));
|
||||
if (value !== self) value = best_of(compressor, value, self);
|
||||
} else {
|
||||
|
||||
@@ -197,11 +197,10 @@ AST_Toplevel.DEFMETHOD("figure_out_scope", function(options){
|
||||
}
|
||||
}
|
||||
var sym = node.scope.find_variable(name);
|
||||
if (node.scope instanceof AST_Lambda && name == "arguments") {
|
||||
node.scope.uses_arguments = true;
|
||||
}
|
||||
if (!sym) {
|
||||
sym = self.def_global(node);
|
||||
} else if (sym.scope instanceof AST_Lambda && name == "arguments") {
|
||||
sym.scope.uses_arguments = true;
|
||||
}
|
||||
node.thedef = sym;
|
||||
node.reference(options);
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
"homepage": "http://lisperator.net/uglifyjs",
|
||||
"author": "Mihai Bazon <mihai.bazon@gmail.com> (http://lisperator.net/)",
|
||||
"license": "BSD-2-Clause",
|
||||
"version": "3.0.16",
|
||||
"version": "3.0.17",
|
||||
"engines": {
|
||||
"node": ">=0.8.0"
|
||||
},
|
||||
|
||||
@@ -336,3 +336,81 @@ issue_2084: {
|
||||
}
|
||||
expect_stdout: "0"
|
||||
}
|
||||
|
||||
issue_2097: {
|
||||
options = {
|
||||
negate_iife: true,
|
||||
reduce_vars: true,
|
||||
toplevel: true,
|
||||
unused: true,
|
||||
}
|
||||
input: {
|
||||
function f() {
|
||||
try {
|
||||
throw 0;
|
||||
} catch (e) {
|
||||
console.log(arguments[0]);
|
||||
}
|
||||
}
|
||||
f(1);
|
||||
}
|
||||
expect: {
|
||||
!function() {
|
||||
try {
|
||||
throw 0;
|
||||
} catch (e) {
|
||||
console.log(arguments[0]);
|
||||
}
|
||||
}(1);
|
||||
}
|
||||
expect_stdout: "1"
|
||||
}
|
||||
|
||||
issue_2101: {
|
||||
options = {
|
||||
inline: true,
|
||||
}
|
||||
input: {
|
||||
a = {};
|
||||
console.log(function() {
|
||||
return function() {
|
||||
return this.a;
|
||||
}();
|
||||
}() === function() {
|
||||
return a;
|
||||
}());
|
||||
}
|
||||
expect: {
|
||||
a = {};
|
||||
console.log(function() {
|
||||
return this.a;
|
||||
}() === a);
|
||||
}
|
||||
expect_stdout: "true"
|
||||
}
|
||||
|
||||
inner_ref: {
|
||||
options = {
|
||||
inline: true,
|
||||
unused: true,
|
||||
}
|
||||
input: {
|
||||
console.log(function(a) {
|
||||
return function() {
|
||||
return a;
|
||||
}();
|
||||
}(1), function(a) {
|
||||
return function(a) {
|
||||
return a;
|
||||
}();
|
||||
}(2));
|
||||
}
|
||||
expect: {
|
||||
console.log(function(a) {
|
||||
return a;
|
||||
}(1), function(a) {
|
||||
return a;
|
||||
}());
|
||||
}
|
||||
expect_stdout: "1 undefined"
|
||||
}
|
||||
|
||||
@@ -9,7 +9,7 @@ function read(path) {
|
||||
describe("bin/uglifyjs", function () {
|
||||
var uglifyjscmd = '"' + process.argv[0] + '" bin/uglifyjs';
|
||||
it("should produce a functional build when using --self", function (done) {
|
||||
this.timeout(15000);
|
||||
this.timeout(30000);
|
||||
|
||||
var command = uglifyjscmd + ' --self -cm --wrap WrappedUglifyJS';
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@ function run(command, args, done) {
|
||||
}
|
||||
|
||||
describe("test/benchmark.js", function() {
|
||||
this.timeout(5 * 60 * 1000);
|
||||
this.timeout(10 * 60 * 1000);
|
||||
[
|
||||
"-b",
|
||||
"-b bracketize",
|
||||
|
||||
@@ -4,7 +4,7 @@ var uglify = require("../node");
|
||||
|
||||
describe("spidermonkey export/import sanity test", function() {
|
||||
it("should produce a functional build when using --self with spidermonkey", function(done) {
|
||||
this.timeout(30000);
|
||||
this.timeout(60000);
|
||||
|
||||
var uglifyjs = '"' + process.argv[0] + '" bin/uglifyjs';
|
||||
var command = uglifyjs + " --self -cm --wrap SpiderUglify -o spidermonkey | " +
|
||||
|
||||
@@ -294,24 +294,22 @@ function parse_test(file) {
|
||||
if (label.name == "expect_exact" || label.name == "node_version") {
|
||||
test[label.name] = read_string(stat);
|
||||
} else if (label.name == "expect_stdout") {
|
||||
if (stat.TYPE == "SimpleStatement") {
|
||||
var body = stat.body;
|
||||
if (body instanceof U.AST_Boolean) {
|
||||
test[label.name] = body.value;
|
||||
} else if (body instanceof U.AST_Call) {
|
||||
var ctor = global[body.expression.name];
|
||||
assert.ok(ctor === Error || ctor.prototype instanceof Error, tmpl("Unsupported expect_stdout format [{line},{col}]", {
|
||||
var body = stat.body;
|
||||
if (body instanceof U.AST_Boolean) {
|
||||
test[label.name] = body.value;
|
||||
} else if (body instanceof U.AST_Call) {
|
||||
var ctor = global[body.expression.name];
|
||||
assert.ok(ctor === Error || ctor.prototype instanceof Error, tmpl("Unsupported expect_stdout format [{line},{col}]", {
|
||||
line: label.start.line,
|
||||
col: label.start.col
|
||||
}));
|
||||
test[label.name] = ctor.apply(null, body.args.map(function(node) {
|
||||
assert.ok(node instanceof U.AST_Constant, tmpl("Unsupported expect_stdout format [{line},{col}]", {
|
||||
line: label.start.line,
|
||||
col: label.start.col
|
||||
}));
|
||||
test[label.name] = ctor.apply(null, body.args.map(function(node) {
|
||||
assert.ok(node instanceof U.AST_Constant, tmpl("Unsupported expect_stdout format [{line},{col}]", {
|
||||
line: label.start.line,
|
||||
col: label.start.col
|
||||
}));
|
||||
return node.value;
|
||||
}));
|
||||
}
|
||||
return node.value;
|
||||
}));
|
||||
} else {
|
||||
test[label.name] = read_string(stat) + "\n";
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user