LibJS: Disallow date-only strings for PlainTime

This is a normative change in the Temporal spec.

See: https://github.com/tc39/proposal-temporal/commit/b16a296
This commit is contained in:
Linus Groh 2021-12-18 17:50:44 +00:00
parent 6da6da73cc
commit 01eefc344a
Notes: sideshowbarker 2024-07-17 22:38:35 +09:00
2 changed files with 20 additions and 3 deletions

View file

@ -834,6 +834,22 @@ bool ISO8601Parser::parse_calendar_date_time()
return true;
}
// https://tc39.es/proposal-temporal/#prod-CalendarDateTimeTimeRequired
bool ISO8601Parser::parse_calendar_date_time_time_required()
{
// CalendarDateTimeTimeRequired :
// Date TimeSpecSeparator TimeZone[opt] Calendar[opt]
StateTransaction transaction { *this };
if (!parse_date())
return false;
if (!parse_time_spec_separator())
return false;
(void)parse_time_zone();
(void)parse_calendar();
transaction.commit();
return true;
}
// https://tc39.es/proposal-temporal/#prod-DurationWholeSeconds
bool ISO8601Parser::parse_duration_whole_seconds()
{
@ -1189,10 +1205,10 @@ bool ISO8601Parser::parse_temporal_time_string()
{
// TemporalTimeString :
// CalendarTime
// CalendarDateTime
// NOTE: Reverse order here because `Time` can be a subset of `DateTime`,
// CalendarDateTimeTimeRequired
// NOTE: Reverse order here because `Time` can be a subset of `CalendarDateTimeTimeRequired`,
// so we'd not attempt to parse that but may not exhaust the input string.
return parse_calendar_date_time()
return parse_calendar_date_time_time_required()
|| parse_calendar_time();
}

View file

@ -128,6 +128,7 @@ public:
[[nodiscard]] bool parse_date_time();
[[nodiscard]] bool parse_calendar_time();
[[nodiscard]] bool parse_calendar_date_time();
[[nodiscard]] bool parse_calendar_date_time_time_required();
[[nodiscard]] bool parse_duration_whole_seconds();
[[nodiscard]] bool parse_duration_seconds_fraction();
[[nodiscard]] bool parse_duration_seconds_part();