]> git.saurik.com Git - apple/javascriptcore.git/blobdiff - API/JSStringRef.cpp
JavaScriptCore-1218.tar.gz
[apple/javascriptcore.git] / API / JSStringRef.cpp
index 8e236e45826e2e182ac959529645f303c7650061..812f3d413ca01c3210b24c149ae107245d77280c 100644 (file)
@@ -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<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)