Compare commits
6 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a9fa178f86 | ||
|
|
53355bdb24 | ||
|
|
f05c99d89f | ||
|
|
b49230ab8d | ||
|
|
78856a3dab | ||
|
|
1e5e13ed81 |
@@ -810,7 +810,7 @@ var AST_SymbolRef = DEFNODE("SymbolRef", null, {
|
||||
|
||||
var AST_LabelRef = DEFNODE("LabelRef", null, {
|
||||
$documentation: "Reference to a label symbol",
|
||||
}, AST_SymbolRef);
|
||||
}, AST_Symbol);
|
||||
|
||||
var AST_This = DEFNODE("This", null, {
|
||||
$documentation: "The `this` symbol",
|
||||
|
||||
@@ -885,7 +885,7 @@ merge(Compressor.prototype, {
|
||||
});
|
||||
return true;
|
||||
}
|
||||
if (node instanceof AST_SymbolRef && !(node instanceof AST_LabelRef)) {
|
||||
if (node instanceof AST_SymbolRef) {
|
||||
push_uniq(in_use, node.definition());
|
||||
return true;
|
||||
}
|
||||
@@ -908,8 +908,7 @@ merge(Compressor.prototype, {
|
||||
if (decl instanceof AST_SymbolDeclaration) {
|
||||
decl.init.forEach(function(init){
|
||||
var tw = new TreeWalker(function(node){
|
||||
if (node instanceof AST_SymbolRef
|
||||
&& !(node instanceof AST_LabelRef)) {
|
||||
if (node instanceof AST_SymbolRef) {
|
||||
push_uniq(in_use, node.definition());
|
||||
}
|
||||
});
|
||||
@@ -920,7 +919,7 @@ merge(Compressor.prototype, {
|
||||
}
|
||||
// pass 3: we should drop declarations not in_use
|
||||
var tt = new TreeTransformer(
|
||||
function before(node, descend) {
|
||||
function before(node, descend, in_list) {
|
||||
if (node instanceof AST_Lambda) {
|
||||
for (var a = node.argnames, i = a.length; --i >= 0;) {
|
||||
var sym = a[i];
|
||||
@@ -1011,6 +1010,19 @@ merge(Compressor.prototype, {
|
||||
}
|
||||
return node;
|
||||
}
|
||||
if (node instanceof AST_For && node.init instanceof AST_BlockStatement) {
|
||||
descend(node, this);
|
||||
// certain combination of unused name + side effect leads to:
|
||||
// https://github.com/mishoo/UglifyJS2/issues/44
|
||||
// that's an invalid AST.
|
||||
// We fix it at this stage by moving the `var` outside the `for`.
|
||||
var body = node.init.body.slice(0, -1);
|
||||
node.init = node.init.body.slice(-1)[0].body;
|
||||
body.push(node);
|
||||
return in_list ? MAP.splice(body) : make_node(AST_BlockStatement, node, {
|
||||
body: body
|
||||
});
|
||||
}
|
||||
if (node instanceof AST_Scope && node !== self)
|
||||
return node;
|
||||
}
|
||||
@@ -1414,9 +1426,9 @@ merge(Compressor.prototype, {
|
||||
}
|
||||
else if (exp instanceof AST_Dot && exp.property == "toString" && self.args.length == 0) {
|
||||
return make_node(AST_Binary, self, {
|
||||
left: exp.expression,
|
||||
left: make_node(AST_String, self, { value: "" }),
|
||||
operator: "+",
|
||||
right: make_node(AST_String, self, { value: "" })
|
||||
right: exp.expression
|
||||
}).transform(compressor);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
"description": "JavaScript parser, mangler/compressor and beautifier toolkit",
|
||||
"homepage": "http://lisperator.net/uglifyjs",
|
||||
"main": "tools/node.js",
|
||||
"version": "2.1.10",
|
||||
"version": "2.1.11",
|
||||
"engines": { "node" : ">=0.4.0" },
|
||||
"maintainers": [{
|
||||
"name": "Mihai Bazon",
|
||||
@@ -15,8 +15,8 @@
|
||||
"url": "https://github.com/mishoo/UglifyJS2.git"
|
||||
}],
|
||||
"dependencies": {
|
||||
"source-map" : "*",
|
||||
"optimist" : "*"
|
||||
"source-map" : "~0.1.7",
|
||||
"optimist" : "~0.3.5"
|
||||
},
|
||||
"bin": {
|
||||
"uglifyjs2" : "bin/uglifyjs2"
|
||||
|
||||
31
test/compress/issue-44.js
Normal file
31
test/compress/issue-44.js
Normal file
@@ -0,0 +1,31 @@
|
||||
issue_44_valid_ast_1: {
|
||||
options = { unused: true };
|
||||
input: {
|
||||
function a(b) {
|
||||
for (var i = 0, e = b.qoo(); ; i++) {}
|
||||
}
|
||||
}
|
||||
expect: {
|
||||
function a(b) {
|
||||
var i = 0;
|
||||
for (b.qoo(); ; i++);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
issue_44_valid_ast_2: {
|
||||
options = { unused: true };
|
||||
input: {
|
||||
function a(b) {
|
||||
if (foo) for (var i = 0, e = b.qoo(); ; i++) {}
|
||||
}
|
||||
}
|
||||
expect: {
|
||||
function a(b) {
|
||||
if (foo) {
|
||||
var i = 0;
|
||||
for (b.qoo(); ; i++);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user