mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 21:57:43 +00:00
LibJS: Convert get_options_object() to ThrowCompletionOr
This commit is contained in:
parent
f2b5ddd167
commit
08dd1c3e2d
15 changed files with 25 additions and 64 deletions
|
@ -68,9 +68,7 @@ Value DisplayNamesConstructor::construct(FunctionObject& new_target)
|
|||
}
|
||||
|
||||
// 5. Set options to ? GetOptionsObject(options).
|
||||
auto* options = Temporal::get_options_object(global_object, options_value);
|
||||
if (vm.exception())
|
||||
return {};
|
||||
auto* options = TRY_OR_DISCARD(Temporal::get_options_object(global_object, options_value));
|
||||
|
||||
// 6. Let opt be a new Record.
|
||||
LocaleOptions opt {};
|
||||
|
|
|
@ -61,9 +61,7 @@ Value ListFormatConstructor::construct(FunctionObject& new_target)
|
|||
return {};
|
||||
|
||||
// 4. Set options to ? GetOptionsObject(options).
|
||||
auto* options = Temporal::get_options_object(global_object, options_value);
|
||||
if (vm.exception())
|
||||
return {};
|
||||
auto* options = TRY_OR_DISCARD(Temporal::get_options_object(global_object, options_value));
|
||||
|
||||
// 5. Let opt be a new Record.
|
||||
LocaleOptions opt {};
|
||||
|
|
|
@ -82,7 +82,7 @@ ThrowCompletionOr<MarkedValueList> iterable_to_list_of_type(GlobalObject& global
|
|||
}
|
||||
|
||||
// 13.2 GetOptionsObject ( options ), https://tc39.es/proposal-temporal/#sec-getoptionsobject
|
||||
Object* get_options_object(GlobalObject& global_object, Value options)
|
||||
ThrowCompletionOr<Object*> get_options_object(GlobalObject& global_object, Value options)
|
||||
{
|
||||
auto& vm = global_object.vm();
|
||||
|
||||
|
@ -99,8 +99,7 @@ Object* get_options_object(GlobalObject& global_object, Value options)
|
|||
}
|
||||
|
||||
// 3. Throw a TypeError exception.
|
||||
vm.throw_exception<TypeError>(global_object, ErrorType::NotAnObject, "Options");
|
||||
return {};
|
||||
return vm.throw_completion<TypeError>(global_object, ErrorType::NotAnObject, "Options");
|
||||
}
|
||||
|
||||
// 13.3 GetOption ( options, property, types, values, fallback ), https://tc39.es/proposal-temporal/#sec-getoption
|
||||
|
|
|
@ -85,7 +85,7 @@ struct SecondsStringPrecision {
|
|||
};
|
||||
|
||||
ThrowCompletionOr<MarkedValueList> iterable_to_list_of_type(GlobalObject&, Value items, Vector<OptionType> const& element_types);
|
||||
Object* get_options_object(GlobalObject&, Value options);
|
||||
ThrowCompletionOr<Object*> get_options_object(GlobalObject&, Value options);
|
||||
Value get_option(GlobalObject&, Object const& options, PropertyName const& property, Vector<OptionType> const& types, Vector<StringView> const& values, Value fallback);
|
||||
template<typename NumberType>
|
||||
Optional<Variant<String, NumberType>> get_string_or_number_option(GlobalObject&, Object const& options, PropertyName const& property, Vector<StringView> const& string_values, NumberType minimum, NumberType maximum, Value fallback);
|
||||
|
|
|
@ -92,9 +92,7 @@ JS_DEFINE_NATIVE_FUNCTION(CalendarPrototype::date_from_fields)
|
|||
}
|
||||
|
||||
// 5. Set options to ? GetOptionsObject(options).
|
||||
auto* options = get_options_object(global_object, vm.argument(1));
|
||||
if (vm.exception())
|
||||
return {};
|
||||
auto* options = TRY_OR_DISCARD(get_options_object(global_object, vm.argument(1)));
|
||||
|
||||
// 6. Let result be ? ISODateFromFields(fields, options).
|
||||
auto result = iso_date_from_fields(global_object, fields.as_object(), *options);
|
||||
|
@ -126,9 +124,7 @@ JS_DEFINE_NATIVE_FUNCTION(CalendarPrototype::year_month_from_fields)
|
|||
}
|
||||
|
||||
// 5. Set options to ? GetOptionsObject(options).
|
||||
auto* options = get_options_object(global_object, vm.argument(1));
|
||||
if (vm.exception())
|
||||
return {};
|
||||
auto* options = TRY_OR_DISCARD(get_options_object(global_object, vm.argument(1)));
|
||||
|
||||
// 6. Let result be ? ISOYearMonthFromFields(fields, options).
|
||||
auto result = iso_year_month_from_fields(global_object, fields.as_object(), *options);
|
||||
|
@ -160,9 +156,7 @@ JS_DEFINE_NATIVE_FUNCTION(CalendarPrototype::month_day_from_fields)
|
|||
}
|
||||
|
||||
// 5. Set options to ? GetOptionsObject(options).
|
||||
auto* options = get_options_object(global_object, vm.argument(1));
|
||||
if (vm.exception())
|
||||
return {};
|
||||
auto* options = TRY_OR_DISCARD(get_options_object(global_object, vm.argument(1)));
|
||||
|
||||
// 6. Let result be ? ISOMonthDayFromFields(fields, options).
|
||||
auto result = iso_month_day_from_fields(global_object, fields.as_object(), *options);
|
||||
|
@ -197,9 +191,7 @@ JS_DEFINE_NATIVE_FUNCTION(CalendarPrototype::date_add)
|
|||
return {};
|
||||
|
||||
// 6. Set options to ? GetOptionsObject(options).
|
||||
auto* options = get_options_object(global_object, vm.argument(2));
|
||||
if (vm.exception())
|
||||
return {};
|
||||
auto* options = TRY_OR_DISCARD(get_options_object(global_object, vm.argument(2)));
|
||||
|
||||
// 7. Let overflow be ? ToTemporalOverflow(options).
|
||||
auto overflow = to_temporal_overflow(global_object, *options);
|
||||
|
|
|
@ -190,9 +190,7 @@ JS_DEFINE_NATIVE_FUNCTION(InstantPrototype::until)
|
|||
return {};
|
||||
|
||||
// 4. Set options to ? GetOptionsObject(options).
|
||||
auto* options = get_options_object(global_object, vm.argument(1));
|
||||
if (vm.exception())
|
||||
return {};
|
||||
auto* options = TRY_OR_DISCARD(get_options_object(global_object, vm.argument(1)));
|
||||
|
||||
// 5. Let smallestUnit be ? ToSmallestTemporalUnit(options, « "year", "month", "week", "day" », "nanosecond").
|
||||
auto smallest_unit = to_smallest_temporal_unit(global_object, *options, { "year"sv, "month"sv, "week"sv, "day"sv }, "nanosecond"sv);
|
||||
|
@ -250,9 +248,7 @@ JS_DEFINE_NATIVE_FUNCTION(InstantPrototype::since)
|
|||
return {};
|
||||
|
||||
// 4. Set options to ? GetOptionsObject(options).
|
||||
auto* options = get_options_object(global_object, vm.argument(1));
|
||||
if (vm.exception())
|
||||
return {};
|
||||
auto* options = TRY_OR_DISCARD(get_options_object(global_object, vm.argument(1)));
|
||||
|
||||
// 5. Let smallestUnit be ? ToSmallestTemporalUnit(options, « "year", "month", "week", "day" », "nanosecond").
|
||||
auto smallest_unit = to_smallest_temporal_unit(global_object, *options, { "year"sv, "month"sv, "week"sv, "day"sv }, "nanosecond"sv);
|
||||
|
@ -312,9 +308,7 @@ JS_DEFINE_NATIVE_FUNCTION(InstantPrototype::round)
|
|||
}
|
||||
|
||||
// 4. Set options to ? GetOptionsObject(options).
|
||||
auto* options = get_options_object(global_object, vm.argument(0));
|
||||
if (vm.exception())
|
||||
return {};
|
||||
auto* options = TRY_OR_DISCARD(get_options_object(global_object, vm.argument(0)));
|
||||
|
||||
// 5. Let smallestUnit be ? ToSmallestTemporalUnit(options, « "year", "month", "week", "day" », undefined).
|
||||
auto smallest_unit_value = to_smallest_temporal_unit(global_object, *options, { "year"sv, "month"sv, "week"sv, "day"sv }, {});
|
||||
|
@ -414,9 +408,7 @@ JS_DEFINE_NATIVE_FUNCTION(InstantPrototype::to_string)
|
|||
return {};
|
||||
|
||||
// 3. Set options to ? GetOptionsObject(options).
|
||||
auto* options = get_options_object(global_object, vm.argument(0));
|
||||
if (vm.exception())
|
||||
return {};
|
||||
auto* options = TRY_OR_DISCARD(get_options_object(global_object, vm.argument(0)));
|
||||
|
||||
// 4. Let timeZone be ? Get(options, "timeZone").
|
||||
auto time_zone = options->get(vm.names.timeZone);
|
||||
|
|
|
@ -82,9 +82,7 @@ Value PlainDateConstructor::construct(FunctionObject& new_target)
|
|||
JS_DEFINE_NATIVE_FUNCTION(PlainDateConstructor::from)
|
||||
{
|
||||
// 1. Set options to ? GetOptionsObject(options).
|
||||
auto* options = get_options_object(global_object, vm.argument(1));
|
||||
if (vm.exception())
|
||||
return {};
|
||||
auto* options = TRY_OR_DISCARD(get_options_object(global_object, vm.argument(1)));
|
||||
|
||||
auto item = vm.argument(0);
|
||||
// 2. If Type(item) is Object and item has an [[InitializedTemporalDate]] internal slot, then
|
||||
|
|
|
@ -456,9 +456,7 @@ JS_DEFINE_NATIVE_FUNCTION(PlainDatePrototype::to_string)
|
|||
return {};
|
||||
|
||||
// 3. Set options to ? GetOptionsObject(options).
|
||||
auto* options = get_options_object(global_object, vm.argument(0));
|
||||
if (vm.exception())
|
||||
return {};
|
||||
auto* options = TRY_OR_DISCARD(get_options_object(global_object, vm.argument(0)));
|
||||
|
||||
// 4. Let showCalendar be ? ToShowCalendarOption(options).
|
||||
auto show_calendar = to_show_calendar_option(global_object, *options);
|
||||
|
|
|
@ -103,9 +103,7 @@ JS_DEFINE_NATIVE_FUNCTION(PlainDateTimeConstructor::from)
|
|||
auto item = vm.argument(0);
|
||||
|
||||
// 1. Set options to ? GetOptionsObject(options).
|
||||
auto* options = get_options_object(global_object, vm.argument(1));
|
||||
if (vm.exception())
|
||||
return {};
|
||||
auto* options = TRY_OR_DISCARD(get_options_object(global_object, vm.argument(1)));
|
||||
|
||||
// 2. If Type(item) is Object and item has an [[InitializedTemporalDateTime]] internal slot, then
|
||||
if (item.is_object() && is<PlainDateTime>(item.as_object())) {
|
||||
|
|
|
@ -90,13 +90,11 @@ Value PlainMonthDayConstructor::construct(FunctionObject& new_target)
|
|||
// 10.2.2 Temporal.PlainMonthDay.from ( item [ , options ] ), https://tc39.es/proposal-temporal/#sec-temporal.plainmonthday.from
|
||||
JS_DEFINE_NATIVE_FUNCTION(PlainMonthDayConstructor::from)
|
||||
{
|
||||
// 1. Set options to ? GetOptionsObject(options).
|
||||
auto* options = get_options_object(global_object, vm.argument(1));
|
||||
if (vm.exception())
|
||||
return {};
|
||||
|
||||
auto item = vm.argument(0);
|
||||
|
||||
// 1. Set options to ? GetOptionsObject(options).
|
||||
auto* options = TRY_OR_DISCARD(get_options_object(global_object, vm.argument(1)));
|
||||
|
||||
// 2. If Type(item) is Object and item has an [[InitializedTemporalMonthDay]] internal slot, then
|
||||
if (item.is_object() && is<PlainMonthDay>(item.as_object())) {
|
||||
// a. Perform ? ToTemporalOverflow(options).
|
||||
|
|
|
@ -124,9 +124,7 @@ JS_DEFINE_NATIVE_FUNCTION(PlainMonthDayPrototype::to_string)
|
|||
return {};
|
||||
|
||||
// 3. Set options to ? GetOptionsObject(options).
|
||||
auto* options = get_options_object(global_object, vm.argument(0));
|
||||
if (vm.exception())
|
||||
return {};
|
||||
auto* options = TRY_OR_DISCARD(get_options_object(global_object, vm.argument(0)));
|
||||
|
||||
// 4. Let showCalendar be ? ToShowCalendarOption(options).
|
||||
auto show_calendar = to_show_calendar_option(global_object, *options);
|
||||
|
|
|
@ -85,9 +85,7 @@ Value PlainTimeConstructor::construct(FunctionObject& new_target)
|
|||
JS_DEFINE_NATIVE_FUNCTION(PlainTimeConstructor::from)
|
||||
{
|
||||
// 1. Set options to ? GetOptionsObject(options).
|
||||
auto* options = get_options_object(global_object, vm.argument(1));
|
||||
if (vm.exception())
|
||||
return {};
|
||||
auto* options = TRY_OR_DISCARD(get_options_object(global_object, vm.argument(1)));
|
||||
|
||||
// 2. Let overflow be ? ToTemporalOverflow(options).
|
||||
auto overflow = to_temporal_overflow(global_object, *options);
|
||||
|
|
|
@ -192,9 +192,7 @@ JS_DEFINE_NATIVE_FUNCTION(PlainTimePrototype::with)
|
|||
auto partial_time = TRY_OR_DISCARD(to_partial_time(global_object, temporal_time_like));
|
||||
|
||||
// 10. Set options to ? GetOptionsObject(options).
|
||||
auto* options = get_options_object(global_object, vm.argument(1));
|
||||
if (vm.exception())
|
||||
return {};
|
||||
auto* options = TRY_OR_DISCARD(get_options_object(global_object, vm.argument(1)));
|
||||
|
||||
// 11. Let overflow be ? ToTemporalOverflow(options).
|
||||
auto overflow = to_temporal_overflow(global_object, *options);
|
||||
|
@ -349,9 +347,7 @@ JS_DEFINE_NATIVE_FUNCTION(PlainTimePrototype::to_string)
|
|||
return {};
|
||||
|
||||
// 3. Set options to ? GetOptionsObject(options).
|
||||
auto* options = get_options_object(global_object, vm.argument(0));
|
||||
if (vm.exception())
|
||||
return {};
|
||||
auto* options = TRY_OR_DISCARD(get_options_object(global_object, vm.argument(0)));
|
||||
|
||||
// 4. Let precision be ? ToSecondsStringPrecision(options).
|
||||
auto precision = to_seconds_string_precision(global_object, *options);
|
||||
|
|
|
@ -93,9 +93,7 @@ Value PlainYearMonthConstructor::construct(FunctionObject& new_target)
|
|||
JS_DEFINE_NATIVE_FUNCTION(PlainYearMonthConstructor::from)
|
||||
{
|
||||
// 1. Set options to ? GetOptionsObject(options).
|
||||
auto* options = get_options_object(global_object, vm.argument(1));
|
||||
if (vm.exception())
|
||||
return {};
|
||||
auto* options = TRY_OR_DISCARD(get_options_object(global_object, vm.argument(1)));
|
||||
|
||||
auto item = vm.argument(0);
|
||||
|
||||
|
|
|
@ -243,7 +243,7 @@ JS_DEFINE_NATIVE_FUNCTION(PlainYearMonthPrototype::to_string)
|
|||
return {};
|
||||
|
||||
// 3. Set options to ? GetOptionsObject(options).
|
||||
auto* options = get_options_object(global_object, vm.argument(0));
|
||||
auto* options = TRY_OR_DISCARD(get_options_object(global_object, vm.argument(0)));
|
||||
if (vm.exception())
|
||||
return {};
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue