Changeset 54518 in webkit for trunk/JavaScriptCore/runtime


Ignore:
Timestamp:
Feb 8, 2010, 3:43:26 PM (15 years ago)
Author:
[email protected]
Message:

Make makeString CRASH if we fail to allocate a string.

Reviewed by Geoff Garen.

(tryMakeString or jsMakeNontrivialString can be used where we
expect allocation may fail and want to handle the error).

  • runtime/JSStringBuilder.h:

(JSC::jsMakeNontrivialString):

  • runtime/UString.h:

(JSC::tryMakeString):
(JSC::makeString):

Location:
trunk/JavaScriptCore/runtime
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/runtime/JSStringBuilder.h

    r54403 r54518  
    4747inline JSValue jsMakeNontrivialString(ExecState* exec, StringType1 string1, StringType2 string2)
    4848{
    49     UString result = makeString(string1, string2);
    50     if (result.isNull())
     49    PassRefPtr<UStringImpl> result = tryMakeString(string1, string2);
     50    if (!result)
    5151        return throwOutOfMemoryError(exec);
    5252    return jsNontrivialString(exec, result);
     
    5656inline JSValue jsMakeNontrivialString(ExecState* exec, StringType1 string1, StringType2 string2, StringType3 string3)
    5757{
    58     UString result = makeString(string1, string2, string3);
    59     if (result.isNull())
     58    PassRefPtr<UStringImpl> result = tryMakeString(string1, string2, string3);
     59    if (!result)
    6060        return throwOutOfMemoryError(exec);
    6161    return jsNontrivialString(exec, result);
     
    6565inline JSValue jsMakeNontrivialString(ExecState* exec, StringType1 string1, StringType2 string2, StringType3 string3, StringType4 string4)
    6666{
    67     UString result = makeString(string1, string2, string3, string4);
    68     if (result.isNull())
     67    PassRefPtr<UStringImpl> result = tryMakeString(string1, string2, string3, string4);
     68    if (!result)
    6969        return throwOutOfMemoryError(exec);
    7070    return jsNontrivialString(exec, result);
     
    7474inline JSValue jsMakeNontrivialString(ExecState* exec, StringType1 string1, StringType2 string2, StringType3 string3, StringType4 string4, StringType5 string5)
    7575{
    76     UString result = makeString(string1, string2, string3, string4, string5);
    77     if (result.isNull())
     76    PassRefPtr<UStringImpl> result = tryMakeString(string1, string2, string3, string4, string5);
     77    if (!result)
    7878        return throwOutOfMemoryError(exec);
    7979    return jsNontrivialString(exec, result);
     
    8383inline JSValue jsMakeNontrivialString(ExecState* exec, StringType1 string1, StringType2 string2, StringType3 string3, StringType4 string4, StringType5 string5, StringType6 string6)
    8484{
    85     UString result = makeString(string1, string2, string3, string4, string5, string6);
    86     if (result.isNull())
     85    PassRefPtr<UStringImpl> result = tryMakeString(string1, string2, string3, string4, string5, string6);
     86    if (!result)
    8787        return throwOutOfMemoryError(exec);
    8888    return jsNontrivialString(exec, result);
  • trunk/JavaScriptCore/runtime/UString.h

    r54464 r54518  
    354354
    355355    template<typename StringType1, typename StringType2>
    356     UString makeString(StringType1 string1, StringType2 string2)
     356    PassRefPtr<UStringImpl> tryMakeString(StringType1 string1, StringType2 string2)
    357357    {
    358358        StringTypeAdapter<StringType1> adapter1(string1);
     
    363363        PassRefPtr<UStringImpl> resultImpl = UStringImpl::tryCreateUninitialized(length, buffer);
    364364        if (!resultImpl)
    365             return UString();
     365            return 0;
    366366
    367367        UChar* result = buffer;
     
    374374
    375375    template<typename StringType1, typename StringType2, typename StringType3>
    376     UString makeString(StringType1 string1, StringType2 string2, StringType3 string3)
     376    PassRefPtr<UStringImpl> tryMakeString(StringType1 string1, StringType2 string2, StringType3 string3)
    377377    {
    378378        StringTypeAdapter<StringType1> adapter1(string1);
     
    384384        PassRefPtr<UStringImpl> resultImpl = UStringImpl::tryCreateUninitialized(length, buffer);
    385385        if (!resultImpl)
    386             return UString();
     386            return 0;
    387387
    388388        UChar* result = buffer;
     
    397397
    398398    template<typename StringType1, typename StringType2, typename StringType3, typename StringType4>
    399     UString makeString(StringType1 string1, StringType2 string2, StringType3 string3, StringType4 string4)
     399    PassRefPtr<UStringImpl> tryMakeString(StringType1 string1, StringType2 string2, StringType3 string3, StringType4 string4)
    400400    {
    401401        StringTypeAdapter<StringType1> adapter1(string1);
     
    408408        PassRefPtr<UStringImpl> resultImpl = UStringImpl::tryCreateUninitialized(length, buffer);
    409409        if (!resultImpl)
    410             return UString();
     410            return 0;
    411411
    412412        UChar* result = buffer;
     
    423423
    424424    template<typename StringType1, typename StringType2, typename StringType3, typename StringType4, typename StringType5>
    425     UString makeString(StringType1 string1, StringType2 string2, StringType3 string3, StringType4 string4, StringType5 string5)
     425    PassRefPtr<UStringImpl> tryMakeString(StringType1 string1, StringType2 string2, StringType3 string3, StringType4 string4, StringType5 string5)
    426426    {
    427427        StringTypeAdapter<StringType1> adapter1(string1);
     
    435435        PassRefPtr<UStringImpl> resultImpl = UStringImpl::tryCreateUninitialized(length, buffer);
    436436        if (!resultImpl)
    437             return UString();
     437            return 0;
    438438
    439439        UChar* result = buffer;
     
    452452
    453453    template<typename StringType1, typename StringType2, typename StringType3, typename StringType4, typename StringType5, typename StringType6>
    454     UString makeString(StringType1 string1, StringType2 string2, StringType3 string3, StringType4 string4, StringType5 string5, StringType6 string6)
     454    PassRefPtr<UStringImpl> tryMakeString(StringType1 string1, StringType2 string2, StringType3 string3, StringType4 string4, StringType5 string5, StringType6 string6)
    455455    {
    456456        StringTypeAdapter<StringType1> adapter1(string1);
     
    465465        PassRefPtr<UStringImpl> resultImpl = UStringImpl::tryCreateUninitialized(length, buffer);
    466466        if (!resultImpl)
    467             return UString();
     467            return 0;
    468468
    469469        UChar* result = buffer;
     
    484484
    485485    template<typename StringType1, typename StringType2, typename StringType3, typename StringType4, typename StringType5, typename StringType6, typename StringType7>
    486     UString makeString(StringType1 string1, StringType2 string2, StringType3 string3, StringType4 string4, StringType5 string5, StringType6 string6, StringType7 string7)
     486    PassRefPtr<UStringImpl> tryMakeString(StringType1 string1, StringType2 string2, StringType3 string3, StringType4 string4, StringType5 string5, StringType6 string6, StringType7 string7)
    487487    {
    488488        StringTypeAdapter<StringType1> adapter1(string1);
     
    498498        PassRefPtr<UStringImpl> resultImpl = UStringImpl::tryCreateUninitialized(length, buffer);
    499499        if (!resultImpl)
    500             return UString();
     500            return 0;
    501501
    502502        UChar* result = buffer;
     
    519519
    520520    template<typename StringType1, typename StringType2, typename StringType3, typename StringType4, typename StringType5, typename StringType6, typename StringType7, typename StringType8>
    521     UString makeString(StringType1 string1, StringType2 string2, StringType3 string3, StringType4 string4, StringType5 string5, StringType6 string6, StringType7 string7, StringType8 string8)
     521    PassRefPtr<UStringImpl> tryMakeString(StringType1 string1, StringType2 string2, StringType3 string3, StringType4 string4, StringType5 string5, StringType6 string6, StringType7 string7, StringType8 string8)
    522522    {
    523523        StringTypeAdapter<StringType1> adapter1(string1);
     
    534534        PassRefPtr<UStringImpl> resultImpl = UStringImpl::tryCreateUninitialized(length, buffer);
    535535        if (!resultImpl)
    536             return UString();
     536            return 0;
    537537
    538538        UChar* result = buffer;
     
    556556    }
    557557
     558    template<typename StringType1, typename StringType2>
     559    UString makeString(StringType1 string1, StringType2 string2)
     560    {
     561        PassRefPtr<UStringImpl> resultImpl = tryMakeString(string1, string2);
     562        if (!resultImpl)
     563            CRASH();
     564        return resultImpl;
     565    }
     566
     567    template<typename StringType1, typename StringType2, typename StringType3>
     568    UString makeString(StringType1 string1, StringType2 string2, StringType3 string3)
     569    {
     570        PassRefPtr<UStringImpl> resultImpl = tryMakeString(string1, string2, string3);
     571        if (!resultImpl)
     572            CRASH();
     573        return resultImpl;
     574    }
     575
     576    template<typename StringType1, typename StringType2, typename StringType3, typename StringType4>
     577    UString makeString(StringType1 string1, StringType2 string2, StringType3 string3, StringType4 string4)
     578    {
     579        PassRefPtr<UStringImpl> resultImpl = tryMakeString(string1, string2, string3, string4);
     580        if (!resultImpl)
     581            CRASH();
     582        return resultImpl;
     583    }
     584
     585    template<typename StringType1, typename StringType2, typename StringType3, typename StringType4, typename StringType5>
     586    UString makeString(StringType1 string1, StringType2 string2, StringType3 string3, StringType4 string4, StringType5 string5)
     587    {
     588        PassRefPtr<UStringImpl> resultImpl = tryMakeString(string1, string2, string3, string4, string5);
     589        if (!resultImpl)
     590            CRASH();
     591        return resultImpl;
     592    }
     593
     594    template<typename StringType1, typename StringType2, typename StringType3, typename StringType4, typename StringType5, typename StringType6>
     595    UString makeString(StringType1 string1, StringType2 string2, StringType3 string3, StringType4 string4, StringType5 string5, StringType6 string6)
     596    {
     597        PassRefPtr<UStringImpl> resultImpl = tryMakeString(string1, string2, string3, string4, string5, string6);
     598        if (!resultImpl)
     599            CRASH();
     600        return resultImpl;
     601    }
     602
     603    template<typename StringType1, typename StringType2, typename StringType3, typename StringType4, typename StringType5, typename StringType6, typename StringType7>
     604    UString makeString(StringType1 string1, StringType2 string2, StringType3 string3, StringType4 string4, StringType5 string5, StringType6 string6, StringType7 string7)
     605    {
     606        PassRefPtr<UStringImpl> resultImpl = tryMakeString(string1, string2, string3, string4, string5, string6, string7);
     607        if (!resultImpl)
     608            CRASH();
     609        return resultImpl;
     610    }
     611
     612    template<typename StringType1, typename StringType2, typename StringType3, typename StringType4, typename StringType5, typename StringType6, typename StringType7, typename StringType8>
     613    UString makeString(StringType1 string1, StringType2 string2, StringType3 string3, StringType4 string4, StringType5 string5, StringType6 string6, StringType7 string7, StringType8 string8)
     614    {
     615        PassRefPtr<UStringImpl> resultImpl = tryMakeString(string1, string2, string3, string4, string5, string6, string7, string8);
     616        if (!resultImpl)
     617            CRASH();
     618        return resultImpl;
     619    }
     620
    558621} // namespace JSC
    559622
Note: See TracChangeset for help on using the changeset viewer.