aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2023-04-17 08:01:03 -0700
committerGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2023-04-17 08:01:03 -0700
commitbffe5e820bb0e5e1659681cc562320c7b4a82dbc (patch)
treeea4e44837f48144dc1c9ace613bcbaee90920bbc
parent983d9428a67781f07476dd3eb76bd1bb31592486 (diff)
downloadbun-bffe5e820bb0e5e1659681cc562320c7b4a82dbc.tar.gz
bun-bffe5e820bb0e5e1659681cc562320c7b4a82dbc.tar.zst
bun-bffe5e820bb0e5e1659681cc562320c7b4a82dbc.zip
more
-rw-r--r--src/js_parser.zig60
1 files changed, 60 insertions, 0 deletions
diff --git a/src/js_parser.zig b/src/js_parser.zig
index 24ab03836..afa91a48a 100644
--- a/src/js_parser.zig
+++ b/src/js_parser.zig
@@ -4390,6 +4390,10 @@ pub const KnownGlobal = enum {
Date,
Set,
Map,
+ Headers,
+ Response,
+ TextEncoder,
+ TextDecoder,
pub const map = bun.ComptimeEnumMap(KnownGlobal);
@@ -4408,6 +4412,7 @@ pub const KnownGlobal = enum {
if (n == 0) {
// "new WeakSet()" is pure
e.can_be_unwrapped_if_unused = true;
+
return;
}
@@ -4438,6 +4443,7 @@ pub const KnownGlobal = enum {
if (n == 0) {
// "new Date()" is pure
e.can_be_unwrapped_if_unused = true;
+
return;
}
@@ -4484,6 +4490,60 @@ pub const KnownGlobal = enum {
}
},
+ .Headers => {
+ const n = e.args.len;
+
+ if (n == 0) {
+ // "new Headers()" is pure
+ e.can_be_unwrapped_if_unused = true;
+
+ return;
+ }
+ },
+
+ .Response => {
+ const n = e.args.len;
+
+ if (n == 0) {
+ // "new Response()" is pure
+ e.can_be_unwrapped_if_unused = true;
+
+ return;
+ }
+
+ if (n == 1) {
+ switch (e.args.ptr[0].knownPrimitive()) {
+ .null, .undefined, .boolean, .number, .string => {
+ // "new Response('')" is pure
+ // "new Response(0)" is pure
+ // "new Response(null)" is pure
+ // "new Response(true)" is pure
+ // "new Response(false)" is pure
+ // "new Response(undefined)" is pure
+
+ e.can_be_unwrapped_if_unused = true;
+ },
+ else => {
+ // "new Response(x)" is impure
+ },
+ }
+ }
+ },
+ .TextDecoder, .TextEncoder => {
+ const n = e.args.len;
+
+ if (n == 0) {
+ // "new TextEncoder()" is pure
+ // "new TextDecoder()" is pure
+ e.can_be_unwrapped_if_unused = true;
+
+ return;
+ }
+
+ // We _could_ validate the encoding argument
+ // But let's not bother
+ },
+
.Map => {
const n = e.args.len;