1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-26 06:17:34 +00:00

LibJS: Add optional dateAdd parameter to MoveRelativeDate

This is a normative change in the Temporal spec.

See: 891060f
This commit is contained in:
Idan Horowitz 2022-10-16 11:33:42 +03:00 committed by Linus Groh
parent 35c9e324b4
commit 4e79ce4e7a
2 changed files with 17 additions and 13 deletions

View file

@ -1084,16 +1084,20 @@ ThrowCompletionOr<DurationRecord> add_duration(VM& vm, double years1, double mon
return difference_zoned_date_time(vm, relative_to.nanoseconds(), *end_ns, time_zone, calendar, largest_unit, *Object::create(realm, nullptr));
}
// 7.5.23 MoveRelativeDate ( calendar, relativeTo, duration ), https://tc39.es/proposal-temporal/#sec-temporal-moverelativedate
ThrowCompletionOr<MoveRelativeDateResult> move_relative_date(VM& vm, Object& calendar, PlainDate& relative_to, Duration& duration)
// 7.5.23 MoveRelativeDate ( calendar, relativeTo, duration [ , dateAdd ] ), https://tc39.es/proposal-temporal/#sec-temporal-moverelativedate
ThrowCompletionOr<MoveRelativeDateResult> move_relative_date(VM& vm, Object& calendar, PlainDate& relative_to, Duration& duration, FunctionObject* date_add)
{
// 1. Let newDate be ? CalendarDateAdd(calendar, relativeTo, duration, options).
auto* new_date = TRY(calendar_date_add(vm, calendar, &relative_to, duration));
// 1. If dateAdd is not present, set dateAdd to ? GetMethod(calendar, "dateAdd").
if (!date_add)
date_add = TRY(Value(&calendar).get_method(vm, vm.names.dateAdd));
// 2. Let days be DaysUntil(relativeTo, newDate).
// 2. Let newDate be ? CalendarDateAdd(calendar, relativeTo, duration, undefined, dateAdd)
auto* new_date = TRY(calendar_date_add(vm, calendar, &relative_to, duration, nullptr, date_add));
// 3. Let days be DaysUntil(relativeTo, newDate).
auto days = days_until(relative_to, *new_date);
// 3. Return the Record { [[RelativeTo]]: newDate, [[Days]]: days }.
// 4. Return the Record { [[RelativeTo]]: newDate, [[Days]]: days }.
return MoveRelativeDateResult { .relative_to = make_handle(new_date), .days = days };
}
@ -1266,8 +1270,8 @@ ThrowCompletionOr<RoundedDuration> round_duration(VM& vm, double years, double m
// v. Let oneYear be ! CreateTemporalDuration(sign, 0, 0, 0, 0, 0, 0, 0, 0, 0).
auto* one_year = MUST(create_temporal_duration(vm, sign, 0, 0, 0, 0, 0, 0, 0, 0, 0));
// w. Let moveResult be ? MoveRelativeDate(calendar, relativeTo, oneYear).
auto move_result = TRY(move_relative_date(vm, *calendar, *relative_to, *one_year));
// w. Let moveResult be ? MoveRelativeDate(calendar, relativeTo, oneYear, dateAdd).
auto move_result = TRY(move_relative_date(vm, *calendar, *relative_to, *one_year, date_add));
// x. Let oneYearDays be moveResult.[[Days]].
auto one_year_days = move_result.days;
@ -1320,8 +1324,8 @@ ThrowCompletionOr<RoundedDuration> round_duration(VM& vm, double years, double m
// j. Let oneMonth be ! CreateTemporalDuration(0, sign, 0, 0, 0, 0, 0, 0, 0, 0).
auto* one_month = MUST(create_temporal_duration(vm, 0, sign, 0, 0, 0, 0, 0, 0, 0, 0));
// k. Let moveResult be ? MoveRelativeDate(calendar, relativeTo, oneMonth).
auto move_result = TRY(move_relative_date(vm, *calendar, *relative_to, *one_month));
// k. Let moveResult be ? MoveRelativeDate(calendar, relativeTo, oneMonth, dateAdd).
auto move_result = TRY(move_relative_date(vm, *calendar, *relative_to, *one_month, date_add));
// l. Set relativeTo to moveResult.[[RelativeTo]].
relative_to = move_result.relative_to.cell();
@ -1337,8 +1341,8 @@ ThrowCompletionOr<RoundedDuration> round_duration(VM& vm, double years, double m
// ii. Set days to days - oneMonthDays.
days -= one_month_days;
// iii. Set moveResult to ? MoveRelativeDate(calendar, relativeTo, oneMonth).
move_result = TRY(move_relative_date(vm, *calendar, *relative_to, *one_month));
// iii. Set moveResult to ? MoveRelativeDate(calendar, relativeTo, oneMonth, dateAdd).
move_result = TRY(move_relative_date(vm, *calendar, *relative_to, *one_month, date_add));
// iv. Set relativeTo to moveResult.[[RelativeTo]].
relative_to = move_result.relative_to.cell();