diff options
author | 2023-04-17 08:01:03 -0700 | |
---|---|---|
committer | 2023-04-17 08:01:03 -0700 | |
commit | bffe5e820bb0e5e1659681cc562320c7b4a82dbc (patch) | |
tree | ea4e44837f48144dc1c9ace613bcbaee90920bbc | |
parent | 983d9428a67781f07476dd3eb76bd1bb31592486 (diff) | |
download | bun-bffe5e820bb0e5e1659681cc562320c7b4a82dbc.tar.gz bun-bffe5e820bb0e5e1659681cc562320c7b4a82dbc.tar.zst bun-bffe5e820bb0e5e1659681cc562320c7b4a82dbc.zip |
more
-rw-r--r-- | src/js_parser.zig | 60 |
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; |