1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 05:07:34 +00:00

LibJS: Allow 'T' prefix in time-only strings

This is a normative change in the Temporal spec.

See: f5e8edf
This commit is contained in:
Linus Groh 2021-12-18 20:58:36 +00:00
parent acce65b52c
commit 6da6da73cc
2 changed files with 12 additions and 9 deletions

View file

@ -201,10 +201,10 @@ bool ISO8601Parser::parse_date_time_separator()
|| m_state.lexer.consume_specific('t'); || m_state.lexer.consume_specific('t');
} }
// https://tc39.es/proposal-temporal/#prod-DurationTimeDesignator // https://tc39.es/proposal-temporal/#prod-TimeDesignator
bool ISO8601Parser::parse_duration_time_designator() bool ISO8601Parser::parse_time_designator()
{ {
// DurationTimeDesignator : one of // TimeDesignator : one of
// T t // T t
return m_state.lexer.consume_specific('T') return m_state.lexer.consume_specific('T')
|| m_state.lexer.consume_specific('t'); || m_state.lexer.consume_specific('t');
@ -812,11 +812,14 @@ bool ISO8601Parser::parse_date_time()
bool ISO8601Parser::parse_calendar_time() bool ISO8601Parser::parse_calendar_time()
{ {
// CalendarTime : // CalendarTime :
// TimeSpec TimeZone[opt] Calendar[opt] // TimeDesignator[opt] TimeSpec TimeZone[opt] Calendar[opt]
StateTransaction transaction { *this };
(void)parse_time_designator();
if (!parse_time_spec()) if (!parse_time_spec())
return false; return false;
(void)parse_time_zone(); (void)parse_time_zone();
(void)parse_calendar(); (void)parse_calendar();
transaction.commit();
return true; return true;
} }
@ -962,11 +965,11 @@ bool ISO8601Parser::parse_duration_hours_part()
bool ISO8601Parser::parse_duration_time() bool ISO8601Parser::parse_duration_time()
{ {
// DurationTime : // DurationTime :
// DurationTimeDesignator DurationHoursPart // TimeDesignator DurationHoursPart
// DurationTimeDesignator DurationMinutesPart // TimeDesignator DurationMinutesPart
// DurationTimeDesignator DurationSecondsPart // TimeDesignator DurationSecondsPart
StateTransaction transaction { *this }; StateTransaction transaction { *this };
if (!parse_duration_time_designator()) if (!parse_time_designator())
return false; return false;
auto success = parse_duration_hours_part() auto success = parse_duration_hours_part()
|| parse_duration_minutes_part() || parse_duration_minutes_part()

View file

@ -90,7 +90,7 @@ public:
[[nodiscard]] bool parse_duration_designator(); [[nodiscard]] bool parse_duration_designator();
[[nodiscard]] bool parse_seconds_designator(); [[nodiscard]] bool parse_seconds_designator();
[[nodiscard]] bool parse_date_time_separator(); [[nodiscard]] bool parse_date_time_separator();
[[nodiscard]] bool parse_duration_time_designator(); [[nodiscard]] bool parse_time_designator();
[[nodiscard]] bool parse_weeks_designator(); [[nodiscard]] bool parse_weeks_designator();
[[nodiscard]] bool parse_years_designator(); [[nodiscard]] bool parse_years_designator();
[[nodiscard]] bool parse_utc_designator(); [[nodiscard]] bool parse_utc_designator();