X-Git-Url: https://git.saurik.com/apple/javascriptcore.git/blobdiff_plain/9dae56ea45a0f5f8136a5c93d6f3a7f99399ca73..93a3786624b2768d89bfa27e46598dc64e2fb70a:/API/JSStringRef.cpp?ds=inline diff --git a/API/JSStringRef.cpp b/API/JSStringRef.cpp index 8e236e4..812f3d4 100644 --- a/API/JSStringRef.cpp +++ b/API/JSStringRef.cpp @@ -25,6 +25,7 @@ #include "config.h" #include "JSStringRef.h" +#include "JSStringRefPrivate.h" #include "InitializeThreading.h" #include "OpaqueJSString.h" @@ -36,7 +37,7 @@ using namespace WTF::Unicode; JSStringRef JSStringCreateWithCharacters(const JSChar* chars, size_t numChars) { initializeThreading(); - return OpaqueJSString::create(chars, numChars).releaseRef(); + return OpaqueJSString::create(chars, numChars).leakRef(); } JSStringRef JSStringCreateWithUTF8CString(const char* string) @@ -46,12 +47,22 @@ JSStringRef JSStringCreateWithUTF8CString(const char* string) size_t length = strlen(string); Vector buffer(length); UChar* p = buffer.data(); - if (conversionOK == convertUTF8ToUTF16(&string, string + length, &p, p + length)) - return OpaqueJSString::create(buffer.data(), p - buffer.data()).releaseRef(); + bool sourceIsAllASCII; + const LChar* stringStart = reinterpret_cast(string); + if (conversionOK == convertUTF8ToUTF16(&string, string + length, &p, p + length, &sourceIsAllASCII)) { + if (sourceIsAllASCII) + return OpaqueJSString::create(stringStart, length).leakRef(); + return OpaqueJSString::create(buffer.data(), p - buffer.data()).leakRef(); + } } - // Null string. - return OpaqueJSString::create().releaseRef(); + return OpaqueJSString::create().leakRef(); +} + +JSStringRef JSStringCreateWithCharactersNoCopy(const JSChar* chars, size_t numChars) +{ + initializeThreading(); + return OpaqueJSString::create(StringImpl::createWithoutCopying(chars, numChars, WTF::DoesNotHaveTerminatingNullCharacter)).leakRef(); } JSStringRef JSStringRetain(JSStringRef string)