Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 0 additions & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -350,7 +350,6 @@ const_format = "0.2"
enum-map = "2"
enumset = "1"
libc = "0.2"
memchr = "2"
rustix = { version = "0.38", default-features = false, features = ["std", "fs", "event", "process", "net"] }
bitflags = "2"
thiserror = "2"
Expand Down
48 changes: 48 additions & 0 deletions clippy.toml
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,54 @@ disallowed-methods = [
{ path = "bun_core::output::debug_warn", reason = "renders args then tag-walks the rendered bytes; use the debug_warn! macro — allow only for runtime-built payloads, with justification" },
{ path = "alloc::string::String::from_utf8", reason = "keep data as bytes; for display use bstr::BStr, for JS-visible strings use bun_core::String::clone_utf8" },
{ path = "alloc::string::String::from_utf8_lossy", reason = "silently corrupts non-UTF-8 bytes and allocates; keep data as bytes (bstr::BStr for Display)" },
# == byte/substring search must go through bun_core::strings (highway, runtime-dispatched SIMD) ==
# libcore's searchers are scalar or compile-time-gated SSE2/NEON (we build with
# -Ctarget-cpu=nehalem on x64); highway picks AVX2/AVX-512 at runtime. The
# element-generic forms (`<[u8]>::contains`, `iter().position(|b| ..)`) can't be
# expressed here and are covered by test/internal/source-lints/byte-search.test.ts.
{ path = "str::find", reason = "use bun_core::strings::index_of_char / index_of on .as_bytes() (highway SIMD)" },
{ path = "str::rfind", reason = "use bun_core::strings::last_index_of_char / last_index_of on .as_bytes() (highway SIMD)" },
{ path = "str::contains", reason = "use bun_core::strings::contains_char / contains on .as_bytes() (highway SIMD)" },
{ path = "str::split_once", reason = "use bun_core::strings::split_once_char / split_once on .as_bytes() (highway SIMD)" },
{ path = "str::rsplit_once", reason = "use bun_core::strings::rsplit_once_char / rsplit_once on .as_bytes() (highway SIMD)" },
{ path = "str::split", reason = "use bun_core::strings::split on .as_bytes() (highway SIMD)" },
{ path = "str::rsplit", reason = "use bun_core::strings on .as_bytes() (highway SIMD)" },
{ path = "str::splitn", reason = "use bun_core::strings::split / split_once on .as_bytes() (highway SIMD)" },
{ path = "str::rsplitn", reason = "use bun_core::strings::rsplit_once on .as_bytes() (highway SIMD)" },
{ path = "str::split_terminator", reason = "use bun_core::strings::split on .as_bytes() (highway SIMD)" },
{ path = "str::rsplit_terminator", reason = "use bun_core::strings on .as_bytes() (highway SIMD)" },
{ path = "str::split_inclusive", reason = "use bun_core::strings::index_of_char in a loop on .as_bytes() (highway SIMD)" },
{ path = "str::lines", reason = "use bun_core::strings::split(bytes, b\"\\n\") and strip a trailing b'\\r' per field (str::lines does) (highway SIMD)" },
{ path = "str::matches", reason = "use bun_core::strings on .as_bytes() (highway SIMD)" },
{ path = "str::rmatches", reason = "use bun_core::strings on .as_bytes() (highway SIMD)" },
{ path = "str::match_indices", reason = "use bun_core::strings on .as_bytes() (highway SIMD)" },
{ path = "str::rmatch_indices", reason = "use bun_core::strings on .as_bytes() (highway SIMD)" },
{ path = "str::replace", reason = "use bun_core::strings::replace_owned on .as_bytes() (highway SIMD)" },
{ path = "str::replacen", reason = "use bun_core::strings::replace_owned on .as_bytes() (highway SIMD)" },
{ path = "slice::windows", reason = "substring search must use bun_core::strings::index_of / index_of_t (highway memmem); for genuine sliding-window iteration, #[allow] with a reason" },
{ path = "memchr::memchr", reason = "use bun_core::strings::index_of_char (highway SIMD)" },
{ path = "memchr::memchr2", reason = "use bun_core::strings::index_of_any (highway SIMD)" },
{ path = "memchr::memchr3", reason = "use bun_core::strings::index_of_any (highway SIMD)" },
{ path = "memchr::memrchr", reason = "use bun_core::strings::last_index_of_char (highway SIMD)" },
{ path = "memchr::memchr_iter", reason = "use bun_core::strings::index_of_char in a loop (highway SIMD)" },
{ path = "memchr::memmem::find", reason = "use bun_core::strings::index_of (highway memmem)" },
{ path = "memchr::memmem::rfind", reason = "use bun_core::strings::last_index_of (highway memrmem)" },
{ path = "memchr::memmem::find_iter", reason = "use bun_core::strings::index_of in a loop (highway memmem)" },
{ path = "bstr::ByteSlice::find", reason = "use bun_core::strings::index_of (highway memmem)" },
{ path = "bstr::ByteSlice::rfind", reason = "use bun_core::strings::last_index_of (highway memrmem)" },
{ path = "bstr::ByteSlice::find_byte", reason = "use bun_core::strings::index_of_char (highway SIMD)" },
{ path = "bstr::ByteSlice::rfind_byte", reason = "use bun_core::strings::last_index_of_char (highway SIMD)" },
{ path = "bstr::ByteSlice::find_char", reason = "use bun_core::strings::index_of_char / index_of (highway SIMD)" },
{ path = "bstr::ByteSlice::rfind_char", reason = "use bun_core::strings::last_index_of_char / last_index_of (highway SIMD)" },
{ path = "bstr::ByteSlice::find_byteset", reason = "use bun_core::strings::index_of_any (highway SIMD)" },
{ path = "bstr::ByteSlice::contains_str", reason = "use bun_core::strings::contains (highway memmem)" },
{ path = "bstr::ByteSlice::find_iter", reason = "use bun_core::strings::index_of in a loop (highway memmem)" },
{ path = "bstr::ByteSlice::rfind_iter", reason = "use bun_core::strings::last_index_of in a loop (highway memrmem)" },
{ path = "bstr::ByteSlice::split_str", reason = "use bun_core::strings::split (highway memmem)" },
{ path = "bstr::ByteSlice::rsplit_str", reason = "use bun_core::strings (highway memrmem)" },
{ path = "bstr::ByteSlice::split_once_str", reason = "use bun_core::strings::split_once (highway memmem)" },
{ path = "bstr::ByteSlice::rsplit_once_str", reason = "use bun_core::strings::rsplit_once (highway memrmem)" },
{ path = "bstr::ByteSlice::replace", reason = "use bun_core::strings::replace_owned (highway memmem)" },
]

