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

LibJS: Refactor CalendarFields for better linearity

This is a normative change in the Temporal spec.
See: 9b139a1
This commit is contained in:
Moustafa Raafat 2022-10-19 22:41:41 +01:00 committed by Linus Groh
parent d38aeddd77
commit 8f964604f0

View file

@ -106,18 +106,17 @@ ThrowCompletionOr<Vector<String>> calendar_fields(VM& vm, Object& calendar, Vect
// 1. Let fields be ? GetMethod(calendar, "fields").
auto fields = TRY(Value(&calendar).get_method(vm, vm.names.fields));
// 2. Let fieldsArray be CreateArrayFromList(fieldNames).
auto field_names_values = MarkedVector<Value> { vm.heap() };
for (auto& field_name : field_names)
field_names_values.append(js_string(vm, field_name));
Value fields_array = Array::create_from(realm, field_names_values);
// 3. If fields is not undefined, then
if (fields) {
// a. Set fieldsArray to ? Call(fields, calendar, « fieldsArray »).
fields_array = TRY(call(vm, *fields, &calendar, fields_array));
// 2. If fields is undefined, return fieldNames.
if (!fields) {
Vector<String> result;
for (auto& value : field_names)
result.append(value);
return result;
}
// 3. Let fieldsArray be ? Call(fields, calendar, « CreateArrayFromList(fieldNames) »).
auto fields_array = TRY(call(vm, *fields, &calendar, Array::create_from<StringView>(realm, field_names, [&](auto value) { return js_string(vm, value); })));
// 4. Return ? IterableToListOfType(fieldsArray, « String »).
auto list = TRY(iterable_to_list_of_type(vm, fields_array, { OptionType::String }));