From e30d6d21f56cd094be2d667a12460181462f86f1 Mon Sep 17 00:00:00 2001 From: Jarred Sumner Date: Mon, 23 Jun 2025 17:17:32 -0700 Subject: [PATCH] Bump WebKit - June 23rd edition (#20598) --- cmake/tools/SetupWebKit.cmake | 2 +- src/bun.js/bindings/BunObject.cpp | 2 +- src/bun.js/bindings/BunProcess.cpp | 2 +- src/bun.js/bindings/BunString.cpp | 12 +++--- src/bun.js/bindings/Cookie.cpp | 16 +++---- src/bun.js/bindings/CookieMap.cpp | 4 +- src/bun.js/bindings/ErrorCode.cpp | 4 +- src/bun.js/bindings/JSBuffer.cpp | 2 +- src/bun.js/bindings/JSStringDecoder.cpp | 2 +- src/bun.js/bindings/NodeURL.cpp | 4 +- src/bun.js/bindings/bindings.cpp | 16 +++---- .../bindings/decodeURIComponentSIMD.cpp | 10 ++--- src/bun.js/bindings/headers-handwritten.h | 6 +-- src/bun.js/bindings/helpers.h | 18 ++++---- src/bun.js/bindings/napi.cpp | 2 +- src/bun.js/bindings/v8/V8String.cpp | 4 +- .../bindings/webcore/HTTPHeaderField.cpp | 24 +++++------ src/bun.js/bindings/webcore/HTTPHeaderField.h | 10 ++--- .../bindings/webcore/HTTPHeaderNames.cpp | 2 +- src/bun.js/bindings/webcore/HTTPParsers.cpp | 42 +++++++++---------- src/bun.js/bindings/webcore/HTTPParsers.h | 2 +- .../bindings/webcore/HeaderFieldTokenizer.cpp | 4 +- .../bindings/webcore/HeaderFieldTokenizer.h | 4 +- src/bun.js/bindings/webcore/JSMIMEParams.cpp | 16 +++---- src/bun.js/bindings/webcore/JSMIMEType.cpp | 14 +++---- src/bun.js/bindings/webcore/JSTextEncoder.cpp | 4 +- src/bun.js/bindings/webcore/RFC7230.cpp | 18 ++++---- src/bun.js/bindings/webcore/RFC7230.h | 8 ++-- .../webcore/SerializedScriptValue.cpp | 22 +++++----- src/bun.js/bindings/webcore/WebSocket.cpp | 6 +-- src/bun.js/modules/BunJSCModule.h | 2 +- 31 files changed, 142 insertions(+), 142 deletions(-) diff --git a/cmake/tools/SetupWebKit.cmake b/cmake/tools/SetupWebKit.cmake index 502dbb9b40..dd9f2a241d 100644 --- a/cmake/tools/SetupWebKit.cmake +++ b/cmake/tools/SetupWebKit.cmake @@ -2,7 +2,7 @@ option(WEBKIT_VERSION "The version of WebKit to use") option(WEBKIT_LOCAL "If a local version of WebKit should be used instead of downloading") if(NOT WEBKIT_VERSION) - set(WEBKIT_VERSION 397dafc9721b8f8046f9448abb6dbc14efe096d3) + set(WEBKIT_VERSION f98cecf7d6d1528fcf0da3dc6a23ce95650d2e0c) endif() string(SUBSTRING ${WEBKIT_VERSION} 0 16 WEBKIT_VERSION_PREFIX) diff --git a/src/bun.js/bindings/BunObject.cpp b/src/bun.js/bindings/BunObject.cpp index 82a4e54728..85a3b2ad2a 100644 --- a/src/bun.js/bindings/BunObject.cpp +++ b/src/bun.js/bindings/BunObject.cpp @@ -461,7 +461,7 @@ JSC_DEFINE_HOST_FUNCTION(functionBunSleep, } extern "C" JSC::EncodedJSValue Bun__escapeHTML8(JSGlobalObject* globalObject, JSC::EncodedJSValue input, const LChar* ptr, size_t length); -extern "C" JSC::EncodedJSValue Bun__escapeHTML16(JSGlobalObject* globalObject, JSC::EncodedJSValue input, const UChar* ptr, size_t length); +extern "C" JSC::EncodedJSValue Bun__escapeHTML16(JSGlobalObject* globalObject, JSC::EncodedJSValue input, const char16_t* ptr, size_t length); JSC_DEFINE_HOST_FUNCTION(functionBunEscapeHTML, (JSC::JSGlobalObject * lexicalGlobalObject, JSC::CallFrame* callFrame)) { diff --git a/src/bun.js/bindings/BunProcess.cpp b/src/bun.js/bindings/BunProcess.cpp index e979eed33e..5e4214207e 100644 --- a/src/bun.js/bindings/BunProcess.cpp +++ b/src/bun.js/bindings/BunProcess.cpp @@ -680,7 +680,7 @@ JSC_DEFINE_HOST_FUNCTION(Process_functionUmask, (JSGlobalObject * globalObject, if (value.isString()) { auto str = value.getString(globalObject); auto policy = WTF::TrailingJunkPolicy::Disallow; - auto opt = str.is8Bit() ? WTF::parseInteger(str.span8(), 8, policy) : WTF::parseInteger(str.span16(), 8, policy); + auto opt = str.is8Bit() ? WTF::parseInteger(str.span8(), 8, policy) : WTF::parseInteger(str.span16(), 8, policy); if (!opt.has_value()) return Bun::ERR::INVALID_ARG_VALUE(throwScope, globalObject, "mask"_s, value, "must be a 32-bit unsigned integer or an octal string"_s); newUmask = opt.value(); } else { diff --git a/src/bun.js/bindings/BunString.cpp b/src/bun.js/bindings/BunString.cpp index 4e94e68980..52b912c6bc 100644 --- a/src/bun.js/bindings/BunString.cpp +++ b/src/bun.js/bindings/BunString.cpp @@ -288,7 +288,7 @@ extern "C" JSC::EncodedJSValue BunString__toJS(JSC::JSGlobalObject* globalObject extern "C" BunString BunString__fromUTF16Unitialized(size_t length) { ASSERT(length > 0); - std::span ptr; + std::span ptr; auto impl = WTF::StringImpl::tryCreateUninitialized(length, ptr); if (!impl) [[unlikely]] { return { .tag = BunStringTag::Dead }; @@ -312,7 +312,7 @@ extern "C" BunString BunString__fromUTF8(const char* bytes, size_t length) ASSERT(length > 0); if (simdutf::validate_utf8(bytes, length)) { size_t u16Length = simdutf::utf16_length_from_utf8(bytes, length); - std::span ptr; + std::span ptr; auto impl = WTF::StringImpl::tryCreateUninitialized(static_cast(u16Length), ptr); if (!impl) [[unlikely]] { return { .tag = BunStringTag::Dead }; @@ -361,7 +361,7 @@ extern "C" BunString BunString__fromUTF16ToLatin1(const char16_t* bytes, size_t extern "C" BunString BunString__fromUTF16(const char16_t* bytes, size_t length) { ASSERT(length > 0); - std::span ptr; + std::span ptr; auto impl = WTF::StringImpl::tryCreateUninitialized(length, ptr); if (!impl) [[unlikely]] { return { .tag = BunStringTag::Dead }; @@ -384,7 +384,7 @@ extern "C" BunString BunString__createStaticExternal(const char* bytes, size_t l { Ref impl = isLatin1 ? WTF::ExternalStringImpl::createStatic({ reinterpret_cast(bytes), length }) : - WTF::ExternalStringImpl::createStatic({ reinterpret_cast(bytes), length }); + WTF::ExternalStringImpl::createStatic({ reinterpret_cast(bytes), length }); return { BunStringTag::WTFStringImpl, { .wtf = &impl.leakRef() } }; } @@ -393,7 +393,7 @@ extern "C" BunString BunString__createExternal(const char* bytes, size_t length, { Ref impl = isLatin1 ? WTF::ExternalStringImpl::create({ reinterpret_cast(bytes), length }, ctx, callback) : - WTF::ExternalStringImpl::create({ reinterpret_cast(bytes), length }, ctx, callback); + WTF::ExternalStringImpl::create({ reinterpret_cast(bytes), length }, ctx, callback); return { BunStringTag::WTFStringImpl, { .wtf = &impl.leakRef() } }; } @@ -719,7 +719,7 @@ extern "C" BunString BunString__createExternalGloballyAllocatedLatin1( } extern "C" BunString BunString__createExternalGloballyAllocatedUTF16( - const UChar* bytes, + const char16_t* bytes, size_t length) { ASSERT(length > 0); diff --git a/src/bun.js/bindings/Cookie.cpp b/src/bun.js/bindings/Cookie.cpp index 46d348adfe..3859e591a7 100644 --- a/src/bun.js/bindings/Cookie.cpp +++ b/src/bun.js/bindings/Cookie.cpp @@ -85,12 +85,12 @@ ExceptionOr> Cookie::parse(StringView cookieString) return Exception { TypeError, "Invalid cookie string: no '=' found"_s }; } - String name = cookiePair.substring(0, firstEqualsPos).trim(isASCIIWhitespace).toString(); + String name = cookiePair.substring(0, firstEqualsPos).trim(isASCIIWhitespace).toString(); if (name.isEmpty()) return Exception { TypeError, "Invalid cookie string: name cannot be empty"_s }; ASSERT(isValidHTTPHeaderValue(name)); - String value = cookiePair.substring(firstEqualsPos + 1).trim(isASCIIWhitespace).toString(); + String value = cookiePair.substring(firstEqualsPos + 1).trim(isASCIIWhitespace).toString(); // Default values String domain; @@ -108,15 +108,15 @@ ExceptionOr> Cookie::parse(StringView cookieString) auto attributesString = cookieString.substring(firstSemicolonPos + 1); for (auto attribute : attributesString.split(';')) { - auto trimmedAttribute = attribute.trim(isASCIIWhitespace); + auto trimmedAttribute = attribute.trim(isASCIIWhitespace); size_t assignmentPos = trimmedAttribute.find('='); String attributeName; String attributeValue; if (assignmentPos != notFound) { - attributeName = trimmedAttribute.substring(0, assignmentPos).trim(isASCIIWhitespace).convertToASCIILowercase(); - attributeValue = trimmedAttribute.substring(assignmentPos + 1).trim(isASCIIWhitespace).toString(); + attributeName = trimmedAttribute.substring(0, assignmentPos).trim(isASCIIWhitespace).convertToASCIILowercase(); + attributeValue = trimmedAttribute.substring(assignmentPos + 1).trim(isASCIIWhitespace).toString(); } else { attributeName = trimmedAttribute.convertToASCIILowercase(); attributeValue = emptyString(); @@ -182,7 +182,7 @@ String Cookie::toString(JSC::VM& vm) const return builder.toString(); } -static inline bool isValidCharacterInCookieName(UChar c) +static inline bool isValidCharacterInCookieName(char16_t c) { return (c >= 0x21 && c <= 0x3A) || (c == 0x3C) || (c >= 0x3E && c <= 0x7E); } @@ -201,7 +201,7 @@ bool Cookie::isValidCookieName(const String& name) } return true; } -static inline bool isValidCharacterInCookiePath(UChar c) +static inline bool isValidCharacterInCookiePath(char16_t c) { return (c >= 0x20 && c <= 0x3A) || (c >= 0x3D && c <= 0x7E); } @@ -220,7 +220,7 @@ bool Cookie::isValidCookiePath(const String& path) return true; } -static inline bool isValidCharacterInCookieDomain(UChar c) +static inline bool isValidCharacterInCookieDomain(char16_t c) { return (c >= 'a' && c <= 'z') || (c >= '0' && c <= '9') || c == '.' || c == '-'; } diff --git a/src/bun.js/bindings/CookieMap.cpp b/src/bun.js/bindings/CookieMap.cpp index aabca2aa4f..00e030d9af 100644 --- a/src/bun.js/bindings/CookieMap.cpp +++ b/src/bun.js/bindings/CookieMap.cpp @@ -94,8 +94,8 @@ ExceptionOr> CookieMap::create(std::variant continue; } - auto nameView = pair.substring(0, equalsPos).trim(isASCIIWhitespace); - auto valueView = pair.substring(equalsPos + 1).trim(isASCIIWhitespace); + auto nameView = pair.substring(0, equalsPos).trim(isASCIIWhitespace); + auto valueView = pair.substring(equalsPos + 1).trim(isASCIIWhitespace); if (nameView.isEmpty()) { continue; diff --git a/src/bun.js/bindings/ErrorCode.cpp b/src/bun.js/bindings/ErrorCode.cpp index 78d62a50bf..35c0c781fe 100644 --- a/src/bun.js/bindings/ErrorCode.cpp +++ b/src/bun.js/bindings/ErrorCode.cpp @@ -277,7 +277,7 @@ void JSValueToStringSafe(JSC::JSGlobalObject* globalObject, WTF::StringBuilder& } } } else { - const auto span = str->span(); + const auto span = str->span(); for (const auto c : span) { if (c == '"') { builder.append("\\\""_s); @@ -424,7 +424,7 @@ void determineSpecificType(JSC::VM& vm, JSC::JSGlobalObject* globalObject, WTF:: } } } else { - const auto span = view.span(); + const auto span = view.span(); for (const auto c : span) { if (c == '"') { builder.append("\\\""_s); diff --git a/src/bun.js/bindings/JSBuffer.cpp b/src/bun.js/bindings/JSBuffer.cpp index 5971a32a20..b50ec9e2f5 100644 --- a/src/bun.js/bindings/JSBuffer.cpp +++ b/src/bun.js/bindings/JSBuffer.cpp @@ -1765,7 +1765,7 @@ JSC::EncodedJSValue jsBufferToStringFromBytes(JSGlobalObject* lexicalGlobalObjec } case BufferEncodingType::ucs2: case BufferEncodingType::utf16le: { - std::span data; + std::span data; size_t u16length = bytes.size() / 2; if (u16length == 0) { return JSValue::encode(jsEmptyString(vm)); diff --git a/src/bun.js/bindings/JSStringDecoder.cpp b/src/bun.js/bindings/JSStringDecoder.cpp index 7ae9c16959..cbf4a712ec 100644 --- a/src/bun.js/bindings/JSStringDecoder.cpp +++ b/src/bun.js/bindings/JSStringDecoder.cpp @@ -199,7 +199,7 @@ JSC::JSValue JSStringDecoder::text(JSC::VM& vm, JSC::JSGlobalObject* globalObjec if (length == offset) RELEASE_AND_RETURN(throwScope, JSC::jsEmptyString(vm)); if ((length - offset) % 2 == 0) { - UChar c = (static_cast(bufPtr[length - 1]) << 8) + static_cast(bufPtr[length - 2]); + char16_t c = (static_cast(bufPtr[length - 1]) << 8) + static_cast(bufPtr[length - 2]); if (c >= 0xD800 && c <= 0xDBFF) { m_lastNeed = 2; m_lastTotal = 4; diff --git a/src/bun.js/bindings/NodeURL.cpp b/src/bun.js/bindings/NodeURL.cpp index 86b1e70bea..6b7612d37f 100644 --- a/src/bun.js/bindings/NodeURL.cpp +++ b/src/bun.js/bindings/NodeURL.cpp @@ -59,7 +59,7 @@ JSC_DEFINE_HOST_FUNCTION(jsDomainToASCII, (JSC::JSGlobalObject * globalObject, J constexpr static size_t hostnameBufferLength = 2048; auto encoder = &WTF::URLParser::internationalDomainNameTranscoder(); - UChar hostnameBuffer[hostnameBufferLength]; + char16_t hostnameBuffer[hostnameBufferLength]; UErrorCode error = U_ZERO_ERROR; UIDNAInfo processingDetails = UIDNA_INFO_INITIALIZER; const auto span = domain.span16(); @@ -128,7 +128,7 @@ JSC_DEFINE_HOST_FUNCTION(jsDomainToUnicode, (JSC::JSGlobalObject * globalObject, constexpr static int hostnameBufferLength = 2048; auto encoder = &WTF::URLParser::internationalDomainNameTranscoder(); - UChar hostnameBuffer[hostnameBufferLength]; + char16_t hostnameBuffer[hostnameBufferLength]; UErrorCode error = U_ZERO_ERROR; UIDNAInfo processingDetails = UIDNA_INFO_INITIALIZER; diff --git a/src/bun.js/bindings/bindings.cpp b/src/bun.js/bindings/bindings.cpp index ea4b74cf94..540c82d348 100644 --- a/src/bun.js/bindings/bindings.cpp +++ b/src/bun.js/bindings/bindings.cpp @@ -3103,7 +3103,7 @@ JSC::EncodedJSValue ZigString__toAtomicValue(const ZigString* arg0, JSC::JSGloba } if (isTaggedUTF16Ptr(arg0->ptr)) { - if (auto impl = WTF::AtomStringImpl::lookUp(std::span { reinterpret_cast(untag(arg0->ptr)), arg0->len })) { + if (auto impl = WTF::AtomStringImpl::lookUp(std::span { reinterpret_cast(untag(arg0->ptr)), arg0->len })) { return JSC::JSValue::encode(JSC::jsString(arg1->vm(), WTF::String(WTFMove(impl)))); } } else { @@ -3127,7 +3127,7 @@ JSC::EncodedJSValue ZigString__toExternalU16(const uint16_t* arg0, size_t len, J return JSC::JSValue::encode(JSC::jsEmptyString(global->vm())); } - auto ref = String(ExternalStringImpl::create({ reinterpret_cast(arg0), len }, reinterpret_cast(const_cast(arg0)), free_global_string)); + auto ref = String(ExternalStringImpl::create({ reinterpret_cast(arg0), len }, reinterpret_cast(const_cast(arg0)), free_global_string)); return JSC::JSValue::encode(JSC::JSValue(JSC::jsString( global->vm(), WTFMove(ref)))); @@ -3142,7 +3142,7 @@ JSC::EncodedJSValue ZigString__toExternalValue(const ZigString* arg0, JSC::JSGlo } if (Zig::isTaggedUTF16Ptr(str.ptr)) { - auto ref = String(ExternalStringImpl::create({ reinterpret_cast(Zig::untag(str.ptr)), str.len }, Zig::untagVoid(str.ptr), free_global_string)); + auto ref = String(ExternalStringImpl::create({ reinterpret_cast(Zig::untag(str.ptr)), str.len }, Zig::untagVoid(str.ptr), free_global_string)); return JSC::JSValue::encode(JSC::JSValue(JSC::jsString( arg1->vm(), WTFMove(ref)))); @@ -3200,7 +3200,7 @@ JSC::EncodedJSValue ZigString__external(const ZigString* arg0, JSC::JSGlobalObje if (Zig::isTaggedUTF16Ptr(str.ptr)) { return JSC::JSValue::encode(JSC::JSValue(JSC::jsString( arg1->vm(), - WTF::String(ExternalStringImpl::create({ reinterpret_cast(Zig::untag(str.ptr)), str.len }, arg2, ArgFn3))))); + WTF::String(ExternalStringImpl::create({ reinterpret_cast(Zig::untag(str.ptr)), str.len }, arg2, ArgFn3))))); } else { return JSC::JSValue::encode(JSC::JSValue(JSC::jsString( arg1->vm(), @@ -3216,7 +3216,7 @@ JSC::EncodedJSValue ZigString__toExternalValueWithCallback(const ZigString* arg0 if (Zig::isTaggedUTF16Ptr(str.ptr)) { return JSC::JSValue::encode(JSC::JSValue(JSC::jsOwnedString( arg1->vm(), - WTF::String(ExternalStringImpl::create({ reinterpret_cast(Zig::untag(str.ptr)), str.len }, nullptr, ArgFn2))))); + WTF::String(ExternalStringImpl::create({ reinterpret_cast(Zig::untag(str.ptr)), str.len }, nullptr, ArgFn2))))); } else { return JSC::JSValue::encode(JSC::JSValue(JSC::jsOwnedString( arg1->vm(), @@ -4107,7 +4107,7 @@ JSC::EncodedJSValue JSC__JSValue__getIfPropertyExistsFromPath(JSC::EncodedJSValu } while (i < length) { - UChar ic = pathString.characterAt(i); + char16_t ic = pathString.characterAt(i); while (ic == '[' || ic == ']' || ic == '.') { i += 1; if (i == length) { @@ -4128,7 +4128,7 @@ JSC::EncodedJSValue JSC__JSValue__getIfPropertyExistsFromPath(JSC::EncodedJSValu return JSValue::encode(currProp); } - UChar previous = ic; + char16_t previous = ic; ic = pathString.characterAt(i); if (previous == '.' && ic == '.') { auto* currPropObject = currProp.toObject(globalObject); @@ -4143,7 +4143,7 @@ JSC::EncodedJSValue JSC__JSValue__getIfPropertyExistsFromPath(JSC::EncodedJSValu } j = i; - UChar jc = pathString.characterAt(j); + char16_t jc = pathString.characterAt(j); while (!(jc == '[' || jc == ']' || jc == '.')) { j += 1; if (j == length) { diff --git a/src/bun.js/bindings/decodeURIComponentSIMD.cpp b/src/bun.js/bindings/decodeURIComponentSIMD.cpp index 5f8c768ead..3aedbfed3f 100644 --- a/src/bun.js/bindings/decodeURIComponentSIMD.cpp +++ b/src/bun.js/bindings/decodeURIComponentSIMD.cpp @@ -29,7 +29,7 @@ WTF::String decodeURIComponentSIMD(std::span input) const uint8_t* end = cursor + input.size(); constexpr size_t stride = SIMD::stride; - constexpr UChar replacementChar = 0xFFFD; + constexpr char16_t replacementChar = 0xFFFD; auto percentVector = SIMD::splat('%'); @@ -110,7 +110,7 @@ slow_path: continue; } - result.append(static_cast(value)); + result.append(static_cast(value)); } else if ((byte & 0xF0) == 0xE0) { // 3-byte sequence uint32_t value = byte & 0x0F; @@ -162,7 +162,7 @@ slow_path: continue; } - result.append(static_cast(value)); + result.append(static_cast(value)); } else if ((byte & 0xF8) == 0xF0) { // 4-byte sequence -> surrogate pair uint32_t value = byte & 0x07; @@ -235,8 +235,8 @@ slow_path: // Convert to surrogate pair value -= 0x10000; - result.append(static_cast(0xD800 | (value >> 10))); - result.append(static_cast(0xDC00 | (value & 0x3FF))); + result.append(static_cast(0xD800 | (value >> 10))); + result.append(static_cast(0xDC00 | (value & 0x3FF))); } else { result.append(replacementChar); cursor += (cursor + 2 < end) ? 3 : 1; diff --git a/src/bun.js/bindings/headers-handwritten.h b/src/bun.js/bindings/headers-handwritten.h index c2b7184183..7a2a364ef0 100644 --- a/src/bun.js/bindings/headers-handwritten.h +++ b/src/bun.js/bindings/headers-handwritten.h @@ -390,13 +390,13 @@ extern "C" const char* Bun__version_sha; extern "C" void ZigString__freeGlobal(const unsigned char* ptr, size_t len); extern "C" size_t Bun__encoding__writeLatin1(const unsigned char* ptr, size_t len, unsigned char* to, size_t other_len, Encoding encoding); -extern "C" size_t Bun__encoding__writeUTF16(const UChar* ptr, size_t len, unsigned char* to, size_t other_len, Encoding encoding); +extern "C" size_t Bun__encoding__writeUTF16(const char16_t* ptr, size_t len, unsigned char* to, size_t other_len, Encoding encoding); extern "C" size_t Bun__encoding__byteLengthLatin1AsUTF8(const unsigned char* ptr, size_t len); -extern "C" size_t Bun__encoding__byteLengthUTF16AsUTF8(const UChar* ptr, size_t len); +extern "C" size_t Bun__encoding__byteLengthUTF16AsUTF8(const char16_t* ptr, size_t len); extern "C" int64_t Bun__encoding__constructFromLatin1(void*, const unsigned char* ptr, size_t len, Encoding encoding); -extern "C" int64_t Bun__encoding__constructFromUTF16(void*, const UChar* ptr, size_t len, Encoding encoding); +extern "C" int64_t Bun__encoding__constructFromUTF16(void*, const char16_t* ptr, size_t len, Encoding encoding); extern "C" void Bun__EventLoop__runCallback1(JSC::JSGlobalObject* global, JSC::EncodedJSValue callback, JSC::EncodedJSValue thisValue, JSC::EncodedJSValue arg1); extern "C" void Bun__EventLoop__runCallback2(JSC::JSGlobalObject* global, JSC::EncodedJSValue callback, JSC::EncodedJSValue thisValue, JSC::EncodedJSValue arg1, JSC::EncodedJSValue arg2); diff --git a/src/bun.js/bindings/helpers.h b/src/bun.js/bindings/helpers.h index 8314fa81b2..b905bf0aa5 100644 --- a/src/bun.js/bindings/helpers.h +++ b/src/bun.js/bindings/helpers.h @@ -92,7 +92,7 @@ static const WTF::String toString(ZigString str) return !isTaggedUTF16Ptr(str.ptr) ? WTF::String(WTF::ExternalStringImpl::create({ untag(str.ptr), str.len }, untagVoid(str.ptr), free_global_string)) : WTF::String(WTF::ExternalStringImpl::create( - { reinterpret_cast(untag(str.ptr)), str.len }, untagVoid(str.ptr), free_global_string)); + { reinterpret_cast(untag(str.ptr)), str.len }, untagVoid(str.ptr), free_global_string)); } // This will fail if the string is too long. Let's make it explicit instead of an ASSERT. @@ -103,7 +103,7 @@ static const WTF::String toString(ZigString str) return !isTaggedUTF16Ptr(str.ptr) ? WTF::String(WTF::StringImpl::createWithoutCopying({ untag(str.ptr), str.len })) : WTF::String(WTF::StringImpl::createWithoutCopying( - { reinterpret_cast(untag(str.ptr)), str.len })); + { reinterpret_cast(untag(str.ptr)), str.len })); } static WTF::AtomString toAtomString(ZigString str) @@ -112,7 +112,7 @@ static WTF::AtomString toAtomString(ZigString str) if (!isTaggedUTF16Ptr(str.ptr)) { return makeAtomString(untag(str.ptr), str.len); } else { - return makeAtomString(reinterpret_cast(untag(str.ptr)), str.len); + return makeAtomString(reinterpret_cast(untag(str.ptr)), str.len); } } @@ -133,7 +133,7 @@ static const WTF::String toString(ZigString str, StringPointer ptr) return !isTaggedUTF16Ptr(str.ptr) ? WTF::String(WTF::StringImpl::createWithoutCopying({ &untag(str.ptr)[ptr.off], ptr.len })) : WTF::String(WTF::StringImpl::createWithoutCopying( - { &reinterpret_cast(untag(str.ptr))[ptr.off], ptr.len })); + { &reinterpret_cast(untag(str.ptr))[ptr.off], ptr.len })); } static const WTF::String toStringCopy(ZigString str, StringPointer ptr) @@ -153,7 +153,7 @@ static const WTF::String toStringCopy(ZigString str, StringPointer ptr) return !isTaggedUTF16Ptr(str.ptr) ? WTF::String(WTF::StringImpl::create(std::span { &untag(str.ptr)[ptr.off], ptr.len })) : WTF::String(WTF::StringImpl::create( - std::span { &reinterpret_cast(untag(str.ptr))[ptr.off], ptr.len })); + std::span { &reinterpret_cast(untag(str.ptr))[ptr.off], ptr.len })); } static const WTF::String toStringCopy(ZigString str) @@ -166,12 +166,12 @@ static const WTF::String toStringCopy(ZigString str) } if (isTaggedUTF16Ptr(str.ptr)) { - std::span out; + std::span out; auto impl = WTF::StringImpl::tryCreateUninitialized(str.len, out); if (!impl) [[unlikely]] { return WTF::String(); } - memcpy(out.data(), untag(str.ptr), str.len * sizeof(UChar)); + memcpy(out.data(), untag(str.ptr), str.len * sizeof(char16_t)); return WTF::String(WTFMove(impl)); } else { std::span out; @@ -201,7 +201,7 @@ static const ZigString ZigStringCwd = ZigString { &__dot_char, 1 }; static const BunString BunStringCwd = BunString { BunStringTag::StaticZigString, ZigStringCwd }; static const BunString BunStringEmpty = BunString { BunStringTag::Empty, nullptr }; -static const unsigned char* taggedUTF16Ptr(const UChar* ptr) +static const unsigned char* taggedUTF16Ptr(const char16_t* ptr) { return reinterpret_cast(reinterpret_cast(ptr) | (static_cast(1) << 63)); } @@ -307,7 +307,7 @@ static const WTF::String toStringStatic(ZigString str) } if (isTaggedUTF16Ptr(str.ptr)) { - return WTF::String(AtomStringImpl::add(std::span { reinterpret_cast(untag(str.ptr)), str.len })); + return WTF::String(AtomStringImpl::add(std::span { reinterpret_cast(untag(str.ptr)), str.len })); } auto* untagged = untag(str.ptr); diff --git a/src/bun.js/bindings/napi.cpp b/src/bun.js/bindings/napi.cpp index 57345c474d..26e41ac9cd 100644 --- a/src/bun.js/bindings/napi.cpp +++ b/src/bun.js/bindings/napi.cpp @@ -1398,7 +1398,7 @@ node_api_create_external_string_utf16(napi_env env, // WTF::ExternalStringImpl does not allow creating empty strings, so we have this limitation for now. NAPI_RETURN_EARLY_IF_FALSE(env, length > 0, napi_invalid_arg); - Ref impl = WTF::ExternalStringImpl::create({ reinterpret_cast(str), static_cast(length) }, finalize_hint, [finalize_callback, env](void* hint, void* str, unsigned length) { + Ref impl = WTF::ExternalStringImpl::create({ reinterpret_cast(str), static_cast(length) }, finalize_hint, [finalize_callback, env](void* hint, void* str, unsigned length) { NAPI_LOG("utf16 string finalizer"); env->doFinalizer(finalize_callback, str, hint); }); diff --git a/src/bun.js/bindings/v8/V8String.cpp b/src/bun.js/bindings/v8/V8String.cpp index fc792cc7e4..eca567867c 100644 --- a/src/bun.js/bindings/v8/V8String.cpp +++ b/src/bun.js/bindings/v8/V8String.cpp @@ -154,7 +154,7 @@ bool String::IsExternalOneByte() const } extern "C" size_t TextEncoder__encodeInto8(const LChar* stringPtr, size_t stringLen, void* ptr, size_t len); -extern "C" size_t TextEncoder__encodeInto16(const UChar* stringPtr, size_t stringLen, void* ptr, size_t len); +extern "C" size_t TextEncoder__encodeInto16(const char16_t* stringPtr, size_t stringLen, void* ptr, size_t len); int String::WriteUtf8(Isolate* isolate, char* buffer, int length, int* nchars_ref, int options) const { @@ -175,7 +175,7 @@ int String::WriteUtf8(Isolate* isolate, char* buffer, int length, int* nchars_re } if (read < string.length() && U16_IS_SURROGATE(string[read]) && written + 3 <= length) { // encode unpaired surrogate - UChar surrogate = string[read]; + char16_t surrogate = string[read]; buffer[written + 0] = 0xe0 | (surrogate >> 12); buffer[written + 1] = 0x80 | ((surrogate >> 6) & 0x3f); buffer[written + 2] = 0x80 | (surrogate & 0x3f); diff --git a/src/bun.js/bindings/webcore/HTTPHeaderField.cpp b/src/bun.js/bindings/webcore/HTTPHeaderField.cpp index 189d1c3794..26d5b080df 100644 --- a/src/bun.js/bindings/webcore/HTTPHeaderField.cpp +++ b/src/bun.js/bindings/webcore/HTTPHeaderField.cpp @@ -30,11 +30,11 @@ namespace WebCore { namespace RFC7230 { -bool isTokenCharacter(UChar c) +bool isTokenCharacter(char16_t c) { return c < 0x80 && isTokenCharacter(static_cast(c)); } -bool isDelimiter(UChar c) +bool isDelimiter(char16_t c) { return c < 0x80 && isDelimiter(static_cast(c)); } @@ -59,28 +59,28 @@ bool isDelimiter(LChar c) || c == '}' || c == '"'; } -static bool isVisibleCharacter(UChar c) +static bool isVisibleCharacter(char16_t c) { return isTokenCharacter(c) || isDelimiter(c); } -bool isWhitespace(UChar c) +bool isWhitespace(char16_t c) { return c == ' ' || c == '\t'; } template -static bool isInRange(UChar c) +static bool isInRange(char16_t c) { return c >= min && c <= max; } -static bool isOBSText(UChar c) +static bool isOBSText(char16_t c) { return isInRange<0x80, 0xFF>(c); } -static bool isQuotedTextCharacter(UChar c) +static bool isQuotedTextCharacter(char16_t c) { return isWhitespace(c) || c == 0x21 @@ -89,14 +89,14 @@ static bool isQuotedTextCharacter(UChar c) || isOBSText(c); } -bool isQuotedPairSecondOctet(UChar c) +bool isQuotedPairSecondOctet(char16_t c) { return isWhitespace(c) || isVisibleCharacter(c) || isOBSText(c); } -bool isCommentText(UChar c) +bool isCommentText(char16_t c) { return isWhitespace(c) || isInRange<0x21, 0x27>(c) @@ -129,7 +129,7 @@ static bool isValidValue(StringView value) bool hadNonWhitespace = false; for (size_t i = 0; i < value.length(); ++i) { - UChar c = value[i]; + char16_t c = value[i]; switch (state) { case State::OptionalWhitespace: if (isWhitespace(c)) @@ -213,8 +213,8 @@ static bool isValidValue(StringView value) std::optional HTTPHeaderField::create(String&& unparsedName, String&& unparsedValue) { - auto trimmedName = StringView(unparsedName).trim(isTabOrSpace); - auto trimmedValue = StringView(unparsedValue).trim(isTabOrSpace); + auto trimmedName = StringView(unparsedName).trim(isTabOrSpace); + auto trimmedValue = StringView(unparsedValue).trim(isTabOrSpace); if (!RFC7230::isValidName(trimmedName) || !RFC7230::isValidValue(trimmedValue)) return std::nullopt; diff --git a/src/bun.js/bindings/webcore/HTTPHeaderField.h b/src/bun.js/bindings/webcore/HTTPHeaderField.h index 37a3624711..30f94fc67b 100644 --- a/src/bun.js/bindings/webcore/HTTPHeaderField.h +++ b/src/bun.js/bindings/webcore/HTTPHeaderField.h @@ -73,13 +73,13 @@ std::optional HTTPHeaderField::decode(Decoder& decoder) } namespace RFC7230 { -bool isTokenCharacter(UChar); -bool isWhitespace(UChar); +bool isTokenCharacter(char16_t); +bool isWhitespace(char16_t); bool isTokenCharacter(LChar); bool isWhitespace(LChar); -bool isCommentText(UChar); -bool isQuotedPairSecondOctet(UChar); -bool isDelimiter(UChar); +bool isCommentText(char16_t); +bool isQuotedPairSecondOctet(char16_t); +bool isDelimiter(char16_t); } // namespace RFC7230 } // namespace WebCore diff --git a/src/bun.js/bindings/webcore/HTTPHeaderNames.cpp b/src/bun.js/bindings/webcore/HTTPHeaderNames.cpp index 8b36ed87cb..428d1a6fb4 100644 --- a/src/bun.js/bindings/webcore/HTTPHeaderNames.cpp +++ b/src/bun.js/bindings/webcore/HTTPHeaderNames.cpp @@ -670,7 +670,7 @@ bool findHTTPHeaderName(const StringView stringView, HTTPHeaderName& headerName) LChar characters[maxHTTPHeaderNameLength]; const auto span = stringView.span16(); for (unsigned i = 0; i < length; ++i) { - UChar character = span.data()[i]; + char16_t character = span.data()[i]; if (!isASCII(character)) return false; diff --git a/src/bun.js/bindings/webcore/HTTPParsers.cpp b/src/bun.js/bindings/webcore/HTTPParsers.cpp index 6ea74c3bb3..c973a531bb 100644 --- a/src/bun.js/bindings/webcore/HTTPParsers.cpp +++ b/src/bun.js/bindings/webcore/HTTPParsers.cpp @@ -47,7 +47,7 @@ namespace WebCore { // True if characters which satisfy the predicate are present, incrementing // "pos" to the next character which does not satisfy the predicate. // Note: might return pos == str.length(). -static inline bool skipWhile(const String& str, unsigned& pos, const Function& predicate) +static inline bool skipWhile(const String& str, unsigned& pos, const Function& predicate) { const unsigned start = pos; const unsigned len = str.length(); @@ -60,7 +60,7 @@ static inline bool skipWhile(const String& str, unsigned& pos, const Function); + skipWhile(str, pos, isTabOrSpace); return pos < str.length(); } @@ -109,7 +109,7 @@ static inline bool skipValue(const String& str, unsigned& pos) bool isValidReasonPhrase(const String& value) { for (unsigned i = 0; i < value.length(); ++i) { - UChar c = value[i]; + char16_t c = value[i]; if (c == 0x7F || !isLatin1(c) || (c < 0x20 && c != '\t')) return false; } @@ -121,7 +121,7 @@ bool isValidHTTPHeaderValue(const StringView& value) { auto length = value.length(); if (length == 0) return true; - UChar c = value[0]; + char16_t c = value[0]; if (isTabOrSpace(c)) return false; c = value[length - 1]; @@ -152,7 +152,7 @@ bool isValidHTTPHeaderValue(const StringView& value) bool isValidAcceptHeaderValue(const StringView& value) { for (unsigned i = 0; i < value.length(); ++i) { - UChar c = value[i]; + char16_t c = value[i]; // First check for alphanumeric for performance reasons then allowlist four delimiter characters. if (isASCIIAlphanumeric(c) || c == ',' || c == '/' || c == ';' || c == '=') @@ -172,7 +172,7 @@ bool isValidAcceptHeaderValue(const StringView& value) static bool containsCORSUnsafeRequestHeaderBytes(const String& value) { for (unsigned i = 0; i < value.length(); ++i) { - UChar c = value[i]; + char16_t c = value[i]; // https://fetch.spec.whatwg.org/#cors-unsafe-request-header-byte if ((c < 0x20 && c != '\t') || (c == '"' || c == '(' || c == ')' || c == ':' || c == '<' || c == '>' || c == '?' || c == '@' || c == '[' || c == '\\' || c == ']' || c == 0x7B || c == '{' || c == '}' || c == 0x7F)) return true; @@ -186,7 +186,7 @@ static bool containsCORSUnsafeRequestHeaderBytes(const String& value) bool isValidLanguageHeaderValue(const StringView& value) { for (unsigned i = 0; i < value.length(); ++i) { - UChar c = value[i]; + char16_t c = value[i]; if (isASCIIAlphanumeric(c) || c == ' ' || c == '*' || c == ',' || c == '-' || c == '.' || c == ';' || c == '=') continue; return false; @@ -210,7 +210,7 @@ bool isValidHTTPToken(const StringView& value) return true; } - for (UChar c : value.codeUnits()) { + for (char16_t c : value.codeUnits()) { if (!RFC7230::isTokenCharacter(c)) return false; } @@ -220,7 +220,7 @@ bool isValidHTTPToken(const StringView& value) #if USE(GLIB) // True if the character at the given position satisifies a predicate, incrementing "pos" by one. // Note: Might return pos == str.length() -static inline bool skipCharacter(const String& value, unsigned& pos, Function&& predicate) +static inline bool skipCharacter(const String& value, unsigned& pos, Function&& predicate) { if (pos < value.length() && predicate(value[pos])) { ++pos; @@ -231,9 +231,9 @@ static inline bool skipCharacter(const String& value, unsigned& pos, Function); + auto key = keyValuePair.left(valueStartPos).trim(isUnicodeCompatibleASCIIWhitespace); if (key.isEmpty() || key != "filename"_s) continue; - auto value = keyValuePair.substring(valueStartPos + 1).trim(isUnicodeCompatibleASCIIWhitespace); + auto value = keyValuePair.substring(valueStartPos + 1).trim(isUnicodeCompatibleASCIIWhitespace); // Remove quotes if there are any if (value.length() > 1 && value[0] == '\"') @@ -381,7 +381,7 @@ String extractMIMETypeFromMediaType(const String& mediaType) unsigned length = mediaType.length(); for (; position < length; ++position) { - UChar c = mediaType[position]; + char16_t c = mediaType[position]; if (!isTabOrSpace(c)) break; } @@ -393,7 +393,7 @@ String extractMIMETypeFromMediaType(const String& mediaType) unsigned typeEnd = position; for (; position < length; ++position) { - UChar c = mediaType[position]; + char16_t c = mediaType[position]; // While RFC 2616 does not allow it, other browsers allow multiple values in the HTTP media // type header field, Content-Type. In such cases, the media type string passed here may contain @@ -551,7 +551,7 @@ XSSProtectionDisposition parseXSSProtectionHeader(const String& header, String& ContentTypeOptionsDisposition parseContentTypeOptionsHeader(StringView header) { StringView leftToken = header.left(header.find(',')); - if (equalLettersIgnoringASCIICase(leftToken.trim(isASCIIWhitespaceWithoutFF), "nosniff"_s)) + if (equalLettersIgnoringASCIICase(leftToken.trim(isASCIIWhitespaceWithoutFF), "nosniff"_s)) return ContentTypeOptionsDisposition::Nosniff; return ContentTypeOptionsDisposition::None; } @@ -579,7 +579,7 @@ XFrameOptionsDisposition parseXFrameOptionsHeader(StringView header) return result; for (auto currentHeader : header.splitAllowingEmptyEntries(',')) { - currentHeader = currentHeader.trim(isUnicodeCompatibleASCIIWhitespace); + currentHeader = currentHeader.trim(isUnicodeCompatibleASCIIWhitespace); XFrameOptionsDisposition currentValue = XFrameOptionsDisposition::None; if (equalLettersIgnoringASCIICase(currentHeader, "deny"_s)) currentValue = XFrameOptionsDisposition::Deny; @@ -610,7 +610,7 @@ XFrameOptionsDisposition parseXFrameOptionsHeader(StringView header) // return result; // for (auto value : StringView(headerValue).split(',')) { -// auto trimmedValue = value.trim(isASCIIWhitespaceWithoutFF); +// auto trimmedValue = value.trim(isASCIIWhitespaceWithoutFF); // if (trimmedValue == "\"cache\""_s) // result.add(ClearSiteDataValue::Cache); // else if (trimmedValue == "\"cookies\""_s) @@ -632,7 +632,7 @@ bool parseRange(StringView range, RangeAllowWhitespace allowWhitespace, long lon rangeStart = rangeEnd = -1; // Only 0x20 and 0x09 matter as newlines are already gone by the time we parse a header value. - if (allowWhitespace == RangeAllowWhitespace::No && range.find(isTabOrSpace) != notFound) + if (allowWhitespace == RangeAllowWhitespace::No && range.find(isTabOrSpace) != notFound) return false; // The "bytes" unit identifier should be present. @@ -640,7 +640,7 @@ bool parseRange(StringView range, RangeAllowWhitespace allowWhitespace, long lon if (!startsWithLettersIgnoringASCIICase(range, "bytes"_s)) return false; - auto byteRange = range.substring(bytesLength).trim(isASCIIWhitespaceWithoutFF); + auto byteRange = range.substring(bytesLength).trim(isASCIIWhitespaceWithoutFF); if (!byteRange.startsWith('=')) return false; @@ -970,7 +970,7 @@ bool isSafeMethod(const String& method) CrossOriginResourcePolicy parseCrossOriginResourcePolicyHeader(StringView header) { - auto trimmedHeader = header.trim(isASCIIWhitespaceWithoutFF); + auto trimmedHeader = header.trim(isASCIIWhitespaceWithoutFF); if (trimmedHeader.isEmpty()) return CrossOriginResourcePolicy::None; diff --git a/src/bun.js/bindings/webcore/HTTPParsers.h b/src/bun.js/bindings/webcore/HTTPParsers.h index a128ee94e2..b12b1b284b 100644 --- a/src/bun.js/bindings/webcore/HTTPParsers.h +++ b/src/bun.js/bindings/webcore/HTTPParsers.h @@ -118,7 +118,7 @@ WEBCORE_EXPORT CrossOriginResourcePolicy parseCrossOriginResourcePolicyHeader(St // -1 could be set to one of the return parameters to indicate the value is not specified. WEBCORE_EXPORT bool parseRange(StringView, RangeAllowWhitespace, long long& rangeStart, long long& rangeEnd); -inline bool isHTTPSpace(UChar character) +inline bool isHTTPSpace(char16_t character) { return character <= ' ' && (character == ' ' || character == '\n' || character == '\t' || character == '\r'); } diff --git a/src/bun.js/bindings/webcore/HeaderFieldTokenizer.cpp b/src/bun.js/bindings/webcore/HeaderFieldTokenizer.cpp index 29eae31ad3..c0134438fd 100644 --- a/src/bun.js/bindings/webcore/HeaderFieldTokenizer.cpp +++ b/src/bun.js/bindings/webcore/HeaderFieldTokenizer.cpp @@ -38,7 +38,7 @@ HeaderFieldTokenizer::HeaderFieldTokenizer(const String& headerField) skipSpaces(); } -bool HeaderFieldTokenizer::consume(UChar c) +bool HeaderFieldTokenizer::consume(char16_t c) { ASSERT(!isTabOrSpace(c)); @@ -106,7 +106,7 @@ void HeaderFieldTokenizer::skipSpaces() ++m_index; } -void HeaderFieldTokenizer::consumeBeforeAnyCharMatch(const Vector& chars) +void HeaderFieldTokenizer::consumeBeforeAnyCharMatch(const Vector& chars) { ASSERT(chars.size() > 0U && chars.size() < 3U); diff --git a/src/bun.js/bindings/webcore/HeaderFieldTokenizer.h b/src/bun.js/bindings/webcore/HeaderFieldTokenizer.h index fe29f409ff..f05049c878 100644 --- a/src/bun.js/bindings/webcore/HeaderFieldTokenizer.h +++ b/src/bun.js/bindings/webcore/HeaderFieldTokenizer.h @@ -41,7 +41,7 @@ public: // string from the |header_field| input. Return |true| on success. Return // |false| if the separator character, the token or the quoted string is // missing or invalid. - bool consume(UChar); + bool consume(char16_t); String consumeToken(); String consumeTokenOrQuotedString(); @@ -49,7 +49,7 @@ public: // the Vector parameter are found. // Because we potentially have to iterate through the entire Vector for each // character of the base string, the Vector should be small (< 3 members). - void consumeBeforeAnyCharMatch(const Vector&); + void consumeBeforeAnyCharMatch(const Vector&); bool isConsumed() const { return m_index >= m_input.length(); } diff --git a/src/bun.js/bindings/webcore/JSMIMEParams.cpp b/src/bun.js/bindings/webcore/JSMIMEParams.cpp index 562589a711..f368a9145b 100644 --- a/src/bun.js/bindings/webcore/JSMIMEParams.cpp +++ b/src/bun.js/bindings/webcore/JSMIMEParams.cpp @@ -60,7 +60,7 @@ static int findFirstInvalidHTTPTokenChar(const StringView& view) // Checks if a character is valid within an HTTP quoted string value (excluding DQUOTE and backslash). // Equivalent to /[^\t\u0020-\u007E\u0080-\u00FF]/, but we handle quotes/backslash separately. -static inline bool isHTTPQuotedStringChar(UChar c) +static inline bool isHTTPQuotedStringChar(char16_t c) { return c == 0x09 || (c >= 0x20 && c <= 0x7E) || (c >= 0x80 && c <= 0xFF); } @@ -101,7 +101,7 @@ static size_t findEndBeginningWhitespace(const StringView& view) } else { const auto span = view.span16(); for (size_t i = 0; i < span.size(); ++i) { - UChar c = span[i]; + char16_t c = span[i]; if (c != '\t' && c != ' ' && c != '\r' && c != '\n') { return i; } @@ -125,7 +125,7 @@ static size_t findStartEndingWhitespace(const StringView& view) } else { const auto span = view.span16(); for (size_t i = span.size(); i > 0; --i) { - UChar c = span[i - 1]; + char16_t c = span[i - 1]; if (c != '\t' && c != ' ' && c != '\r' && c != '\n') { return i; } @@ -154,7 +154,7 @@ static String removeBackslashes(const StringView& view) } else { auto span = view.span16(); for (size_t i = 0; i < span.size(); ++i) { - UChar c = span[i]; + char16_t c = span[i]; if (c == '\\' && i + 1 < span.size()) { builder.append(span[++i]); } else { @@ -167,7 +167,7 @@ static String removeBackslashes(const StringView& view) static void escapeQuoteOrBackslash(const StringView& view, StringBuilder& builder) { - if (view.find([](UChar c) { return c == '"' || c == '\\'; }) == notFound) { + if (view.find([](char16_t c) { return c == '"' || c == '\\'; }) == notFound) { builder.append(view); return; } @@ -182,7 +182,7 @@ static void escapeQuoteOrBackslash(const StringView& view, StringBuilder& builde } } else { auto span = view.span16(); - for (UChar c : span) { + for (char16_t c : span) { if (c == '"' || c == '\\') { builder.append('\\'); } @@ -227,7 +227,7 @@ bool parseMIMEParamsString(JSGlobalObject* globalObject, JSMap* map, StringView // Find the end of the parameter name (next ';' or '=') size_t nameEnd = position; while (nameEnd < length) { - UChar c = input[nameEnd]; + char16_t c = input[nameEnd]; if (c == ';' || c == '=') break; nameEnd++; } @@ -249,7 +249,7 @@ bool parseMIMEParamsString(JSGlobalObject* globalObject, JSMap* map, StringView size_t valueStart = position; bool escaped = false; while (position < length) { - UChar c = input[position]; + char16_t c = input[position]; if (escaped) { escaped = false; } else if (c == '\\') { diff --git a/src/bun.js/bindings/webcore/JSMIMEType.cpp b/src/bun.js/bindings/webcore/JSMIMEType.cpp index 7e01208479..106cf85fee 100644 --- a/src/bun.js/bindings/webcore/JSMIMEType.cpp +++ b/src/bun.js/bindings/webcore/JSMIMEType.cpp @@ -63,13 +63,13 @@ static int findFirstInvalidHTTPTokenChar(const StringView& view) // Checks if a character is valid within an HTTP quoted string value (excluding DQUOTE and backslash). // Equivalent to /[^\t\u0020-\u007E\u0080-\u00FF]/, but we handle quotes/backslash separately. -static inline bool isHTTPQuotedStringChar(UChar c) +static inline bool isHTTPQuotedStringChar(char16_t c) { return c == 0x09 || (c >= 0x20 && c <= 0x7E) || (c >= 0x80 && c <= 0xFF); } // Checks if a character is NOT a valid HTTP quoted string code point. -static inline bool isNotHTTPQuotedStringChar(UChar c) +static inline bool isNotHTTPQuotedStringChar(char16_t c) { return !isHTTPQuotedStringChar(c); } @@ -110,7 +110,7 @@ static size_t findEndBeginningWhitespace(const StringView& view) } else { const auto span = view.span16(); for (size_t i = 0; i < span.size(); ++i) { - UChar c = span[i]; + char16_t c = span[i]; if (c != '\t' && c != ' ' && c != '\r' && c != '\n') { return i; } @@ -134,7 +134,7 @@ static size_t findStartEndingWhitespace(const StringView& view) } else { const auto span = view.span16(); for (size_t i = span.size(); i > 0; --i) { - UChar c = span[i - 1]; + char16_t c = span[i - 1]; if (c != '\t' && c != ' ' && c != '\r' && c != '\n') { return i; } @@ -163,7 +163,7 @@ static String removeBackslashes(const StringView& view) } else { auto span = view.span16(); for (size_t i = 0; i < span.size(); ++i) { - UChar c = span[i]; + char16_t c = span[i]; if (c == '\\' && i + 1 < span.size()) { builder.append(span[++i]); } else { @@ -176,7 +176,7 @@ static String removeBackslashes(const StringView& view) static String escapeQuoteOrBackslash(const StringView& view) { - if (view.find([](UChar c) { return c == '"' || c == '\\'; }) == notFound) { + if (view.find([](char16_t c) { return c == '"' || c == '\\'; }) == notFound) { return view.toString(); } @@ -191,7 +191,7 @@ static String escapeQuoteOrBackslash(const StringView& view) } } else { auto span = view.span16(); - for (UChar c : span) { + for (char16_t c : span) { if (c == '"' || c == '\\') { builder.append('\\'); } diff --git a/src/bun.js/bindings/webcore/JSTextEncoder.cpp b/src/bun.js/bindings/webcore/JSTextEncoder.cpp index aab8702b6c..4e61872dc9 100644 --- a/src/bun.js/bindings/webcore/JSTextEncoder.cpp +++ b/src/bun.js/bindings/webcore/JSTextEncoder.cpp @@ -69,9 +69,9 @@ using namespace JSC; using namespace JSC::DOMJIT; extern "C" JSC::EncodedJSValue TextEncoder__encode8(JSC::JSGlobalObject* global, const LChar* stringPtr, size_t stringLen); -extern "C" JSC::EncodedJSValue TextEncoder__encode16(JSC::JSGlobalObject* global, const UChar* stringPtr, size_t stringLen); +extern "C" JSC::EncodedJSValue TextEncoder__encode16(JSC::JSGlobalObject* global, const char16_t* stringPtr, size_t stringLen); extern "C" size_t TextEncoder__encodeInto8(const LChar* stringPtr, size_t stringLen, void* ptr, size_t len); -extern "C" size_t TextEncoder__encodeInto16(const UChar* stringPtr, size_t stringLen, void* ptr, size_t len); +extern "C" size_t TextEncoder__encodeInto16(const char16_t* stringPtr, size_t stringLen, void* ptr, size_t len); extern "C" JSC::EncodedJSValue TextEncoder__encodeRopeString(JSC::JSGlobalObject* lexicalGlobalObject, JSC::JSString* str); // extern "C" { diff --git a/src/bun.js/bindings/webcore/RFC7230.cpp b/src/bun.js/bindings/webcore/RFC7230.cpp index b447a2f180..2c5b3fa7de 100644 --- a/src/bun.js/bindings/webcore/RFC7230.cpp +++ b/src/bun.js/bindings/webcore/RFC7230.cpp @@ -31,7 +31,7 @@ namespace RFC7230 { -bool isTokenCharacter(UChar c) +bool isTokenCharacter(char16_t c) { return isASCIIAlpha(c) || isASCIIDigit(c) || c == '!' || c == '#' || c == '$' @@ -41,7 +41,7 @@ bool isTokenCharacter(UChar c) || c == '`' || c == '|' || c == '~'; } -bool isDelimiter(UChar c) +bool isDelimiter(char16_t c) { return c == '(' || c == ')' || c == ',' || c == '/' || c == ':' || c == ';' @@ -51,23 +51,23 @@ bool isDelimiter(UChar c) || c == '}' || c == '"'; } -static bool isVisibleCharacter(UChar c) +static bool isVisibleCharacter(char16_t c) { return isTokenCharacter(c) || isDelimiter(c); } template -static bool isInRange(UChar c) +static bool isInRange(char16_t c) { return c >= min && c <= max; } -static bool isOBSText(UChar c) +static bool isOBSText(char16_t c) { return isInRange<0x80, 0xFF>(c); } -static bool isQuotedTextCharacter(UChar c) +static bool isQuotedTextCharacter(char16_t c) { return isTabOrSpace(c) || c == 0x21 @@ -76,14 +76,14 @@ static bool isQuotedTextCharacter(UChar c) || isOBSText(c); } -bool isQuotedPairSecondOctet(UChar c) +bool isQuotedPairSecondOctet(char16_t c) { return isTabOrSpace(c) || isVisibleCharacter(c) || isOBSText(c); } -bool isCommentText(UChar c) +bool isCommentText(char16_t c) { return isTabOrSpace(c) || isInRange<0x21, 0x27>(c) @@ -116,7 +116,7 @@ bool isValidValue(StringView value) bool hadNonWhitespace = false; for (size_t i = 0; i < value.length(); ++i) { - UChar c = value[i]; + char16_t c = value[i]; switch (state) { case State::OptionalWhitespace: if (isTabOrSpace(c)) diff --git a/src/bun.js/bindings/webcore/RFC7230.h b/src/bun.js/bindings/webcore/RFC7230.h index 47ecff033c..213a0711e6 100644 --- a/src/bun.js/bindings/webcore/RFC7230.h +++ b/src/bun.js/bindings/webcore/RFC7230.h @@ -30,10 +30,10 @@ namespace RFC7230 { -bool isTokenCharacter(UChar); -bool isCommentText(UChar); -bool isQuotedPairSecondOctet(UChar); -bool isDelimiter(UChar); +bool isTokenCharacter(char16_t); +bool isCommentText(char16_t); +bool isQuotedPairSecondOctet(char16_t); +bool isDelimiter(char16_t); bool isValidName(StringView); bool isValidValue(StringView); diff --git a/src/bun.js/bindings/webcore/SerializedScriptValue.cpp b/src/bun.js/bindings/webcore/SerializedScriptValue.cpp index 02d23e529d..ad0fa35bc1 100644 --- a/src/bun.js/bindings/webcore/SerializedScriptValue.cpp +++ b/src/bun.js/bindings/webcore/SerializedScriptValue.cpp @@ -2187,7 +2187,7 @@ private: unsigned length = str.length(); // Guard against overflow - if (length > (std::numeric_limits::max() - sizeof(uint32_t)) / sizeof(UChar)) { + if (length > (std::numeric_limits::max() - sizeof(uint32_t)) / sizeof(char16_t)) { fail(); return; } @@ -3338,7 +3338,7 @@ private: static bool readString(const uint8_t*& ptr, const uint8_t* end, String& str, unsigned length, bool is8Bit) { - if (length >= std::numeric_limits::max() / sizeof(UChar)) + if (length >= std::numeric_limits::max() / sizeof(char16_t)) return false; if (is8Bit) { @@ -3349,15 +3349,15 @@ private: return true; } - unsigned size = length * sizeof(UChar); + unsigned size = length * sizeof(char16_t); if ((end - ptr) < static_cast(size)) return false; #if ASSUME_LITTLE_ENDIAN - str = String({ reinterpret_cast(ptr), length }); - ptr += length * sizeof(UChar); + str = String({ reinterpret_cast(ptr), length }); + ptr += length * sizeof(char16_t); #else - std::span characters; + std::span characters; str = String::createUninitialized(length, characters); for (unsigned i = 0; i < length; ++i) { uint16_t c; @@ -3384,7 +3384,7 @@ private: static bool readIdentifier(JSC::VM& vm, const uint8_t*& ptr, const uint8_t* end, Identifier& str, unsigned length, bool is8Bit) { - if (length >= std::numeric_limits::max() / sizeof(UChar)) + if (length >= std::numeric_limits::max() / sizeof(char16_t)) return false; if (is8Bit) { @@ -3395,15 +3395,15 @@ private: return true; } - unsigned size = length * sizeof(UChar); + unsigned size = length * sizeof(char16_t); if ((end - ptr) < static_cast(size)) return false; #if ASSUME_LITTLE_ENDIAN - str = Identifier::fromString(vm, { reinterpret_cast(ptr), length }); - ptr += length * sizeof(UChar); + str = Identifier::fromString(vm, { reinterpret_cast(ptr), length }); + ptr += length * sizeof(char16_t); #else - std::span characters; + std::span characters; str = String::createUninitialized(length, characters); for (unsigned i = 0; i < length; ++i) { uint16_t c; diff --git a/src/bun.js/bindings/webcore/WebSocket.cpp b/src/bun.js/bindings/webcore/WebSocket.cpp index 528fdfee0a..cb30ad73d5 100644 --- a/src/bun.js/bindings/webcore/WebSocket.cpp +++ b/src/bun.js/bindings/webcore/WebSocket.cpp @@ -96,12 +96,12 @@ static size_t getFramingOverhead(size_t payloadSize) const size_t maxReasonSizeInBytes = 123; -static inline bool isValidProtocolCharacter(UChar character) +static inline bool isValidProtocolCharacter(char16_t character) { // Hybi-10 says "(Subprotocol string must consist of) characters in the range U+0021 to U+007E not including // separator characters as defined in [RFC2616]." - const UChar minimumProtocolCharacter = '!'; // U+0021. - const UChar maximumProtocolCharacter = '~'; // U+007E. + const char16_t minimumProtocolCharacter = '!'; // U+0021. + const char16_t maximumProtocolCharacter = '~'; // U+007E. return character >= minimumProtocolCharacter && character <= maximumProtocolCharacter && character != '"' && character != '(' && character != ')' && character != ',' && character != '/' && !(character >= ':' && character <= '@') // U+003A - U+0040 (':', ';', '<', '=', '>', '?', '@'). diff --git a/src/bun.js/modules/BunJSCModule.h b/src/bun.js/modules/BunJSCModule.h index de0e5750b9..9647d14fb2 100644 --- a/src/bun.js/modules/BunJSCModule.h +++ b/src/bun.js/modules/BunJSCModule.h @@ -618,7 +618,7 @@ JSC_DEFINE_HOST_FUNCTION(functionSetTimeZone, (JSGlobalObject * globalObject, Ca return {}; } vm.dateCache.resetIfNecessarySlow(); - WTF::Vector buffer; + WTF::Vector buffer; WTF::getTimeZoneOverride(buffer); WTF::String timeZoneString(buffer.span()); return JSValue::encode(jsString(vm, timeZoneString));