diff options
Diffstat (limited to 'Source/JavaScriptCore/API')
-rw-r--r-- | Source/JavaScriptCore/API/JSStringRef.cpp | 6 | ||||
-rw-r--r-- | Source/JavaScriptCore/API/JSStringRefCF.cpp | 2 | ||||
-rw-r--r-- | Source/JavaScriptCore/API/OpaqueJSString.h | 12 |
3 files changed, 17 insertions, 3 deletions
diff --git a/Source/JavaScriptCore/API/JSStringRef.cpp b/Source/JavaScriptCore/API/JSStringRef.cpp index ea31da66b..da1a3057a 100644 --- a/Source/JavaScriptCore/API/JSStringRef.cpp +++ b/Source/JavaScriptCore/API/JSStringRef.cpp @@ -46,8 +46,12 @@ JSStringRef JSStringCreateWithUTF8CString(const char* string) size_t length = strlen(string); Vector<UChar, 1024> buffer(length); UChar* p = buffer.data(); - if (conversionOK == convertUTF8ToUTF16(&string, string + length, &p, p + length)) + bool sourceIsAllASCII; + if (conversionOK == convertUTF8ToUTF16(&string, string + length, &p, p + length, &sourceIsAllASCII)) { + if (sourceIsAllASCII) + return OpaqueJSString::create(reinterpret_cast<const LChar*>(string), length).leakRef(); return OpaqueJSString::create(buffer.data(), p - buffer.data()).leakRef(); + } } // Null string. diff --git a/Source/JavaScriptCore/API/JSStringRefCF.cpp b/Source/JavaScriptCore/API/JSStringRefCF.cpp index e87fd838d..69cf3f8c4 100644 --- a/Source/JavaScriptCore/API/JSStringRefCF.cpp +++ b/Source/JavaScriptCore/API/JSStringRefCF.cpp @@ -46,7 +46,7 @@ JSStringRef JSStringCreateWithCFString(CFStringRef string) COMPILE_ASSERT(sizeof(UniChar) == sizeof(UChar), unichar_and_uchar_must_be_same_size); return OpaqueJSString::create(reinterpret_cast<UChar*>(buffer.get()), length).leakRef(); } else { - return OpaqueJSString::create(0, 0).leakRef(); + return OpaqueJSString::create(static_cast<const LChar*>(0), 0).leakRef(); } } diff --git a/Source/JavaScriptCore/API/OpaqueJSString.h b/Source/JavaScriptCore/API/OpaqueJSString.h index 36680388d..0464e8813 100644 --- a/Source/JavaScriptCore/API/OpaqueJSString.h +++ b/Source/JavaScriptCore/API/OpaqueJSString.h @@ -41,6 +41,11 @@ struct OpaqueJSString : public ThreadSafeRefCounted<OpaqueJSString> { return adoptRef(new OpaqueJSString); } + static PassRefPtr<OpaqueJSString> create(const LChar* characters, unsigned length) + { + return adoptRef(new OpaqueJSString(characters, length)); + } + static PassRefPtr<OpaqueJSString> create(const UChar* characters, unsigned length) { return adoptRef(new OpaqueJSString(characters, length)); @@ -51,7 +56,7 @@ struct OpaqueJSString : public ThreadSafeRefCounted<OpaqueJSString> { const UChar* characters() { return !!this ? m_string.characters() : 0; } unsigned length() { return !!this ? m_string.length() : 0; } - String string() const; + JS_EXPORT_PRIVATE String string() const; JSC::Identifier identifier(JSC::JSGlobalData*) const; private: @@ -70,6 +75,11 @@ private: m_string = String(string.characters16(), string.length()); } + OpaqueJSString(const LChar* characters, unsigned length) + { + m_string = String(characters, length); + } + OpaqueJSString(const UChar* characters, unsigned length) { m_string = String(characters, length); |