Ignore:
Timestamp:
Oct 2, 2014, 9:14:25 AM (11 years ago)
Author:
[email protected]
Message:

Use variadic templates for jsMakeNontrivialString
https://bugs.webkit.org/show_bug.cgi?id=137325

Reviewed by Sam Weinig.

  • runtime/JSString.h:

(JSC::jsNontrivialString):
Add an overload that takes an rvalue reference to a String so we can transfer ownership easily.

  • runtime/JSStringBuilder.h:

(JSC::jsMakeNontrivialString):
Make this a variadic function template, with a single-parameter version that can steal the string if it's OK to do so.

File:
1 edited

Legend:

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

    r165703 r174219  
    119119};
    120120
    121 template<typename StringType1, typename StringType2>
    122 inline JSValue jsMakeNontrivialString(ExecState* exec, StringType1 string1, StringType2 string2)
     121template<typename StringType>
     122inline JSValue jsMakeNontrivialString(ExecState* exec, StringType&& string)
    123123{
    124     PassRefPtr<StringImpl> result = WTF::tryMakeString(string1, string2);
     124    return jsNontrivialString(exec, std::forward<StringType>(string));
     125}
     126
     127template<typename StringType, typename... StringTypes>
     128inline JSValue jsMakeNontrivialString(ExecState* exec, const StringType& string, const StringTypes&... strings)
     129{
     130    RefPtr<StringImpl> result = WTF::tryMakeString(string, strings...);
    125131    if (!result)
    126132        return throwOutOfMemoryError(exec);
    127     return jsNontrivialString(exec, result);
    128 }
    129 
    130 template<typename StringType1, typename StringType2, typename StringType3>
    131 inline JSValue jsMakeNontrivialString(ExecState* exec, StringType1 string1, StringType2 string2, StringType3 string3)
    132 {
    133     PassRefPtr<StringImpl> result = WTF::tryMakeString(string1, string2, string3);
    134     if (!result)
    135         return throwOutOfMemoryError(exec);
    136     return jsNontrivialString(exec, result);
    137 }
    138 
    139 template<typename StringType1, typename StringType2, typename StringType3, typename StringType4>
    140 inline JSValue jsMakeNontrivialString(ExecState* exec, StringType1 string1, StringType2 string2, StringType3 string3, StringType4 string4)
    141 {
    142     PassRefPtr<StringImpl> result = WTF::tryMakeString(string1, string2, string3, string4);
    143     if (!result)
    144         return throwOutOfMemoryError(exec);
    145     return jsNontrivialString(exec, result);
    146 }
    147 
    148 template<typename StringType1, typename StringType2, typename StringType3, typename StringType4, typename StringType5>
    149 inline JSValue jsMakeNontrivialString(ExecState* exec, StringType1 string1, StringType2 string2, StringType3 string3, StringType4 string4, StringType5 string5)
    150 {
    151     PassRefPtr<StringImpl> result = WTF::tryMakeString(string1, string2, string3, string4, string5);
    152     if (!result)
    153         return throwOutOfMemoryError(exec);
    154     return jsNontrivialString(exec, result);
    155 }
    156 
    157 template<typename StringType1, typename StringType2, typename StringType3, typename StringType4, typename StringType5, typename StringType6>
    158 inline JSValue jsMakeNontrivialString(ExecState* exec, StringType1 string1, StringType2 string2, StringType3 string3, StringType4 string4, StringType5 string5, StringType6 string6)
    159 {
    160     PassRefPtr<StringImpl> result = WTF::tryMakeString(string1, string2, string3, string4, string5, string6);
    161     if (!result)
    162         return throwOutOfMemoryError(exec);
    163     return jsNontrivialString(exec, result);
     133    return jsNontrivialString(exec, result.release());
    164134}
    165135
Note: See TracChangeset for help on using the changeset viewer.