summaryrefslogtreecommitdiffstats
path: root/JavaScriptCore/runtime/UStringImpl.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'JavaScriptCore/runtime/UStringImpl.cpp')
-rw-r--r--JavaScriptCore/runtime/UStringImpl.cpp39
1 files changed, 38 insertions, 1 deletions
diff --git a/JavaScriptCore/runtime/UStringImpl.cpp b/JavaScriptCore/runtime/UStringImpl.cpp
index 4b0d1c9..9882007 100644
--- a/JavaScriptCore/runtime/UStringImpl.cpp
+++ b/JavaScriptCore/runtime/UStringImpl.cpp
@@ -34,7 +34,44 @@ using namespace WTF::Unicode;
using namespace std;
namespace JSC {
-
+
+PassRefPtr<UStringImpl> UStringImpl::create(const char* c)
+{
+ ASSERT(c);
+
+ if (!c[0])
+ return &UStringImpl::empty();
+
+ size_t length = strlen(c);
+ UChar* d;
+ PassRefPtr<UStringImpl> result = UStringImpl::createUninitialized(length, d);
+ for (size_t i = 0; i < length; i++)
+ d[i] = static_cast<unsigned char>(c[i]); // use unsigned char to zero-extend instead of sign-extend
+ return result;
+}
+
+PassRefPtr<UStringImpl> UStringImpl::create(const char* c, int length)
+{
+ ASSERT(c);
+
+ if (!length)
+ return &UStringImpl::empty();
+
+ UChar* d;
+ PassRefPtr<UStringImpl> result = UStringImpl::createUninitialized(length, d);
+ for (int i = 0; i < length; i++)
+ d[i] = static_cast<unsigned char>(c[i]); // use unsigned char to zero-extend instead of sign-extend
+ return result;
+}
+
+PassRefPtr<UStringImpl> UStringImpl::create(const UChar* buffer, int length)
+{
+ UChar* newBuffer;
+ PassRefPtr<UStringImpl> impl = createUninitialized(length, newBuffer);
+ copyChars(newBuffer, buffer, length);
+ return impl;
+}
+
SharedUChar* UStringImpl::baseSharedBuffer()
{
ASSERT((bufferOwnership() == BufferShared)