aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/compress.js4
-rw-r--r--test/compress/awaits.js44
2 files changed, 46 insertions, 2 deletions
diff --git a/lib/compress.js b/lib/compress.js
index 872cd1cb..838a912e 100644
--- a/lib/compress.js
+++ b/lib/compress.js
@@ -7573,16 +7573,16 @@ merge(Compressor.prototype, {
}
return node;
});
- var abort = arrow && exp.value && !is_primitive(compressor, exp.value);
+ var abort = !drop_body && exp.name || arrow && exp.value && !is_primitive(compressor, exp.value);
var tw = new TreeWalker(function(node) {
if (abort) return true;
+ if (tw.parent() === exp && node.may_throw(compressor)) return abort = true;
if (node instanceof AST_Await) return abort = true;
if (node instanceof AST_Return) {
if (node.value && !is_primitive(compressor, node.value)) return abort = true;
return;
}
if (node instanceof AST_Scope && node !== exp) return true;
- if (tw.parent() === exp && node.may_throw(compressor)) return abort = true;
});
exp.walk(tw);
if (!abort) {
diff --git a/test/compress/awaits.js b/test/compress/awaits.js
index e1b2805c..612cf8b5 100644
--- a/test/compress/awaits.js
+++ b/test/compress/awaits.js
@@ -1682,3 +1682,47 @@ issue_4972_3: {
]
node_version: ">=8"
}
+
+issue_4974: {
+ options = {
+ awaits: true,
+ side_effects: true,
+ }
+ input: {
+ (async function f() {
+ return 42 in f();
+ })();
+ console.log("PASS");
+ }
+ expect: {
+ (async function f() {
+ return 42 in f();
+ })();
+ console.log("PASS");
+ }
+ expect_stdout: true
+ node_version: ">=8"
+}
+
+issue_4975: {
+ options = {
+ awaits: true,
+ side_effects: true,
+ }
+ input: {
+ (async function f(a) {
+ try {
+ if (a) console.log(typeof f());
+ } catch (e) {}
+ })(42);
+ }
+ expect: {
+ (async function f(a) {
+ try {
+ if (a) console.log(typeof f());
+ } catch (e) {}
+ })(42);
+ }
+ expect_stdout: "object"
+ node_version: ">=8"
+}