// 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}]", {
--- /dev/null
+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;
+ }
+ }
+}
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;
}