Skip to content

Commit ae24e28

Browse files
committed
more cases for a compiler "fix" (signed-mod operation with potentially negative dividend), code simplification/normalization
1 parent f7de1c4 commit ae24e28

File tree

1 file changed

+13
-6
lines changed

1 file changed

+13
-6
lines changed

generic/tclClock.c

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4099,6 +4099,9 @@ ClockFreeScan(
40994099
}
41004100
else {
41014101
yySecondOfDay = yydate.localSeconds % SECONDS_PER_DAY;
4102+
if (yySecondOfDay < 0) { /* compiler fix for signed-mod */
4103+
yySecondOfDay += SECONDS_PER_DAY;
4104+
}
41024105
}
41034106

41044107
/*
@@ -4169,10 +4172,10 @@ ClockCalcRelTime(
41694172
yyMonth += yyRelMonth - 1;
41704173
yyYear += yyMonth / 12;
41714174
m = yyMonth % 12;
4172-
/* compiler fix for negative offs - wrap y, m = (0, -1) -> (-1, 11) */
4175+
/* compiler fix for signed-mod - wrap y, m = (0, -1) -> (-1, 11) */
41734176
if (m < 0) {
4177+
m += 12;
41744178
yyYear--;
4175-
m = 12 + m;
41764179
}
41774180
yyMonth = m + 1;
41784181

@@ -4214,7 +4217,11 @@ ClockCalcRelTime(
42144217

42154218
yyRelDay += newSecs / SECONDS_PER_DAY;
42164219
yySecondOfDay = 0;
4217-
yyRelSeconds = newSecs % SECONDS_PER_DAY;
4220+
yyRelSeconds = (newSecs %= SECONDS_PER_DAY);
4221+
if (newSecs < 0) { /* compiler fix for signed-mod */
4222+
yyRelSeconds += SECONDS_PER_DAY;
4223+
yyRelDay--;
4224+
}
42184225

42194226
goto repeat_rel;
42204227
}
@@ -4315,8 +4322,8 @@ ClockWeekdaysOffs(
43154322
offs = offs % 5;
43164323
/* compiler fix for negative offs - wrap (0, -1) -> (-1, 4) */
43174324
if (offs < 0) {
4325+
offs += 5;
43184326
weeks--;
4319-
offs = 5 + offs;
43204327
}
43214328
offs += 7 * weeks;
43224329

@@ -4325,7 +4332,7 @@ ClockWeekdaysOffs(
43254332
register int day = (offs % 7);
43264333
/* compiler fix for negative offs - wrap (0, -1) -> (-1, 6) */
43274334
if (day < 0) {
4328-
day = 7 + day;
4335+
day += 7;
43294336
}
43304337
resDayOfWeek = dayOfWeek + day;
43314338
}
@@ -4442,7 +4449,7 @@ ClockAddObjCmd(
44424449

44434450
/* time together as seconds of the day */
44444451
yySecondOfDay = yydate.localSeconds % SECONDS_PER_DAY;
4445-
if (yySecondOfDay < 0) { /* to positive result of mod */
4452+
if (yySecondOfDay < 0) { /* compiler fix for signed-mod */
44464453
yySecondOfDay += SECONDS_PER_DAY;
44474454
}
44484455
yySeconds = yySecondOfDay;

0 commit comments

Comments
 (0)