Bug 1270515 - Avoid synthesizing temporary nsStyleCoords in nsStyleSides::ConvertsToLength. r=dbaron

This commit is contained in:
Bobby Holley 2016-05-05 16:33:45 -07:00
Родитель 419e80ad06
Коммит e7fab38387
2 изменённых файлов: 14 добавлений и 8 удалений

Просмотреть файл

@ -174,9 +174,14 @@ public:
(IsCalcUnit() && CalcHasPercent());
}
static bool ConvertsToLength(const nsStyleUnit aUnit,
const nsStyleUnion aValue) {
return aUnit == eStyleUnit_Coord ||
(IsCalcUnit(aUnit) && !AsCalcValue(aValue)->mHasPercent);
}
bool ConvertsToLength() const {
return mUnit == eStyleUnit_Coord ||
(IsCalcUnit() && !CalcHasPercent());
return ConvertsToLength(mUnit, mValue);
}
nscoord ToLength() const {
@ -188,6 +193,11 @@ public:
return GetCalcValue()->ToLength();
}
// Callers must verify IsCalcUnit before calling this function.
static Calc* AsCalcValue(nsStyleUnion aValue) {
return static_cast<Calc*>(aValue.mPointer);
}
nscoord GetCoordValue() const;
int32_t GetIntValue() const;
float GetPercentValue() const;
@ -292,7 +302,7 @@ public:
bool ConvertsToLength() const {
NS_FOR_CSS_SIDES(side) {
if (!Get(side).ConvertsToLength()) {
if (!nsStyleCoord::ConvertsToLength(mUnits[side], mValues[side])) {
return false;
}
}
@ -435,7 +445,7 @@ inline nsStyleCoord::Calc* nsStyleCoord::GetCalcValue() const
{
NS_ASSERTION(IsCalcUnit(), "not a pointer value");
if (IsCalcUnit()) {
return static_cast<Calc*>(mValue.mPointer);
return AsCalcValue(mValue);
}
return nullptr;
}

Просмотреть файл

@ -824,10 +824,6 @@ struct MOZ_NEEDS_MEMMOVABLE_MEMBERS nsStyleMargin
nsStyleSides mMargin; // [reset] coord, percent, calc, auto
bool IsWidthDependent() const {
return !mMargin.ConvertsToLength();
}
bool GetMargin(nsMargin& aMargin) const
{
if (mMargin.ConvertsToLength()) {