diff --git a/LOG b/LOG index 5ed469245e..f8a9f1809e 100644 --- a/LOG +++ b/LOG @@ -493,3 +493,21 @@ evaluation-order bug. cp0.ss, 4.ms +- added date-dst? to access the previously-hidden DST information in + date records, and added date-zone-name to provide a time zone name. + date.ss, primdata.ss, + stats.c, + date.ms, root-experr*, patch-compile*, + system.stex +- fixed a bug in flonum-extractor, which on 64-bit machines was using an + 8-byte read instead of a 4-byte read to pick up the 4 highest-order + bytes of a little-endian flonum, potentially reading past the end of + mapped memory for flonums produced by taking the imaginary part of an + inexact complexnum (which, unlike other flonums, are not aligned on + 16-byte boundaries). The 8-byte load would also have failed to produce + correct results on 64-bit big-endian machines (of which we presently + have none) because the offsets passed to flonum-extractor assume the + bits are in the lowest-order 4 bytes of the extracted field. + cp0.ss, + misc.ms, + release_notes.stex diff --git a/c/stats.c b/c/stats.c index 708ce6b332..48034f3917 100644 --- a/c/stats.c +++ b/c/stats.c @@ -38,6 +38,8 @@ static struct timespec starting_mono_tp; +static long adjust_time_zone(ptr dtvec, struct tm *tmxp, ptr given_tzoff); + /******** unique-id ********/ #if (time_t_bits == 32) @@ -326,16 +328,16 @@ ptr S_gmtime(ptr tzoff, ptr tspair) { } if (tzoff == Sfalse) { - struct tm tmx2; time_t tx2; if (localtime_r(&tx, &tmx) == NULL) return Sfalse; - if (gmtime_r(&tx, &tmx2) == NULL) return Sfalse; - tmx2.tm_isdst = tmx.tm_isdst; - if ((tx2 = mktime(&tmx2)) == (time_t)-1) return Sfalse; - INITVECTIT(dtvec, dtvec_tzoff) = S_integer_time_t(tx - tx2); + tmx.tm_isdst = -1; /* have mktime determine the DST status */ + if (mktime(&tmx) == (time_t)-1) return Sfalse; + (void) adjust_time_zone(dtvec, &tmx, Sfalse); } else { tx += Sinteger_value(tzoff); if (gmtime_r(&tx, &tmx) == NULL) return Sfalse; INITVECTIT(dtvec, dtvec_tzoff) = tzoff; + INITVECTIT(dtvec, dtvec_isdst) = Sfalse; + INITVECTIT(dtvec, dtvec_tzname) = Sfalse; } INITVECTIT(dtvec, dtvec_sec) = Sinteger(tmx.tm_sec); @@ -346,7 +348,6 @@ ptr S_gmtime(ptr tzoff, ptr tspair) { INITVECTIT(dtvec, dtvec_year) = Sinteger(tmx.tm_year); INITVECTIT(dtvec, dtvec_wday) = Sinteger(tmx.tm_wday); INITVECTIT(dtvec, dtvec_yday) = Sinteger(tmx.tm_yday); - INITVECTIT(dtvec, dtvec_isdst) = Sinteger(tmx.tm_isdst); return dtvec; } @@ -367,7 +368,7 @@ ptr S_asctime(ptr dtvec) { tmx.tm_year = (int)Sinteger_value(Svector_ref(dtvec, dtvec_year)); tmx.tm_wday = (int)Sinteger_value(Svector_ref(dtvec, dtvec_wday)); tmx.tm_yday = (int)Sinteger_value(Svector_ref(dtvec, dtvec_yday)); - tmx.tm_isdst = (int)Sinteger_value(Svector_ref(dtvec, dtvec_isdst)); + tmx.tm_isdst = (int)Sboolean_value(Svector_ref(dtvec, dtvec_isdst)); if (asctime_r(&tmx, buf) == NULL) return Sfalse; } @@ -377,7 +378,8 @@ ptr S_asctime(ptr dtvec) { ptr S_mktime(ptr dtvec) { time_t tx; struct tm tmx; - long orig_tzoff = (long)UNFIX(INITVECTIT(dtvec, dtvec_tzoff)); + long orig_tzoff, tzoff; + ptr given_tzoff; tmx.tm_sec = (int)Sinteger_value(Svector_ref(dtvec, dtvec_sec)); tmx.tm_min = (int)Sinteger_value(Svector_ref(dtvec, dtvec_min)); @@ -386,18 +388,14 @@ ptr S_mktime(ptr dtvec) { tmx.tm_mon = (int)Sinteger_value(Svector_ref(dtvec, dtvec_mon)) - 1; tmx.tm_year = (int)Sinteger_value(Svector_ref(dtvec, dtvec_year)); - tmx.tm_isdst = 0; + given_tzoff = INITVECTIT(dtvec, dtvec_tzoff); + if (given_tzoff == Sfalse) + orig_tzoff = 0; + else + orig_tzoff = (long)UNFIX(given_tzoff); + + tmx.tm_isdst = -1; /* have mktime determine the DST status */ if ((tx = mktime(&tmx)) == (time_t)-1) return Sfalse; - if (tmx.tm_isdst == 1) { /* guessed wrong */ - tmx.tm_sec = (int)Sinteger_value(Svector_ref(dtvec, dtvec_sec)); - tmx.tm_min = (int)Sinteger_value(Svector_ref(dtvec, dtvec_min)); - tmx.tm_hour = (int)Sinteger_value(Svector_ref(dtvec, dtvec_hour)); - tmx.tm_mday = (int)Sinteger_value(Svector_ref(dtvec, dtvec_mday)); - tmx.tm_mon = (int)Sinteger_value(Svector_ref(dtvec, dtvec_mon)) - 1; - tmx.tm_year = (int)Sinteger_value(Svector_ref(dtvec, dtvec_year)); - tmx.tm_isdst = 1; - if ((tx = mktime(&tmx)) == (time_t)-1) return Sfalse; - } /* mktime may have normalized some values, set wday and yday */ INITVECTIT(dtvec, dtvec_sec) = Sinteger(tmx.tm_sec); @@ -408,29 +406,66 @@ ptr S_mktime(ptr dtvec) { INITVECTIT(dtvec, dtvec_year) = Sinteger(tmx.tm_year); INITVECTIT(dtvec, dtvec_wday) = Sinteger(tmx.tm_wday); INITVECTIT(dtvec, dtvec_yday) = Sinteger(tmx.tm_yday); -#ifdef WIN32 - { - TIME_ZONE_INFORMATION tz; - DWORD rc = GetTimeZoneInformation(&tz); - long tzoff; - switch (rc) { - case TIME_ZONE_ID_UNKNOWN: - case TIME_ZONE_ID_STANDARD: - tzoff = tz.Bias * -60; - break; - case TIME_ZONE_ID_DAYLIGHT: - tzoff = (tz.Bias + tz.DaylightBias) * -60; - break; - } - if (tzoff != orig_tzoff) tx = (time_t) difftime(tx, (time_t)(orig_tzoff - tzoff)); - } -#else - if (tmx.tm_gmtoff != orig_tzoff) tx = difftime(tx, (time_t)(orig_tzoff - tmx.tm_gmtoff)); -#endif + tzoff = adjust_time_zone(dtvec, &tmx, given_tzoff); + + if (tzoff != orig_tzoff) tx = (time_t) difftime(tx, (time_t)(orig_tzoff - tzoff)); + return Scons(S_integer_time_t(tx), Svector_ref(dtvec, dtvec_nsec)); } +static long adjust_time_zone(ptr dtvec, struct tm *tmxp, ptr given_tzoff) { + ptr tz_name = Sfalse; + long use_tzoff, tzoff; + +#ifdef WIN32 + { + TIME_ZONE_INFORMATION tz; + WCHAR *w_tzname; + int len; + + /* The ...ForYear() function is available on Windows Vista and later: */ + GetTimeZoneInformationForYear(tmxp->tm_year, NULL, &tz); + + if (tmxp->tm_isdst) { + tzoff = (tz.Bias + tz.DaylightBias) * -60; + w_tzname = tz.DaylightName; + } else { + tzoff = (tz.Bias + tz.StandardBias) * -60; + w_tzname = tz.StandardName; + } + + if (given_tzoff == Sfalse) { + len = (int)wcslen(w_tzname); + tz_name = S_string(NULL, len); + while (len--) + Sstring_set(tz_name, len, w_tzname[len]); + } + } +#else + tzoff = tmxp->tm_gmtoff; + if (given_tzoff == Sfalse) { +# if defined(__linux__) || defined(SOLARIS) + /* Linux and Solaris set `tzname`: */ + tz_name = S_string(tzname[tmxp->tm_isdst], -1); +# else + /* BSD variants add `tm_zone` in `struct tm`: */ + tz_name = S_string(tmxp->tm_zone, -1); +# endif + } +#endif + + if (given_tzoff == Sfalse) + use_tzoff = tzoff; + else + use_tzoff = (long)UNFIX(given_tzoff); + + INITVECTIT(dtvec, dtvec_isdst) = ((given_tzoff == Sfalse) ? Sboolean(tmxp->tm_isdst) : Sfalse); + INITVECTIT(dtvec, dtvec_tzoff) = FIX(use_tzoff); + INITVECTIT(dtvec, dtvec_tzname) = tz_name; + + return tzoff; +} /******** old real-time and cpu-time support ********/ diff --git a/csug/system.stex b/csug/system.stex index 5df66713fe..1da4578ef9 100644 --- a/csug/system.stex +++ b/csug/system.stex @@ -3984,15 +3984,25 @@ It must be an exact integer in the range $-86400$ to $+86400$, inclusive and defaults to the local time-zone offset. UTC may be obtained by passing an offset of zero. +If \var{offset} is not provided, then the current time zone's offset +is used, and \scheme{date-dst?} and \scheme{date-zone-name} report +information about the time zone. If \var{offset} is provided, then +\scheme{date-dst?} and \scheme{date-zone-name} on the resulting date +object produce \scheme{#f}. + The following examples assume the local time zone is EST. \schemedisplay (current-date) ;=> # (current-date 0) ;=> # + +(date-zone-name (current-date)) ;=> "EST" \var{or other system-provided string} +(date-zone-name (current-date 0)) ;=> #f \endschemedisplay %---------------------------------------------------------------------------- \entryheader +\formdef{make-date}{\categoryprocedure}{(make-date \var{nsec} \var{sec} \var{min} \var{hour} \var{day} \var{mon} \var{year})} \formdef{make-date}{\categoryprocedure}{(make-date \var{nsec} \var{sec} \var{min} \var{hour} \var{day} \var{mon} \var{year} \var{offset})} \returns a date object \listlibraries @@ -4015,9 +4025,18 @@ as described above. It must be an exact integer in the range $-86400$ to $+86400$, inclusive. UTC may be specified by passing an offset of zero. +If \var{offset} is not provided, then the current time zone's offset +is used, and \scheme{date-dst?} and \scheme{date-zone-name} report +information about the time zone. If \var{offset} is provided, then +\scheme{date-dst?} and \scheme{date-zone-name} on the resulting date +object produce \scheme{#f}. + \schemedisplay (make-date 0 0 0 0 1 1 1970 0) ;=> # (make-date 0 30 7 9 23 9 2007 -14400) ;=> # + +(date-zone-name (make-date 0 30 7 9 23 9 2007 -14400)) ;=> #f +(date-zone-name (make-date 0 30 7 9 23 9 2007)) ;=> "EDT" \var{or other system-provided string} \endschemedisplay %---------------------------------------------------------------------------- @@ -4097,6 +4116,32 @@ d2 ;=> # (date-year-day d2) ;=> 265 \endschemedisplay +%---------------------------------------------------------------------------- +\entryheader +\formdef{date-dst?}{\categoryprocedure}{(date-dst? \var{date})} +\returns whether \var{date} is in Daylight Saving Time +\formdef{date-zone-name}{\categoryprocedure}{(date-zone-name \var{date})} +\returns \scheme{#f} or a string naming the time zone of \var{date} +\listlibraries +\endentryheader + +These procedures report time-zone information for +the date represented by \var{date} for a date object that +is constructed without an explicit time-zone offset. When +a date object is created instead with explicit time-zone offset, +these procedures produce \scheme{#f}. + +Daylight Saving Time status for the current time zone and a name +string for the time zone are computed using platform-specific routines. +In particular, the format of the zone name is platform-specific. + +\schemedisplay +(define d (make-date 0 30 7 9 23 9 2007)) +(date-zone-offset d) ;=> -14400 \var{assuming Eastern U.S. time zone} +(date-dst? d) ;=> #t +(date-zone-name d) ;=> "EDT" \var{or some system-provided string} +\endschemedisplay + %---------------------------------------------------------------------------- \entryheader \formdef{time-utc->date}{\categoryprocedure}{(time-utc->date \var{time})} @@ -4119,6 +4164,12 @@ It must be an exact integer in the range $-86400$ to $+86400$, inclusive and defaults to the local time-zone offset. UTC may be obtained by passing an offset of zero. +If \var{offset} is not provided to \scheme{time-utc->date}, then the current time zone's offset +is used, and \scheme{date-dst?} and \scheme{date-zone-name} report +information about the time zone. If \var{offset} is provided, then +\scheme{date-dst?} and \scheme{date-zone-name} on the resulting date +object produce \scheme{#f}. + \schemedisplay (define d (make-date 0 30 7 9 23 9 2007 -14400)) (date->time-utc d) ;=> # diff --git a/mats/date.ms b/mats/date.ms index a7655c2337..bcadbe39c0 100644 --- a/mats/date.ms +++ b/mats/date.ms @@ -323,8 +323,6 @@ (make-date 0 0 0 0 1)) (error? ; wrong number of arguments (make-date 0 0 0 0 1 1)) - (error? ; wrong number of arguments - (make-date 0 0 0 0 1 1 2007)) (error? ; wrong number of arguments (make-date 0 0 0 0 1 1 2007 0 0)) (error? ; invalid nanosecond @@ -464,6 +462,14 @@ (date-year-day 17)) (error? ; not a date record (date-year-day $time-t1)) + (error? ; wrong number of arguments + (date-dst?)) + (error? ; wrong number of arguments + (date-dst? $date-d1 #t)) + (error? ; not a date record + (date-dst? 17)) + (error? ; not a date record + (date-dst? $time-t1)) (error? ; wrong number of arguments (date-zone-offset)) (error? ; wrong number of arguments @@ -472,6 +478,14 @@ (date-zone-offset 17)) (error? ; not a date record (date-zone-offset $time-t1)) + (error? ; wrong number of arguments + (date-zone-name)) + (error? ; wrong number of arguments + (date-zone-name $date-d1 #t)) + (error? ; not a date record + (date-zone-name 17)) + (error? ; not a date record + (date-zone-name $time-t1)) (error? ; wrong number of arguments (current-date 0 #t)) (error? ; invalid offset @@ -486,7 +500,10 @@ (and (date? $date-d3) (not (time? $date-d3)))) (begin (define $date-d4 (current-date (* 10 60 60))) - (and (date? $date-d4) (not (time? $date-d3)))) + (and (date? $date-d4) (not (time? $date-d4)))) + (begin + (define $date-d5 (make-date 0 1 1 1 15 6 2016)) + (and (date? $date-d5) (not (time? $date-d5)))) (date? (make-date 0 0 0 0 1 1 1970 -24)) (date? (make-date 999999999 59 59 23 31 12 2007 24)) (eqv? (date-nanosecond $date-d1) 1) @@ -497,6 +514,54 @@ (eqv? (date-month $date-d1) 6) (eqv? (date-year $date-d1) 1970) (eqv? (date-zone-offset $date-d1) 8) + (boolean? (date-dst? $date-d5)) + (fixnum? (date-zone-offset $date-d5)) + (eqv? (date-zone-name $date-d1) #f) + (or (string? (date-zone-name $date-d2)) + (not (date-zone-name $date-d2))) + (eqv? (date-zone-name $date-d3) #f) + (eqv? (date-zone-name $date-d4) #f) + (or (string? (date-zone-name $date-d5)) + (not (date-zone-name $date-d5))) + (begin + (define (plausible-dst? d) + ;; Recognize a few time zone names and correlate with the DST field. + ;; Names like "EST" appear on Unix variants, while the long names + ;; show up on Windows. + (cond + [(member (date-zone-name d) '("EST" "CST" "MST" "PST" + "Eastern Standard Time" + "Central Standard Time" + "Mountain Standard Time" + "Pacific Standard Time")) + (eqv? (date-dst? d) #f)] + [(member (date-zone-name d) '("EDT" "CDT" "MDT" "PDT" + "Eastern Daylight Time" + "Central Daylight Time" + "Mountain Daylight Time" + "Pacific Daylight Time")) + (eqv? (date-dst? d) #t)] + [else #t])) + (plausible-dst? $date-d5)) + (begin + (define $date-d6 (make-date 0 1 1 1 15 1 2016)) + (plausible-dst? $date-d6)) + ; check whether tz offsets are set according to DST, assuming that + ; DST always means a 1-hour shift + (let ([delta (time-second (time-difference (date->time-utc $date-d5) + (date->time-utc $date-d6)))] + [no-dst-delta (* 152 24 60 60)]; 152 days + [hour-delta (* 60 60)]) + (cond + [(and (date-dst? $date-d5) (not (date-dst? $date-d6))) + ;; Northern-hemisphere DST reduces delta + (= delta (- no-dst-delta hour-delta))] + [(and (not (date-dst? $date-d5)) (date-dst? $date-d6)) + ;; Southern-hemisphere DST increases delta + (= delta (+ no-dst-delta hour-delta))] + [else + ;; No DST or always DST + (= delta no-dst-delta)])) ; check to make sure dst isn't screwing with our explicitly created dates ; when we call mktime to fill in wday and yday (let f ([mon 1]) diff --git a/mats/misc.ms b/mats/misc.ms index 8750b7142e..893424dbfd 100644 --- a/mats/misc.ms +++ b/mats/misc.ms @@ -604,6 +604,12 @@ 17)))]) (cons v ls))) '(3 17 17)) + ; regression test for bug in which $flonum-exponent read past mapped memory + (eq? + (do ([n 2000 (- n 1)] [ls (iota 2000)]) + ((= n 0) 'fini) + (map (lambda (x) (let ([x (exact (sqrt -2.0))]) x)) ls)) + 'fini) ) (mat compiler3 diff --git a/mats/patch-compile-0-f-f-t b/mats/patch-compile-0-f-f-t index 3a6d64b7d5..0384a2b3f0 100644 --- a/mats/patch-compile-0-f-f-t +++ b/mats/patch-compile-0-f-f-t @@ -1,47 +1,5 @@ -*** errors-compile-0-f-f-f 2017-05-28 20:37:09.000000000 -0400 ---- errors-compile-0-f-f-t 2017-05-28 20:47:43.000000000 -0400 -*************** -*** 3603,3609 **** - misc.mo:Expected error in mat compute-composition: "compute-composition: invalid generation -1". - misc.mo:Expected error in mat compute-composition: "compute-composition: invalid generation "static"". - misc.mo:Expected error in mat make-object-finder: "make-object-finder: 17 is not a procedure". -! misc.mo:Expected error in mat make-object-finder: "make-object-finder: invalid generation 5". - misc.mo:Expected error in mat make-object-finder: "make-object-finder: invalid generation oldgen". - misc.mo:Expected error in mat make-object-finder: "make-object-finder: invalid generation -1". - misc.mo:Expected error in mat make-object-finder: "incorrect number of arguments to #". ---- 3603,3609 ---- - misc.mo:Expected error in mat compute-composition: "compute-composition: invalid generation -1". - misc.mo:Expected error in mat compute-composition: "compute-composition: invalid generation "static"". - misc.mo:Expected error in mat make-object-finder: "make-object-finder: 17 is not a procedure". -! misc.mo:Expected error in mat make-object-finder: "make-object-finder: invalid generation 7". - misc.mo:Expected error in mat make-object-finder: "make-object-finder: invalid generation oldgen". - misc.mo:Expected error in mat make-object-finder: "make-object-finder: invalid generation -1". - misc.mo:Expected error in mat make-object-finder: "incorrect number of arguments to #". -*************** -*** 7085,7095 **** - 7.mo:Expected error in mat sstats: "set-sstats-gc-bytes!: twelve is not an exact integer". - 7.mo:Expected error in mat bytes-allocated: "bytes-allocated: invalid generation yuk". - 7.mo:Expected error in mat bytes-allocated: "bytes-allocated: invalid generation -1". -! 7.mo:Expected error in mat bytes-allocated: "bytes-allocated: invalid generation 5". - 7.mo:Expected error in mat bytes-allocated: "bytes-allocated: invalid generation ". - 7.mo:Expected error in mat bytes-allocated: "bytes-allocated: invalid generation #f". -! 7.mo:Expected error in mat bytes-allocated: "bytes-allocated: invalid generation 5". -! 7.mo:Expected error in mat bytes-allocated: "bytes-allocated: invalid generation 5". - 7.mo:Expected error in mat bytes-allocated: "bytes-allocated: invalid space gnu". - 7.mo:Expected error in mat bytes-allocated: "bytes-allocated: invalid space gnu". - 7.mo:Expected error in mat bytes-allocated: "bytes-allocated: invalid space gnu". ---- 7085,7095 ---- - 7.mo:Expected error in mat sstats: "set-sstats-gc-bytes!: twelve is not an exact integer". - 7.mo:Expected error in mat bytes-allocated: "bytes-allocated: invalid generation yuk". - 7.mo:Expected error in mat bytes-allocated: "bytes-allocated: invalid generation -1". -! 7.mo:Expected error in mat bytes-allocated: "bytes-allocated: invalid generation 7". - 7.mo:Expected error in mat bytes-allocated: "bytes-allocated: invalid generation ". - 7.mo:Expected error in mat bytes-allocated: "bytes-allocated: invalid generation #f". -! 7.mo:Expected error in mat bytes-allocated: "bytes-allocated: invalid generation 7". -! 7.mo:Expected error in mat bytes-allocated: "bytes-allocated: invalid generation 7". - 7.mo:Expected error in mat bytes-allocated: "bytes-allocated: invalid space gnu". - 7.mo:Expected error in mat bytes-allocated: "bytes-allocated: invalid space gnu". - 7.mo:Expected error in mat bytes-allocated: "bytes-allocated: invalid space gnu". +*** errors-compile-0-f-f-f 2017-06-06 15:52:54.089820649 -0400 +--- errors-compile-0-f-f-t 2017-06-06 15:55:15.167428881 -0400 *************** *** 8461,8473 **** fx.mo:Expected error in mat r6rs:fx-: "fx-: #f is not a fixnum". diff --git a/mats/patch-compile-0-f-t-t b/mats/patch-compile-0-f-t-t new file mode 100644 index 0000000000..d36940b1af --- /dev/null +++ b/mats/patch-compile-0-f-t-t @@ -0,0 +1,31 @@ +*** errors-compile-0-f-t-f 2017-06-06 15:57:35.377030441 -0400 +--- errors-compile-0-f-t-t 2017-06-06 15:59:53.402609438 -0400 +*************** +*** 8461,8473 **** + fx.mo:Expected error in mat r6rs:fx-: "fx-: #f is not a fixnum". + fx.mo:Expected error in mat r6rs:fx-: "fx-: #f is not a fixnum". + fx.mo:Expected error in mat fx*: "fx*: (a . b) is not a fixnum". +! fx.mo:Expected error in mat fx*: "fx*: fixnum overflow with arguments and 2". + fx.mo:Expected error in mat fx*: "fx*: is not a fixnum". + fx.mo:Expected error in mat fx*: "fx*: <-int> is not a fixnum". + fx.mo:Expected error in mat fx*: "fx*: #f is not a fixnum". + fx.mo:Expected error in mat fx*: "fx*: #f is not a fixnum". + fx.mo:Expected error in mat r6rs:fx*: "fx*: (a . b) is not a fixnum". +! fx.mo:Expected error in mat r6rs:fx*: "fx*: fixnum overflow with arguments and 2". + fx.mo:Expected error in mat r6rs:fx*: "fx*: is not a fixnum". + fx.mo:Expected error in mat r6rs:fx*: "fx*: <-int> is not a fixnum". + fx.mo:Expected error in mat r6rs:fx*: "fx*: #f is not a fixnum". +--- 8461,8473 ---- + fx.mo:Expected error in mat r6rs:fx-: "fx-: #f is not a fixnum". + fx.mo:Expected error in mat r6rs:fx-: "fx-: #f is not a fixnum". + fx.mo:Expected error in mat fx*: "fx*: (a . b) is not a fixnum". +! fx.mo:Expected error in mat fx*: "fx*: fixnum overflow computing (fx* 2)". + fx.mo:Expected error in mat fx*: "fx*: is not a fixnum". + fx.mo:Expected error in mat fx*: "fx*: <-int> is not a fixnum". + fx.mo:Expected error in mat fx*: "fx*: #f is not a fixnum". + fx.mo:Expected error in mat fx*: "fx*: #f is not a fixnum". + fx.mo:Expected error in mat r6rs:fx*: "fx*: (a . b) is not a fixnum". +! fx.mo:Expected error in mat r6rs:fx*: "fx*: fixnum overflow computing (fx* 2)". + fx.mo:Expected error in mat r6rs:fx*: "fx*: is not a fixnum". + fx.mo:Expected error in mat r6rs:fx*: "fx*: <-int> is not a fixnum". + fx.mo:Expected error in mat r6rs:fx*: "fx*: #f is not a fixnum". diff --git a/mats/patch-compile-0-t-f-f b/mats/patch-compile-0-t-f-f index b3795bc557..ea4110779d 100644 --- a/mats/patch-compile-0-t-f-f +++ b/mats/patch-compile-0-t-f-f @@ -5932,7 +5932,7 @@ date.mo:Expected error in mat time: "time>=?: # is not a time record". date.mo:Expected error in mat time: "time>=?: types of