aboutsummaryrefslogtreecommitdiff
path: root/lib/output.js
diff options
context:
space:
mode:
authorAlex Lam S.L <alexlamsl@gmail.com>2021-01-10 03:34:26 +0000
committerGitHub <noreply@github.com>2021-01-10 11:34:26 +0800
commitba54d074d8f434148a4f9ab5f59fcb70ff08dda9 (patch)
tree2cb157a1cdf483efd4597b5d325fc4b17decaa9a /lib/output.js
parent0818d396c5cca408f161422800b79cf825ab5b9f (diff)
downloadtracifyjs-ba54d074d8f434148a4f9ab5f59fcb70ff08dda9.tar.gz
tracifyjs-ba54d074d8f434148a4f9ab5f59fcb70ff08dda9.zip
support asynchronous arrow functions (#4530)
Diffstat (limited to 'lib/output.js')
-rw-r--r--lib/output.js18
1 files changed, 14 insertions, 4 deletions
diff --git a/lib/output.js b/lib/output.js
index 9e704e8c..ae068462 100644
--- a/lib/output.js
+++ b/lib/output.js
@@ -692,7 +692,7 @@ function OutputStream(options) {
// [ 1, (2, 3), 4 ] ==> [ 1, 3, 4 ]
return p instanceof AST_Array
// () => (foo, bar)
- || p instanceof AST_Arrow && p.value === this
+ || is_arrow(p) && p.value === this
// await (foo, bar)
|| p instanceof AST_Await
// 1 + (2, 3) + 4 ==> 8
@@ -813,6 +813,9 @@ function OutputStream(options) {
// ({ p: a } = o);
if (this.left instanceof AST_DestructuredObject) return needs_parens_obj(output);
});
+ PARENS(AST_AsyncArrow, function(output) {
+ return needs_parens_assign_cond(this, output);
+ });
PARENS(AST_Conditional, function(output) {
return needs_parens_assign_cond(this, output);
});
@@ -1005,8 +1008,7 @@ function OutputStream(options) {
}
});
}
- DEFPRINT(AST_Arrow, function(output) {
- var self = this;
+ function print_arrow(self, output) {
if (self.argnames.length == 1 && self.argnames[0] instanceof AST_SymbolFunarg && !self.rest) {
self.argnames[0].print(output);
} else {
@@ -1020,6 +1022,14 @@ function OutputStream(options) {
} else {
print_braced(self, output, true);
}
+ }
+ DEFPRINT(AST_Arrow, function(output) {
+ print_arrow(this, output);
+ });
+ DEFPRINT(AST_AsyncArrow, function(output) {
+ output.print("async");
+ output.space();
+ print_arrow(this, output);
});
function print_lambda(self, output) {
if (self.name) {
@@ -1207,7 +1217,7 @@ function OutputStream(options) {
if (noin) node.walk(new TreeWalker(function(node) {
if (parens) return true;
if (node instanceof AST_Binary && node.operator == "in") return parens = true;
- if (node instanceof AST_Scope && !(node instanceof AST_Arrow && node.value)) return true;
+ if (node instanceof AST_Scope && !(is_arrow(node) && node.value)) return true;
}));
node.print(output, parens);
}