aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Lam S.L <alexlamsl@gmail.com>2019-12-05 02:43:25 +0800
committerGitHub <noreply@github.com>2019-12-05 02:43:25 +0800
commit04fbb1f94978884128ef1582405a77a1974c6522 (patch)
treeeef527edb15a5cc142ce04eb49ae93936c9c8070
parentbf7e4ca1a3b1305308c66fcdf188d31a398c4ba2 (diff)
downloadtracifyjs-04fbb1f94978884128ef1582405a77a1974c6522.tar.gz
tracifyjs-04fbb1f94978884128ef1582405a77a1974c6522.zip
avoid collision with HTML comments (#3625)
fixes #3624
-rw-r--r--lib/output.js39
-rw-r--r--test/compress/html_comments.js92
2 files changed, 82 insertions, 49 deletions
diff --git a/lib/output.js b/lib/output.js
index 0f8ef1cd..d97778b2 100644
--- a/lib/output.js
+++ b/lib/output.js
@@ -269,7 +269,7 @@ function OutputStream(options) {
}
}
newline_insert = -1;
- var prev = last.charAt(last.length - 1);
+ var prev = last.slice(-1);
if (might_need_semicolon) {
might_need_semicolon = false;
@@ -298,16 +298,16 @@ function OutputStream(options) {
}
if (might_need_space) {
- if ((is_identifier_char(prev)
- && (is_identifier_char(ch) || ch == "\\"))
+ if (is_identifier_char(prev) && (is_identifier_char(ch) || ch == "\\")
|| (ch == "/" && ch == prev)
- || ((ch == "+" || ch == "-") && ch == last))
- {
+ || ((ch == "+" || ch == "-") && ch == last)
+ || str == "--" && last == "!"
+ || last == "--" && ch == ">") {
OUTPUT += " ";
current_col++;
current_pos++;
}
- might_need_space = false;
+ if (prev != "<" || str != "!") might_need_space = false;
}
if (mapping_token) {
@@ -322,7 +322,7 @@ function OutputStream(options) {
}
OUTPUT += str;
- has_parens = str[str.length - 1] == "(";
+ has_parens = str.slice(-1) == "(";
current_pos += str.length;
var a = str.split(/\r?\n/), n = a.length - 1;
current_line += n;
@@ -1254,29 +1254,10 @@ function OutputStream(options) {
output.print(self.operator);
});
DEFPRINT(AST_Binary, function(self, output) {
- var op = self.operator;
self.left.print(output);
- if (op[0] == ">" /* ">>" ">>>" ">" ">=" */
- && self.left instanceof AST_UnaryPostfix
- && self.left.operator == "--") {
- // space is mandatory to avoid outputting -->
- output.print(" ");
- } else {
- // the space is optional depending on "beautify"
- output.space();
- }
- output.print(op);
- if ((op == "<" || op == "<<")
- && self.right instanceof AST_UnaryPrefix
- && self.right.operator == "!"
- && self.right.expression instanceof AST_UnaryPrefix
- && self.right.expression.operator == "--") {
- // space is mandatory to avoid outputting <!--
- output.print(" ");
- } else {
- // the space is optional depending on "beautify"
- output.space();
- }
+ output.space();
+ output.print(self.operator);
+ output.space();
self.right.print(output);
});
DEFPRINT(AST_Conditional, function(self, output) {
diff --git a/test/compress/html_comments.js b/test/compress/html_comments.js
index fe6ff8ac..e208b36d 100644
--- a/test/compress/html_comments.js
+++ b/test/compress/html_comments.js
@@ -1,55 +1,107 @@
html_comment_in_expression: {
input: {
- function f(a, b, x, y) { return a < !--b && x-- > y; }
+ (function(a, b) {
+ console.log(a < !--b && a-- > b, a, b);
+ })(1, 2);
}
- expect_exact: "function f(a,b,x,y){return a< !--b&&x-- >y}";
+ expect_exact: "(function(a,b){console.log(a<! --b&&a-- >b,a,b)})(1,2);"
+ expect_stdout: "false 1 1"
}
html_comment_in_less_than: {
input: {
- function f(a, b) { return a < !--b; }
+ (function(a, b, c) {
+ console.log(
+ a < !--b,
+ a < !--b + c,
+ a + b < !--c,
+ a, b, c
+ );
+ })(1, 2, 3);
}
- expect_exact: "function f(a,b){return a< !--b}";
+ expect_exact: "(function(a,b,c){console.log(a<! --b,a<! --b+c,a+b<! --c,a,b,c)})(1,2,3);"
+ expect_stdout: "false true false 1 0 2"
}
html_comment_in_left_shift: {
input: {
- function f(a, b) { return a << !--b; }
+ (function(a, b, c) {
+ console.log(
+ a << !--b,
+ a << !--b + c,
+ a + b << !--c,
+ a, b, c
+ );
+ })(1, 2, 3);
}
- expect_exact: "function f(a,b){return a<< !--b}";
+ expect_exact: "(function(a,b,c){console.log(a<<! --b,a<<! --b+c,a+b<<! --c,a,b,c)})(1,2,3);"
+ expect_stdout: "1 16 1 1 0 2"
}
-html_comment_in_right_shift: {
+html_comment_in_greater_than: {
input: {
- function f(a, b) { return a-- >> b; }
+ (function(a, b, c) {
+ console.log(
+ a-- > b,
+ a-- > b + c,
+ a + b-- > c,
+ a, b, c
+ );
+ })(1, 2, 3);
}
- expect_exact: "function f(a,b){return a-- >>b}";
+ expect_exact: "(function(a,b,c){console.log(a-- >b,a-- >b+c,a+b-- >c,a,b,c)})(1,2,3);"
+ expect_stdout: "false false false -1 1 3"
}
-html_comment_in_zero_fill_right_shift: {
+html_comment_in_greater_than_or_equal: {
input: {
- function f(a, b) { return a-- >>> b; }
+ (function(a, b, c) {
+ console.log(
+ a-- >= b,
+ a-- >= b + c,
+ a + b-- >= c,
+ a, b, c
+ );
+ })(1, 2, 3);
}
- expect_exact: "function f(a,b){return a-- >>>b}";
+ expect_exact: "(function(a,b,c){console.log(a-- >=b,a-- >=b+c,a+b-- >=c,a,b,c)})(1,2,3);"
+ expect_stdout: "false false false -1 1 3"
}
-html_comment_in_greater_than: {
+html_comment_in_right_shift: {
input: {
- function f(a, b) { return a-- > b; }
+ (function(a, b, c) {
+ console.log(
+ a-- >> b,
+ a-- >> b + c,
+ a + b-- >> c,
+ a, b, c
+ );
+ })(1, 2, 3);
}
- expect_exact: "function f(a,b){return a-- >b}";
+ expect_exact: "(function(a,b,c){console.log(a-- >>b,a-- >>b+c,a+b-- >>c,a,b,c)})(1,2,3);"
+ expect_stdout: "0 0 0 -1 1 3"
}
-html_comment_in_greater_than_or_equal: {
+html_comment_in_zero_fill_right_shift: {
input: {
- function f(a, b) { return a-- >= b; }
+ (function(a, b, c) {
+ console.log(
+ a-- >>> b,
+ a-- >>> b + c,
+ a + b-- >>> c,
+ a, b, c
+ );
+ })(1, 2, 3);
}
- expect_exact: "function f(a,b){return a-- >=b}";
+ expect_exact: "(function(a,b,c){console.log(a-- >>>b,a-- >>>b+c,a+b-- >>>c,a,b,c)})(1,2,3);"
+ expect_stdout: "0 0 0 -1 1 3"
}
html_comment_in_string_literal: {
input: {
- function f() { return "<!--HTML-->comment in<!--string literal-->"; }
+ console.log("<!--HTML-->comment in<!--string literal-->".length);
}
- expect_exact: 'function f(){return"\\x3c!--HTML--\\x3ecomment in\\x3c!--string literal--\\x3e"}';
+ expect_exact: 'console.log("\\x3c!--HTML--\\x3ecomment in\\x3c!--string literal--\\x3e".length);'
+ expect_stdout: "42"
}