From 224d1724b2cecca097356a0adf9ed6b4bf7fbcf5 Mon Sep 17 00:00:00 2001 From: erixreyes Date: Fri, 11 Jul 2025 10:46:20 +0800 Subject: [PATCH] Issue #2691: Add special handling for nth-child expressions --- layout/style/nsCSSParser.cpp | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) 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;