Merge branch 'master' into harmony

This commit is contained in:
Richard van Velzen
2016-06-12 17:29:42 +02:00
10 changed files with 376 additions and 27 deletions

View File

@@ -88,7 +88,8 @@ function OutputStream(options) {
function make_string(str, quote) {
var dq = 0, sq = 0;
str = str.replace(/[\\\b\f\n\r\v\t\x22\x27\u2028\u2029\0\ufeff]/g, function(s){
str = str.replace(/[\\\b\f\n\r\v\t\x22\x27\u2028\u2029\0\ufeff]/g,
function(s, i){
switch (s) {
case '"': ++dq; return '"';
case "'": ++sq; return "'";
@@ -101,8 +102,9 @@ function OutputStream(options) {
case "\x0B": return options.screw_ie8 ? "\\v" : "\\x0B";
case "\u2028": return "\\u2028";
case "\u2029": return "\\u2029";
case "\0": return "\\x00";
case "\ufeff": return "\\ufeff";
case "\0":
return /[0-7]/.test(str.charAt(i+1)) ? "\\x00" : "\\0";
}
return s;
});
@@ -611,7 +613,7 @@ function OutputStream(options) {
PARENS(AST_New, function(output){
var p = output.parent();
if (no_constructor_parens(this, output)
if (!need_constructor_parens(this, output)
&& (p instanceof AST_PropAccess // (new Date).getTime(), (new Date)["getTime"]()
|| p instanceof AST_Call && p.expression === this)) // (new foo)(bar)
return true;
@@ -1175,7 +1177,7 @@ function OutputStream(options) {
/* -----[ other expressions ]----- */
DEFPRINT(AST_Call, function(self, output){
self.expression.print(output);
if (self instanceof AST_New && no_constructor_parens(self, output))
if (self instanceof AST_New && !need_constructor_parens(self, output))
return;
output.with_parens(function(){
self.args.forEach(function(expr, i){
@@ -1531,13 +1533,9 @@ function OutputStream(options) {
};
// self should be AST_New. decide if we want to show parens or not.
function no_constructor_parens(self, output) {
return self.args.length == 0 && !output.option("beautify") ||
!(self.expression instanceof AST_SymbolRef ||
self.expression instanceof AST_Call ||
self.expression instanceof AST_Function ||
self.expression instanceof AST_Assign
);
function need_constructor_parens(self, output) {
// Always print parentheses with arguments
return self.args.length > 0;
};
function best_of(a) {