#include "config.h"
#include "JSStringRef.h"
+#include "JSStringRefPrivate.h"
#include "InitializeThreading.h"
#include "OpaqueJSString.h"
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)
size_t length = strlen(string);
Vector<UChar, 1024> 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<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();
+ }
}
- // 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)