diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/ast.js | 18 | ||||
-rw-r--r-- | lib/compress.js | 58 | ||||
-rw-r--r-- | lib/minify.js | 5 | ||||
-rw-r--r-- | lib/utils.js | 5 |
4 files changed, 51 insertions, 35 deletions
@@ -137,17 +137,17 @@ var AST_Node = DEFNODE("Node", "start end", { }, null); (AST_Node.log_function = function(fn, verbose) { - var printed = Object.create(null); - if (fn) { - AST_Node.info = verbose ? function(text, props) { - log("INFO: " + string_template(text, props)); - } : noop; - AST_Node.warn = function(text, props) { - log("WARN: " + string_template(text, props)); - }; - } else { + if (!fn) { AST_Node.info = AST_Node.warn = noop; + return; } + var printed = Object.create(null); + AST_Node.info = verbose ? function(text, props) { + log("INFO: " + string_template(text, props)); + } : noop; + AST_Node.warn = function(text, props) { + log("WARN: " + string_template(text, props)); + }; function log(msg) { if (printed[msg]) return; diff --git a/lib/compress.js b/lib/compress.js index d8f689c3..822e0507 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -192,7 +192,11 @@ merge(Compressor.prototype, { node.walk(new TreeWalker(function() { count++; })); - AST_Node.info("pass " + pass + ": last_count: " + min_count + ", count: " + count); + AST_Node.info("pass {pass}: last_count: {min_count}, count: {count}", { + pass: pass, + min_count: min_count, + count: count, + }); if (count < min_count) { min_count = count; stopping = false; @@ -1340,11 +1344,11 @@ merge(Compressor.prototype, { replaced++; } CHANGED = abort = true; - AST_Node.info("Collapsing {name} [{file}:{line},{col}]", { - name: node.print_to_string(), + AST_Node.info("Collapsing {node} [{file}:{line},{col}]", { + node: node, file: node.start.file, line: node.start.line, - col: node.start.col + col: node.start.col, }); if (candidate instanceof AST_UnaryPostfix) { if (lhs instanceof AST_SymbolRef) lhs.definition().fixed = false; @@ -2799,14 +2803,15 @@ merge(Compressor.prototype, { } function extract_declarations_from_unreachable_code(compressor, stat, target) { - if (!(stat instanceof AST_Defun)) { + if (!(stat instanceof AST_Definitions || stat instanceof AST_Defun)) { AST_Node.warn("Dropping unreachable code [{file}:{line},{col}]", stat.start); } var block; stat.walk(new TreeWalker(function(node, descend) { if (node instanceof AST_Definitions) { - AST_Node.warn("Declarations in unreachable code! [{file}:{line},{col}]", node.start); - node.remove_initializers(compressor); + if (node.remove_initializers(compressor)) { + AST_Node.warn("Dropping initialization in unreachable code [{file}:{line},{col}]", node.start); + } push(node); return true; } @@ -3273,7 +3278,12 @@ merge(Compressor.prototype, { } function warn(node) { - AST_Node.warn("global_defs " + node.print_to_string() + " redefined [{file}:{line},{col}]", node.start); + AST_Node.warn("global_defs {node} redefined [{file}:{line},{col}]", { + node: node, + file: node.start.file, + line: node.start.line, + col: node.start.col, + }); } AST_Toplevel.DEFMETHOD("resolve_defines", function(compressor) { @@ -3878,10 +3888,10 @@ merge(Compressor.prototype, { return val[key].apply(val, args); } catch (ex) { AST_Node.warn("Error evaluating {code} [{file}:{line},{col}]", { - code: this.print_to_string(), + code: this, file: this.start.file, line: this.start.line, - col: this.start.col + col: this.start.col, }); } finally { if (val instanceof RegExp) val.lastIndex = 0; @@ -4992,7 +5002,7 @@ merge(Compressor.prototype, { var old_def, var_defs = var_defs_by_id.get(sym.id); if (!def.value) { if (var_defs.length > 1) { - AST_Node.warn("Dropping duplicated declaration of variable {name} [{file}:{line},{col}]", template(def.name)); + AST_Node.info("Dropping declaration of variable {name} [{file}:{line},{col}]", template(def.name)); remove(var_defs, def); sym.eliminated++; } else { @@ -5226,7 +5236,7 @@ merge(Compressor.prototype, { name: sym.name, file: sym.start.file, line: sym.start.line, - col : sym.start.col + col : sym.start.col, }; } @@ -6662,19 +6672,21 @@ merge(Compressor.prototype, { this.definitions.forEach(function(def) { def.value = make_node(AST_Undefined, def).optimize(compressor); }); + return true; }); - AST_Let.DEFMETHOD("remove_initializers", function() { + function remove_initializers() { + var CHANGED = false; this.definitions.forEach(function(def) { + if (!def.value) return; def.value = null; + CHANGED = true; }); - }); + return CHANGED; + } - AST_Var.DEFMETHOD("remove_initializers", function() { - this.definitions.forEach(function(def) { - def.value = null; - }); - }); + AST_Let.DEFMETHOD("remove_initializers", remove_initializers); + AST_Var.DEFMETHOD("remove_initializers", remove_initializers); AST_Definitions.DEFMETHOD("to_assignments", function(compressor) { var reduce_vars = compressor.option("reduce_vars"); @@ -6827,7 +6839,7 @@ merge(Compressor.prototype, { length: length, file: self.start.file, line: self.start.line, - col: self.start.col + col: self.start.col, }); break; } @@ -6884,10 +6896,10 @@ merge(Compressor.prototype, { })); } catch (ex) { AST_Node.warn("Error converting {expr} [{file}:{line},{col}]", { - expr: self.print_to_string(), + expr: self, file: self.start.file, line: self.start.line, - col: self.start.col + col: self.start.col, }); } } @@ -9302,7 +9314,7 @@ merge(Compressor.prototype, { prop: self.property, file: self.start.file, line: self.start.line, - col: self.start.col + col: self.start.col, }); } var parent = compressor.parent(); diff --git a/lib/minify.js b/lib/minify.js index c264f695..5f363989 100644 --- a/lib/minify.js +++ b/lib/minify.js @@ -33,7 +33,9 @@ function read_source_map(name, toplevel) { return to_ascii(match[2]); } } - AST_Node.warn("inline source map not found: " + name); + AST_Node.warn("inline source map not found: {name}", { + name: name, + }); } function parse_source_map(content) { @@ -258,6 +260,7 @@ function minify(files, options) { } catch (ex) { return { error: ex }; } finally { + AST_Node.log_function(); AST_Node.disable_validation(); } } diff --git a/lib/utils.js b/lib/utils.js index 2f5a4866..2a0df8c5 100644 --- a/lib/utils.js +++ b/lib/utils.js @@ -143,8 +143,9 @@ function push_uniq(array, el) { } function string_template(text, props) { - return text.replace(/\{(.+?)\}/g, function(str, p) { - return props && props[p]; + return text.replace(/\{([^}]+)\}/g, function(str, p) { + var value = props[p]; + return value instanceof AST_Node ? value.print_to_string() : value; }); } |