diff options
-rw-r--r-- | lib/compress.js | 15 | ||||
-rw-r--r-- | test/compress/drop-unused.js | 97 | ||||
-rwxr-xr-x | test/run-tests.js | 6 |
3 files changed, 118 insertions, 0 deletions
diff --git a/lib/compress.js b/lib/compress.js index 78d9d0c0..f216ed22 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -856,6 +856,21 @@ merge(Compressor.prototype, { // pass 3: we should drop declarations not in_use var tt = new TreeTransformer( 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 (!member(node.name.definition(), in_use)) { compressor.warn("Dropping unused function {name} [{file}:{line},{col}]", { diff --git a/test/compress/drop-unused.js b/test/compress/drop-unused.js new file mode 100644 index 00000000..bf5cd296 --- /dev/null +++ b/test/compress/drop-unused.js @@ -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; + } + } +} diff --git a/test/run-tests.js b/test/run-tests.js index abace39c..87301412 100755 --- a/test/run-tests.js +++ b/test/run-tests.js @@ -37,6 +37,12 @@ function find_test_files(dir) { var files = fs.readdirSync(dir).filter(function(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; } |