1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 14:47:44 +00:00

LibJS: Handle undefined options in MergeLargestUnitOption

This is an editorial change in the Temporal spec.

See: 5e161a2
This commit is contained in:
Linus Groh 2022-04-07 23:51:54 +01:00
parent ada4f8d660
commit 2844a2c448
6 changed files with 20 additions and 20 deletions

View file

@ -834,31 +834,35 @@ StringView larger_of_two_temporal_units(StringView unit1, StringView unit2)
}
// 13.23 MergeLargestUnitOption ( options, largestUnit ), https://tc39.es/proposal-temporal/#sec-temporal-mergelargestunitoption
ThrowCompletionOr<Object*> merge_largest_unit_option(GlobalObject& global_object, Object& options, String largest_unit)
ThrowCompletionOr<Object*> merge_largest_unit_option(GlobalObject& global_object, Object* options, String largest_unit)
{
auto& vm = global_object.vm();
// 1. Let merged be OrdinaryObjectCreate(%Object.prototype%).
// 1. If options is undefined, set options to OrdinaryObjectCreate(null).
if (options == nullptr)
options = Object::create(global_object, nullptr);
// 2. Let merged be OrdinaryObjectCreate(%Object.prototype%).
auto* merged = Object::create(global_object, global_object.object_prototype());
// 2. Let keys be ? EnumerableOwnPropertyNames(options, key).
auto keys = TRY(options.enumerable_own_property_names(Object::PropertyKind::Key));
// 3. Let keys be ? EnumerableOwnPropertyNames(options, key).
auto keys = TRY(options->enumerable_own_property_names(Object::PropertyKind::Key));
// 3. For each element nextKey of keys, do
// 4. For each element nextKey of keys, do
for (auto& key : keys) {
auto next_key = MUST(PropertyKey::from_value(global_object, key));
// a. Let propValue be ? Get(options, nextKey).
auto prop_value = TRY(options.get(next_key));
auto prop_value = TRY(options->get(next_key));
// b. Perform ! CreateDataPropertyOrThrow(merged, nextKey, propValue).
MUST(merged->create_data_property_or_throw(next_key, prop_value));
}
// 4. Perform ! CreateDataPropertyOrThrow(merged, "largestUnit", largestUnit).
// 5. Perform ! CreateDataPropertyOrThrow(merged, "largestUnit", largestUnit).
MUST(merged->create_data_property_or_throw(vm.names.largestUnit, js_string(vm, move(largest_unit))));
// 5. Return merged.
// 6. Return merged.
return merged;
}