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