diff options
author | Alex Lam S.L <alexlamsl@gmail.com> | 2018-04-05 04:12:04 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-04-05 04:12:04 +0800 |
commit | b5bab254ce2122a43e9ca0fdc757aecda7191576 (patch) | |
tree | d88a5122bbce4c7e2dfa5411b2dae4c47a531721 | |
parent | 81603ecd156f494a6b0c02655c5361152711300d (diff) | |
download | tracifyjs-b5bab254ce2122a43e9ca0fdc757aecda7191576.tar.gz tracifyjs-b5bab254ce2122a43e9ca0fdc757aecda7191576.zip |
speed up `has_parens()` (take 2) (#3052)
fixes #3050
-rw-r--r-- | lib/output.js | 4 | ||||
-rw-r--r-- | test/mocha/parentheses.js (renamed from test/mocha/new.js) | 23 |
2 files changed, 24 insertions, 3 deletions
diff --git a/lib/output.js b/lib/output.js index cad6fd82..0f349046 100644 --- a/lib/output.js +++ b/lib/output.js @@ -197,6 +197,7 @@ function OutputStream(options) { /* -----[ beautification/minification ]----- */ + var has_parens = false; var might_need_space = false; var might_need_semicolon = false; var might_add_newline = 0; @@ -340,6 +341,7 @@ function OutputStream(options) { } OUTPUT += str; + has_parens = str[str.length - 1] == "("; current_pos += str.length; var a = str.split(/\r?\n/), n = a.length - 1; current_line += n; @@ -576,7 +578,7 @@ function OutputStream(options) { indentation : function() { return indentation }, current_width : function() { return current_col - indentation }, should_break : function() { return options.width && this.current_width() >= options.width }, - has_parens : function() { return OUTPUT[OUTPUT.length - 1] == "(" }, + has_parens : function() { return has_parens }, newline : newline, print : print, space : space, diff --git a/test/mocha/new.js b/test/mocha/parentheses.js index 8f653f7a..a3ef8604 100644 --- a/test/mocha/new.js +++ b/test/mocha/parentheses.js @@ -1,7 +1,7 @@ var assert = require("assert"); var uglify = require("../../"); -describe("New", function() { +describe("parentheses", function() { it("Should add trailing parentheses for new expressions with zero arguments in beautify mode", function() { var tests = [ "new x(1);", @@ -83,4 +83,23 @@ describe("New", function() { ); } }); -});
\ No newline at end of file + + it("Should compress leading parenthesis with reasonable performance", function() { + this.timeout(30000); + var code = [ + "({}?0:1)&&x();", + "(function(){}).name;", + ]; + for (var i = 16; --i >= 0;) { + [].push.apply(code, code); + } + code = code.join(""); + var result = uglify.minify(code, { + compress: false, + mangle: false, + }); + if (result.error) throw result.error; + // Dismal performance for `assert.strictEqual()` in Node.js 6 + assert.ok(result.code === code); + }); +}); |