Skip to content

Commit 0bdf88d

Browse files
ptomato12wrigja
authored andcommitted
Remove remaining dateAdd lookups
This implements the normative change from "Normative: Perform a single "dateAdd" lookup for the remaining MoveRelativeDate calls" in the reference code. It eliminates any remaining places where there were subsequent dateAdd lookups in the same abstract operation. UPSTREAM_COMMIT=968d0ddeef76f25f2917ef2cdf91499f07d5a2a6
1 parent e029b9c commit 0bdf88d

File tree

1 file changed

+25
-17
lines changed

1 file changed

+25
-17
lines changed

lib/ecmascript.ts

Lines changed: 25 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -3636,29 +3636,33 @@ export function UnbalanceDurationRelative(
36363636
case 'week':
36373637
if (!calendar) throw new RangeError('a starting point is required for weeks balancing');
36383638
assertExists(relativeTo);
3639+
const dateAdd = calendar.dateAdd;
36393640
// balance years down to days
36403641
while (MathAbs(years) > 0) {
36413642
let oneYearDays;
3642-
({ relativeTo, days: oneYearDays } = MoveRelativeDate(calendar, relativeTo, oneYear));
3643+
({ relativeTo, days: oneYearDays } = MoveRelativeDate(calendar, relativeTo, oneYear, dateAdd));
36433644
days += oneYearDays;
36443645
years -= sign;
36453646
}
36463647

36473648
// balance months down to days
36483649
while (MathAbs(months) > 0) {
36493650
let oneMonthDays;
3650-
({ relativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth));
3651+
({ relativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth, dateAdd));
36513652
days += oneMonthDays;
36523653
months -= sign;
36533654
}
36543655
break;
3655-
default:
3656+
default: {
36563657
// balance years down to days
3658+
if (years == 0 && months == 0 && weeks == 0) break;
3659+
if (!calendar) throw new RangeError('a starting point is required for balancing calendar units');
3660+
const dateAdd = calendar.dateAdd;
36573661
while (MathAbs(years) > 0) {
36583662
if (!calendar) throw new RangeError('a starting point is required for balancing calendar units');
36593663
assertExists(relativeTo);
36603664
let oneYearDays;
3661-
({ relativeTo, days: oneYearDays } = MoveRelativeDate(calendar, relativeTo, oneYear));
3665+
({ relativeTo, days: oneYearDays } = MoveRelativeDate(calendar, relativeTo, oneYear, dateAdd));
36623666
days += oneYearDays;
36633667
years -= sign;
36643668
}
@@ -3668,7 +3672,7 @@ export function UnbalanceDurationRelative(
36683672
if (!calendar) throw new RangeError('a starting point is required for balancing calendar units');
36693673
assertExists(relativeTo);
36703674
let oneMonthDays;
3671-
({ relativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth));
3675+
({ relativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth, dateAdd));
36723676
days += oneMonthDays;
36733677
months -= sign;
36743678
}
@@ -3678,11 +3682,12 @@ export function UnbalanceDurationRelative(
36783682
if (!calendar) throw new RangeError('a starting point is required for balancing calendar units');
36793683
assertExists(relativeTo);
36803684
let oneWeekDays;
3681-
({ relativeTo, days: oneWeekDays } = MoveRelativeDate(calendar, relativeTo, oneWeek));
3685+
({ relativeTo, days: oneWeekDays } = MoveRelativeDate(calendar, relativeTo, oneWeek, dateAdd));
36823686
days += oneWeekDays;
36833687
weeks -= sign;
36843688
}
36853689
break;
3690+
}
36863691
}
36873692

