From b2a69a35b8887c233c606e9f2e7ebec35f82a65e Mon Sep 17 00:00:00 2001 From: Jarred Sumner Date: Thu, 3 Feb 2022 01:01:27 -0800 Subject: Slight improvement to non-ascii file path handling --- src/javascript/jsc/bindings/helpers.h | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'src/javascript/jsc/bindings/helpers.h') diff --git a/src/javascript/jsc/bindings/helpers.h b/src/javascript/jsc/bindings/helpers.h index 751ff0f3c..f11aaf064 100644 --- a/src/javascript/jsc/bindings/helpers.h +++ b/src/javascript/jsc/bindings/helpers.h @@ -73,7 +73,8 @@ namespace Zig { static const unsigned char *untag(const unsigned char *ptr) { return reinterpret_cast( ((reinterpret_cast(ptr) & ~(static_cast(1) << 63) & - ~(static_cast(1) << 62)))); + ~(static_cast(1) << 62)) & + ~(static_cast(1) << 61))); } static const JSC::Identifier toIdentifier(ZigString str, JSC::JSGlobalObject *global) { @@ -86,12 +87,18 @@ static bool isTaggedUTF16Ptr(const unsigned char *ptr) { return (reinterpret_cast(ptr) & (static_cast(1) << 63)) != 0; } +// Do we need to upcase the string? +static bool isTaggedUTF8Ptr(const unsigned char *ptr) { + return (reinterpret_cast(ptr) & (static_cast(1) << 61)) != 0; +} + static bool isTaggedExternalPtr(const unsigned char *ptr) { return (reinterpret_cast(ptr) & (static_cast(1) << 62)) != 0; } static const WTF::String toString(ZigString str) { if (str.len == 0 || str.ptr == nullptr) { return WTF::String(); } + if (UNLIKELY(isTaggedUTF8Ptr(str.ptr))) { return WTF::String::fromUTF8(untag(str.ptr), str.len); } return !isTaggedUTF16Ptr(str.ptr) ? WTF::String(WTF::StringImpl::createWithoutCopying(untag(str.ptr), str.len)) @@ -101,6 +108,7 @@ static const WTF::String toString(ZigString str) { static const WTF::String toStringCopy(ZigString str) { if (str.len == 0 || str.ptr == nullptr) { return WTF::String(); } + if (UNLIKELY(isTaggedUTF8Ptr(str.ptr))) { return WTF::String::fromUTF8(untag(str.ptr), str.len); } return !isTaggedUTF16Ptr(str.ptr) ? WTF::String(WTF::StringImpl::create(untag(str.ptr), str.len)) : WTF::String(WTF::StringImpl::create( -- cgit v1.2.3