Title: [239282] trunk
Revision
239282
Author
[email protected]
Date
2018-12-17 12:36:31 -0800 (Mon, 17 Dec 2018)

Log Message

Support concatenating StringView with other string types
https://bugs.webkit.org/show_bug.cgi?id=177566

Reviewed by Darin Adler.

Source/WTF:

Add operator+ overloads to StringOperators.h to support concatenating a StringView with
other string types (e.g. String). This lets a person write more naturally looking code:

stringView + string

Instead of:

makeString(stringView, string)

* wtf/text/StringOperators.h:
(WTF::operator+): Added various operator+ overloads.

Tools:

Add some tests to ensure we do not regress the number of allocations needed when performing
string concatenation with string views.

* TestWebKitAPI/Tests/WTF/StringOperators.cpp:
(TestWebKitAPI::TEST):

Modified Paths

Diff

Modified: trunk/Source/WTF/ChangeLog (239281 => 239282)


--- trunk/Source/WTF/ChangeLog	2018-12-17 20:21:08 UTC (rev 239281)
+++ trunk/Source/WTF/ChangeLog	2018-12-17 20:36:31 UTC (rev 239282)
@@ -1,3 +1,22 @@
+2018-12-17  Daniel Bates  <[email protected]>
+
+        Support concatenating StringView with other string types
+        https://bugs.webkit.org/show_bug.cgi?id=177566
+
+        Reviewed by Darin Adler.
+
+        Add operator+ overloads to StringOperators.h to support concatenating a StringView with
+        other string types (e.g. String). This lets a person write more naturally looking code:
+
+        stringView + string
+
+        Instead of:
+
+        makeString(stringView, string)
+
+        * wtf/text/StringOperators.h:
+        (WTF::operator+): Added various operator+ overloads.
+
 2018-12-17  Commit Queue  <[email protected]>
 
         Unreviewed, rolling out r239265 and r239274.

Modified: trunk/Source/WTF/wtf/text/StringOperators.h (239281 => 239282)


--- trunk/Source/WTF/wtf/text/StringOperators.h	2018-12-17 20:21:08 UTC (rev 239281)
+++ trunk/Source/WTF/wtf/text/StringOperators.h	2018-12-17 20:36:31 UTC (rev 239282)
@@ -112,6 +112,12 @@
     return StringAppend<const char*, AtomicString>(string1, string2);
 }
 
+template<typename T, typename = std::enable_if_t<std::is_same<std::decay_t<T>, StringView>::value>>
+inline StringAppend<const char*, StringView> operator+(const char* string1, T string2)
+{
+    return StringAppend<const char*, StringView>(string1, string2);
+}
+
 template<typename U, typename V>
 inline StringAppend<const char*, StringAppend<U, V>> operator+(const char* string1, const StringAppend<U, V>& string2)
 {
@@ -128,6 +134,12 @@
     return StringAppend<const UChar*, AtomicString>(string1, string2);
 }
 
+template<typename T, typename = std::enable_if_t<std::is_same<std::decay_t<T>, StringView>::value>>
+inline StringAppend<const UChar*, StringView> operator+(const UChar* string1, T string2)
+{
+    return StringAppend<const UChar*, StringView>(string1, string2);
+}
+
 template<typename U, typename V>
 inline StringAppend<const UChar*, StringAppend<U, V>> operator+(const UChar* string1, const StringAppend<U, V>& string2)
 {
@@ -144,6 +156,12 @@
     return StringAppend<ASCIILiteral, AtomicString>(string1, string2);
 }
 
+template<typename T, typename = std::enable_if_t<std::is_same<std::decay_t<T>, StringView>::value>>
+inline StringAppend<ASCIILiteral, StringView> operator+(const ASCIILiteral& string1, T string2)
+{
+    return StringAppend<ASCIILiteral, StringView>(string1, string2);
+}
+
 template<typename U, typename V>
 inline StringAppend<ASCIILiteral, StringAppend<U, V>> operator+(const ASCIILiteral& string1, const StringAppend<U, V>& string2)
 {
@@ -156,6 +174,12 @@
     return StringAppend<String, T>(string1, string2);
 }
 