36883693
return { years, months, weeks, days };
@@ -3719,28 +3724,28 @@ export function BalanceDurationRelative(
37193724
case 'year': {
37203725
if (!calendar) throw new RangeError('a starting point is required for years balancing');
37213726
assertExists(relativeTo);
3727+
const dateAdd = calendar.dateAdd;
37223728
// balance days up to years
37233729
let newRelativeTo, oneYearDays;
3724-
({ relativeTo: newRelativeTo, days: oneYearDays } = MoveRelativeDate(calendar, relativeTo, oneYear));
3730+
({ relativeTo: newRelativeTo, days: oneYearDays } = MoveRelativeDate(calendar, relativeTo, oneYear, dateAdd));
37253731
while (MathAbs(days) >= MathAbs(oneYearDays)) {
37263732
days -= oneYearDays;
37273733
years += sign;
37283734
relativeTo = newRelativeTo;
3729-
({ relativeTo: newRelativeTo, days: oneYearDays } = MoveRelativeDate(calendar, relativeTo, oneYear));
3735+
({ relativeTo: newRelativeTo, days: oneYearDays } = MoveRelativeDate(calendar, relativeTo, oneYear, dateAdd));
37303736
}
37313737

37323738
// balance days up to months
37333739
let oneMonthDays;
3734-
({ relativeTo: newRelativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth));
3740+
({ relativeTo: newRelativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth, dateAdd));
37353741
while (MathAbs(days) >= MathAbs(oneMonthDays)) {
37363742
days -= oneMonthDays;
37373743
months += sign;
37383744
relativeTo = newRelativeTo;
3739-
({ relativeTo: newRelativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth));
3745+
({ relativeTo: newRelativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth, dateAdd));
37403746
}
37413747

37423748
// balance months up to years
3743-
const dateAdd = calendar.dateAdd;
37443749
newRelativeTo = CalendarDateAdd(calendar, relativeTo, oneYear, undefined, dateAdd);
37453750
const dateUntil = calendar.dateUntil;
37463751
const untilOptions = ObjectCreate(null);
@@ -3762,28 +3767,30 @@ export function BalanceDurationRelative(
37623767
case 'month': {
37633768
if (!calendar) throw new RangeError('a starting point is required for months balancing');
37643769
assertExists(relativeTo);
3770+
const dateAdd = calendar.dateAdd;
37653771
// balance days up to months
37663772
let newRelativeTo, oneMonthDays;
3767-
({ relativeTo: newRelativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth));
3773+
({ relativeTo: newRelativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth, dateAdd));
37683774
while (MathAbs(days) >= MathAbs(oneMonthDays)) {
37693775
days -= oneMonthDays;
37703776
months += sign;
37713777
relativeTo = newRelativeTo;
3772-
({ relativeTo: newRelativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth));
3778+
({ relativeTo: newRelativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth, dateAdd));
37733779
}
37743780
break;
37753781
}
37763782
case 'week': {
37773783
if (!calendar) throw new RangeError('a starting point is required for weeks balancing');
37783784
assertExists(relativeTo);
3785+
const dateAdd = calendar.dateAdd;
37793786
// balance days up to weeks
37803787
let newRelativeTo, oneWeekDays;
3781-
({ relativeTo: newRelativeTo, days: oneWeekDays } = MoveRelativeDate(calendar, relativeTo, oneWeek));
3788+
({ relativeTo: newRelativeTo, days: oneWeekDays } = MoveRelativeDate(calendar, relativeTo, oneWeek, dateAdd));
37823789
while (MathAbs(days) >= MathAbs(oneWeekDays)) {
37833790
days -= oneWeekDays;
37843791
weeks += sign;
37853792
relativeTo = newRelativeTo;
3786-
({ relativeTo: newRelativeTo, days: oneWeekDays } = MoveRelativeDate(calendar, relativeTo, oneWeek));
3793+
({ relativeTo: newRelativeTo, days: oneWeekDays } = MoveRelativeDate(calendar, relativeTo, oneWeek, dateAdd));
37873794
}
37883795
break;
37893796
}
@@ -5814,16 +5821,17 @@ export function RoundDuration(
58145821
case 'week': {
58155822
if (!calendar) throw new RangeError('A starting point is required for weeks rounding');
58165823
assertExists(relativeTo);
5824+
const dateAdd = calendar.dateAdd;
58175825
// Weeks may be different lengths of days depending on the calendar,
58185826
// convert days to weeks in a loop as described above under 'years'.
58195827
const sign = MathSign(days);
58205828
const oneWeek = new TemporalDuration(0, 0, days < 0 ? -1 : 1);
58215829
let oneWeekDays;
5822-
({ relativeTo, days: oneWeekDays } = MoveRelativeDate(calendar, relativeTo, oneWeek));
5830+
({ relativeTo, days: oneWeekDays } = MoveRelativeDate(calendar, relativeTo, oneWeek, dateAdd));
58235831
while (MathAbs(days) >= MathAbs(oneWeekDays)) {
58245832
weeks += sign;
58255833
days -= oneWeekDays;
5826-
({ relativeTo, days: oneWeekDays } = MoveRelativeDate(calendar, relativeTo, oneWeek));
5834+
({ relativeTo, days: oneWeekDays } = MoveRelativeDate(calendar, relativeTo, oneWeek, dateAdd));
58275835
}
58285836
oneWeekDays = MathAbs(oneWeekDays);
58295837
// dayLengthNs is never undefined if unit is `day` or larger.

0 commit comments

Comments
 (0)