Modified: trunk/Source/_javascript_Core/runtime/JSString.h (174218 => 174219)
--- trunk/Source/_javascript_Core/runtime/JSString.h 2014-10-02 15:57:49 UTC (rev 174218)
+++ trunk/Source/_javascript_Core/runtime/JSString.h 2014-10-02 16:14:25 UTC (rev 174219)
@@ -52,6 +52,7 @@
// These functions are faster than just calling jsString.
JSString* jsNontrivialString(VM*, const String&);
JSString* jsNontrivialString(ExecState*, const String&);
+JSString* jsNontrivialString(ExecState*, String&&);
// Should be used for strings that are owned by an object that will
// likely outlive the JSValue this makes, such as the parse tree or a
@@ -457,6 +458,12 @@
return JSString::create(*vm, s.impl());
}
+inline JSString* jsNontrivialString(VM* vm, String&& s)
+{
+ ASSERT(s.length() > 1);
+ return JSString::create(*vm, s.releaseImpl());
+}
+
ALWAYS_INLINE Identifier JSString::toIdentifier(ExecState* exec) const
{
return Identifier(exec, toAtomicString(exec));
@@ -585,6 +592,7 @@
inline JSString* jsSubstring8(ExecState* exec, const String& s, unsigned offset, unsigned length) { return jsSubstring8(&exec->vm(), s, offset, length); }
inline JSString* jsSubstring(ExecState* exec, const String& s, unsigned offset, unsigned length) { return jsSubstring(&exec->vm(), s, offset, length); }
inline JSString* jsNontrivialString(ExecState* exec, const String& s) { return jsNontrivialString(&exec->vm(), s); }
+inline JSString* jsNontrivialString(ExecState* exec, String&& s) { return jsNontrivialString(&exec->vm(), WTF::move(s)); }
inline JSString* jsOwnedString(ExecState* exec, const String& s) { return jsOwnedString(&exec->vm(), s); }
JS_EXPORT_PRIVATE JSString* jsStringWithCacheSlowCase(VM&, StringImpl&);
Modified: trunk/Source/_javascript_Core/runtime/JSStringBuilder.h (174218 => 174219)
--- trunk/Source/_javascript_Core/runtime/JSStringBuilder.h 2014-10-02 15:57:49 UTC (rev 174218)
+++ trunk/Source/_javascript_Core/runtime/JSStringBuilder.h 2014-10-02 16:14:25 UTC (rev 174219)
@@ -118,51 +118,21 @@
bool m_is8Bit;
};
-template<typename StringType1, typename StringType2>
-inline JSValue jsMakeNontrivialString(ExecState* exec, StringType1 string1, StringType2 string2)
+template<typename StringType>
+inline JSValue jsMakeNontrivialString(ExecState* exec, StringType&& string)
{
- PassRefPtr<StringImpl> result = WTF::tryMakeString(string1, string2);
- if (!result)
- return throwOutOfMemoryError(exec);
- return jsNontrivialString(exec, result);
+ return jsNontrivialString(exec, std::forward<StringType>(string));
}
-template<typename StringType1, typename StringType2, typename StringType3>
-inline JSValue jsMakeNontrivialString(ExecState* exec, StringType1 string1, StringType2 string2, StringType3 string3)
+template<typename StringType, typename... StringTypes>
+inline JSValue jsMakeNontrivialString(ExecState* exec, const StringType& string, const StringTypes&... strings)
{
- PassRefPtr<StringImpl> result = WTF::tryMakeString(string1, string2, string3);
+ RefPtr<StringImpl> result = WTF::tryMakeString(string, strings...);
if (!result)
return throwOutOfMemoryError(exec);
- return jsNontrivialString(exec, result);
+ return jsNontrivialString(exec, result.release());
}
-template<typename StringType1, typename StringType2, typename StringType3, typename StringType4>
-inline JSValue jsMakeNontrivialString(ExecState* exec, StringType1 string1, StringType2 string2, StringType3 string3, StringType4 string4)
-{
- PassRefPtr<StringImpl> result = WTF::tryMakeString(string1, string2, string3, string4);
- if (!result)
- return throwOutOfMemoryError(exec);
- return jsNontrivialString(exec, result);
}
-template<typename StringType1, typename StringType2, typename StringType3, typename StringType4, typename StringType5>
-inline JSValue jsMakeNontrivialString(ExecState* exec, StringType1 string1, StringType2 string2, StringType3 string3, StringType4 string4, StringType5 string5)
-{
- PassRefPtr<StringImpl> result = WTF::tryMakeString(string1, string2, string3, string4, string5);
- if (!result)
- return throwOutOfMemoryError(exec);
- return jsNontrivialString(exec, result);
-}
-
-template<typename StringType1, typename StringType2, typename StringType3, typename StringType4, typename StringType5, typename StringType6>
-inline JSValue jsMakeNontrivialString(ExecState* exec, StringType1 string1, StringType2 string2, StringType3 string3, StringType4 string4, StringType5 string5, StringType6 string6)
-{
- PassRefPtr<StringImpl> result = WTF::tryMakeString(string1, string2, string3, string4, string5, string6);
- if (!result)
- return throwOutOfMemoryError(exec);
- return jsNontrivialString(exec, result);
-}
-
-}
-
#endif