disallowed-types = [
Expand Down
18 changes: 17 additions & 1 deletion scripts/verify-baseline-static/allowlist-aarch64.txt
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

# ----------------------------------------------------------------------------
# Bun's Highway SVE/SVE2 targets. Gate: hwy::SupportedTargets via getauxval(AT_HWCAP).
# (133 symbols)
# (161 symbols)
# ----------------------------------------------------------------------------
_ZN3bun10N_SVE2_12810MemMemImplEPKhmS2_m [SVE]
_ZN3bun10N_SVE2_12811MemRMemImplEPKhmS2_m [SVE]
Expand All @@ -17,6 +17,10 @@ _ZN3bun10N_SVE2_12814LowerAsciiImplEPKhmPh [S
_ZN3bun10N_SVE2_12815CopyU16ToU8ImplEPKtmPh [SVE]
_ZN3bun10N_SVE2_12815DecodeHex16ImplEPKtPhm [SVE]
_ZN3bun10N_SVE2_12815IndexOfCharImplEPKhmh [SVE]
_ZN3bun10N_SVE2_12813CountCharImplEPKhmh [SVE]
_ZN3bun10N_SVE2_12818IndexOfNotCharImplEPKhmh [SVE]
_ZN3bun10N_SVE2_12819LastIndexOfCharImplEPKhmh [SVE]
_ZN3bun10N_SVE2_12822LastIndexOfAnyCharImplEPKhmS2_m [SVE]
_ZN3bun10N_SVE2_12816LowerAscii16ImplEPKtmPt [SVE]
_ZN3bun10N_SVE2_12818EncodeHexLowerImplEPKhmPh [SVE]
_ZN3bun10N_SVE2_12818FirstNonAscii8ImplEPKhm [SVE]
Expand Down Expand Up @@ -53,6 +57,10 @@ _ZN3bun5N_SVE14LowerAsciiImplEPKhmPh [S
_ZN3bun5N_SVE15CopyU16ToU8ImplEPKtmPh [SVE]
_ZN3bun5N_SVE15DecodeHex16ImplEPKtPhm [SVE]
_ZN3bun5N_SVE15IndexOfCharImplEPKhmh [SVE]
_ZN3bun5N_SVE13CountCharImplEPKhmh [SVE]
_ZN3bun5N_SVE18IndexOfNotCharImplEPKhmh [SVE]
_ZN3bun5N_SVE19LastIndexOfCharImplEPKhmh [SVE]
_ZN3bun5N_SVE22LastIndexOfAnyCharImplEPKhmS2_m [SVE]
_ZN3bun5N_SVE16LowerAscii16ImplEPKtmPt [SVE]
_ZN3bun5N_SVE18EncodeHexLowerImplEPKhmPh [SVE]
_ZN3bun5N_SVE18FirstNonAscii8ImplEPKhm [SVE]
Expand Down Expand Up @@ -89,6 +97,10 @@ _ZN3bun6N_SVE214LowerAsciiImplEPKhmPh [S
_ZN3bun6N_SVE215CopyU16ToU8ImplEPKtmPh [SVE]
_ZN3bun6N_SVE215DecodeHex16ImplEPKtPhm [SVE]
_ZN3bun6N_SVE215IndexOfCharImplEPKhmh [SVE]
_ZN3bun6N_SVE213CountCharImplEPKhmh [SVE]
_ZN3bun6N_SVE218IndexOfNotCharImplEPKhmh [SVE]
_ZN3bun6N_SVE219LastIndexOfCharImplEPKhmh [SVE]
_ZN3bun6N_SVE222LastIndexOfAnyCharImplEPKhmS2_m [SVE]
_ZN3bun6N_SVE216LowerAscii16ImplEPKtmPt [SVE]
_ZN3bun6N_SVE218EncodeHexLowerImplEPKhmPh [SVE]
_ZN3bun6N_SVE218FirstNonAscii8ImplEPKhm [SVE]
Expand Down Expand Up @@ -125,6 +137,10 @@ _ZN3bun9N_SVE_25614LowerAsciiImplEPKhmPh [S
_ZN3bun9N_SVE_25615CopyU16ToU8ImplEPKtmPh [SVE]
_ZN3bun9N_SVE_25615DecodeHex16ImplEPKtPhm [SVE]
_ZN3bun9N_SVE_25615IndexOfCharImplEPKhmh [SVE]
_ZN3bun9N_SVE_25613CountCharImplEPKhmh [SVE]
_ZN3bun9N_SVE_25618IndexOfNotCharImplEPKhmh [SVE]
_ZN3bun9N_SVE_25619LastIndexOfCharImplEPKhmh [SVE]
_ZN3bun9N_SVE_25622LastIndexOfAnyCharImplEPKhmS2_m [SVE]
_ZN3bun9N_SVE_25616LowerAscii16ImplEPKtmPt [SVE]
_ZN3bun9N_SVE_25618EncodeHexLowerImplEPKhmPh [SVE]
_ZN3bun9N_SVE_25618FirstNonAscii8ImplEPKhm [SVE]
Expand Down
26 changes: 25 additions & 1 deletion scripts/verify-baseline-static/allowlist-x64-windows.txt
Original file line number Diff line number Diff line change
Expand Up @@ -437,7 +437,7 @@ ctiMasmProbeTrampolineAVX [AVX]

# ----------------------------------------------------------------------------
# Highway. MSVC-mangled bun::N_AVX* names.
# (203 symbols)
# (243 symbols)
# ----------------------------------------------------------------------------
bun::N_AVX10_2::ContainsNewlineOrNonASCIIOrQuoteImpl [AVX, AVX512BW, AVX512F]
bun::N_AVX10_2::CopyAsciiPrefixImpl [AVX, AVX512BW, AVX512F, AVX512VL]
Expand All @@ -453,6 +453,10 @@ bun::N_AVX10_2::HtmlEscapeExtraLen16Impl [AVX, AVX2,
bun::N_AVX10_2::HtmlEscapeExtraLen8Impl [AVX, AVX2, AVX512BW, AVX512DQ, AVX512F, AVX512VL]
bun::N_AVX10_2::IndexOfAnyCharImpl [AVX, AVX512BW, AVX512F, AVX512VL, AVX512_FP16]
bun::N_AVX10_2::IndexOfCharImpl [AVX, AVX512BW, BMI2]
bun::N_AVX10_2::CountCharImpl [AVX, AVX2, AVX512BW, AVX512DQ, AVX512F, AVX512VL]
bun::N_AVX10_2::IndexOfNotCharImpl [AVX, AVX512BW]
bun::N_AVX10_2::LastIndexOfCharImpl [AVX, AVX512BW]
bun::N_AVX10_2::LastIndexOfAnyCharImpl [AVX, AVX512BW, AVX512F]
bun::N_AVX10_2::IndexOfEscapeChar16Impl [AVX, AVX2, AVX512BW, AVX512DQ, AVX512F, AVX512VL, AVX512_FP16, AVX512_VBMI, BMI1, BMI2, GFNI]
bun::N_AVX10_2::IndexOfEscapeChar8Impl [AVX, AVX2, AVX512BW, AVX512DQ, AVX512F, AVX512VL, AVX512_FP16, AVX512_VBMI, BMI1, BMI2, GFNI]
bun::N_AVX10_2::IndexOfFirstAsciiUpper16Impl [AVX, AVX512BW, AVX512F]
Expand Down Expand Up @@ -486,6 +490,10 @@ bun::N_AVX2::HtmlEscapeExtraLen16Impl [AVX, AVX2]
bun::N_AVX2::HtmlEscapeExtraLen8Impl [AVX, AVX2]
bun::N_AVX2::IndexOfAnyCharImpl [AVX, AVX2]
bun::N_AVX2::IndexOfCharImpl [AVX, AVX2]
bun::N_AVX2::CountCharImpl [AVX, AVX2]
bun::N_AVX2::IndexOfNotCharImpl [AVX, AVX2]
bun::N_AVX2::LastIndexOfCharImpl [AVX, AVX2]
bun::N_AVX2::LastIndexOfAnyCharImpl [AVX, AVX2]
bun::N_AVX2::IndexOfEscapeChar16Impl [AVX, AVX2, BMI1, BMI2]
bun::N_AVX2::IndexOfEscapeChar8Impl [AVX, AVX2, BMI1, BMI2]
bun::N_AVX2::IndexOfFirstAsciiUpper16Impl [AVX, AVX2, BMI2]
Expand Down Expand Up @@ -523,6 +531,10 @@ bun::N_AVX3::HtmlEscapeExtraLen16Impl [AVX, AVX2,
bun::N_AVX3::HtmlEscapeExtraLen8Impl [AVX, AVX2, AVX512BW, AVX512DQ, AVX512F, AVX512VL]
bun::N_AVX3::IndexOfAnyCharImpl [AVX, AVX512BW, AVX512F, AVX512VL]
bun::N_AVX3::IndexOfCharImpl [AVX, AVX512BW, BMI2]
bun::N_AVX3::CountCharImpl [AVX, AVX2, AVX512BW, AVX512DQ, AVX512F, AVX512VL]
bun::N_AVX3::IndexOfNotCharImpl [AVX, AVX512BW]
bun::N_AVX3::LastIndexOfCharImpl [AVX, AVX512BW]
bun::N_AVX3::LastIndexOfAnyCharImpl [AVX, AVX512BW, AVX512F]
bun::N_AVX3::IndexOfEscapeChar16Impl [AVX, AVX2, AVX512BW, AVX512DQ, AVX512F, AVX512VL, BMI1, BMI2]
bun::N_AVX3::IndexOfEscapeChar8Impl [AVX, AVX2, AVX512BW, AVX512DQ, AVX512F, AVX512VL, BMI1, BMI2]
bun::N_AVX3::IndexOfFirstAsciiUpper16Impl [AVX, AVX512BW, AVX512F]
Expand Down Expand Up @@ -561,6 +573,10 @@ bun::N_AVX3_DL::HtmlEscapeExtraLen16Impl [AVX, AVX2,
bun::N_AVX3_DL::HtmlEscapeExtraLen8Impl [AVX, AVX2, AVX512BW, AVX512DQ, AVX512F, AVX512VL]
bun::N_AVX3_DL::IndexOfAnyCharImpl [AVX, AVX512BW, AVX512F, AVX512VL]
bun::N_AVX3_DL::IndexOfCharImpl [AVX, AVX512BW, BMI2]
bun::N_AVX3_DL::CountCharImpl [AVX, AVX2, AVX512BW, AVX512DQ, AVX512F, AVX512VL]
bun::N_AVX3_DL::IndexOfNotCharImpl [AVX, AVX512BW]
bun::N_AVX3_DL::LastIndexOfCharImpl [AVX, AVX512BW]
bun::N_AVX3_DL::LastIndexOfAnyCharImpl [AVX, AVX512BW, AVX512F]
bun::N_AVX3_DL::IndexOfEscapeChar16Impl [AVX, AVX2, AVX512BW, AVX512DQ, AVX512F, AVX512VL, AVX512_VBMI, BMI1, BMI2, GFNI]
bun::N_AVX3_DL::IndexOfEscapeChar8Impl [AVX, AVX2, AVX512BW, AVX512DQ, AVX512F, AVX512VL, AVX512_VBMI, BMI1, BMI2, GFNI]
bun::N_AVX3_DL::IndexOfFirstAsciiUpper16Impl [AVX, AVX512BW, AVX512F]
Expand Down Expand Up @@ -598,6 +614,10 @@ bun::N_AVX3_SPR::HtmlEscapeExtraLen16Impl [AVX, AVX2,
bun::N_AVX3_SPR::HtmlEscapeExtraLen8Impl [AVX, AVX2, AVX512BW, AVX512DQ, AVX512F, AVX512VL]
bun::N_AVX3_SPR::IndexOfAnyCharImpl [AVX, AVX512BW, AVX512F, AVX512VL, AVX512_FP16]
bun::N_AVX3_SPR::IndexOfCharImpl [AVX, AVX512BW, BMI2]
bun::N_AVX3_SPR::CountCharImpl [AVX, AVX2, AVX512BW, AVX512DQ, AVX512F, AVX512VL]
bun::N_AVX3_SPR::IndexOfNotCharImpl [AVX, AVX512BW]
bun::N_AVX3_SPR::LastIndexOfCharImpl [AVX, AVX512BW]
bun::N_AVX3_SPR::LastIndexOfAnyCharImpl [AVX, AVX512BW, AVX512F]
bun::N_AVX3_SPR::IndexOfEscapeChar16Impl [AVX, AVX2, AVX512BW, AVX512DQ, AVX512F, AVX512VL, AVX512_FP16, AVX512_VBMI, BMI1, BMI2, GFNI]
bun::N_AVX3_SPR::IndexOfEscapeChar8Impl [AVX, AVX2, AVX512BW, AVX512DQ, AVX512F, AVX512VL, AVX512_FP16, AVX512_VBMI, BMI1, BMI2, GFNI]
bun::N_AVX3_SPR::IndexOfFirstAsciiUpper16Impl [AVX, AVX512BW, AVX512F]
Expand Down Expand Up @@ -635,6 +655,10 @@ bun::N_AVX3_ZEN4::HtmlEscapeExtraLen16Impl [AVX, AVX2,
bun::N_AVX3_ZEN4::HtmlEscapeExtraLen8Impl [AVX, AVX2, AVX512BW, AVX512DQ, AVX512F, AVX512VL]
bun::N_AVX3_ZEN4::IndexOfAnyCharImpl [AVX, AVX512BW, AVX512F, AVX512VL]
bun::N_AVX3_ZEN4::IndexOfCharImpl [AVX, AVX512BW, BMI2]
bun::N_AVX3_ZEN4::CountCharImpl [AVX, AVX2, AVX512BW, AVX512DQ, AVX512F, AVX512VL]
bun::N_AVX3_ZEN4::IndexOfNotCharImpl [AVX, AVX512BW]
bun::N_AVX3_ZEN4::LastIndexOfCharImpl [AVX, AVX512BW]
bun::N_AVX3_ZEN4::LastIndexOfAnyCharImpl [AVX, AVX512BW, AVX512F]
bun::N_AVX3_ZEN4::IndexOfEscapeChar16Impl [AVX, AVX2, AVX512BW, AVX512DQ, AVX512F, AVX512VL, AVX512_VBMI, BMI1, BMI2, GFNI]
bun::N_AVX3_ZEN4::IndexOfEscapeChar8Impl [AVX, AVX2, AVX512BW, AVX512DQ, AVX512F, AVX512VL, AVX512_VBMI, BMI1, BMI2, GFNI]
bun::N_AVX3_ZEN4::IndexOfFirstAsciiUpper16Impl [AVX, AVX512BW, AVX512F]
Expand Down
Loading