drop unused function arguments
also add test for "drop_unused" (the last one fails for now)
This commit is contained in:
@@ -856,6 +856,21 @@ merge(Compressor.prototype, {
|
|||||||
// pass 3: we should drop declarations not in_use
|
// pass 3: we should drop declarations not in_use
|
||||||
var tt = new TreeTransformer(
|
var tt = new TreeTransformer(
|
||||||
function before(node, descend) {
|
function before(node, descend) {
|
||||||
|
if (node instanceof AST_Lambda) {
|
||||||
|
for (var a = node.argnames, i = a.length; --i >= 0;) {
|
||||||
|
var sym = a[i];
|
||||||
|
if (sym.unreferenced()) {
|
||||||
|
a.pop();
|
||||||
|
compressor.warn("Dropping unused function argument {name} [{file}:{line},{col}]", {
|
||||||
|
name : sym.name,
|
||||||
|
file : sym.start.file,
|
||||||
|
line : sym.start.line,
|
||||||
|
col : sym.start.col
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else break;
|
||||||
|
}
|
||||||
|
}
|
||||||
if (node instanceof AST_Defun && node !== self) {
|
if (node instanceof AST_Defun && node !== self) {
|
||||||
if (!member(node.name.definition(), in_use)) {
|
if (!member(node.name.definition(), in_use)) {
|
||||||
compressor.warn("Dropping unused function {name} [{file}:{line},{col}]", {
|
compressor.warn("Dropping unused function {name} [{file}:{line},{col}]", {
|
||||||
|
|||||||
97
test/compress/drop-unused.js
Normal file
97
test/compress/drop-unused.js
Normal file
@@ -0,0 +1,97 @@
|
|||||||
|
unused_funarg_1: {
|
||||||
|
options = { unused: true };
|
||||||
|
input: {
|
||||||
|
function f(a, b, c, d, e) {
|
||||||
|
return a + b;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
expect: {
|
||||||
|
function f(a, b) {
|
||||||
|
return a + b;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
unused_funarg_2: {
|
||||||
|
options = { unused: true };
|
||||||
|
input: {
|
||||||
|
function f(a, b, c, d, e) {
|
||||||
|
return a + c;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
expect: {
|
||||||
|
function f(a, b, c) {
|
||||||
|
return a + c;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
unused_nested_function: {
|
||||||
|
options = { unused: true };
|
||||||
|
input: {
|
||||||
|
function f(x, y) {
|
||||||
|
function g() {
|
||||||
|
something();
|
||||||
|
}
|
||||||
|
return x + y;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
expect: {
|
||||||
|
function f(x, y) {
|
||||||
|
return x + y;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
unused_circular_references_1: {
|
||||||
|
options = { unused: true };
|
||||||
|
input: {
|
||||||
|
function f(x, y) {
|
||||||
|
// circular reference
|
||||||
|
function g() {
|
||||||
|
return h();
|
||||||
|
}
|
||||||
|
function h() {
|
||||||
|
return g();
|
||||||
|
}
|
||||||
|
return x + y;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
expect: {
|
||||||
|
function f(x, y) {
|
||||||
|
return x + y;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
unused_circular_references_2: {
|
||||||
|
options = { unused: true };
|
||||||
|
input: {
|
||||||
|
function f(x, y) {
|
||||||
|
var foo = 1, bar = baz, baz = foo + bar, qwe = moo();
|
||||||
|
return x + y;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
expect: {
|
||||||
|
function f(x, y) {
|
||||||
|
moo(); // keeps side effect
|
||||||
|
return x + y;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
unused_circular_references_3: {
|
||||||
|
options = { unused: true };
|
||||||
|
input: {
|
||||||
|
function f(x, y) {
|
||||||
|
var g = function() { return h() };
|
||||||
|
var h = function() { return g() };
|
||||||
|
return x + y;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
expect: {
|
||||||
|
function f(x, y) {
|
||||||
|
return x + y;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -37,6 +37,12 @@ function find_test_files(dir) {
|
|||||||
var files = fs.readdirSync(dir).filter(function(name){
|
var files = fs.readdirSync(dir).filter(function(name){
|
||||||
return /\.js$/i.test(name);
|
return /\.js$/i.test(name);
|
||||||
});
|
});
|
||||||
|
if (process.argv.length > 2) {
|
||||||
|
var x = process.argv.slice(2);
|
||||||
|
files = files.filter(function(f){
|
||||||
|
return x.indexOf(f) >= 0;
|
||||||
|
});
|
||||||
|
}
|
||||||
return files;
|
return files;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user