mirror of
https://github.com/RGBCube/serenity
synced 2025-07-27 03:47:35 +00:00
LibJS: Support IANA legacy names in the Temporal ISO 8601 grammar
This is a normative change in the Temporal spec.
See: 2419680
This commit is contained in:
parent
41791146fd
commit
6850f25840
3 changed files with 30 additions and 0 deletions
|
@ -895,12 +895,37 @@ bool ISO8601Parser::parse_time_zone_iana_name_tail()
|
|||
return true;
|
||||
}
|
||||
|
||||
// https://tc39.es/proposal-temporal/#prod-TimeZoneIANALegacyName
|
||||
bool ISO8601Parser::parse_time_zone_iana_legacy_name()
|
||||
{
|
||||
// TimeZoneIANALegacyName :
|
||||
// Etc/GMT0
|
||||
// GMT0
|
||||
// GMT-0
|
||||
// GMT+0
|
||||
// EST5EDT
|
||||
// CST6CDT
|
||||
// MST7MDT
|
||||
// PST8PDT
|
||||
return m_state.lexer.consume_specific("Etc/GMT0"sv)
|
||||
|| m_state.lexer.consume_specific("GMT0"sv)
|
||||
|| m_state.lexer.consume_specific("GMT-0"sv)
|
||||
|| m_state.lexer.consume_specific("GMT+0"sv)
|
||||
|| m_state.lexer.consume_specific("EST5EDT"sv)
|
||||
|| m_state.lexer.consume_specific("CST6CDT"sv)
|
||||
|| m_state.lexer.consume_specific("MST7MDT"sv)
|
||||
|| m_state.lexer.consume_specific("PST8PDT"sv);
|
||||
}
|
||||
|
||||
// https://tc39.es/proposal-temporal/#prod-TimeZoneIANAName
|
||||
bool ISO8601Parser::parse_time_zone_iana_name()
|
||||
{
|
||||
// TimeZoneIANAName :
|
||||
// Etc/GMT ASCIISign UnpaddedHour
|
||||
// TimeZoneIANANameTail but not Etc/GMT ASCIISign UnpaddedHour
|
||||
// TimeZoneIANALegacyName
|
||||
// NOTE: Reverse order here because `TimeZoneIANANameTail` can be a subset of `TimeZoneIANALegacyName`,
|
||||
// so we'd not attempt to parse that but may not exhaust the input string.
|
||||
auto parse_etc_gmt_with_offset = [this] {
|
||||
StateTransaction transaction { *this };
|
||||
if (!m_state.lexer.consume_specific("Etc/GMT"sv))
|
||||
|
@ -913,6 +938,7 @@ bool ISO8601Parser::parse_time_zone_iana_name()
|
|||
return true;
|
||||
};
|
||||
return parse_etc_gmt_with_offset()
|
||||
|| parse_time_zone_iana_legacy_name()
|
||||
|| parse_time_zone_iana_name_tail();
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue