aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/compress.js15
-rw-r--r--test/compress/drop-unused.js97
-rwxr-xr-xtest/run-tests.js6
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;
}