Title: [154555] trunk
Revision
154555
Author
[email protected]
Date
2013-08-24 16:40:49 -0700 (Sat, 24 Aug 2013)

Log Message

RetainPtr lacks move constructor for case when argument is a RetainPtr of a different type
https://bugs.webkit.org/show_bug.cgi?id=120255

Reviewed by Andreas Kling.

Source/WTF:

* wtf/RetainPtr.h: Added missing move constructor, modeled on the other move constructor,
and the one from RetPtr.

Tools:

* TestWebKitAPI/Tests/WTF/ns/RetainPtr.mm: Added four tests covering move assignment and construction.

Modified Paths

Diff

Modified: trunk/Source/WTF/ChangeLog (154554 => 154555)


--- trunk/Source/WTF/ChangeLog	2013-08-24 22:50:46 UTC (rev 154554)
+++ trunk/Source/WTF/ChangeLog	2013-08-24 23:40:49 UTC (rev 154555)
@@ -1,3 +1,13 @@
+2013-08-24  Darin Adler  <[email protected]>
+
+        RetainPtr lacks move constructor for case when argument is a RetainPtr of a different type
+        https://bugs.webkit.org/show_bug.cgi?id=120255
+
+        Reviewed by Andreas Kling.
+
+        * wtf/RetainPtr.h: Added missing move constructor, modeled on the other move constructor,
+        and the one from RetPtr.
+
 2013-08-24  Oliver Hunt  <[email protected]>
 
         Make the world build.

Modified: trunk/Source/WTF/wtf/RetainPtr.h (154554 => 154555)


--- trunk/Source/WTF/wtf/RetainPtr.h	2013-08-24 22:50:46 UTC (rev 154554)
+++ trunk/Source/WTF/wtf/RetainPtr.h	2013-08-24 23:40:49 UTC (rev 154555)
@@ -99,6 +99,7 @@
 
 #if COMPILER_SUPPORTS(CXX_RVALUE_REFERENCES)
         RetainPtr(RetainPtr&& o) : m_ptr(toStorageType(o.leakRef())) { }
+        template<typename U> RetainPtr(RetainPtr<U>&& o) : m_ptr(toStorageType(o.leakRef())) { }
 #endif
 
         // Hash table deleted values, which are only constructed and never copied or destroyed.

Modified: trunk/Tools/ChangeLog (154554 => 154555)


--- trunk/Tools/ChangeLog	2013-08-24 22:50:46 UTC (rev 154554)
+++ trunk/Tools/ChangeLog	2013-08-24 23:40:49 UTC (rev 154555)
@@ -1,3 +1,12 @@
+2013-08-24  Darin Adler  <[email protected]>
+
+        RetainPtr lacks move constructor for case when argument is a RetainPtr of a different type
+        https://bugs.webkit.org/show_bug.cgi?id=120255
+
+        Reviewed by Andreas Kling.
+
+        * TestWebKitAPI/Tests/WTF/ns/RetainPtr.mm: Added four tests covering move assignment and construction.
+
 2013-08-24  Anders Carlsson  <[email protected]>
 
         Don't treat NSLocalizedDescriptionKey and NSLocalizedRecoverySuggestionErrorKey as NSLocalized macros

Modified: trunk/Tools/TestWebKitAPI/Tests/WTF/ns/RetainPtr.mm (154554 => 154555)


--- trunk/Tools/TestWebKitAPI/Tests/WTF/ns/RetainPtr.mm	2013-08-24 22:50:46 UTC (rev 154554)
+++ trunk/Tools/TestWebKitAPI/Tests/WTF/ns/RetainPtr.mm	2013-08-24 23:40:49 UTC (rev 154555)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2011 Apple Inc. All rights reserved.
+ * Copyright (C) 2011, 2013 Apple Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -39,4 +39,80 @@
     EXPECT_EQ(1, CFGetRetainCount(foo.get()));
 }
 
+TEST(RetainPtr, MoveAssignmentFromSameType)
+{
+    NSString *string = @"foo";
+    RetainPtr<NSString> ptr;
+
+    // This should invoke RetainPtr's move assignment operator.
+    ptr = RetainPtr<NSString>(string);
+
+    EXPECT_EQ(string, ptr);
+
+    ptr = 0;
+    RetainPtr<NSString> temp = string;
+
+    // This should invoke RetainPtr's move assignment operator.
+    ptr = std::move(temp);
+
+    EXPECT_EQ(string, ptr);
+    EXPECT_EQ((NSString *)0, temp);
+}
+
+TEST(RetainPtr, MoveAssignmentFromSimilarType)
+{
+    NSMutableString *string = [NSMutableString stringWithUTF8String:"foo"];
+    RetainPtr<NSString> ptr;
+
+    // This should invoke RetainPtr's move assignment operator.
+    ptr = RetainPtr<NSMutableString>(string);
+
+    EXPECT_EQ(string, ptr);
+
+    ptr = 0;
+    RetainPtr<NSMutableString> temp = string;
+
+    // This should invoke RetainPtr's move assignment operator.
+    ptr = std::move(temp);
+
+    EXPECT_EQ(string, ptr);
+    EXPECT_EQ((NSString *)0, temp);
+}
+
+TEST(RetainPtr, ConstructionFromSameType)
+{
+    NSString *string = @"foo";
+
+    // This should invoke RetainPtr's move constructor.
+    RetainPtr<NSString> ptr = std::move(RetainPtr<NSString>(string));
+
+    EXPECT_EQ(string, ptr);
+
+    RetainPtr<NSString> temp = string;
+
+    // This should invoke RetainPtr's move constructor.
+    RetainPtr<NSString> ptr2(std::move(temp));
+
+    EXPECT_EQ(string, ptr2);
+    EXPECT_EQ((NSString *)0, temp);
+}
+
+TEST(RetainPtr, ConstructionFromSimilarType)
+{
+    NSMutableString *string = [NSMutableString stringWithUTF8String:"foo"];
+
+    // This should invoke RetainPtr's move constructor.
+    RetainPtr<NSString> ptr = RetainPtr<NSMutableString>(string);
+
+    EXPECT_EQ(string, ptr);
+
+    RetainPtr<NSMutableString> temp = string;
+
+    // This should invoke RetainPtr's move constructor.
+    RetainPtr<NSString> ptr2(std::move(temp));
+
+    EXPECT_EQ(string, ptr2);
+    EXPECT_EQ((NSString *)0, temp);
+}
+
 } // namespace TestWebKitAPI
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to