From 4437e7af1931f995686511938ad80f704ef5925e Mon Sep 17 00:00:00 2001 From: Mihai Bazon Date: Mon, 27 Aug 2012 11:00:22 +0300 Subject: [PATCH] fix compressing `a,b; return c;` into `return a,b,c;` --- lib/compress.js | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/lib/compress.js b/lib/compress.js index f23d4cd0..857d1bba 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -158,8 +158,7 @@ function Compressor(options, false_by_default) { } else if (compressor.option("warnings")) { stat.walk(new TreeWalker(function(node){ - if (node instanceof AST_Definitions - || node instanceof AST_Defun) { + if (node instanceof AST_Definitions || node instanceof AST_Defun) { compressor.warn("Declarations in unreachable code! [{line},{col}]", node.start); if (node instanceof AST_Definitions) { node = node.clone(); @@ -169,11 +168,13 @@ function Compressor(options, false_by_default) { else if (node instanceof AST_Defun) { a.push(node); } - return true; + return true; // no point to descend } - if (node instanceof AST_Scope) + if (node instanceof AST_Scope) { + // also don't descend any other nested scopes return true; - })) + } + })); }; } else { a.push(stat); @@ -185,6 +186,7 @@ function Compressor(options, false_by_default) { }, []); } + // XXX: this is destructive -- it modifies tree nodes. function sequencesize(statements) { var prev = null, last = statements.length - 1; if (last) statements = statements.reduce(function(a, cur, i){ @@ -196,8 +198,9 @@ function Compressor(options, false_by_default) { }); prev.body = seq; } - else if (i == last && cur instanceof AST_Exit - && cur.value && a.length == 1) { + else if (i == last + && cur instanceof AST_Exit && cur.value + && a.length == 1 && prev instanceof AST_SimpleStatement) { // it only makes sense to do this transformation // if the AST gets to a single statement. var seq = make_node(AST_Seq, prev, { -- 2.34.1