Bug 1326457: Remove redundant check for eCSSKeyword_UNKNOWN at callsites to nsCSSProps::FindKeyword(). r?xidorn
nsCSSProps::FindKeyword() has always failed when passed eCSSKeyword_UNKNOWN,
but it didn't used to have a fast-path for this sentinel value -- it used to
walk the whole array before failing. So it used to make sense to have a
dedicated check for it at the callsites, to avoid an unnecessary array
traversal. But now, there's an early-return in FindKeyword() (or actually in
its helper, FindIndexOfKeyword()) which catches eCSSKeyword_UNKNOWN right away,
before it walks the array. So there's no benefit to having a dedicated check at
the callsites anymore.
MozReview-Commit-ID: FOX48YZMomd
--- a/dom/base/nsGlobalWindow.cpp
+++ b/dom/base/nsGlobalWindow.cpp
@@ -13393,18 +13393,17 @@ nsGlobalWindow::SetCursorOuter(const nsA
MOZ_RELEASE_ASSERT(IsOuterWindow());
int32_t cursor;
if (aCursor.EqualsLiteral("auto"))
cursor = NS_STYLE_CURSOR_AUTO;
else {
nsCSSKeyword keyword = nsCSSKeywords::LookupKeyword(aCursor);
- if (eCSSKeyword_UNKNOWN == keyword ||
- !nsCSSProps::FindKeyword(keyword, nsCSSProps::kCursorKTable, cursor)) {
+ if (!nsCSSProps::FindKeyword(keyword, nsCSSProps::kCursorKTable, cursor)) {
return;
}
}
RefPtr<nsPresContext> presContext;
if (mDocShell) {
mDocShell->GetPresContext(getter_AddRefs(presContext));
}
--- a/layout/style/nsCSSParser.cpp
+++ b/layout/style/nsCSSParser.cpp
@@ -4221,18 +4221,17 @@ CSSParserImpl::ParseFontFeatureValueSet(
OUTPUT_ERROR();
UngetToken();
return false;
}
// which font-specific variant of font-variant-alternates
int32_t whichVariant;
nsCSSKeyword keyword = nsCSSKeywords::LookupKeyword(mToken.mIdent);
- if (keyword == eCSSKeyword_UNKNOWN ||
- !nsCSSProps::FindKeyword(keyword,
+ if (!nsCSSProps::FindKeyword(keyword,
nsCSSProps::kFontVariantAlternatesFuncsKTable,
whichVariant))
{
if (!NonMozillaVendorIdentifier(mToken.mIdent)) {
REPORT_UNEXPECTED_TOKEN(PEFFVUnknownFontVariantPropValue);
OUTPUT_ERROR();
}
UngetToken();
@@ -6728,22 +6727,20 @@ CSSParserImpl::ParseColor(nsCSSValue& aV
case eCSSToken_Ident:
if (NS_ColorNameToRGB(tk->mIdent, &rgba)) {
aValue.SetStringValue(tk->mIdent, eCSSUnit_Ident);
return CSSParseResult::Ok;
}
else {
nsCSSKeyword keyword = nsCSSKeywords::LookupKeyword(tk->mIdent);
- if (eCSSKeyword_UNKNOWN < keyword) { // known keyword
- int32_t value;
- if (nsCSSProps::FindKeyword(keyword, nsCSSProps::kColorKTable, value)) {
- aValue.SetIntValue(value, eCSSUnit_EnumColor);
- return CSSParseResult::Ok;
- }
+ int32_t value;
+ if (nsCSSProps::FindKeyword(keyword, nsCSSProps::kColorKTable, value)) {
+ aValue.SetIntValue(value, eCSSUnit_EnumColor);
+ return CSSParseResult::Ok;
}
}
break;
case eCSSToken_Function: {
bool isRGB;
bool isHSL;
if ((isRGB = mToken.mIdent.LowerCaseEqualsLiteral("rgb")) ||
mToken.mIdent.LowerCaseEqualsLiteral("rgba")) {
@@ -7551,22 +7548,20 @@ bool
CSSParserImpl::ParseEnum(nsCSSValue& aValue,
const KTableEntry aKeywordTable[])
{
nsSubstring* ident = NextIdent();
if (nullptr == ident) {
return false;
}
nsCSSKeyword keyword = nsCSSKeywords::LookupKeyword(*ident);
- if (eCSSKeyword_UNKNOWN < keyword) {
- int32_t value;
- if (nsCSSProps::FindKeyword(keyword, aKeywordTable, value)) {
- aValue.SetIntValue(value, eCSSUnit_Enumerated);
- return true;
- }
+ int32_t value;
+ if (nsCSSProps::FindKeyword(keyword, aKeywordTable, value)) {
+ aValue.SetIntValue(value, eCSSUnit_Enumerated);
+ return true;
}
// Put the unknown identifier back and return
UngetToken();
return false;
}
bool
@@ -7586,26 +7581,24 @@ CSSParserImpl::ParseAlignEnum(nsCSSValue
if (keyword == eCSSKeyword_first || keyword == eCSSKeyword_last) {
baselinePrefix = keyword;
ident = NextIdent();
if (!ident) {
return false;
}
keyword = nsCSSKeywords::LookupKeyword(*ident);
}
- if (eCSSKeyword_UNKNOWN < keyword) {
- int32_t value;
- if (nsCSSProps::FindKeyword(keyword, aKeywordTable, value)) {
- if (baselinePrefix == eCSSKeyword_last &&
- keyword == eCSSKeyword_baseline) {
- value = NS_STYLE_ALIGN_LAST_BASELINE;
- }
- aValue.SetIntValue(value, eCSSUnit_Enumerated);
- return true;
- }
+ int32_t value;
+ if (nsCSSProps::FindKeyword(keyword, aKeywordTable, value)) {
+ if (baselinePrefix == eCSSKeyword_last &&
+ keyword == eCSSKeyword_baseline) {
+ value = NS_STYLE_ALIGN_LAST_BASELINE;
+ }
+ aValue.SetIntValue(value, eCSSUnit_Enumerated);
+ return true;
}
// Put the unknown identifier back and return
UngetToken();
return false;
}
struct UnitInfo {
@@ -10654,18 +10647,17 @@ CSSParserImpl::IsLegacyGradientLine(cons
case eCSSToken_Hash:
// this is a color
break;
case eCSSToken_Ident: {
// This is only a gradient line if it's a box position keyword.
nsCSSKeyword kw = nsCSSKeywords::LookupKeyword(aId);
int32_t junk;
- if (kw != eCSSKeyword_UNKNOWN &&
- nsCSSProps::FindKeyword(kw, nsCSSProps::kImageLayerPositionKTable,
+ if (nsCSSProps::FindKeyword(kw, nsCSSProps::kImageLayerPositionKTable,
junk)) {
haveGradientLine = true;
}
break;
}
default:
// error
@@ -14464,22 +14456,21 @@ CSSParserImpl::ParseSingleAlternate(int3
UngetToken();
return false;
}
// ident ==> simple enumerated prop val (e.g. historical-forms)
// function ==> e.g. swash(flowing) styleset(alt-g, alt-m)
nsCSSKeyword keyword = nsCSSKeywords::LookupKeyword(mToken.mIdent);
- if (!(eCSSKeyword_UNKNOWN < keyword &&
- nsCSSProps::FindKeyword(keyword,
- (isIdent ?
- nsCSSProps::kFontVariantAlternatesKTable :
- nsCSSProps::kFontVariantAlternatesFuncsKTable),
- aWhichFeature)))
+ if (!nsCSSProps::FindKeyword(keyword,
+ (isIdent ?
+ nsCSSProps::kFontVariantAlternatesKTable :
+ nsCSSProps::kFontVariantAlternatesFuncsKTable),
+ aWhichFeature))
{
// failed, pop token
UngetToken();
return false;
}
if (isIdent) {
aValue.SetIntValue(aWhichFeature, eCSSUnit_Enumerated);
--- a/layout/style/nsStyleUtil.cpp
+++ b/layout/style/nsStyleUtil.cpp
@@ -511,18 +511,17 @@ nsStyleUtil::ComputeFunctionalAlternates
// element 0 is the propval in ident form
const nsCSSValue::Array *func = curr->mValue.GetArrayValue();
// lookup propval
nsCSSKeyword key = func->Item(0).GetKeywordValue();
NS_ASSERTION(key != eCSSKeyword_UNKNOWN, "unknown alternate property value");
int32_t alternate;
- if (key == eCSSKeyword_UNKNOWN ||
- !nsCSSProps::FindKeyword(key,
+ if (!nsCSSProps::FindKeyword(key,
nsCSSProps::kFontVariantAlternatesFuncsKTable,
alternate)) {
NS_NOTREACHED("keyword not a font-variant-alternates value");
continue;
}
v.alternate = alternate;
// other elements are the idents associated with the propval