diff --git a/layout/style/nsCSSParser.cpp b/layout/style/nsCSSParser.cpp index 35477fddb5..7b75a00e27 100644 --- a/layout/style/nsCSSParser.cpp +++ b/layout/style/nsCSSParser.cpp @@ -13,7 +13,7 @@ #include // for std::stable_sort #include // for std::numeric_limits -#include // for std::floor +#include // for std::floor and std::abs #include "nsCSSParser.h" #include "nsAlgorithm.h" @@ -4989,11 +4989,24 @@ CSSParserImpl::ParseSupportsSelector(bool& aConditionMet) break; case eCSSToken_Number: - if (needSpace) selectorText.Append(' '); - if (mToken.mNumber == floor(mToken.mNumber)) { - selectorText.AppendInt(int32_t(mToken.mNumber)); + if (mToken.mHasSign && parenDepth > 0) { + if (mToken.mNumber >= 0) { + selectorText.Append('+'); + } else { + selectorText.Append('-'); + } + if (std::abs(mToken.mNumber) == floor(std::abs(mToken.mNumber))) { + selectorText.AppendInt(int32_t(std::abs(mToken.mNumber))); + } else { + selectorText.AppendFloat(std::abs(mToken.mNumber)); + } } else { - selectorText.AppendFloat(mToken.mNumber); + if (needSpace) selectorText.Append(' '); + if (mToken.mNumber == floor(mToken.mNumber)) { + selectorText.AppendInt(int32_t(mToken.mNumber)); + } else { + selectorText.AppendFloat(mToken.mNumber); + } } break;