Add Invariant check to DateTimeParse tokens codepaths (#53717)
authorMarek Safar <marek.safar@gmail.com>
Sun, 6 Jun 2021 08:51:02 +0000 (10:51 +0200)
committerGitHub <noreply@github.com>
Sun, 6 Jun 2021 08:51:02 +0000 (10:51 +0200)
Cuts about 7k for invariant mode

src/libraries/System.Private.CoreLib/src/System/Globalization/DateTimeFormatInfo.cs
src/libraries/System.Private.CoreLib/src/System/Globalization/DateTimeParse.cs

index c91e7fa..a7b603e 100644 (file)
@@ -2409,7 +2409,7 @@ namespace System.Globalization
             if (isLetter)
             {
                 ch = Culture.TextInfo.ToLower(ch);
-                if (IsHebrewChar(ch) && TokenMask == TokenType.RegularTokenMask)
+                if (!GlobalizationMode.Invariant && IsHebrewChar(ch) && TokenMask == TokenType.RegularTokenMask)
                 {
                     if (TryParseHebrewNumber(ref str, out bool badFormat, out tokenValue))
                     {
index e4b2608..ce6e23b 100644 (file)
@@ -1050,6 +1050,12 @@ new DS[] { DS.ERROR,  DS.TX_NNN,  DS.TX_NNN,  DS.TX_NNN,  DS.ERROR,   DS.ERROR,
                     }
                     break;
                 case TokenType.JapaneseEraToken:
+                    if (GlobalizationMode.Invariant)
+                    {
+                        Debug.Fail("Should never be reached");
+                        return false;
+                    }
+
                     // Special case for Japanese.  We allow Japanese era name to be used even if the calendar is not Japanese Calendar.
                     result.calendar = JapaneseCalendar.GetDefaultInstance();
                     dtfi = DateTimeFormatInfo.GetJapaneseCalendarDTFI();
@@ -1066,6 +1072,12 @@ new DS[] { DS.ERROR,  DS.TX_NNN,  DS.TX_NNN,  DS.TX_NNN,  DS.ERROR,   DS.ERROR,
                     }
                     break;
                 case TokenType.TEraToken:
+                    if (GlobalizationMode.Invariant)
+                    {
+                        Debug.Fail("Should never be reached");
+                        return false;
+                    }
+
                     result.calendar = TaiwanCalendar.GetDefaultInstance();
                     dtfi = DateTimeFormatInfo.GetTaiwanCalendarDTFI();
                     if (result.era != -1)