Skip to content
  • andersca@apple.com's avatar
    Get rid of OpaqueJSString::deprecatedCharacters() · c816d953
    andersca@apple.com authored
    https://bugs.webkit.org/show_bug.cgi?id=127161
    
    Reviewed by Sam Weinig.
    
    Handle OpaqueJSString::m_string being either 8-bit or 16-bit and add extra
    code paths for the 8-bit cases.
    
    Unfortunately, JSStringGetCharactersPtr is still expected to return a 16-bit character pointer.
    Handle this by storing a separate 16-bit string and initializing it on demand when JSStringGetCharactersPtr
    is called. This has the nice side effect of making JSStringGetCharactersPtr thread-safe when it wasn't before.
    (In theory, someone could have a JSStringRef backed by an 8-bit string and call JSStringGetCharactersPtr on it
    causing an unsafe upconversion to a 16-bit string).
    
    * API/JSStringRef.cpp:
    (JSStringGetCharactersPtr):
    Call OpaqueJSString::characters.
    
    (JSStringGetUTF8CString):
    Add a code path that handles 8-bit strings.
    
    (JSStringIsEqual):
    Call OpaqueJSString::equal.
    
    * API/JSStringRefCF.cpp:
    (JSStringCreateWithCFString):
    Reformat the code to use an early return instead of putting most of the code inside the body of an if statement.
    
    (JSStringCopyCFString):
    Create an 8-bit CFStringRef if possible.
    
    * API/OpaqueJSString.cpp:
    (OpaqueJSString::create):
    Use nullptr.
    
    (OpaqueJSString::~OpaqueJSString):
    Free m_characters.
    
    (OpaqueJSString::characters):
    Do the up-conversion and store the result in m_characters.
    
    (OpaqueJSString::equal):
    New helper function.
    
    * API/OpaqueJSString.h:
    (OpaqueJSString::is8Bit):
    New function that returns whether a string is 8-bit or not.
    
    (OpaqueJSString::characters8):
    (OpaqueJSString::characters16):
    Add getters.
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@162185 268f45cc-cd09-0410-ab3c-d52691b4dbfc
    c816d953