summaryrefslogtreecommitdiff
path: root/Source/JavaScriptCore/API/OpaqueJSString.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/JavaScriptCore/API/OpaqueJSString.cpp')
-rw-r--r--Source/JavaScriptCore/API/OpaqueJSString.cpp29
1 files changed, 10 insertions, 19 deletions
diff --git a/Source/JavaScriptCore/API/OpaqueJSString.cpp b/Source/JavaScriptCore/API/OpaqueJSString.cpp
index 5cc2e0ab8..07a79ad99 100644
--- a/Source/JavaScriptCore/API/OpaqueJSString.cpp
+++ b/Source/JavaScriptCore/API/OpaqueJSString.cpp
@@ -10,10 +10,10 @@
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
@@ -28,11 +28,13 @@
#include "CallFrame.h"
#include "Identifier.h"
+#include "IdentifierInlines.h"
#include "JSGlobalObject.h"
+#include <wtf/text/StringView.h>
using namespace JSC;
-PassRefPtr<OpaqueJSString> OpaqueJSString::create(const String& string)
+RefPtr<OpaqueJSString> OpaqueJSString::create(const String& string)
{
if (string.isNull())
return nullptr;
@@ -47,7 +49,7 @@ OpaqueJSString::~OpaqueJSString()
if (!characters)
return;
- if (!m_string.is8Bit() && m_string.deprecatedCharacters() == characters)
+ if (!m_string.is8Bit() && m_string.characters16() == characters)
return;
fastFree(characters);
@@ -55,32 +57,26 @@ OpaqueJSString::~OpaqueJSString()
String OpaqueJSString::string() const
{
- if (!this)
- return String();
-
// Return a copy of the wrapped string, because the caller may make it an Identifier.
return m_string.isolatedCopy();
}
Identifier OpaqueJSString::identifier(VM* vm) const
{
- if (!this || m_string.isNull())
+ if (m_string.isNull())
return Identifier();
if (m_string.isEmpty())
return Identifier(Identifier::EmptyIdentifier);
if (m_string.is8Bit())
- return Identifier(vm, m_string.characters8(), m_string.length());
+ return Identifier::fromString(vm, m_string.characters8(), m_string.length());
- return Identifier(vm, m_string.characters16(), m_string.length());
+ return Identifier::fromString(vm, m_string.characters16(), m_string.length());
}
const UChar* OpaqueJSString::characters()
{
- if (!this)
- return nullptr;
-
// m_characters is put in a local here to avoid an extra atomic load.
UChar* characters = m_characters;
if (characters)
@@ -91,12 +87,7 @@ const UChar* OpaqueJSString::characters()
unsigned length = m_string.length();
UChar* newCharacters = static_cast<UChar*>(fastMalloc(length * sizeof(UChar)));
-
- if (m_string.is8Bit()) {
- for (size_t i = 0; i < length; ++i)
- newCharacters[i] = m_string.characters8()[i];
- } else
- memcpy(newCharacters, m_string.characters16(), length * sizeof(UChar));
+ StringView(m_string).getCharactersWithUpconvert(newCharacters);
if (!m_characters.compare_exchange_strong(characters, newCharacters)) {
fastFree(newCharacters);