aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Lam S.L <alexlamsl@gmail.com>2021-04-24 20:10:12 +0100
committerGitHub <noreply@github.com>2021-04-25 03:10:12 +0800
commita2b1b96752c5f898539f8e28431461428c4c7731 (patch)
treee386a4678032777ef863de556f69426b51fb4a00
parentc296a63fb338a6edba6682d821351255e8935fd9 (diff)
downloadtracifyjs-a2b1b96752c5f898539f8e28431461428c4c7731.tar.gz
tracifyjs-a2b1b96752c5f898539f8e28431461428c4c7731.zip
fix corner case with `yield` (#4867)
-rw-r--r--lib/output.js38
-rw-r--r--test/compress/yields.js21
2 files changed, 43 insertions, 16 deletions
diff --git a/lib/output.js b/lib/output.js
index ba6785ae..43512606 100644
--- a/lib/output.js
+++ b/lib/output.js
@@ -482,31 +482,37 @@ function OutputStream(options) {
return true;
}
+ function should_merge_comments(node, parent) {
+ if (parent instanceof AST_Binary) return parent.left === node;
+ if (parent.TYPE == "Call") return parent.expression === node;
+ if (parent instanceof AST_Conditional) return parent.condition === node;
+ if (parent instanceof AST_Dot) return parent.expression === node;
+ if (parent instanceof AST_Exit) return true;
+ if (parent instanceof AST_Sequence) return parent.expressions[0] === node;
+ if (parent instanceof AST_Sub) return parent.expression === node;
+ if (parent instanceof AST_UnaryPostfix) return true;
+ if (parent instanceof AST_Yield) return true;
+ }
+
function prepend_comments(node) {
var self = this;
- var scan = node instanceof AST_Exit && node.value;
+ var scan;
+ if (node instanceof AST_Exit) {
+ scan = node.value;
+ } else if (node instanceof AST_Yield) {
+ scan = node.expression;
+ }
var comments = dump(node);
if (!comments) comments = [];
if (scan) {
var tw = new TreeWalker(function(node) {
- var parent = tw.parent();
- if (parent instanceof AST_Exit
- || parent instanceof AST_Binary && parent.left === node
- || parent.TYPE == "Call" && parent.expression === node
- || parent instanceof AST_Conditional && parent.condition === node
- || parent instanceof AST_Dot && parent.expression === node
- || parent instanceof AST_Sequence && parent.expressions[0] === node
- || parent instanceof AST_Sub && parent.expression === node
- || parent instanceof AST_UnaryPostfix) {
- var before = dump(node);
- if (before) comments = comments.concat(before);
- } else {
- return true;
- }
+ if (!should_merge_comments(node, tw.parent())) return true;
+ var before = dump(node);
+ if (before) comments = comments.concat(before);
});
tw.push(node);
- node.value.walk(tw);
+ scan.walk(tw);
}
if (current_pos == 0) {
diff --git a/test/compress/yields.js b/test/compress/yields.js
index d21ebcbf..d577d7ef 100644
--- a/test/compress/yields.js
+++ b/test/compress/yields.js
@@ -150,6 +150,27 @@ for_await_of: {
node_version: ">=10"
}
+comment_newline: {
+ beautify = {
+ comments: "all",
+ }
+ input: {
+ console.log(function*() {
+ yield (
+ /* */
+ "PASS"
+ );
+ }().next().value);
+ }
+ expect_exact: [
+ "console.log(function*(){",
+ "/* */",
+ 'yield"PASS"}().next().value);',
+ ]
+ expect_stdout: "PASS"
+ node_version: ">=4"
+}
+
collapse_vars_1: {
options = {
collapse_vars: true,