Changeset 33374

Show
Ignore:
Timestamp:
05/13/08 02:46:47 (6 months ago)
Author:
ap@webkit.org
Message:

Reviewed by Geoffrey Garen.

<rdar://problem/4949018> JavaScriptCore API claims to work with UTF8 strings, but only works
with ASCII strings


  • kjs/ustring.h:
  • kjs/ustring.cpp: (KJS::UString::Rep::createFromUTF8): Added. Implementation adapted from JSStringCreateWithUTF8CString().
  • API/JSStringRef.cpp: (JSStringCreateWithUTF8CString):
  • API/JSClassRef.cpp: (OpaqueJSClass::OpaqueJSClass): Use UString::Rep::createFromUTF8().
Location:
trunk/JavaScriptCore
Files:
5 modified

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/API/JSClassRef.cpp

    r33038 r33374  
    4040 
    4141OpaqueJSClass::OpaqueJSClass(const JSClassDefinition* definition, OpaqueJSClass* protoClass)  
    42     // FIXME: <rdar://problem/4949018> 
    43     : className(definition->className) 
     42    : className(UString::Rep::createFromUTF8(definition->className)) 
    4443    , parentClass(definition->parentClass) 
    4544    , prototypeClass(0) 
     
    6261        staticValues = new StaticValuesTable(); 
    6362        while (staticValue->name) { 
    64             // FIXME: <rdar://problem/4949018> 
    65             staticValues->add(Identifier(staticValue->name).ustring().rep(),  
     63            staticValues->add(Identifier(UString::Rep::createFromUTF8(staticValue->name).get()).ustring().rep(),  
    6664                              new StaticValueEntry(staticValue->getProperty, staticValue->setProperty, staticValue->attributes)); 
    6765            ++staticValue; 
     
    7270        staticFunctions = new StaticFunctionsTable(); 
    7371        while (staticFunction->name) { 
    74             // FIXME: <rdar://problem/4949018> 
    75             staticFunctions->add(Identifier(staticFunction->name).ustring().rep(),  
     72            staticFunctions->add(Identifier(UString::Rep::createFromUTF8(staticFunction->name).get()).ustring().rep(),  
    7673                                 new StaticFunctionEntry(staticFunction->callAsFunction, staticFunction->attributes)); 
    7774            ++staticFunction; 
  • trunk/JavaScriptCore/API/JSStringRef.cpp

    r30942 r33374  
    5252    JSLock lock; 
    5353 
    54     size_t length = strlen(string); 
    55     Vector<UChar, 1024> buffer(length); 
    56     UChar* p = buffer.data(); 
    57     if (conversionOK != convertUTF8ToUTF16(&string, string + length, &p, p + length)) 
     54    RefPtr<UString::Rep> result = UString::Rep::createFromUTF8(string); 
     55    if (result.get() == &UString::Rep::null) 
    5856        return 0; 
    5957 
    60     return toRef(UString(buffer.data(), p - buffer.data()).rep()->ref()); 
     58    return toRef(result.release().releaseRef()); 
    6159} 
    6260 
  • trunk/JavaScriptCore/ChangeLog

    r33053 r33374  
     12008-05-13  Alexey Proskuryakov  <ap@webkit.org> 
     2 
     3        Reviewed by Geoffrey Garen. 
     4 
     5        <rdar://problem/4949018> JavaScriptCore API claims to work with UTF8 strings, but only works 
     6        with ASCII strings 
     7         
     8        * kjs/ustring.h: 
     9        * kjs/ustring.cpp: 
     10        (KJS::UString::Rep::createFromUTF8): 
     11        Added. Implementation adapted from JSStringCreateWithUTF8CString(). 
     12 
     13        * API/JSStringRef.cpp: 
     14        (JSStringCreateWithUTF8CString): 
     15        * API/JSClassRef.cpp: 
     16        (OpaqueJSClass::OpaqueJSClass): 
     17        Use UString::Rep::createFromUTF8(). 
     18 
    1192008-05-12  Mark Rowe  <mrowe@apple.com> 
    220 
  • trunk/JavaScriptCore/kjs/ustring.cpp

    r32609 r33374  
    237237  // steal the single reference this Rep was created with 
    238238  return adoptRef(r); 
     239} 
     240 
     241PassRefPtr<UString::Rep> UString::Rep::createFromUTF8(const char* string) 
     242{ 
     243    if (!string) 
     244        return &UString::Rep::null; 
     245 
     246    size_t length = strlen(string); 
     247    Vector<UChar, 1024> buffer(length); 
     248    UChar* p = buffer.data(); 
     249    if (conversionOK != convertUTF8ToUTF16(&string, string + length, &p, p + length)) 
     250        return &UString::Rep::null; 
     251 
     252    return UString::Rep::createCopying(buffer.data(), p - buffer.data()); 
    239253} 
    240254 
  • trunk/JavaScriptCore/kjs/ustring.h

    r33038 r33374  
    9595      static PassRefPtr<Rep> create(PassRefPtr<Rep> base, int offset, int length); 
    9696 
     97      // Constructs a string from a UTF-8 string, using strict conversion (see comments in UTF8.h). 
     98      // Returns UString::Rep::null for null input or conversion failure. 
     99      static PassRefPtr<Rep> createFromUTF8(const char*); 
     100 
    97101      void destroy(); 
    98102