- JSLock lock;
-
- size_t length = strlen(string);
- Vector< ::UChar, 1024> buffer(length);
- ::UChar* p = buffer.data();
- if (conversionOK != convertUTF8ToUTF16(&string, string + length, &p, p + length))
- return 0;
+ initializeThreading();
+ if (string) {
+ size_t length = strlen(string);
+ Vector<UChar, 1024> buffer(length);
+ UChar* p = buffer.data();
+ bool sourceIsAllASCII;
+ const LChar* stringStart = reinterpret_cast<const LChar*>(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();
+ }
+ }
+
+ return OpaqueJSString::create().leakRef();
+}