Bug 1326457: Remove redundant check for eCSSKeyword_UNKNOWN at callsites to nsCSSProps::FindKeyword(). r?xidorn draft
authorDaniel Holbert <dholbert@cs.stanford.edu>
Fri, 30 Dec 2016 12:03:08 -0800
changeset 454937 fcd5326732b53d1eac05c145d4cd1b30863d2f46
parent 454702 1539be3e8e5b74e6a69d880765b2d7166f38599c
child 540850 18b550b42b081dc861a8b9c2edfff2a5bc969eaf
push id40086
push userdholbert@mozilla.com
push dateFri, 30 Dec 2016 20:03:27 +0000
reviewersxidorn
bugs1326457
milestone53.0a1
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
dom/base/nsGlobalWindow.cpp
layout/style/nsCSSParser.cpp
layout/style/nsStyleUtil.cpp
--- 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