diff options
author | Alex Lam S.L <alexlamsl@gmail.com> | 2019-12-05 02:43:25 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-12-05 02:43:25 +0800 |
commit | 04fbb1f94978884128ef1582405a77a1974c6522 (patch) | |
tree | eef527edb15a5cc142ce04eb49ae93936c9c8070 | |
parent | bf7e4ca1a3b1305308c66fcdf188d31a398c4ba2 (diff) | |
download | tracifyjs-04fbb1f94978884128ef1582405a77a1974c6522.tar.gz tracifyjs-04fbb1f94978884128ef1582405a77a1974c6522.zip |
avoid collision with HTML comments (#3625)
fixes #3624
-rw-r--r-- | lib/output.js | 39 | ||||
-rw-r--r-- | test/compress/html_comments.js | 92 |
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" } |