From 9dae71494b7c77cc81123621d490340d5b4fbe46 Mon Sep 17 00:00:00 2001 From: Layomi Akinrinade Date: Tue, 16 Jul 2019 17:48:53 -0400 Subject: [PATCH] Clean up date helper (dotnet/corefx#39548) Commit migrated from https://github.com/dotnet/corefx/commit/9711b084829db7b8f69b3d3eb9effa3d2bdc0699 --- .../src/System/Text/Json/JsonHelpers.Date.cs | 27 +++++++++++----------- .../tests/Utf8JsonReaderTests.TryGet.Date.cs | 1 + 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/libraries/System.Text.Json/src/System/Text/Json/JsonHelpers.Date.cs b/src/libraries/System.Text.Json/src/System/Text/Json/JsonHelpers.Date.cs index a49df5b..007969c 100644 --- a/src/libraries/System.Text.Json/src/System/Text/Json/JsonHelpers.Date.cs +++ b/src/libraries/System.Text.Json/src/System/Text/Json/JsonHelpers.Date.cs @@ -32,9 +32,7 @@ namespace System.Text.Json /// "true" if successfully parsed. public static bool TryParseAsISO(ReadOnlySpan source, out DateTime value) { - DateTimeParseData parseData = new DateTimeParseData(); - - if (!TryParseDateTimeOffset(source, ref parseData)) + if (!TryParseDateTimeOffset(source, out DateTimeParseData parseData)) { value = default; return false; @@ -42,7 +40,7 @@ namespace System.Text.Json if (parseData.OffsetToken == JsonConstants.UtcOffsetToken) { - return TryCreateDateTime(ref parseData, DateTimeKind.Utc, out value); + return TryCreateDateTime(parseData, DateTimeKind.Utc, out value); } else if (parseData.OffsetToken == JsonConstants.Plus || parseData.OffsetToken == JsonConstants.Hyphen) { @@ -56,7 +54,7 @@ namespace System.Text.Json return true; } - return TryCreateDateTime(ref parseData, DateTimeKind.Unspecified, out value); + return TryCreateDateTime(parseData, DateTimeKind.Unspecified, out value); } /// @@ -67,9 +65,7 @@ namespace System.Text.Json /// "true" if successfully parsed. public static bool TryParseAsISO(ReadOnlySpan source, out DateTimeOffset value) { - DateTimeParseData parseData = new DateTimeParseData(); - - if (!TryParseDateTimeOffset(source, ref parseData)) + if (!TryParseDateTimeOffset(source, out DateTimeParseData parseData)) { value = default; return false; @@ -82,7 +78,7 @@ namespace System.Text.Json } // No offset, attempt to read as local time. - return TryCreateDateTimeOffsetInterpretingDataAsLocalTime(ref parseData, out value); + return TryCreateDateTimeOffsetInterpretingDataAsLocalTime(parseData, out value); } /// @@ -112,11 +108,12 @@ namespace System.Text.Json /// Spaces are not permitted. /// /// "true" if successfully parsed. - private static bool TryParseDateTimeOffset(ReadOnlySpan source, ref DateTimeParseData parseData) + private static bool TryParseDateTimeOffset(ReadOnlySpan source, out DateTimeParseData parseData) { // Source does not have enough characters for YYYY-MM-DD if (source.Length < 10) { + parseData = default; return false; } @@ -132,6 +129,8 @@ namespace System.Text.Json // just [year][“-”][month] (a) and just [year] (b), but we currently // don't permit it. + parseData = new DateTimeParseData(); + { uint digit1 = source[0] - (uint)'0'; uint digit2 = source[1] - (uint)'0'; @@ -427,7 +426,7 @@ namespace System.Text.Json /// private static bool TryCreateDateTimeOffset(ref DateTimeParseData parseData, out DateTimeOffset value) { - if (!TryCreateDateTime(ref parseData, kind: DateTimeKind.Unspecified, out DateTime dateTime)) + if (!TryCreateDateTime(parseData, kind: DateTimeKind.Unspecified, out DateTime dateTime)) { value = default; return false; @@ -445,9 +444,9 @@ namespace System.Text.Json /// /// Overflow-safe DateTimeOffset/Local time conversion factory. /// - private static bool TryCreateDateTimeOffsetInterpretingDataAsLocalTime(ref DateTimeParseData parseData, out DateTimeOffset value) + private static bool TryCreateDateTimeOffsetInterpretingDataAsLocalTime(DateTimeParseData parseData, out DateTimeOffset value) { - if (!TryCreateDateTime(ref parseData, DateTimeKind.Local, out DateTime dateTime)) + if (!TryCreateDateTime(parseData, DateTimeKind.Local, out DateTime dateTime)) { value = default; return false; @@ -471,7 +470,7 @@ namespace System.Text.Json /// /// Overflow-safe DateTime factory. /// - private static bool TryCreateDateTime(ref DateTimeParseData parseData, DateTimeKind kind, out DateTime value) + private static bool TryCreateDateTime(DateTimeParseData parseData, DateTimeKind kind, out DateTime value) { if (parseData.Year == 0) { diff --git a/src/libraries/System.Text.Json/tests/Utf8JsonReaderTests.TryGet.Date.cs b/src/libraries/System.Text.Json/tests/Utf8JsonReaderTests.TryGet.Date.cs index b91d9e2..d2629ea 100644 --- a/src/libraries/System.Text.Json/tests/Utf8JsonReaderTests.TryGet.Date.cs +++ b/src/libraries/System.Text.Json/tests/Utf8JsonReaderTests.TryGet.Date.cs @@ -150,6 +150,7 @@ namespace System.Text.Json.Tests } [Fact] + // https://github.com/dotnet/corefx/issues/39067. public static void Regression39067_TestingDateTimeMinValue() { string jsonString = @"""0001-01-01T00:00:00"""; -- 2.7.4