]> git.saurik.com Git - apple/javascriptcore.git/blobdiff - API/JSStringRef.cpp
JavaScriptCore-1218.tar.gz
[apple/javascriptcore.git] / API / JSStringRef.cpp
index ea31da66bb940d7edf5639fb21c22ad4bd55c0bd..812f3d413ca01c3210b24c149ae107245d77280c 100644 (file)
@@ -25,6 +25,7 @@
 
 #include "config.h"
 #include "JSStringRef.h"
+#include "JSStringRefPrivate.h"
 
 #include "InitializeThreading.h"
 #include "OpaqueJSString.h"
@@ -46,14 +47,24 @@ 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;
+        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().leakRef();
 }
 
+JSStringRef JSStringCreateWithCharactersNoCopy(const JSChar* chars, size_t numChars)
+{
+    initializeThreading();
+    return OpaqueJSString::create(StringImpl::createWithoutCopying(chars, numChars, WTF::DoesNotHaveTerminatingNullCharacter)).leakRef();
+}
+
 JSStringRef JSStringRetain(JSStringRef string)
 {
     string->ref();