+template<typename T, typename U, typename = std::enable_if_t<std::is_same<std::decay_t<T>, StringView>::value>>
+StringAppend<StringView, U> operator+(T string1, U string2)
+{
+    return StringAppend<StringView, U>(string1, string2);
+}
+
 template<typename U, typename V, typename W>
 StringAppend<StringAppend<U, V>, W> operator+(const StringAppend<U, V>& string1, W string2)
 {

Modified: trunk/Tools/ChangeLog (239281 => 239282)


--- trunk/Tools/ChangeLog	2018-12-17 20:21:08 UTC (rev 239281)
+++ trunk/Tools/ChangeLog	2018-12-17 20:36:31 UTC (rev 239282)
@@ -1,3 +1,16 @@
+2018-12-17  Daniel Bates  <[email protected]>
+
+        Support concatenating StringView with other string types
+        https://bugs.webkit.org/show_bug.cgi?id=177566
+
+        Reviewed by Darin Adler.
+
+        Add some tests to ensure we do not regress the number of allocations needed when performing
+        string concatenation with string views.
+
+        * TestWebKitAPI/Tests/WTF/StringOperators.cpp:
+        (TestWebKitAPI::TEST):
+
 2018-12-17  Commit Queue  <[email protected]>
 
         Unreviewed, rolling out r239265 and r239274.

Modified: trunk/Tools/TestWebKitAPI/Tests/WTF/StringOperators.cpp (239281 => 239282)


--- trunk/Tools/TestWebKitAPI/Tests/WTF/StringOperators.cpp	2018-12-17 20:21:08 UTC (rev 239281)
+++ trunk/Tools/TestWebKitAPI/Tests/WTF/StringOperators.cpp	2018-12-17 20:36:31 UTC (rev 239282)
@@ -29,6 +29,7 @@
 
 static int wtfStringCopyCount;
 
+#include <wtf/text/StringView.h>
 #include <wtf/text/WTFString.h>
 
 namespace TestWebKitAPI {
@@ -47,6 +48,9 @@
     AtomicString atomicString("AtomicString");
     ASCIILiteral literal { "ASCIILiteral"_s };
 
+    String stringViewBacking { "StringView" };
+    StringView stringView { stringViewBacking };
+
     EXPECT_EQ(0, wtfStringCopyCount);
 
     EXPECT_N_WTF_STRING_COPIES(2, string + string);
@@ -53,16 +57,24 @@
     EXPECT_N_WTF_STRING_COPIES(2, string + atomicString);
     EXPECT_N_WTF_STRING_COPIES(2, atomicString + string);
     EXPECT_N_WTF_STRING_COPIES(2, atomicString + atomicString);
+    EXPECT_N_WTF_STRING_COPIES(1, stringView + string);
+    EXPECT_N_WTF_STRING_COPIES(1, string + stringView);
+    EXPECT_N_WTF_STRING_COPIES(1, stringView + atomicString);
+    EXPECT_N_WTF_STRING_COPIES(1, atomicString + stringView);
 
     EXPECT_N_WTF_STRING_COPIES(1, "C string" + string);
     EXPECT_N_WTF_STRING_COPIES(1, string + "C string");
     EXPECT_N_WTF_STRING_COPIES(1, "C string" + atomicString);
     EXPECT_N_WTF_STRING_COPIES(1, atomicString + "C string");
+    EXPECT_N_WTF_STRING_COPIES(0, "C string" + stringView);
+    EXPECT_N_WTF_STRING_COPIES(0, stringView + "C string");
 
     EXPECT_N_WTF_STRING_COPIES(1, literal + string);
     EXPECT_N_WTF_STRING_COPIES(1, string + literal);
     EXPECT_N_WTF_STRING_COPIES(1, literal + atomicString);
     EXPECT_N_WTF_STRING_COPIES(1, atomicString + literal);
+    EXPECT_N_WTF_STRING_COPIES(0, literal + stringView);
+    EXPECT_N_WTF_STRING_COPIES(0, stringView + literal);
 
     EXPECT_N_WTF_STRING_COPIES(2, "C string" + string + "C string" + string);
     EXPECT_N_WTF_STRING_COPIES(2, "C string" + (string + "C string" + string));
@@ -92,20 +104,55 @@
     EXPECT_N_WTF_STRING_COPIES(2, "C string" + (atomicString + literal + atomicString));
     EXPECT_N_WTF_STRING_COPIES(2, ("C string" + atomicString) + (literal + atomicString));
 
-    EXPECT_N_WTF_STRING_COPIES(2, literal + atomicString + "C string" + string);
-    EXPECT_N_WTF_STRING_COPIES(2, literal + (atomicString + "C string" + string));
-    EXPECT_N_WTF_STRING_COPIES(2, (literal + atomicString) + ("C string" + string));
-    EXPECT_N_WTF_STRING_COPIES(2, "C string" + atomicString + literal + string);
-    EXPECT_N_WTF_STRING_COPIES(2, "C string" + (atomicString + literal + string));
-    EXPECT_N_WTF_STRING_COPIES(2, ("C string" + atomicString) + (literal + string));
+    EXPECT_N_WTF_STRING_COPIES(0, literal + stringView + "C string" + stringView);
+    EXPECT_N_WTF_STRING_COPIES(0, literal + (stringView + "C string" + stringView));
+    EXPECT_N_WTF_STRING_COPIES(0, (literal + stringView) + ("C string" + stringView));
+    EXPECT_N_WTF_STRING_COPIES(0, "C string" + stringView + literal + stringView);
+    EXPECT_N_WTF_STRING_COPIES(0, "C string" + (stringView + literal + stringView));
+    EXPECT_N_WTF_STRING_COPIES(0, ("C string" + stringView) + (literal + stringView));
 
-    EXPECT_N_WTF_STRING_COPIES(2, literal + string + "C string" + atomicString);
-    EXPECT_N_WTF_STRING_COPIES(2, literal + (string + "C string" + atomicString));
-    EXPECT_N_WTF_STRING_COPIES(2, (literal + string) + ("C string" + atomicString));
-    EXPECT_N_WTF_STRING_COPIES(2, "C string" + string + literal + atomicString);
-    EXPECT_N_WTF_STRING_COPIES(2, "C string" + (string + literal + atomicString));
-    EXPECT_N_WTF_STRING_COPIES(2, ("C string" + string) + (literal + atomicString));
+    EXPECT_N_WTF_STRING_COPIES(2, literal + atomicString + "C string" + string + literal + stringView);
+    EXPECT_N_WTF_STRING_COPIES(2, literal + (atomicString + "C string" + string + literal + stringView));
+    EXPECT_N_WTF_STRING_COPIES(2, (literal + atomicString) + ("C string" + string) + (literal + stringView));
+    EXPECT_N_WTF_STRING_COPIES(2, "C string" + atomicString + literal + string + literal + stringView);
+    EXPECT_N_WTF_STRING_COPIES(2, "C string" + (atomicString + literal + string + literal + stringView));
+    EXPECT_N_WTF_STRING_COPIES(2, ("C string" + atomicString) + (literal + string) + (literal + stringView));
 
+    EXPECT_N_WTF_STRING_COPIES(2, literal + atomicString + "C string" + stringView + literal + string);
+    EXPECT_N_WTF_STRING_COPIES(2, literal + (atomicString + "C string" + stringView + literal + string));
+    EXPECT_N_WTF_STRING_COPIES(2, (literal + atomicString) + ("C string" + stringView) + (literal + string));
+    EXPECT_N_WTF_STRING_COPIES(2, "C string" + atomicString + literal + stringView + literal + string);
+    EXPECT_N_WTF_STRING_COPIES(2, "C string" + (atomicString + literal + stringView + literal + string));
+    EXPECT_N_WTF_STRING_COPIES(2, ("C string" + atomicString) + (literal + stringView) + (literal + string));
+
+    EXPECT_N_WTF_STRING_COPIES(2, literal + string + "C string" + atomicString + literal + stringView);
+    EXPECT_N_WTF_STRING_COPIES(2, literal + (string + "C string" + atomicString + literal + stringView));
+    EXPECT_N_WTF_STRING_COPIES(2, (literal + string) + ("C string" + atomicString) + (literal + stringView));
+    EXPECT_N_WTF_STRING_COPIES(2, "C string" + string + literal + atomicString + literal + stringView);
+    EXPECT_N_WTF_STRING_COPIES(2, "C string" + (string + literal + atomicString + literal + stringView));
+    EXPECT_N_WTF_STRING_COPIES(2, ("C string" + string) + (literal + atomicString) + (literal + stringView));
+
+    EXPECT_N_WTF_STRING_COPIES(2, literal + string + "C string" + stringView + literal + atomicString);
+    EXPECT_N_WTF_STRING_COPIES(2, literal + (string + "C string" + stringView + literal + atomicString));
+    EXPECT_N_WTF_STRING_COPIES(2, (literal + string) + ("C string" + stringView) + (literal + atomicString));
+    EXPECT_N_WTF_STRING_COPIES(2, "C string" + string + literal + stringView + literal + atomicString);
+    EXPECT_N_WTF_STRING_COPIES(2, "C string" + (string + literal + stringView + literal + atomicString));
+    EXPECT_N_WTF_STRING_COPIES(2, ("C string" + string) + (literal + stringView) + (literal + atomicString));
+
+    EXPECT_N_WTF_STRING_COPIES(2, literal + stringView + "C string" + atomicString + literal + string);
+    EXPECT_N_WTF_STRING_COPIES(2, literal + (stringView + "C string" + atomicString + literal + string));
+    EXPECT_N_WTF_STRING_COPIES(2, (literal + stringView) + ("C string" + atomicString) + (literal + string));
+    EXPECT_N_WTF_STRING_COPIES(2, "C string" + stringView + literal + atomicString + literal + string);
+    EXPECT_N_WTF_STRING_COPIES(2, "C string" + (stringView + literal + atomicString + literal + string));
+    EXPECT_N_WTF_STRING_COPIES(2, ("C string" + stringView) + (literal + atomicString) + (literal + string));
+
+    EXPECT_N_WTF_STRING_COPIES(2, literal + stringView + "C string" + string + literal + atomicString);
+    EXPECT_N_WTF_STRING_COPIES(2, literal + (stringView + "C string" + string + literal + atomicString));
+    EXPECT_N_WTF_STRING_COPIES(2, (literal + stringView) + ("C string" + string) + (literal + atomicString));
+    EXPECT_N_WTF_STRING_COPIES(2, "C string" + stringView + literal + string + literal + atomicString);
+    EXPECT_N_WTF_STRING_COPIES(2, "C string" + (stringView + literal + string + literal + atomicString));
+    EXPECT_N_WTF_STRING_COPIES(2, ("C string" + stringView) + (literal + string) + (literal + atomicString));
+
     EXPECT_N_WTF_STRING_COPIES(2, "C string" + atomicString + "C string" + atomicString);
     EXPECT_N_WTF_STRING_COPIES(2, "C string" + (atomicString + "C string" + atomicString));
     EXPECT_N_WTF_STRING_COPIES(2, ("C string" + atomicString) + ("C string" + atomicString));
@@ -120,39 +167,97 @@
     EXPECT_N_WTF_STRING_COPIES(2, atomicString + (literal + atomicString + literal));
     EXPECT_N_WTF_STRING_COPIES(2, (atomicString + literal) + (atomicString + literal));
 
-    EXPECT_N_WTF_STRING_COPIES(2, "C string" + string + "C string" + atomicString);
-    EXPECT_N_WTF_STRING_COPIES(2, "C string" + (string + "C string" + atomicString));
-    EXPECT_N_WTF_STRING_COPIES(2, ("C string" + string) + ("C string" + atomicString));
-    EXPECT_N_WTF_STRING_COPIES(2, string + "C string" + atomicString + "C string");
-    EXPECT_N_WTF_STRING_COPIES(2, string + ("C string" + atomicString + "C string"));
-    EXPECT_N_WTF_STRING_COPIES(2, (string + "C string") + (atomicString + "C string"));
+    EXPECT_N_WTF_STRING_COPIES(2, "C string" + string + "C string" + atomicString + "C string" + stringView);
+    EXPECT_N_WTF_STRING_COPIES(2, "C string" + (string + "C string" + atomicString + "C string" + stringView));
+    EXPECT_N_WTF_STRING_COPIES(2, ("C string" + string) + ("C string" + atomicString) + ("C string" + stringView));
+    EXPECT_N_WTF_STRING_COPIES(2, string + "C string" + atomicString + "C string" + stringView + "C string");
+    EXPECT_N_WTF_STRING_COPIES(2, string + ("C string" + atomicString + "C string" + stringView + "C string"));
+    EXPECT_N_WTF_STRING_COPIES(2, (string + "C string") + (atomicString + "C string") + (stringView + "C string"));
 
-    EXPECT_N_WTF_STRING_COPIES(2, literal + string + literal + atomicString);
-    EXPECT_N_WTF_STRING_COPIES(2, literal + (string + literal + atomicString));
-    EXPECT_N_WTF_STRING_COPIES(2, (literal + string) + (literal + atomicString));
-    EXPECT_N_WTF_STRING_COPIES(2, string + literal + atomicString + literal);
-    EXPECT_N_WTF_STRING_COPIES(2, string + (literal + atomicString + literal));
-    EXPECT_N_WTF_STRING_COPIES(2, (string + literal) + (atomicString + literal));
+    EXPECT_N_WTF_STRING_COPIES(2, literal + string + literal + atomicString + literal + stringView);
+    EXPECT_N_WTF_STRING_COPIES(2, literal + (string + literal + atomicString + literal + stringView));
+    EXPECT_N_WTF_STRING_COPIES(2, (literal + string) + (literal + atomicString) + (literal + stringView));
+    EXPECT_N_WTF_STRING_COPIES(2, string + literal + atomicString + literal + stringView + literal);
+    EXPECT_N_WTF_STRING_COPIES(2, string + (literal + atomicString + literal + stringView + literal));
+    EXPECT_N_WTF_STRING_COPIES(2, (string + literal) + (atomicString + literal) + (stringView + literal));
 
-    EXPECT_N_WTF_STRING_COPIES(2, "C string" + atomicString + "C string" + string);
-    EXPECT_N_WTF_STRING_COPIES(2, "C string" + (atomicString + "C string" + string));
-    EXPECT_N_WTF_STRING_COPIES(2, ("C string" + atomicString) + ("C string" + string));
-    EXPECT_N_WTF_STRING_COPIES(2, atomicString + "C string" + string + "C string");
-    EXPECT_N_WTF_STRING_COPIES(2, atomicString + ("C string" + string + "C string"));
-    EXPECT_N_WTF_STRING_COPIES(2, (atomicString + "C string") + (string + "C string"));
+    EXPECT_N_WTF_STRING_COPIES(2, "C string" + string + "C string" + stringView + "C string" + atomicString);
+    EXPECT_N_WTF_STRING_COPIES(2, "C string" + (string + "C string" + stringView + "C string" + atomicString));
+    EXPECT_N_WTF_STRING_COPIES(2, ("C string" + string) + ("C string" + stringView) + ("C string" + atomicString));
+    EXPECT_N_WTF_STRING_COPIES(2, string + "C string" + stringView + "C string" + atomicString + "C string");
+    EXPECT_N_WTF_STRING_COPIES(2, string + ("C string" + stringView + "C string" + atomicString + "C string"));
+    EXPECT_N_WTF_STRING_COPIES(2, (string + "C string") + (stringView + "C string") + (atomicString + "C string"));
 
-    EXPECT_N_WTF_STRING_COPIES(2, literal + atomicString + literal + string);
-    EXPECT_N_WTF_STRING_COPIES(2, literal + (atomicString + literal + string));
-    EXPECT_N_WTF_STRING_COPIES(2, (literal + atomicString) + (literal + string));
-    EXPECT_N_WTF_STRING_COPIES(2, atomicString + literal + string + literal);
-    EXPECT_N_WTF_STRING_COPIES(2, atomicString + (literal + string + literal));
-    EXPECT_N_WTF_STRING_COPIES(2, (atomicString + literal) + (string + literal));
+    EXPECT_N_WTF_STRING_COPIES(2, literal + string + literal + stringView + literal + atomicString);
+    EXPECT_N_WTF_STRING_COPIES(2, literal + (string + literal + stringView + literal + atomicString));
+    EXPECT_N_WTF_STRING_COPIES(2, (literal + string) + (literal + stringView) + (literal + atomicString));
+    EXPECT_N_WTF_STRING_COPIES(2, string + literal + stringView + literal + atomicString + literal);
+    EXPECT_N_WTF_STRING_COPIES(2, string + (literal + stringView + literal + atomicString + literal));
+    EXPECT_N_WTF_STRING_COPIES(2, (string + literal) + (stringView + literal) + (atomicString + literal));
 
+    EXPECT_N_WTF_STRING_COPIES(2, "C string" + atomicString + "C string" + string + "C string" + stringView);
+    EXPECT_N_WTF_STRING_COPIES(2, "C string" + (atomicString + "C string" + string + "C string" + stringView));
+    EXPECT_N_WTF_STRING_COPIES(2, ("C string" + atomicString) + ("C string" + string) + ("C string" + stringView));
+    EXPECT_N_WTF_STRING_COPIES(2, atomicString + "C string" + string + "C string" + stringView + "C string");
+    EXPECT_N_WTF_STRING_COPIES(2, atomicString + ("C string" + string + "C string" + stringView + "C string"));
+    EXPECT_N_WTF_STRING_COPIES(2, (atomicString + "C string") + (string + "C string") + (stringView + "C string"));
+
+    EXPECT_N_WTF_STRING_COPIES(2, literal + atomicString + literal + string + literal + stringView);
+    EXPECT_N_WTF_STRING_COPIES(2, literal + (atomicString + literal + string + literal + stringView));
+    EXPECT_N_WTF_STRING_COPIES(2, (literal + atomicString) + (literal + string) + (literal + stringView));
+    EXPECT_N_WTF_STRING_COPIES(2, atomicString + literal + string + literal + stringView + literal);
+    EXPECT_N_WTF_STRING_COPIES(2, atomicString + (literal + string + literal + stringView + literal));
+    EXPECT_N_WTF_STRING_COPIES(2, (atomicString + literal) + (string + literal) + (stringView + literal));
+
+    EXPECT_N_WTF_STRING_COPIES(2, "C string" + atomicString + "C string" + stringView + "C string" + string);
+    EXPECT_N_WTF_STRING_COPIES(2, "C string" + (atomicString + "C string" + stringView + "C string" + string));
+    EXPECT_N_WTF_STRING_COPIES(2, ("C string" + atomicString) + ("C string" + stringView) + ("C string" + string));
+    EXPECT_N_WTF_STRING_COPIES(2, atomicString + "C string" + stringView + "C string" + string + "C string");
+    EXPECT_N_WTF_STRING_COPIES(2, atomicString + ("C string" + stringView + "C string" + string + "C string"));
+    EXPECT_N_WTF_STRING_COPIES(2, (atomicString + "C string") + (stringView + "C string") + (string + "C string"));
+
+    EXPECT_N_WTF_STRING_COPIES(2, literal + atomicString + literal + stringView + literal + string);
+    EXPECT_N_WTF_STRING_COPIES(2, literal + (atomicString + literal + stringView + literal + string));
+    EXPECT_N_WTF_STRING_COPIES(2, (literal + atomicString) + (literal + stringView) + (literal + string));
+    EXPECT_N_WTF_STRING_COPIES(2, atomicString + literal + stringView + literal + string + literal);
+    EXPECT_N_WTF_STRING_COPIES(2, atomicString + (literal + stringView + literal + string + literal));
+    EXPECT_N_WTF_STRING_COPIES(2, (atomicString + literal) + (stringView + literal) + (string + literal));
+
+    EXPECT_N_WTF_STRING_COPIES(2, "C string" + stringView + "C string" + atomicString + "C string" + string);
+    EXPECT_N_WTF_STRING_COPIES(2, "C string" + (stringView + "C string" + atomicString + "C string" + string));
+    EXPECT_N_WTF_STRING_COPIES(2, ("C string" + stringView) + ("C string" + atomicString) + ("C string" + string));
+    EXPECT_N_WTF_STRING_COPIES(2, stringView + "C string" + atomicString + "C string" + string + "C string");
+    EXPECT_N_WTF_STRING_COPIES(2, stringView + ("C string" + atomicString + "C string" + string + "C string"));
+    EXPECT_N_WTF_STRING_COPIES(2, (stringView + "C string") + (atomicString + "C string") + (string + "C string"));
+
+    EXPECT_N_WTF_STRING_COPIES(2, literal + stringView + literal + atomicString + literal + string);
+    EXPECT_N_WTF_STRING_COPIES(2, literal + (stringView + literal + atomicString + literal + string));
+    EXPECT_N_WTF_STRING_COPIES(2, (literal + stringView) + (literal + atomicString) + (literal + string));
+    EXPECT_N_WTF_STRING_COPIES(2, stringView + literal + atomicString + literal + string + literal);
+    EXPECT_N_WTF_STRING_COPIES(2, stringView + (literal + atomicString + literal + string + literal));
+    EXPECT_N_WTF_STRING_COPIES(2, (stringView + literal) + (atomicString + literal) + (string + literal));
+
+    EXPECT_N_WTF_STRING_COPIES(2, "C string" + stringView + "C string" + string + "C string" + atomicString);
+    EXPECT_N_WTF_STRING_COPIES(2, "C string" + (stringView + "C string" + string + "C string" + atomicString));
+    EXPECT_N_WTF_STRING_COPIES(2, ("C string" + stringView) + ("C string" + string) + ("C string" + atomicString));
+    EXPECT_N_WTF_STRING_COPIES(2, stringView + "C string" + string + "C string" + atomicString + "C string");
+    EXPECT_N_WTF_STRING_COPIES(2, stringView + ("C string" + string + "C string" + atomicString + "C string"));
+    EXPECT_N_WTF_STRING_COPIES(2, (stringView + "C string") + (string + "C string") + (atomicString + "C string"));
+
+    EXPECT_N_WTF_STRING_COPIES(2, literal + stringView + literal + string + literal + atomicString);
+    EXPECT_N_WTF_STRING_COPIES(2, literal + (stringView + literal + string + literal + atomicString));
+    EXPECT_N_WTF_STRING_COPIES(2, (literal + stringView) + (literal + string) + (literal + atomicString));
+    EXPECT_N_WTF_STRING_COPIES(2, stringView + literal + string + literal + atomicString + literal);
+    EXPECT_N_WTF_STRING_COPIES(2, stringView + (literal + string + literal + atomicString + literal));
+    EXPECT_N_WTF_STRING_COPIES(2, (stringView + literal) + (string + literal) + (atomicString + literal));
+
 #if COMPILER(MSVC)
     EXPECT_N_WTF_STRING_COPIES(1, L"wide string" + string);
     EXPECT_N_WTF_STRING_COPIES(1, string + L"wide string");
     EXPECT_N_WTF_STRING_COPIES(1, L"wide string" + atomicString);
     EXPECT_N_WTF_STRING_COPIES(1, atomicString + L"wide string");
+    EXPECT_N_WTF_STRING_COPIES(0, L"wide string" + stringView);
+    EXPECT_N_WTF_STRING_COPIES(0, stringView + L"wide string");
 
     EXPECT_N_WTF_STRING_COPIES(2, L"wide string" + string + L"wide string" + string);
     EXPECT_N_WTF_STRING_COPIES(2, L"wide string" + (string + L"wide string" + string));
@@ -168,19 +273,54 @@
     EXPECT_N_WTF_STRING_COPIES(2, atomicString + (L"wide string" + atomicString + L"wide string"));
     EXPECT_N_WTF_STRING_COPIES(2, (atomicString + L"wide string") + (atomicString + L"wide string"));
 
-    EXPECT_N_WTF_STRING_COPIES(2, L"wide string" + string + L"wide string" + atomicString);
-    EXPECT_N_WTF_STRING_COPIES(2, L"wide string" + (string + L"wide string" + atomicString));
-    EXPECT_N_WTF_STRING_COPIES(2, (L"wide string" + string) + (L"wide string" + atomicString));
-    EXPECT_N_WTF_STRING_COPIES(2, string + L"wide string" + atomicString + L"wide string");
-    EXPECT_N_WTF_STRING_COPIES(2, string + (L"wide string" + atomicString + L"wide string"));
-    EXPECT_N_WTF_STRING_COPIES(2, (string + L"wide string") + (atomicString + L"wide string"));
+    EXPECT_N_WTF_STRING_COPIES(0, L"wide string" + stringView + L"wide string" + stringView);
+    EXPECT_N_WTF_STRING_COPIES(0, L"wide string" + (stringView + L"wide string" + stringView));
+    EXPECT_N_WTF_STRING_COPIES(0, (L"wide string" + stringView) + (L"wide string" + stringView));
+    EXPECT_N_WTF_STRING_COPIES(0, stringView + L"wide string" + stringView + L"wide string");
+    EXPECT_N_WTF_STRING_COPIES(0, stringView + (L"wide string" + stringView + L"wide string"));
+    EXPECT_N_WTF_STRING_COPIES(0, (stringView + L"wide string") + (stringView + L"wide string"));
 
-    EXPECT_N_WTF_STRING_COPIES(2, L"wide string" + atomicString + L"wide string" + string);
-    EXPECT_N_WTF_STRING_COPIES(2, L"wide string" + (atomicString + L"wide string" + string));
-    EXPECT_N_WTF_STRING_COPIES(2, (L"wide string" + atomicString) + (L"wide string" + string));
-    EXPECT_N_WTF_STRING_COPIES(2, atomicString + L"wide string" + string + L"wide string");
-    EXPECT_N_WTF_STRING_COPIES(2, atomicString + (L"wide string" + string + L"wide string"));
-    EXPECT_N_WTF_STRING_COPIES(2, (atomicString + L"wide string") + (string + L"wide string"));
+    EXPECT_N_WTF_STRING_COPIES(2, L"wide string" + string + L"wide string" + atomicString + L"wide string" + stringView);
+    EXPECT_N_WTF_STRING_COPIES(2, L"wide string" + (string + L"wide string" + atomicString + L"wide string" + stringView));
+    EXPECT_N_WTF_STRING_COPIES(2, (L"wide string" + string) + (L"wide string" + atomicString) + (L"wide string" + stringView));
+    EXPECT_N_WTF_STRING_COPIES(2, string + L"wide string" + atomicString + L"wide string" + stringView + L"wide string");
+    EXPECT_N_WTF_STRING_COPIES(2, string + (L"wide string" + atomicString + L"wide string" + stringView + L"wide string"));
+    EXPECT_N_WTF_STRING_COPIES(2, (string + L"wide string") + (atomicString + L"wide string") + (stringView + L"wide string"));
+
+    EXPECT_N_WTF_STRING_COPIES(2, L"wide string" + string + L"wide string" + stringView + L"wide string" + atomicString);
+    EXPECT_N_WTF_STRING_COPIES(2, L"wide string" + (string + L"wide string" + stringView + L"wide string" + atomicString));
+    EXPECT_N_WTF_STRING_COPIES(2, (L"wide string" + string) + (L"wide string" + stringView) + (L"wide string" + atomicString));
+    EXPECT_N_WTF_STRING_COPIES(2, string + L"wide string" + stringView + L"wide string" + atomicString + L"wide string");
+    EXPECT_N_WTF_STRING_COPIES(2, string + (L"wide string" + stringView + L"wide string" + atomicString + L"wide string"));
+    EXPECT_N_WTF_STRING_COPIES(2, (string + L"wide string") + (stringView + L"wide string") + (atomicString + L"wide string"));
+
+    EXPECT_N_WTF_STRING_COPIES(2, L"wide string" + atomicString + L"wide string" + string + L"wide string" + stringView);
+    EXPECT_N_WTF_STRING_COPIES(2, L"wide string" + (atomicString + L"wide string" + string + L"wide string" + stringView));
+    EXPECT_N_WTF_STRING_COPIES(2, (L"wide string" + atomicString) + (L"wide string" + string) + (L"wide string" + stringView));
+    EXPECT_N_WTF_STRING_COPIES(2, atomicString + L"wide string" + string + L"wide string" + stringView + L"wide string");
+    EXPECT_N_WTF_STRING_COPIES(2, atomicString + (L"wide string" + string + L"wide string" + stringView + L"wide string"));
+    EXPECT_N_WTF_STRING_COPIES(2, (atomicString + L"wide string") + (string + L"wide string") + (stringView + L"wide string"));
+
+    EXPECT_N_WTF_STRING_COPIES(2, L"wide string" + atomicString + L"wide string" + stringView + L"wide string" + string);
+    EXPECT_N_WTF_STRING_COPIES(2, L"wide string" + (atomicString + L"wide string" + stringView + L"wide string" + string));
+    EXPECT_N_WTF_STRING_COPIES(2, (L"wide string" + atomicString) + (L"wide string" + stringView) + (L"wide string" + string));
+    EXPECT_N_WTF_STRING_COPIES(2, atomicString + L"wide string" + stringView + L"wide string" + string + L"wide string");
+    EXPECT_N_WTF_STRING_COPIES(2, atomicString + (L"wide string" + stringView + L"wide string" + string + L"wide string"));
+    EXPECT_N_WTF_STRING_COPIES(2, (atomicString + L"wide string") + (stringView + L"wide string") + (string + L"wide string"));
+
+    EXPECT_N_WTF_STRING_COPIES(2, L"wide string" + stringView + L"wide string" + atomicString + L"wide string" + string);
+    EXPECT_N_WTF_STRING_COPIES(2, L"wide string" + (stringView + L"wide string" + atomicString + L"wide string" + string));
+    EXPECT_N_WTF_STRING_COPIES(2, (L"wide string" + stringView) + (L"wide string" + atomicString) + (L"wide string" + string));
+    EXPECT_N_WTF_STRING_COPIES(2, stringView + L"wide string" + atomicString + L"wide string" + string + L"wide string");
+    EXPECT_N_WTF_STRING_COPIES(2, stringView + (L"wide string" + atomicString + L"wide string" + string + L"wide string"));
+    EXPECT_N_WTF_STRING_COPIES(2, (stringView + L"wide string") + (atomicString + L"wide string") + (string + L"wide string"));
+
+    EXPECT_N_WTF_STRING_COPIES(2, L"wide string" + stringView + L"wide string" + string + L"wide string" + atomicString);
+    EXPECT_N_WTF_STRING_COPIES(2, L"wide string" + (stringView + L"wide string" + string + L"wide string" + atomicString));
+    EXPECT_N_WTF_STRING_COPIES(2, (L"wide string" + stringView) + (L"wide string" + string) + (L"wide string" + atomicString));
+    EXPECT_N_WTF_STRING_COPIES(2, stringView + L"wide string" + string + L"wide string" + atomicString + L"wide string");
+    EXPECT_N_WTF_STRING_COPIES(2, stringView + (L"wide string" + string + L"wide string" + atomicString + L"wide string"));
+    EXPECT_N_WTF_STRING_COPIES(2, (stringView + L"wide string") + (string + L"wide string") + (atomicString + L"wide string"));
 #endif
 }
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to