1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-27 07:37:46 +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"). // 1. Let fields be ? GetMethod(calendar, "fields").
auto fields = TRY(Value(&calendar).get_method(vm, vm.names.fields)); auto fields = TRY(Value(&calendar).get_method(vm, vm.names.fields));
// 2. Let fieldsArray be CreateArrayFromList(fieldNames). // 2. If fields is undefined, return fieldNames.
auto field_names_values = MarkedVector<Value> { vm.heap() }; if (!fields) {
for (auto& field_name : field_names) Vector<String> result;
field_names_values.append(js_string(vm, field_name)); for (auto& value : field_names)
Value fields_array = Array::create_from(realm, field_names_values); result.append(value);
return result;
// 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));
} }
// 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 »). // 4. Return ? IterableToListOfType(fieldsArray, « String »).
auto list = TRY(iterable_to_list_of_type(vm, fields_array, { OptionType::String })); auto list = TRY(iterable_to_list_of_type(vm, fields_array, { OptionType::String }));