[m-rev.] for post-commit review: readability improvements to calendar module

Zoltan Somogyi zoltan.somogyi at runbox.com
Mon Jul 6 17:13:43 AEST 2026



On Mon, 6 Jul 2026 14:43:50 +1000, Julien Fischer <jfischer at opturion.com> wrote:

> -do_fixed_duration_between(DateA, DateB) = Duration :-
> -    some [!Borrow] (
> -        MicroSecond1 = DateB ^ dt_microsecond,
> -        MicroSecond2 = DateA ^ dt_microsecond,
> -        subtract_ints_with_borrow(microseconds_per_second,
> -            MicroSecond1, MicroSecond2, MicroSeconds, !:Borrow),
> -        Second1 = DateB ^ dt_second - !.Borrow,
> -        Second2 = DateA ^ dt_second,
> -        subtract_ints_with_borrow(60, Second1, Second2, Seconds, !:Borrow),
> -        Minute1 = DateB ^ dt_minute - !.Borrow,
> -        Minute2 = DateA ^ dt_minute,
> -        subtract_ints_with_borrow(60, Minute1, Minute2, Minutes, !:Borrow),
> -        Hour1 = DateB ^ dt_hour - !.Borrow,
> -        Hour2 = DateA ^ dt_hour,
> -        subtract_ints_with_borrow(24, Hour1, Hour2, Hours, !:Borrow),
> -        JDN1 = julian_day_number(DateB),
> -        JDN2 = julian_day_number(DateA),
> -        Days = JDN1 - !.Borrow - JDN2,
> -        Duration = init_duration(0, 0, Days, Hours, Minutes, Seconds,
> -            MicroSeconds)
> -    ).
> +do_fixed_duration_between(Earlier, Later) = Duration :-
> +    subtract_ints_with_borrow(microseconds_per_second,
> +        Later ^ dt_microsecond, Earlier ^ dt_microsecond,
> +        MicroSeconds, BorrowFromSeconds),
> +    LaterSecondLessBorrow = Later ^ dt_second - BorrowFromSeconds,
> +    subtract_ints_with_borrow(60, LaterSecondLessBorrow,
> +        Earlier ^ dt_second, Seconds, BorrowFromMinutes),
> +    LaterMinuteLessBorrow = Later ^ dt_minute - BorrowFromMinutes,
> +    subtract_ints_with_borrow(60,
> +        LaterMinuteLessBorrow, Earlier ^ dt_minute, Minutes, BorrowFromHours),
> +    LaterHourLessBorrow = Later ^ dt_hour - BorrowFromHours,
> +    subtract_ints_with_borrow(24,
> +        LaterHourLessBorrow, Earlier ^ dt_hour, Hours, BorrowFromDays),
> +    LaterDay = julian_day_number(Later),
> +    EarlierDay = julian_day_number(Earlier),
> +    Days = LaterDay - BorrowFromDays - EarlierDay,
> +    Duration = init_duration(0, 0, Days, Hours, Minutes, Seconds,
> +        MicroSeconds).

I think the diff is good, except for one thing. I would keep the original
code's property that each subtraction is preceded by giving a name
to BOTH inputs to the subtraction. 

I have a diff that puts this into effect. Since you are working on the file,
I am attaching it to this email, for you to apply at your convenience.

Zoltan.



-------------- next part --------------
A non-text attachment was scrubbed...
Name: DIFF.cal
Type: application/octet-stream
Size: 2000 bytes
Desc: not available
URL: <http://lists.mercurylang.org/archives/reviews/attachments/20260706/974626f1/attachment-0001.obj>


More information about the reviews mailing list