Fix negate_iife transform to return a correct tree for nested IIFEs

Fix for #1256, partially reverts d854523783
This commit is contained in:
Richard van Velzen
2016-08-17 11:43:50 +02:00
parent 614db97cca
commit 8430123e9d
4 changed files with 29 additions and 3 deletions

View File

@@ -831,6 +831,13 @@ merge(Compressor.prototype, {
};
function negate_iifes(statements, compressor) {
function is_iife_call(node) {
if (node instanceof AST_Call) {
return node.expression instanceof AST_Function || is_iife_call(node.expression);
}
return false;
}
statements.forEach(function(stat){
if (stat instanceof AST_SimpleStatement) {
stat.body = (function transform(thing) {
@@ -838,7 +845,7 @@ merge(Compressor.prototype, {
if (node instanceof AST_New) {
return node;
}
if (node instanceof AST_Call && node.expression instanceof AST_Function) {
if (is_iife_call(node)) {
return make_node(AST_UnaryPrefix, node, {
operator: "!",
expression: node

View File

@@ -531,8 +531,6 @@ function OutputStream(options) {
});
PARENS([ AST_Unary, AST_Undefined ], function(output){
if (this.expression instanceof AST_Call)
return false;
var p = output.parent();
return p instanceof AST_PropAccess && p.expression === this
|| p instanceof AST_Call && p.expression === this;

View File

@@ -158,3 +158,17 @@ issue_1254_negate_iife_true: {
}
expect_exact: '!function(){return function(){console.log("test")}}()();'
}
issue_1254_negate_iife_nested: {
options = {
negate_iife: true,
}
input: {
(function() {
return function() {
console.log('test')
};
})()()()()();
}
expect_exact: '!function(){return function(){console.log("test")}}()()()()();'
}

View File

@@ -75,3 +75,10 @@ call_with_unary_arguments: {
}
expect_exact: "x();x(-1);x(-1,-2);x(void 1,+2,-3,~4,!5,--a,++b,c--,d++,typeof e,delete f);(-1)();(-1)(-2);"
}
new_with_unary_prefix: {
input: {
var bar = (+new Date()).toString(32);
}
expect_exact: 'var bar=(+new Date).toString(32);';
}