big speed improvement (observable when beautify = false)

who would have thought that str.charAt(str.length - 1) is not a constant,
instant operation?  seems to get slower and slower as the string grows.

0.6s vs. 3s
This commit is contained in:
Mihai Bazon
2012-08-17 19:04:23 +03:00
parent 901f77047e
commit ef87c9fd8f

View File

@@ -68,22 +68,21 @@ function OutputStream(options) {
return repeat_string(" ", options.indent_start + indentation - back * options.indent_level); return repeat_string(" ", options.indent_start + indentation - back * options.indent_level);
}; };
function last_char() {
return OUTPUT.charAt(OUTPUT.length - 1);
};
/* -----[ beautification/minification ]----- */ /* -----[ beautification/minification ]----- */
var might_need_space = false; var might_need_space = false;
var might_need_semicolon = false; var might_need_semicolon = false;
var last = null; var last = null;
function last_char() {
return last.charAt(last.length - 1);
};
function print(str) { function print(str) {
last = str;
str = String(str); str = String(str);
var ch = str.charAt(0); var ch = str.charAt(0);
if (might_need_semicolon) { if (might_need_semicolon) {
if (";}".indexOf(ch) < 0 && !/[;]$/.test(OUTPUT)) { if (";}".indexOf(ch) < 0 && !/[;]$/.test(last)) {
OUTPUT += ";"; OUTPUT += ";";
current_col++; current_col++;
current_pos++; current_pos++;
@@ -96,7 +95,7 @@ function OutputStream(options) {
if ((is_identifier_char(last_char()) if ((is_identifier_char(last_char())
&& (is_identifier_char(ch) || ch == "\\")) && (is_identifier_char(ch) || ch == "\\"))
|| ||
(/[\+\-]$/.test(OUTPUT) && /^[\+\-]/.test(str))) (/[\+\-]$/.test(last) && /^[\+\-]/.test(str)))
{ {
OUTPUT += " "; OUTPUT += " ";
current_col++; current_col++;
@@ -112,6 +111,7 @@ function OutputStream(options) {
current_col += a[n - 1].length; current_col += a[n - 1].length;
} }
current_pos += str.length; current_pos += str.length;
last = str;
OUTPUT += str; OUTPUT += str;
}; };
@@ -682,8 +682,9 @@ function OutputStream(options) {
output.print("]"); output.print("]");
}); });
DEFPRINT(AST_UnaryPrefix, function(self, output){ DEFPRINT(AST_UnaryPrefix, function(self, output){
output.print(self.operator); var op = self.operator;
if (is_alphanumeric_char(self.operator.charAt(0))) output.print(op);
if (/^[a-z]/i.test(op))
output.space(); output.space();
self.expression.print(output); self.expression.print(output);
}); });