@@ -197,6 +197,7 @@ function OutputStream(options) {
|
|||||||
|
|
||||||
/* -----[ beautification/minification ]----- */
|
/* -----[ beautification/minification ]----- */
|
||||||
|
|
||||||
|
var has_parens = false;
|
||||||
var might_need_space = false;
|
var might_need_space = false;
|
||||||
var might_need_semicolon = false;
|
var might_need_semicolon = false;
|
||||||
var might_add_newline = 0;
|
var might_add_newline = 0;
|
||||||
@@ -340,6 +341,7 @@ function OutputStream(options) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
OUTPUT += str;
|
OUTPUT += str;
|
||||||
|
has_parens = str[str.length - 1] == "(";
|
||||||
current_pos += str.length;
|
current_pos += str.length;
|
||||||
var a = str.split(/\r?\n/), n = a.length - 1;
|
var a = str.split(/\r?\n/), n = a.length - 1;
|
||||||
current_line += n;
|
current_line += n;
|
||||||
@@ -576,7 +578,7 @@ function OutputStream(options) {
|
|||||||
indentation : function() { return indentation },
|
indentation : function() { return indentation },
|
||||||
current_width : function() { return current_col - indentation },
|
current_width : function() { return current_col - indentation },
|
||||||
should_break : function() { return options.width && this.current_width() >= options.width },
|
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,
|
newline : newline,
|
||||||
print : print,
|
print : print,
|
||||||
space : space,
|
space : space,
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
var assert = require("assert");
|
var assert = require("assert");
|
||||||
var uglify = require("../../");
|
var uglify = require("../../");
|
||||||
|
|
||||||
describe("New", function() {
|
describe("parentheses", function() {
|
||||||
it("Should add trailing parentheses for new expressions with zero arguments in beautify mode", function() {
|
it("Should add trailing parentheses for new expressions with zero arguments in beautify mode", function() {
|
||||||
var tests = [
|
var tests = [
|
||||||
"new x(1);",
|
"new x(1);",
|
||||||
@@ -83,4 +83,23 @@ describe("New", function() {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
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);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
Reference in New Issue
Block a user