minor fix for dropping unused definitions.
authorMihai Bazon <mihai@bazon.net>
Fri, 19 Oct 2012 09:57:29 +0000 (12:57 +0300)
committerMihai Bazon <mihai@bazon.net>
Fri, 19 Oct 2012 09:57:29 +0000 (12:57 +0300)
    function f(x, y) {
        var g = function() { return h() };
        var h = function() { return g() };
        return x + y;
    }

now compresses to `function f(x, y) { return x + y }`

lib/compress.js

index cde4b6f..3e5b524 100644 (file)
@@ -741,9 +741,10 @@ merge(Compressor.prototype, {
         });
 
         def(AST_SimpleStatement, function(){
-            if (this.body instanceof AST_Function) return false;
             return this.body.has_side_effects();
         });
+        def(AST_Defun, function(){ return true });
+        def(AST_Function, function(){ return false });
         def(AST_Binary, function(){
             return this.left.has_side_effects()
                 || this.right.has_side_effects();
@@ -1354,7 +1355,7 @@ merge(Compressor.prototype, {
         if (compressor.option("side_effects")) {
             if (self.expression instanceof AST_Function
                 && self.args.length == 0
-                && !self.expression.has_side_effects()) {
+                && !AST_Block.prototype.has_side_effects.call(self.expression)) {
                 return make_node(AST_Undefined, self).transform(compressor);
             }
         }