OPT(AST_Call, function(self, compressor){
var exp = self.expression;
var fn = exp;
+ if (compressor.option("reduce_vars") && fn instanceof AST_SymbolRef) {
+ fn = fn.fixed_value();
+ }
if (compressor.option("unused")
- && (fn instanceof AST_Function
- || compressor.option("reduce_vars")
- && fn instanceof AST_SymbolRef
- && (fn = fn.fixed_value()) instanceof AST_Function)
+ && fn instanceof AST_Function
&& !fn.uses_arguments
&& !fn.uses_eval) {
var pos = 0, last = 0;
return make_sequence(self, args).optimize(compressor);
}
}
- if (exp instanceof AST_Function) {
+ if (fn instanceof AST_Function) {
if (compressor.option("inline")
- && !exp.name
- && !exp.uses_arguments
- && !exp.uses_eval
- && exp.body.length == 1
- && !exp.contains_this()
- && all(exp.argnames, function(arg) {
+ && exp === fn
+ && !fn.name
+ && !fn.uses_arguments
+ && !fn.uses_eval
+ && fn.body.length == 1
+ && !fn.contains_this()
+ && all(fn.argnames, function(arg) {
return arg.__unused;
})
&& !self.has_pure_annotation(compressor)) {
return make_sequence(self, args).optimize(compressor);
}
}
- if (compressor.option("side_effects") && all(exp.body, is_empty)) {
+ if (compressor.option("side_effects") && all(fn.body, is_empty)) {
var args = self.args.concat(make_node(AST_Undefined, self));
return make_sequence(self, args).optimize(compressor);
}