Changeset 130344 in webkit for trunk/Source/JavaScriptCore/API


Ignore:
Timestamp:
Oct 3, 2012, 4:40:28 PM (13 years ago)
Author:
[email protected]
Message:

OpaqueJSString doesn't optimally handle 8 bit strings
https://bugs.webkit.org/show_bug.cgi?id=98300

Reviewed by Geoffrey Garen.

Change OpaqueJSString to store and manage a String instead of a UChar buffer.
The member string is a copy of any string used during creation.

  • API/OpaqueJSString.cpp:

(OpaqueJSString::create):
(OpaqueJSString::identifier):

  • API/OpaqueJSString.h:

(OpaqueJSString::characters):
(OpaqueJSString::length):
(OpaqueJSString::string):
(OpaqueJSString::OpaqueJSString):
(OpaqueJSString):

Location:
trunk/Source/JavaScriptCore/API
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/API/OpaqueJSString.cpp

    r127958 r130344  
    3636{
    3737    if (!string.isNull())
    38         return adoptRef(new OpaqueJSString(string.characters(), string.length()));
    39     return 0;
    40 }
    41 
    42 String OpaqueJSString::string() const
    43 {
    44     if (this && m_characters)
    45         return String(m_characters, m_length);
    46     return String();
     38        return adoptRef(new OpaqueJSString(string));
     39    return adoptRef(new OpaqueJSString());
    4740}
    4841
    4942Identifier OpaqueJSString::identifier(JSGlobalData* globalData) const
    5043{
    51     if (!this || !m_characters)
     44    if (!this || !m_string.length())
    5245        return Identifier(globalData, static_cast<const char*>(0));
    5346
    54     return Identifier(globalData, m_characters, m_length);
     47    return Identifier(globalData, m_string);
    5548}
  • trunk/Source/JavaScriptCore/API/OpaqueJSString.h

    r127958 r130344  
    4949    JS_EXPORT_PRIVATE static PassRefPtr<OpaqueJSString> create(const String&);
    5050
    51     UChar* characters() { return this ? m_characters : 0; }
    52     unsigned length() { return this ? m_length : 0; }
     51    const UChar* characters() { return !!this ? m_string.characters() : 0; }
     52    unsigned length() { return !!this ? m_string.length() : 0; }
    5353
    54     String string() const;
     54    String string() const { return !!this ? m_string : String(); };
    5555    JSC::Identifier identifier(JSC::JSGlobalData*) const;
    5656
     
    5959
    6060    OpaqueJSString()
    61         : m_characters(0)
    62         , m_length(0)
    6361    {
     62        m_string = emptyString();
     63    }
     64
     65    OpaqueJSString(const String& string)
     66    {
     67        // Make a copy of the source string.
     68        if (string.is8Bit())
     69            m_string = String(string.characters8(), string.length());
     70        else
     71            m_string = String(string.characters16(), string.length());
    6472    }
    6573
    6674    OpaqueJSString(const UChar* characters, unsigned length)
    67         : m_length(length)
    6875    {
    69         m_characters = new UChar[length];
    70         memcpy(m_characters, characters, length * sizeof(UChar));
     76        m_string = String(characters, length);
    7177    }
    7278
    73     ~OpaqueJSString()
    74     {
    75         delete[] m_characters;
    76     }
    77 
    78     UChar* m_characters;
    79     unsigned m_length;
     79    String m_string;
    8080};
    8181
Note: See TracChangeset for help on using the changeset viewer.