Explorar o código

LibJS: Convert parse_temporal_calendar_string() to ThrowCompletionOr

Linus Groh %!s(int64=3) %!d(string=hai) anos
pai
achega
2e28f0b371

+ 4 - 5
Userland/Libraries/LibJS/Runtime/Temporal/AbstractOperations.cpp

@@ -831,7 +831,7 @@ ThrowCompletionOr<TemporalInstant> parse_temporal_instant_string(GlobalObject& g
 }
 
 // 13.37 ParseTemporalCalendarString ( isoString ), https://tc39.es/proposal-temporal/#sec-temporal-parsetemporalcalendarstring
-Optional<String> parse_temporal_calendar_string(GlobalObject& global_object, [[maybe_unused]] String const& iso_string)
+ThrowCompletionOr<String> parse_temporal_calendar_string(GlobalObject& global_object, [[maybe_unused]] String const& iso_string)
 {
     auto& vm = global_object.vm();
 
@@ -846,18 +846,17 @@ Optional<String> parse_temporal_calendar_string(GlobalObject& global_object, [[m
     // 4. If id is undefined, then
     if (!id_part.has_value()) {
         // a. Return "iso8601".
-        return "iso8601";
+        return { "iso8601"sv };
     }
 
     // 5. If ! IsBuiltinCalendar(id) is false, then
     if (!is_builtin_calendar(*id_part)) {
         // a. Throw a RangeError exception.
-        vm.throw_exception<RangeError>(global_object, ErrorType::TemporalInvalidCalendarIdentifier, *id_part);
-        return {};
+        return vm.throw_completion<RangeError>(global_object, ErrorType::TemporalInvalidCalendarIdentifier, *id_part);
     }
 
     // 6. Return id.
-    return id_part.value();
+    return { id_part.value() };
 }
 
 // 13.38 ParseTemporalDateString ( isoString ), https://tc39.es/proposal-temporal/#sec-temporal-parsetemporaldatestring

+ 1 - 1
Userland/Libraries/LibJS/Runtime/Temporal/AbstractOperations.h

@@ -105,7 +105,7 @@ double constrain_to_range(double x, double minimum, double maximum);
 BigInt* round_number_to_increment(GlobalObject&, BigInt const&, u64 increment, StringView rounding_mode);
 ThrowCompletionOr<ISODateTime> parse_iso_date_time(GlobalObject&, String const& iso_string);
 ThrowCompletionOr<TemporalInstant> parse_temporal_instant_string(GlobalObject&, String const& iso_string);
-Optional<String> parse_temporal_calendar_string(GlobalObject&, String const& iso_string);
+ThrowCompletionOr<String> parse_temporal_calendar_string(GlobalObject&, String const& iso_string);
 Optional<TemporalDate> parse_temporal_date_string(GlobalObject&, String const& iso_string);
 Optional<ISODateTime> parse_temporal_date_time_string(GlobalObject&, String const& iso_string);
 Optional<TemporalDuration> parse_temporal_duration_string(GlobalObject&, String const& iso_string);

+ 1 - 4
Userland/Libraries/LibJS/Runtime/Temporal/Calendar.cpp

@@ -378,10 +378,7 @@ Object* to_temporal_calendar(GlobalObject& global_object, Value temporal_calenda
     // 3. If ! IsBuiltinCalendar(identifier) is false, then
     if (!is_builtin_calendar(identifier)) {
         // a. Let identifier be ? ParseTemporalCalendarString(identifier).
-        auto parsed_identifier = parse_temporal_calendar_string(global_object, identifier);
-        if (vm.exception())
-            return {};
-        identifier = move(*parsed_identifier);
+        identifier = TRY_OR_DISCARD(parse_temporal_calendar_string(global_object, identifier));
     }
 
     // 4. Return ! CreateTemporalCalendar(identifier).