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

LibJS: Convert parse_temporal_time_zone_string() to ThrowCompletionOr

This commit is contained in:
Linus Groh 2021-09-16 17:58:24 +01:00
parent 0ccd11ba5f
commit 14f16d9ed4
3 changed files with 11 additions and 20 deletions

View file

@ -798,8 +798,6 @@ ThrowCompletionOr<ISODateTime> parse_iso_date_time(GlobalObject& global_object,
// 13.35 ParseTemporalInstantString ( isoString ), https://tc39.es/proposal-temporal/#sec-temporal-parsetemporalinstantstring // 13.35 ParseTemporalInstantString ( isoString ), https://tc39.es/proposal-temporal/#sec-temporal-parsetemporalinstantstring
ThrowCompletionOr<TemporalInstant> parse_temporal_instant_string(GlobalObject& global_object, String const& iso_string) ThrowCompletionOr<TemporalInstant> parse_temporal_instant_string(GlobalObject& global_object, String const& iso_string)
{ {
auto& vm = global_object.vm();
// 1. Assert: Type(isoString) is String. // 1. Assert: Type(isoString) is String.
// 2. If isoString does not satisfy the syntax of a TemporalInstantString (see 13.33), then // 2. If isoString does not satisfy the syntax of a TemporalInstantString (see 13.33), then
@ -810,15 +808,13 @@ ThrowCompletionOr<TemporalInstant> parse_temporal_instant_string(GlobalObject& g
auto result = parse_iso_date_time(global_object, iso_string).release_value(); auto result = parse_iso_date_time(global_object, iso_string).release_value();
// 4. Let timeZoneResult be ? ParseTemporalTimeZoneString(isoString). // 4. Let timeZoneResult be ? ParseTemporalTimeZoneString(isoString).
auto time_zone_result = parse_temporal_time_zone_string(global_object, iso_string); auto time_zone_result = TRY(parse_temporal_time_zone_string(global_object, iso_string));
if (auto* exception = vm.exception())
return throw_completion(exception->value());
// 5. Let offsetString be timeZoneResult.[[OffsetString]]. // 5. Let offsetString be timeZoneResult.[[OffsetString]].
auto offset_string = time_zone_result->offset; auto offset_string = time_zone_result.offset;
// 6. If timeZoneResult.[[Z]] is true, then // 6. If timeZoneResult.[[Z]] is true, then
if (time_zone_result->z) { if (time_zone_result.z) {
// a. Set offsetString to "+00:00". // a. Set offsetString to "+00:00".
offset_string = "+00:00"sv; offset_string = "+00:00"sv;
} }
@ -916,7 +912,7 @@ ThrowCompletionOr<TemporalTime> parse_temporal_time_string(GlobalObject& global_
} }
// 13.44 ParseTemporalTimeZoneString ( isoString ), https://tc39.es/proposal-temporal/#sec-temporal-parsetemporaltimezonestring // 13.44 ParseTemporalTimeZoneString ( isoString ), https://tc39.es/proposal-temporal/#sec-temporal-parsetemporaltimezonestring
Optional<TemporalTimeZone> parse_temporal_time_zone_string(GlobalObject& global_object, [[maybe_unused]] String const& iso_string) ThrowCompletionOr<TemporalTimeZone> parse_temporal_time_zone_string(GlobalObject& global_object, [[maybe_unused]] String const& iso_string)
{ {
auto& vm = global_object.vm(); auto& vm = global_object.vm();
@ -996,10 +992,9 @@ Optional<TemporalTimeZone> parse_temporal_time_zone_string(GlobalObject& global_
// 7. If name is not undefined, then // 7. If name is not undefined, then
if (name_part.has_value()) { if (name_part.has_value()) {
// a. If ! IsValidTimeZoneName(name) is false, throw a RangeError exception. // a. If ! IsValidTimeZoneName(name) is false, throw a RangeError exception.
if (!is_valid_time_zone_name(*name_part)) { if (!is_valid_time_zone_name(*name_part))
vm.throw_exception<RangeError>(global_object, ErrorType::TemporalInvalidTimeZoneName); return vm.throw_completion<RangeError>(global_object, ErrorType::TemporalInvalidTimeZoneName);
return {};
}
// b. Set name to ! CanonicalizeTimeZoneName(name). // b. Set name to ! CanonicalizeTimeZoneName(name).
name = canonicalize_time_zone_name(*name_part); name = canonicalize_time_zone_name(*name_part);
} }

View file

@ -110,7 +110,7 @@ ThrowCompletionOr<TemporalDate> parse_temporal_date_string(GlobalObject&, String
ThrowCompletionOr<ISODateTime> parse_temporal_date_time_string(GlobalObject&, String const& iso_string); ThrowCompletionOr<ISODateTime> parse_temporal_date_time_string(GlobalObject&, String const& iso_string);
ThrowCompletionOr<TemporalDuration> parse_temporal_duration_string(GlobalObject&, String const& iso_string); ThrowCompletionOr<TemporalDuration> parse_temporal_duration_string(GlobalObject&, String const& iso_string);
ThrowCompletionOr<TemporalTime> parse_temporal_time_string(GlobalObject&, String const& iso_string); ThrowCompletionOr<TemporalTime> parse_temporal_time_string(GlobalObject&, String const& iso_string);
Optional<TemporalTimeZone> parse_temporal_time_zone_string(GlobalObject&, String const& iso_string); ThrowCompletionOr<TemporalTimeZone> parse_temporal_time_zone_string(GlobalObject&, String const& iso_string);
Optional<TemporalYearMonth> parse_temporal_year_month_string(GlobalObject&, String const& iso_string); Optional<TemporalYearMonth> parse_temporal_year_month_string(GlobalObject&, String const& iso_string);
double to_positive_integer(GlobalObject&, Value argument); double to_positive_integer(GlobalObject&, Value argument);
Object* prepare_temporal_fields(GlobalObject&, Object const& fields, Vector<String> const& field_names, Vector<StringView> const& required_fields); Object* prepare_temporal_fields(GlobalObject&, Object const& fields, Vector<String> const& field_names, Vector<StringView> const& required_fields);

View file

@ -68,21 +68,17 @@ String default_time_zone()
// 11.6.1 ParseTemporalTimeZone ( string ), https://tc39.es/proposal-temporal/#sec-temporal-parsetemporaltimezone // 11.6.1 ParseTemporalTimeZone ( string ), https://tc39.es/proposal-temporal/#sec-temporal-parsetemporaltimezone
ThrowCompletionOr<String> parse_temporal_time_zone(GlobalObject& global_object, String const& string) ThrowCompletionOr<String> parse_temporal_time_zone(GlobalObject& global_object, String const& string)
{ {
auto& vm = global_object.vm();
// 1. Assert: Type(string) is String. // 1. Assert: Type(string) is String.
// 2. Let result be ? ParseTemporalTimeZoneString(string). // 2. Let result be ? ParseTemporalTimeZoneString(string).
auto result = parse_temporal_time_zone_string(global_object, string); auto result = TRY(parse_temporal_time_zone_string(global_object, string));
if (auto* exception = vm.exception())
return throw_completion(exception->value());
// 3. If result.[[Z]] is not undefined, return "UTC". // 3. If result.[[Z]] is not undefined, return "UTC".
if (result->z) if (result.z)
return String { "UTC" }; return String { "UTC" };
// 4. Return result.[[Name]]. // 4. Return result.[[Name]].
return *result->name; return *result.name;
} }
// 11.6.2 CreateTemporalTimeZone ( identifier [ , newTarget ] ), https://tc39.es/proposal-temporal/#sec-temporal-createtemporaltimezone // 11.6.2 CreateTemporalTimeZone ( identifier [ , newTarget ] ), https://tc39.es/proposal-temporal/#sec-temporal-createtemporaltimezone