Use std::forward() instead of WTF::move() in CSSPrimitiveValue::create(T&& value)
authorcdumez@apple.com <cdumez@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 26 Jan 2015 20:04:38 +0000 (20:04 +0000)
committercdumez@apple.com <cdumez@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 26 Jan 2015 20:04:38 +0000 (20:04 +0000)
https://bugs.webkit.org/show_bug.cgi?id=140891

Reviewed by Anders Carlsson.

Use std::forward() instead of WTF::move() in CSSPrimitiveValue::create(T&& value)
to make sure the argument is not unexpectedly moved when it shouldn't (like I
experienced yesterday in Bug 140577):
<http://trac.webkit.org/changeset/179105>

* css/CSSPrimitiveValue.h:
(WebCore::CSSPrimitiveValue::create):
* css/CSSValuePool.h:
(WebCore::CSSValuePool::createValue):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@179131 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebCore/ChangeLog
Source/WebCore/css/CSSPrimitiveValue.h
Source/WebCore/css/CSSValuePool.h

index 4ef31e6..4659346 100644 (file)
@@ -1,3 +1,20 @@
+2015-01-26  Chris Dumez  <cdumez@apple.com>
+
+        Use std::forward() instead of WTF::move() in CSSPrimitiveValue::create(T&& value)
+        https://bugs.webkit.org/show_bug.cgi?id=140891
+
+        Reviewed by Anders Carlsson.
+
+        Use std::forward() instead of WTF::move() in CSSPrimitiveValue::create(T&& value)
+        to make sure the argument is not unexpectedly moved when it shouldn't (like I
+        experienced yesterday in Bug 140577):
+        <http://trac.webkit.org/changeset/179105>
+
+        * css/CSSPrimitiveValue.h:
+        (WebCore::CSSPrimitiveValue::create):
+        * css/CSSValuePool.h:
+        (WebCore::CSSValuePool::createValue):
+
 2015-01-26  Beth Dakin  <bdakin@apple.com>
 
         Blacklist iBooks for WebKit's default immediate actions
index 1b480fd..50874ee 100644 (file)
@@ -27,6 +27,7 @@
 #include "CSSValueKeywords.h"
 #include "Color.h"
 #include "LayoutUnit.h"
+#include <utility>
 #include <wtf/Forward.h>
 #include <wtf/MathExtras.h>
 #include <wtf/PassRefPtr.h>
@@ -236,14 +237,9 @@ public:
     static Ref<CSSPrimitiveValue> create(const Length& value, const RenderStyle* style) { return adoptRef(*new CSSPrimitiveValue(value, style)); }
     static Ref<CSSPrimitiveValue> create(const LengthSize& value, const RenderStyle* style) { return adoptRef(*new CSSPrimitiveValue(value, style)); }
 
-    template<typename T> static Ref<CSSPrimitiveValue> create(const T& value)
-    {
-        return adoptRef(*new CSSPrimitiveValue(value));
-    }
-
     template<typename T> static Ref<CSSPrimitiveValue> create(T&& value)
     {
-        return adoptRef(*new CSSPrimitiveValue(WTF::move(value)));
+        return adoptRef(*new CSSPrimitiveValue(std::forward<T>(value)));
     }
 
     // This value is used to handle quirky margins in reflow roots (body, td, and th) like WinIE.
index 860fb7b..aac736c 100644 (file)
@@ -32,6 +32,7 @@
 #include "CSSPrimitiveValue.h"
 #include "CSSPropertyNames.h"
 #include "CSSValueKeywords.h"
+#include <utility>
 #include <wtf/HashMap.h>
 #include <wtf/NeverDestroyed.h>
 #include <wtf/RefPtr.h>
@@ -56,7 +57,7 @@ public:
     Ref<CSSPrimitiveValue> createValue(const String& value, CSSPrimitiveValue::UnitTypes type) { return CSSPrimitiveValue::create(value, type); }
     Ref<CSSPrimitiveValue> createValue(const Length& value, const RenderStyle* style) { return CSSPrimitiveValue::create(value, style); }
     Ref<CSSPrimitiveValue> createValue(const LengthSize& value, const RenderStyle* style) { return CSSPrimitiveValue::create(value, style); }
-    template<typename T> static Ref<CSSPrimitiveValue> createValue(T value) { return CSSPrimitiveValue::create(value); }
+    template<typename T> static Ref<CSSPrimitiveValue> createValue(T&& value) { return CSSPrimitiveValue::create(std::forward<T>(value)); }
 
     void drain();