Backport Wikipedia crashfix for clang 3.5

PR:		196802
Reported by:	dumbbell
Obtained from:	https://github.com/mozilla/gecko-dev/commit/87f367b
Obtained from:	https://github.com/mozilla/gecko-dev/commit/c97894b (esr31 version)
Differential Revision:	https://reviews.freebsd.org/D1568
Approved by:	flo (mentor)
MFH:		2015Q1
This commit is contained in:
Jan Beich 2015-01-20 23:59:03 +00:00
parent cd754d7721
commit 3d140725bd
Notes: svn2git 2021-03-31 03:12:20 +00:00
svn path=/head/; revision=377564
5 changed files with 786 additions and 0 deletions

View file

@ -0,0 +1,156 @@
commit c97894b
Author: L. David Baron <dbaron@dbaron.org>
Date: Sun Oct 19 23:31:39 2014 -0400
Bug 1083461 - Convert nsCSSValue{,Pair}List::operator== back to a static Equal method so that it can be validly called on null pointers. r=bzbarsky approval-mozilla-esr31=bkerensa
---
layout/style/nsCSSValue.cpp | 28 ++++++++++++++++------------
layout/style/nsCSSValue.h | 22 ++++++++++++++++------
layout/style/nsStyleAnimation.cpp | 6 ++++--
3 files changed, 36 insertions(+), 20 deletions(-)
diff --git layout/style/nsCSSValue.cpp layout/style/nsCSSValue.cpp
index 781ef65..4bbc979 100644
--- mozilla/layout/style/nsCSSValue.cpp
+++ mozilla/layout/style/nsCSSValue.cpp
@@ -253,13 +253,14 @@ bool nsCSSValue::operator==(const nsCSSValue& aOther) const
return *mValue.mRect == *aOther.mValue.mRect;
}
else if (eCSSUnit_List == mUnit) {
- return *mValue.mList == *aOther.mValue.mList;
+ return nsCSSValueList::Equal(mValue.mList, aOther.mValue.mList);
}
else if (eCSSUnit_SharedList == mUnit) {
return *mValue.mSharedList == *aOther.mValue.mSharedList;
}
else if (eCSSUnit_PairList == mUnit) {
- return *mValue.mPairList == *aOther.mValue.mPairList;
+ return nsCSSValuePairList::Equal(mValue.mPairList,
+ aOther.mValue.mPairList);
}
else if (eCSSUnit_GridTemplateAreas == mUnit) {
return *mValue.mGridTemplateAreas == *aOther.mValue.mGridTemplateAreas;
@@ -1740,13 +1741,15 @@ nsCSSValueList::AppendToString(nsCSSProperty aProperty, nsAString& aResult,
}
}
-bool
-nsCSSValueList::operator==(const nsCSSValueList& aOther) const
+/* static */ bool
+nsCSSValueList::Equal(const nsCSSValueList* aList1,
+ const nsCSSValueList* aList2)
{
- if (this == &aOther)
+ if (aList1 == aList2) {
return true;
+ }
- const nsCSSValueList *p1 = this, *p2 = &aOther;
+ const nsCSSValueList *p1 = aList1, *p2 = aList2;
for ( ; p1 && p2; p1 = p1->mNext, p2 = p2->mNext) {
if (p1->mValue != p2->mValue)
return false;
@@ -1799,8 +1802,7 @@ nsCSSValueSharedList::AppendToString(nsCSSProperty aProperty, nsAString& aResult
bool
nsCSSValueSharedList::operator==(const nsCSSValueSharedList& aOther) const
{
- return !mHead == !aOther.mHead &&
- (!mHead || *mHead == *aOther.mHead);
+ return nsCSSValueList::Equal(mHead, aOther.mHead);
}
size_t
@@ -2010,13 +2012,15 @@ nsCSSValuePairList::AppendToString(nsCSSProperty aProperty,
}
}
-bool
-nsCSSValuePairList::operator==(const nsCSSValuePairList& aOther) const
+/* static */ bool
+nsCSSValuePairList::Equal(const nsCSSValuePairList* aList1,
+ const nsCSSValuePairList* aList2)
{
- if (this == &aOther)
+ if (aList1 == aList2) {
return true;
+ }
- const nsCSSValuePairList *p1 = this, *p2 = &aOther;
+ const nsCSSValuePairList *p1 = aList1, *p2 = aList2;
for ( ; p1 && p2; p1 = p1->mNext, p2 = p2->mNext) {
if (p1->mXValue != p2->mXValue ||
p1->mYValue != p2->mYValue)
diff --git layout/style/nsCSSValue.h layout/style/nsCSSValue.h
index 753938c..77eeef0 100644
--- mozilla/layout/style/nsCSSValue.h
+++ mozilla/layout/style/nsCSSValue.h
@@ -806,9 +806,8 @@ struct nsCSSValueList {
void AppendToString(nsCSSProperty aProperty, nsAString& aResult,
nsCSSValue::Serialization aValueSerialization) const;
- bool operator==(nsCSSValueList const& aOther) const;
- bool operator!=(const nsCSSValueList& aOther) const
- { return !(*this == aOther); }
+ static bool Equal(const nsCSSValueList* aList1,
+ const nsCSSValueList* aList2);
size_t SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const;
@@ -821,6 +820,12 @@ private:
{
MOZ_COUNT_CTOR(nsCSSValueList);
}
+
+ // We don't want operator== or operator!= because they wouldn't be
+ // null-safe, which is generally what we need. Use |Equal| method
+ // above instead.
+ bool operator==(nsCSSValueList const& aOther) const MOZ_DELETE;
+ bool operator!=(const nsCSSValueList& aOther) const MOZ_DELETE;
};
// nsCSSValueList_heap differs from nsCSSValueList only in being
@@ -1199,9 +1204,8 @@ struct nsCSSValuePairList {
void AppendToString(nsCSSProperty aProperty, nsAString& aResult,
nsCSSValue::Serialization aValueSerialization) const;
- bool operator==(const nsCSSValuePairList& aOther) const;
- bool operator!=(const nsCSSValuePairList& aOther) const
- { return !(*this == aOther); }
+ static bool Equal(const nsCSSValuePairList* aList1,
+ const nsCSSValuePairList* aList2);
size_t SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const;
@@ -1215,6 +1219,12 @@ private:
{
MOZ_COUNT_CTOR(nsCSSValuePairList);
}
+
+ // We don't want operator== or operator!= because they wouldn't be
+ // null-safe, which is generally what we need. Use |Equal| method
+ // above instead.
+ bool operator==(const nsCSSValuePairList& aOther) const MOZ_DELETE;
+ bool operator!=(const nsCSSValuePairList& aOther) const MOZ_DELETE;
};
// nsCSSValuePairList_heap differs from nsCSSValuePairList only in being
diff --git layout/style/nsStyleAnimation.cpp layout/style/nsStyleAnimation.cpp
index 6c2ccb0..8dbe404 100644
--- mozilla/layout/style/nsStyleAnimation.cpp
+++ mozilla/layout/style/nsStyleAnimation.cpp
@@ -3816,11 +3816,13 @@ nsStyleAnimation::Value::operator==(const Value& aOther) const
case eUnit_Filter:
case eUnit_Shadow:
case eUnit_BackgroundPosition:
- return *mValue.mCSSValueList == *aOther.mValue.mCSSValueList;
+ return nsCSSValueList::Equal(mValue.mCSSValueList,
+ aOther.mValue.mCSSValueList);
case eUnit_Transform:
return *mValue.mCSSValueSharedList == *aOther.mValue.mCSSValueSharedList;
case eUnit_CSSValuePairList:
- return *mValue.mCSSValuePairList == *aOther.mValue.mCSSValuePairList;
+ return nsCSSValuePairList::Equal(mValue.mCSSValuePairList,
+ aOther.mValue.mCSSValuePairList);
case eUnit_UnparsedString:
return (NS_strcmp(GetStringBufferValue(),
aOther.GetStringBufferValue()) == 0);

View file

@ -0,0 +1,156 @@
commit c97894b
Author: L. David Baron <dbaron@dbaron.org>
Date: Sun Oct 19 23:31:39 2014 -0400
Bug 1083461 - Convert nsCSSValue{,Pair}List::operator== back to a static Equal method so that it can be validly called on null pointers. r=bzbarsky approval-mozilla-esr31=bkerensa
---
layout/style/nsCSSValue.cpp | 28 ++++++++++++++++------------
layout/style/nsCSSValue.h | 22 ++++++++++++++++------
layout/style/nsStyleAnimation.cpp | 6 ++++--
3 files changed, 36 insertions(+), 20 deletions(-)
diff --git layout/style/nsCSSValue.cpp layout/style/nsCSSValue.cpp
index 781ef65..4bbc979 100644
--- layout/style/nsCSSValue.cpp
+++ layout/style/nsCSSValue.cpp
@@ -253,13 +253,14 @@ bool nsCSSValue::operator==(const nsCSSValue& aOther) const
return *mValue.mRect == *aOther.mValue.mRect;
}
else if (eCSSUnit_List == mUnit) {
- return *mValue.mList == *aOther.mValue.mList;
+ return nsCSSValueList::Equal(mValue.mList, aOther.mValue.mList);
}
else if (eCSSUnit_SharedList == mUnit) {
return *mValue.mSharedList == *aOther.mValue.mSharedList;
}
else if (eCSSUnit_PairList == mUnit) {
- return *mValue.mPairList == *aOther.mValue.mPairList;
+ return nsCSSValuePairList::Equal(mValue.mPairList,
+ aOther.mValue.mPairList);
}
else if (eCSSUnit_GridTemplateAreas == mUnit) {
return *mValue.mGridTemplateAreas == *aOther.mValue.mGridTemplateAreas;
@@ -1740,13 +1741,15 @@ nsCSSValueList::AppendToString(nsCSSProperty aProperty, nsAString& aResult,
}
}
-bool
-nsCSSValueList::operator==(const nsCSSValueList& aOther) const
+/* static */ bool
+nsCSSValueList::Equal(const nsCSSValueList* aList1,
+ const nsCSSValueList* aList2)
{
- if (this == &aOther)
+ if (aList1 == aList2) {
return true;
+ }
- const nsCSSValueList *p1 = this, *p2 = &aOther;
+ const nsCSSValueList *p1 = aList1, *p2 = aList2;
for ( ; p1 && p2; p1 = p1->mNext, p2 = p2->mNext) {
if (p1->mValue != p2->mValue)
return false;
@@ -1799,8 +1802,7 @@ nsCSSValueSharedList::AppendToString(nsCSSProperty aProperty, nsAString& aResult
bool
nsCSSValueSharedList::operator==(const nsCSSValueSharedList& aOther) const
{
- return !mHead == !aOther.mHead &&
- (!mHead || *mHead == *aOther.mHead);
+ return nsCSSValueList::Equal(mHead, aOther.mHead);
}
size_t
@@ -2010,13 +2012,15 @@ nsCSSValuePairList::AppendToString(nsCSSProperty aProperty,
}
}
-bool
-nsCSSValuePairList::operator==(const nsCSSValuePairList& aOther) const
+/* static */ bool
+nsCSSValuePairList::Equal(const nsCSSValuePairList* aList1,
+ const nsCSSValuePairList* aList2)
{
- if (this == &aOther)
+ if (aList1 == aList2) {
return true;
+ }
- const nsCSSValuePairList *p1 = this, *p2 = &aOther;
+ const nsCSSValuePairList *p1 = aList1, *p2 = aList2;
for ( ; p1 && p2; p1 = p1->mNext, p2 = p2->mNext) {
if (p1->mXValue != p2->mXValue ||
p1->mYValue != p2->mYValue)
diff --git layout/style/nsCSSValue.h layout/style/nsCSSValue.h
index 753938c..77eeef0 100644
--- layout/style/nsCSSValue.h
+++ layout/style/nsCSSValue.h
@@ -806,9 +806,8 @@ struct nsCSSValueList {
void AppendToString(nsCSSProperty aProperty, nsAString& aResult,
nsCSSValue::Serialization aValueSerialization) const;
- bool operator==(nsCSSValueList const& aOther) const;
- bool operator!=(const nsCSSValueList& aOther) const
- { return !(*this == aOther); }
+ static bool Equal(const nsCSSValueList* aList1,
+ const nsCSSValueList* aList2);
size_t SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const;
@@ -821,6 +820,12 @@ private:
{
MOZ_COUNT_CTOR(nsCSSValueList);
}
+
+ // We don't want operator== or operator!= because they wouldn't be
+ // null-safe, which is generally what we need. Use |Equal| method
+ // above instead.
+ bool operator==(nsCSSValueList const& aOther) const MOZ_DELETE;
+ bool operator!=(const nsCSSValueList& aOther) const MOZ_DELETE;
};
// nsCSSValueList_heap differs from nsCSSValueList only in being
@@ -1199,9 +1204,8 @@ struct nsCSSValuePairList {
void AppendToString(nsCSSProperty aProperty, nsAString& aResult,
nsCSSValue::Serialization aValueSerialization) const;
- bool operator==(const nsCSSValuePairList& aOther) const;
- bool operator!=(const nsCSSValuePairList& aOther) const
- { return !(*this == aOther); }
+ static bool Equal(const nsCSSValuePairList* aList1,
+ const nsCSSValuePairList* aList2);
size_t SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const;
@@ -1215,6 +1219,12 @@ private:
{
MOZ_COUNT_CTOR(nsCSSValuePairList);
}
+
+ // We don't want operator== or operator!= because they wouldn't be
+ // null-safe, which is generally what we need. Use |Equal| method
+ // above instead.
+ bool operator==(const nsCSSValuePairList& aOther) const MOZ_DELETE;
+ bool operator!=(const nsCSSValuePairList& aOther) const MOZ_DELETE;
};
// nsCSSValuePairList_heap differs from nsCSSValuePairList only in being
diff --git layout/style/nsStyleAnimation.cpp layout/style/nsStyleAnimation.cpp
index 6c2ccb0..8dbe404 100644
--- layout/style/nsStyleAnimation.cpp
+++ layout/style/nsStyleAnimation.cpp
@@ -3816,11 +3816,13 @@ nsStyleAnimation::Value::operator==(const Value& aOther) const
case eUnit_Filter:
case eUnit_Shadow:
case eUnit_BackgroundPosition:
- return *mValue.mCSSValueList == *aOther.mValue.mCSSValueList;
+ return nsCSSValueList::Equal(mValue.mCSSValueList,
+ aOther.mValue.mCSSValueList);
case eUnit_Transform:
return *mValue.mCSSValueSharedList == *aOther.mValue.mCSSValueSharedList;
case eUnit_CSSValuePairList:
- return *mValue.mCSSValuePairList == *aOther.mValue.mCSSValuePairList;
+ return nsCSSValuePairList::Equal(mValue.mCSSValuePairList,
+ aOther.mValue.mCSSValuePairList);
case eUnit_UnparsedString:
return (NS_strcmp(GetStringBufferValue(),
aOther.GetStringBufferValue()) == 0);

View file

@ -0,0 +1,159 @@
commit 87f367b
Author: L. David Baron <dbaron@dbaron.org>
Date: Sun Oct 19 23:31:39 2014 -0400
Bug 1083461 - Convert nsCSSValue{,Pair}List::operator== back to a static Equal method so that it can be validly called on null pointers. r=bzbarsky
--HG--
extra : transplant_source : %CD%5D%9BE%FE%DE%A4%F2%B8%CF%D7%AE%84%90%3B%E8%A0d%D7%2B
---
layout/style/StyleAnimationValue.cpp | 6 ++++--
layout/style/nsCSSValue.cpp | 28 ++++++++++++++++------------
layout/style/nsCSSValue.h | 22 ++++++++++++++++------
3 files changed, 36 insertions(+), 20 deletions(-)
diff --git layout/style/StyleAnimationValue.cpp layout/style/StyleAnimationValue.cpp
index 40bc8bf..1898fe6 100644
--- layout/style/StyleAnimationValue.cpp
+++ layout/style/StyleAnimationValue.cpp
@@ -3851,11 +3851,13 @@ StyleAnimationValue::operator==(const StyleAnimationValue& aOther) const
case eUnit_Filter:
case eUnit_Shadow:
case eUnit_BackgroundPosition:
- return *mValue.mCSSValueList == *aOther.mValue.mCSSValueList;
+ return nsCSSValueList::Equal(mValue.mCSSValueList,
+ aOther.mValue.mCSSValueList);
case eUnit_Transform:
return *mValue.mCSSValueSharedList == *aOther.mValue.mCSSValueSharedList;
case eUnit_CSSValuePairList:
- return *mValue.mCSSValuePairList == *aOther.mValue.mCSSValuePairList;
+ return nsCSSValuePairList::Equal(mValue.mCSSValuePairList,
+ aOther.mValue.mCSSValuePairList);
case eUnit_UnparsedString:
return (NS_strcmp(GetStringBufferValue(),
aOther.GetStringBufferValue()) == 0);
diff --git layout/style/nsCSSValue.cpp layout/style/nsCSSValue.cpp
index dcb8496..fefb4f9 100644
--- layout/style/nsCSSValue.cpp
+++ layout/style/nsCSSValue.cpp
@@ -264,13 +264,14 @@ bool nsCSSValue::operator==(const nsCSSValue& aOther) const
return *mValue.mRect == *aOther.mValue.mRect;
}
else if (eCSSUnit_List == mUnit) {
- return *mValue.mList == *aOther.mValue.mList;
+ return nsCSSValueList::Equal(mValue.mList, aOther.mValue.mList);
}
else if (eCSSUnit_SharedList == mUnit) {
return *mValue.mSharedList == *aOther.mValue.mSharedList;
}
else if (eCSSUnit_PairList == mUnit) {
- return *mValue.mPairList == *aOther.mValue.mPairList;
+ return nsCSSValuePairList::Equal(mValue.mPairList,
+ aOther.mValue.mPairList);
}
else if (eCSSUnit_GridTemplateAreas == mUnit) {
return *mValue.mGridTemplateAreas == *aOther.mValue.mGridTemplateAreas;
@@ -1875,13 +1876,15 @@ nsCSSValueList::AppendToString(nsCSSProperty aProperty, nsAString& aResult,
}
}
-bool
-nsCSSValueList::operator==(const nsCSSValueList& aOther) const
+/* static */ bool
+nsCSSValueList::Equal(const nsCSSValueList* aList1,
+ const nsCSSValueList* aList2)
{
- if (this == &aOther)
+ if (aList1 == aList2) {
return true;
+ }
- const nsCSSValueList *p1 = this, *p2 = &aOther;
+ const nsCSSValueList *p1 = aList1, *p2 = aList2;
for ( ; p1 && p2; p1 = p1->mNext, p2 = p2->mNext) {
if (p1->mValue != p2->mValue)
return false;
@@ -1934,8 +1937,7 @@ nsCSSValueSharedList::AppendToString(nsCSSProperty aProperty, nsAString& aResult
bool
nsCSSValueSharedList::operator==(const nsCSSValueSharedList& aOther) const
{
- return !mHead == !aOther.mHead &&
- (!mHead || *mHead == *aOther.mHead);
+ return nsCSSValueList::Equal(mHead, aOther.mHead);
}
size_t
@@ -2148,13 +2150,15 @@ nsCSSValuePairList::AppendToString(nsCSSProperty aProperty,
}
}
-bool
-nsCSSValuePairList::operator==(const nsCSSValuePairList& aOther) const
+/* static */ bool
+nsCSSValuePairList::Equal(const nsCSSValuePairList* aList1,
+ const nsCSSValuePairList* aList2)
{
- if (this == &aOther)
+ if (aList1 == aList2) {
return true;
+ }
- const nsCSSValuePairList *p1 = this, *p2 = &aOther;
+ const nsCSSValuePairList *p1 = aList1, *p2 = aList2;
for ( ; p1 && p2; p1 = p1->mNext, p2 = p2->mNext) {
if (p1->mXValue != p2->mXValue ||
p1->mYValue != p2->mYValue)
diff --git layout/style/nsCSSValue.h layout/style/nsCSSValue.h
index 8418a2d..f0c4e63 100644
--- layout/style/nsCSSValue.h
+++ layout/style/nsCSSValue.h
@@ -871,9 +871,8 @@ struct nsCSSValueList {
void AppendToString(nsCSSProperty aProperty, nsAString& aResult,
nsCSSValue::Serialization aValueSerialization) const;
- bool operator==(nsCSSValueList const& aOther) const;
- bool operator!=(const nsCSSValueList& aOther) const
- { return !(*this == aOther); }
+ static bool Equal(const nsCSSValueList* aList1,
+ const nsCSSValueList* aList2);
size_t SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const;
@@ -886,6 +885,12 @@ private:
{
MOZ_COUNT_CTOR(nsCSSValueList);
}
+
+ // We don't want operator== or operator!= because they wouldn't be
+ // null-safe, which is generally what we need. Use |Equal| method
+ // above instead.
+ bool operator==(nsCSSValueList const& aOther) const MOZ_DELETE;
+ bool operator!=(const nsCSSValueList& aOther) const MOZ_DELETE;
};
// nsCSSValueList_heap differs from nsCSSValueList only in being
@@ -1264,9 +1269,8 @@ struct nsCSSValuePairList {
void AppendToString(nsCSSProperty aProperty, nsAString& aResult,
nsCSSValue::Serialization aValueSerialization) const;
- bool operator==(const nsCSSValuePairList& aOther) const;
- bool operator!=(const nsCSSValuePairList& aOther) const
- { return !(*this == aOther); }
+ static bool Equal(const nsCSSValuePairList* aList1,
+ const nsCSSValuePairList* aList2);
size_t SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const;
@@ -1280,6 +1284,12 @@ private:
{
MOZ_COUNT_CTOR(nsCSSValuePairList);
}
+
+ // We don't want operator== or operator!= because they wouldn't be
+ // null-safe, which is generally what we need. Use |Equal| method
+ // above instead.
+ bool operator==(const nsCSSValuePairList& aOther) const MOZ_DELETE;
+ bool operator!=(const nsCSSValuePairList& aOther) const MOZ_DELETE;
};
// nsCSSValuePairList_heap differs from nsCSSValuePairList only in being

View file

@ -0,0 +1,156 @@
commit c97894b
Author: L. David Baron <dbaron@dbaron.org>
Date: Sun Oct 19 23:31:39 2014 -0400
Bug 1083461 - Convert nsCSSValue{,Pair}List::operator== back to a static Equal method so that it can be validly called on null pointers. r=bzbarsky approval-mozilla-esr31=bkerensa
---
layout/style/nsCSSValue.cpp | 28 ++++++++++++++++------------
layout/style/nsCSSValue.h | 22 ++++++++++++++++------
layout/style/nsStyleAnimation.cpp | 6 ++++--
3 files changed, 36 insertions(+), 20 deletions(-)
diff --git layout/style/nsCSSValue.cpp layout/style/nsCSSValue.cpp
index 781ef65..4bbc979 100644
--- layout/style/nsCSSValue.cpp
+++ layout/style/nsCSSValue.cpp
@@ -253,13 +253,14 @@ bool nsCSSValue::operator==(const nsCSSValue& aOther) const
return *mValue.mRect == *aOther.mValue.mRect;
}
else if (eCSSUnit_List == mUnit) {
- return *mValue.mList == *aOther.mValue.mList;
+ return nsCSSValueList::Equal(mValue.mList, aOther.mValue.mList);
}
else if (eCSSUnit_SharedList == mUnit) {
return *mValue.mSharedList == *aOther.mValue.mSharedList;
}
else if (eCSSUnit_PairList == mUnit) {
- return *mValue.mPairList == *aOther.mValue.mPairList;
+ return nsCSSValuePairList::Equal(mValue.mPairList,
+ aOther.mValue.mPairList);
}
else if (eCSSUnit_GridTemplateAreas == mUnit) {
return *mValue.mGridTemplateAreas == *aOther.mValue.mGridTemplateAreas;
@@ -1740,13 +1741,15 @@ nsCSSValueList::AppendToString(nsCSSProperty aProperty, nsAString& aResult,
}
}
-bool
-nsCSSValueList::operator==(const nsCSSValueList& aOther) const
+/* static */ bool
+nsCSSValueList::Equal(const nsCSSValueList* aList1,
+ const nsCSSValueList* aList2)
{
- if (this == &aOther)
+ if (aList1 == aList2) {
return true;
+ }
- const nsCSSValueList *p1 = this, *p2 = &aOther;
+ const nsCSSValueList *p1 = aList1, *p2 = aList2;
for ( ; p1 && p2; p1 = p1->mNext, p2 = p2->mNext) {
if (p1->mValue != p2->mValue)
return false;
@@ -1799,8 +1802,7 @@ nsCSSValueSharedList::AppendToString(nsCSSProperty aProperty, nsAString& aResult
bool
nsCSSValueSharedList::operator==(const nsCSSValueSharedList& aOther) const
{
- return !mHead == !aOther.mHead &&
- (!mHead || *mHead == *aOther.mHead);
+ return nsCSSValueList::Equal(mHead, aOther.mHead);
}
size_t
@@ -2010,13 +2012,15 @@ nsCSSValuePairList::AppendToString(nsCSSProperty aProperty,
}
}
-bool
-nsCSSValuePairList::operator==(const nsCSSValuePairList& aOther) const
+/* static */ bool
+nsCSSValuePairList::Equal(const nsCSSValuePairList* aList1,
+ const nsCSSValuePairList* aList2)
{
- if (this == &aOther)
+ if (aList1 == aList2) {
return true;
+ }
- const nsCSSValuePairList *p1 = this, *p2 = &aOther;
+ const nsCSSValuePairList *p1 = aList1, *p2 = aList2;
for ( ; p1 && p2; p1 = p1->mNext, p2 = p2->mNext) {
if (p1->mXValue != p2->mXValue ||
p1->mYValue != p2->mYValue)
diff --git layout/style/nsCSSValue.h layout/style/nsCSSValue.h
index 753938c..77eeef0 100644
--- layout/style/nsCSSValue.h
+++ layout/style/nsCSSValue.h
@@ -806,9 +806,8 @@ struct nsCSSValueList {
void AppendToString(nsCSSProperty aProperty, nsAString& aResult,
nsCSSValue::Serialization aValueSerialization) const;
- bool operator==(nsCSSValueList const& aOther) const;
- bool operator!=(const nsCSSValueList& aOther) const
- { return !(*this == aOther); }
+ static bool Equal(const nsCSSValueList* aList1,
+ const nsCSSValueList* aList2);
size_t SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const;
@@ -821,6 +820,12 @@ private:
{
MOZ_COUNT_CTOR(nsCSSValueList);
}
+
+ // We don't want operator== or operator!= because they wouldn't be
+ // null-safe, which is generally what we need. Use |Equal| method
+ // above instead.
+ bool operator==(nsCSSValueList const& aOther) const MOZ_DELETE;
+ bool operator!=(const nsCSSValueList& aOther) const MOZ_DELETE;
};
// nsCSSValueList_heap differs from nsCSSValueList only in being
@@ -1199,9 +1204,8 @@ struct nsCSSValuePairList {
void AppendToString(nsCSSProperty aProperty, nsAString& aResult,
nsCSSValue::Serialization aValueSerialization) const;
- bool operator==(const nsCSSValuePairList& aOther) const;
- bool operator!=(const nsCSSValuePairList& aOther) const
- { return !(*this == aOther); }
+ static bool Equal(const nsCSSValuePairList* aList1,
+ const nsCSSValuePairList* aList2);
size_t SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const;
@@ -1215,6 +1219,12 @@ private:
{
MOZ_COUNT_CTOR(nsCSSValuePairList);
}
+
+ // We don't want operator== or operator!= because they wouldn't be
+ // null-safe, which is generally what we need. Use |Equal| method
+ // above instead.
+ bool operator==(const nsCSSValuePairList& aOther) const MOZ_DELETE;
+ bool operator!=(const nsCSSValuePairList& aOther) const MOZ_DELETE;
};
// nsCSSValuePairList_heap differs from nsCSSValuePairList only in being
diff --git layout/style/nsStyleAnimation.cpp layout/style/nsStyleAnimation.cpp
index 6c2ccb0..8dbe404 100644
--- layout/style/nsStyleAnimation.cpp
+++ layout/style/nsStyleAnimation.cpp
@@ -3816,11 +3816,13 @@ nsStyleAnimation::Value::operator==(const Value& aOther) const
case eUnit_Filter:
case eUnit_Shadow:
case eUnit_BackgroundPosition:
- return *mValue.mCSSValueList == *aOther.mValue.mCSSValueList;
+ return nsCSSValueList::Equal(mValue.mCSSValueList,
+ aOther.mValue.mCSSValueList);
case eUnit_Transform:
return *mValue.mCSSValueSharedList == *aOther.mValue.mCSSValueSharedList;
case eUnit_CSSValuePairList:
- return *mValue.mCSSValuePairList == *aOther.mValue.mCSSValuePairList;
+ return nsCSSValuePairList::Equal(mValue.mCSSValuePairList,
+ aOther.mValue.mCSSValuePairList);
case eUnit_UnparsedString:
return (NS_strcmp(GetStringBufferValue(),
aOther.GetStringBufferValue()) == 0);

View file

@ -0,0 +1,159 @@
commit 87f367b
Author: L. David Baron <dbaron@dbaron.org>
Date: Sun Oct 19 23:31:39 2014 -0400
Bug 1083461 - Convert nsCSSValue{,Pair}List::operator== back to a static Equal method so that it can be validly called on null pointers. r=bzbarsky
--HG--
extra : transplant_source : %CD%5D%9BE%FE%DE%A4%F2%B8%CF%D7%AE%84%90%3B%E8%A0d%D7%2B
---
layout/style/StyleAnimationValue.cpp | 6 ++++--
layout/style/nsCSSValue.cpp | 28 ++++++++++++++++------------
layout/style/nsCSSValue.h | 22 ++++++++++++++++------
3 files changed, 36 insertions(+), 20 deletions(-)
diff --git layout/style/StyleAnimationValue.cpp layout/style/StyleAnimationValue.cpp
index 40bc8bf..1898fe6 100644
--- mozilla/layout/style/StyleAnimationValue.cpp
+++ mozilla/layout/style/StyleAnimationValue.cpp
@@ -3851,11 +3851,13 @@ StyleAnimationValue::operator==(const StyleAnimationValue& aOther) const
case eUnit_Filter:
case eUnit_Shadow:
case eUnit_BackgroundPosition:
- return *mValue.mCSSValueList == *aOther.mValue.mCSSValueList;
+ return nsCSSValueList::Equal(mValue.mCSSValueList,
+ aOther.mValue.mCSSValueList);
case eUnit_Transform:
return *mValue.mCSSValueSharedList == *aOther.mValue.mCSSValueSharedList;
case eUnit_CSSValuePairList:
- return *mValue.mCSSValuePairList == *aOther.mValue.mCSSValuePairList;
+ return nsCSSValuePairList::Equal(mValue.mCSSValuePairList,
+ aOther.mValue.mCSSValuePairList);
case eUnit_UnparsedString:
return (NS_strcmp(GetStringBufferValue(),
aOther.GetStringBufferValue()) == 0);
diff --git layout/style/nsCSSValue.cpp layout/style/nsCSSValue.cpp
index dcb8496..fefb4f9 100644
--- mozilla/layout/style/nsCSSValue.cpp
+++ mozilla/layout/style/nsCSSValue.cpp
@@ -264,13 +264,14 @@ bool nsCSSValue::operator==(const nsCSSValue& aOther) const
return *mValue.mRect == *aOther.mValue.mRect;
}
else if (eCSSUnit_List == mUnit) {
- return *mValue.mList == *aOther.mValue.mList;
+ return nsCSSValueList::Equal(mValue.mList, aOther.mValue.mList);
}
else if (eCSSUnit_SharedList == mUnit) {
return *mValue.mSharedList == *aOther.mValue.mSharedList;
}
else if (eCSSUnit_PairList == mUnit) {
- return *mValue.mPairList == *aOther.mValue.mPairList;
+ return nsCSSValuePairList::Equal(mValue.mPairList,
+ aOther.mValue.mPairList);
}
else if (eCSSUnit_GridTemplateAreas == mUnit) {
return *mValue.mGridTemplateAreas == *aOther.mValue.mGridTemplateAreas;
@@ -1875,13 +1876,15 @@ nsCSSValueList::AppendToString(nsCSSProperty aProperty, nsAString& aResult,
}
}
-bool
-nsCSSValueList::operator==(const nsCSSValueList& aOther) const
+/* static */ bool
+nsCSSValueList::Equal(const nsCSSValueList* aList1,
+ const nsCSSValueList* aList2)
{
- if (this == &aOther)
+ if (aList1 == aList2) {
return true;
+ }
- const nsCSSValueList *p1 = this, *p2 = &aOther;
+ const nsCSSValueList *p1 = aList1, *p2 = aList2;
for ( ; p1 && p2; p1 = p1->mNext, p2 = p2->mNext) {
if (p1->mValue != p2->mValue)
return false;
@@ -1934,8 +1937,7 @@ nsCSSValueSharedList::AppendToString(nsCSSProperty aProperty, nsAString& aResult
bool
nsCSSValueSharedList::operator==(const nsCSSValueSharedList& aOther) const
{
- return !mHead == !aOther.mHead &&
- (!mHead || *mHead == *aOther.mHead);
+ return nsCSSValueList::Equal(mHead, aOther.mHead);
}
size_t
@@ -2148,13 +2150,15 @@ nsCSSValuePairList::AppendToString(nsCSSProperty aProperty,
}
}
-bool
-nsCSSValuePairList::operator==(const nsCSSValuePairList& aOther) const
+/* static */ bool
+nsCSSValuePairList::Equal(const nsCSSValuePairList* aList1,
+ const nsCSSValuePairList* aList2)
{
- if (this == &aOther)
+ if (aList1 == aList2) {
return true;
+ }
- const nsCSSValuePairList *p1 = this, *p2 = &aOther;
+ const nsCSSValuePairList *p1 = aList1, *p2 = aList2;
for ( ; p1 && p2; p1 = p1->mNext, p2 = p2->mNext) {
if (p1->mXValue != p2->mXValue ||
p1->mYValue != p2->mYValue)
diff --git layout/style/nsCSSValue.h layout/style/nsCSSValue.h
index 8418a2d..f0c4e63 100644
--- mozilla/layout/style/nsCSSValue.h
+++ mozilla/layout/style/nsCSSValue.h
@@ -871,9 +871,8 @@ struct nsCSSValueList {
void AppendToString(nsCSSProperty aProperty, nsAString& aResult,
nsCSSValue::Serialization aValueSerialization) const;
- bool operator==(nsCSSValueList const& aOther) const;
- bool operator!=(const nsCSSValueList& aOther) const
- { return !(*this == aOther); }
+ static bool Equal(const nsCSSValueList* aList1,
+ const nsCSSValueList* aList2);
size_t SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const;
@@ -886,6 +885,12 @@ private:
{
MOZ_COUNT_CTOR(nsCSSValueList);
}
+
+ // We don't want operator== or operator!= because they wouldn't be
+ // null-safe, which is generally what we need. Use |Equal| method
+ // above instead.
+ bool operator==(nsCSSValueList const& aOther) const MOZ_DELETE;
+ bool operator!=(const nsCSSValueList& aOther) const MOZ_DELETE;
};
// nsCSSValueList_heap differs from nsCSSValueList only in being
@@ -1264,9 +1269,8 @@ struct nsCSSValuePairList {
void AppendToString(nsCSSProperty aProperty, nsAString& aResult,
nsCSSValue::Serialization aValueSerialization) const;
- bool operator==(const nsCSSValuePairList& aOther) const;
- bool operator!=(const nsCSSValuePairList& aOther) const
- { return !(*this == aOther); }
+ static bool Equal(const nsCSSValuePairList* aList1,
+ const nsCSSValuePairList* aList2);
size_t SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const;
@@ -1280,6 +1284,12 @@ private:
{
MOZ_COUNT_CTOR(nsCSSValuePairList);
}
+
+ // We don't want operator== or operator!= because they wouldn't be
+ // null-safe, which is generally what we need. Use |Equal| method
+ // above instead.
+ bool operator==(const nsCSSValuePairList& aOther) const MOZ_DELETE;
+ bool operator!=(const nsCSSValuePairList& aOther) const MOZ_DELETE;
};
// nsCSSValuePairList_heap differs from nsCSSValuePairList only in being