From c52113397c52bfe4164ae816a00fd4639b29c3c6 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Sun, 22 Nov 2020 21:01:24 -0700 Subject: [PATCH] Chez Scheme: add weak generic hash tables Implement weak and ephemeron generic hashtables, and repair weak and ephemeron `eqv?` hashtables to be weak on numbers. Racket's implementation of weak `equal?`-based tables now uses weak generic tables. Datum interning, which needs a weak `equal?`-based table and was the bottleneck for unfasling literal data, is much faster. DrRacket's footprint is 1% smaller. --- .makefile | 2 +- Makefile | 12 +- pkgs/base/info.rkt | 2 +- racket/src/ChezScheme/c/gc.c | 4 +- racket/src/ChezScheme/c/segment.h | 13 +- racket/src/ChezScheme/csug/objects.stex | 28 +- racket/src/ChezScheme/makefiles/Mf-install.in | 2 +- racket/src/ChezScheme/mats/hash.ms | 536 +++++++++++++++++- .../src/ChezScheme/mats/patch-compile-0-f-t-f | 4 +- .../src/ChezScheme/mats/patch-compile-0-t-f-f | 176 +++--- .../ChezScheme/mats/patch-interpret-0-f-f-f | 28 +- .../ChezScheme/mats/patch-interpret-0-f-t-f | 12 +- .../mats/root-experr-compile-0-f-f-f | 16 + racket/src/ChezScheme/s/cmacros.ss | 8 +- racket/src/ChezScheme/s/hashtable-types.ss | 4 +- racket/src/ChezScheme/s/newhash.ss | 231 ++++++-- racket/src/ChezScheme/s/primdata.ss | 2 + racket/src/cs/compile-file.ss | 2 +- racket/src/cs/rumble/datum.ss | 31 +- racket/src/cs/rumble/foreign.ss | 4 +- racket/src/cs/rumble/hash.ss | 250 +------- racket/src/cs/rumble/struct.ss | 25 +- racket/src/version/racket_version.h | 2 +- 23 files changed, 928 insertions(+), 466 deletions(-) diff --git a/.makefile b/.makefile index d0557ac867..ce5bc50b39 100644 --- a/.makefile +++ b/.makefile @@ -338,7 +338,7 @@ RACKET_FOR_BOOTFILES = $(RACKET) RACKET_FOR_BUILD = $(RACKET) # This branch name changes each time the pb boot files are updated: -PB_BRANCH == circa-7.9.0.8-1 +PB_BRANCH == circa-7.9.0.9-1 PB_REPO = https://github.com/racket/pb # Alternative source for Chez Scheme boot files, normally set by diff --git a/Makefile b/Makefile index ef8a829464..74d34414a3 100644 --- a/Makefile +++ b/Makefile @@ -47,7 +47,7 @@ RACKETCS_SUFFIX = RACKET = RACKET_FOR_BOOTFILES = $(RACKET) RACKET_FOR_BUILD = $(RACKET) -PB_BRANCH = circa-7.9.0.8-1 +PB_BRANCH = circa-7.9.0.9-1 PB_REPO = https://github.com/racket/pb EXTRA_REPOS_BASE = CS_CROSS_SUFFIX = @@ -306,14 +306,14 @@ maybe-fetch-pb-as-is: echo done fetch-pb-from: mkdir -p racket/src/ChezScheme/boot - if [ ! -d racket/src/ChezScheme/boot/pb ] ; then git clone -q -b circa-7.9.0.8-1 $(PB_REPO) racket/src/ChezScheme/boot/pb ; else cd racket/src/ChezScheme/boot/pb && git fetch -q origin circa-7.9.0.8-1:remotes/origin/circa-7.9.0.8-1 ; fi - cd racket/src/ChezScheme/boot/pb && git checkout -q circa-7.9.0.8-1 + if [ ! -d racket/src/ChezScheme/boot/pb ] ; then git clone -q -b circa-7.9.0.9-1 $(PB_REPO) racket/src/ChezScheme/boot/pb ; else cd racket/src/ChezScheme/boot/pb && git fetch -q origin circa-7.9.0.9-1:remotes/origin/circa-7.9.0.9-1 ; fi + cd racket/src/ChezScheme/boot/pb && git checkout -q circa-7.9.0.9-1 pb-stage: - cd racket/src/ChezScheme/boot/pb && git branch circa-7.9.0.8-1 - cd racket/src/ChezScheme/boot/pb && git checkout circa-7.9.0.8-1 + cd racket/src/ChezScheme/boot/pb && git branch circa-7.9.0.9-1 + cd racket/src/ChezScheme/boot/pb && git checkout circa-7.9.0.9-1 cd racket/src/ChezScheme/boot/pb && git add . && git commit --amend -m "new build" pb-push: - cd racket/src/ChezScheme/boot/pb && git push -u origin circa-7.9.0.8-1 + cd racket/src/ChezScheme/boot/pb && git push -u origin circa-7.9.0.9-1 win-cs-base: IF "$(RACKET_FOR_BUILD)" == "" $(MAKE) win-bc-then-cs-base SETUP_BOOT_MODE=--boot WIN32_BUILD_LEVEL=bc PLAIN_RACKET=racket\racketbc DISABLE_STATIC_LIBS="$(DISABLE_STATIC_LIBS)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" JOB_OPTIONS="$(JOB_OPTIONS)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" RACKETBC_SUFFIX="$(RACKETBC_SUFFIX)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" IF not "$(RACKET_FOR_BUILD)" == "" $(MAKE) win-just-cs-base SETUP_BOOT_MODE=--chain DISABLE_STATIC_LIBS="$(DISABLE_STATIC_LIBS)" EXTRA_REPOS_BASE="$(EXTRA_REPOS_BASE)" JOB_OPTIONS="$(JOB_OPTIONS)" PLT_SETUP_OPTIONS="$(PLT_SETUP_OPTIONS)" RACKETCS_SUFFIX="$(RACKETCS_SUFFIX)" RACKET_FOR_BUILD="$(RACKET_FOR_BUILD)" diff --git a/pkgs/base/info.rkt b/pkgs/base/info.rkt index 431eafdff2..933f8bb01f 100644 --- a/pkgs/base/info.rkt +++ b/pkgs/base/info.rkt @@ -14,7 +14,7 @@ ;; In the Racket source repo, this version should change only when ;; "racket_version.h" changes: -(define version "7.9.0.8") +(define version "7.9.0.9") (define deps `("racket-lib" ["racket" #:version ,version])) diff --git a/racket/src/ChezScheme/c/gc.c b/racket/src/ChezScheme/c/gc.c index bd32db85ce..d42f56e795 100644 --- a/racket/src/ChezScheme/c/gc.c +++ b/racket/src/ChezScheme/c/gc.c @@ -2529,7 +2529,7 @@ static void resweep_dirty_weak_pairs(thread_gc *tgc) { youngest = TARGET_GENERATION(si); } else if (FORWARDEDP(p, si)) { IGEN newpg; - *pp = FWDADDRESS(p); + *pp = GET_FWDADDRESS(p); newpg = TARGET_GENERATION(si); if (newpg < youngest) youngest = newpg; } else { @@ -2647,7 +2647,7 @@ static void check_ephemeron(thread_gc *tgc, ptr pe) { IGEN tg = TARGET_GENERATION(si); if (tg < from_g) S_record_new_dirty_card(tgc, &INITCAR(pe), tg); #endif - INITCAR(pe) = FWDADDRESS(p); + INITCAR(pe) = GET_FWDADDRESS(p); relocate_impure(&INITCDR(pe), from_g); } else { /* Not reached, so far; install as trigger */ diff --git a/racket/src/ChezScheme/c/segment.h b/racket/src/ChezScheme/c/segment.h index a6a8e480b5..b32b8f7bdc 100644 --- a/racket/src/ChezScheme/c/segment.h +++ b/racket/src/ChezScheme/c/segment.h @@ -87,14 +87,13 @@ FORCEINLINE seginfo *MaybeSegInfo(uptr i) { /* Must be consistent with `eq-hash` in "../s/library.ss" */ FORCEINLINE uptr eq_hash(ptr key) { - uptr x = (uptr)((iptr)key >> (primary_type_bits - fixnum_offset)); - x = x >> fixnum_offset; /* unsigned shift */ + iptr x = (iptr)key >> primary_type_bits; #if (ptr_bits == 64) - uptr x1 = x ^ ((x >> 32) & (uptr)0xFFFFFFFF); + iptr x1 = x ^ ((x >> 32) & (iptr)0xFFFFFFFF); #else - uptr x1 = x; + iptr x1 = x; #endif - uptr x2 = x1 ^ ((x1 >> 16) & (uptr)0xFFFF); - uptr x3 = x2 ^ ((x2 >> 8) & (uptr)0xFF); - return x3; + iptr x2 = x1 ^ ((x1 >> 16) & (iptr)0xFFFF); + iptr x3 = x2 ^ ((x2 >> 8) & (iptr)0xFF); + return (uptr)x3; } diff --git a/racket/src/ChezScheme/csug/objects.stex b/racket/src/ChezScheme/csug/objects.stex index e96b3f3789..eacdcae0bf 100644 --- a/racket/src/ChezScheme/csug/objects.stex +++ b/racket/src/ChezScheme/csug/objects.stex @@ -2401,12 +2401,14 @@ may return different subsets of \var{hashtable}'s cells. \formdef{make-weak-eq-hashtable}{\categoryprocedure}{(make-weak-eq-hashtable \var{size})} \formdef{make-weak-eqv-hashtable}{\categoryprocedure}{(make-weak-eqv-hashtable)} \formdef{make-weak-eqv-hashtable}{\categoryprocedure}{(make-weak-eqv-hashtable \var{size})} -\returns a new weak eq hashtable +\formdef{make-weak-hashtable}{\categoryprocedure}{(make-weak-hashtable \var{hash} \var{equiv?})} +\formdef{make-weak-hashtable}{\categoryprocedure}{(make-weak-hashtable \var{hash} \var{equiv?} \var{size})} +\returns a new weak hashtable \listlibraries \endentryheader -These procedures are like the Revised$^6$ Report procedures \scheme{make-eq-hashtable} -and \scheme{make-eqv-hashtable} +These procedures are like the Revised$^6$ Report procedures \scheme{make-eq-hashtable}, +\scheme{make-eqv-hashtable}, and \scheme{make-hashtable}, except the keys of the hashtable are held weakly, i.e., they are not protected from the garbage collector. Keys reclaimed by the garbage collector are removed from the table, @@ -2417,9 +2419,10 @@ Values in the hashtable are referenced normally as long as the key is not reclaimed, since keys are paired values using weak pairs. Consequently, if a value in the hashtable refers to its own key, then garbage collection is prevented from reclaiming the key. See -\scheme{make-ephemeron-eq-hashtable} and \scheme{make-ephemeron-eqv-hashtable}. +\scheme{make-ephemeron-eq-hashtable}, \scheme{make-ephemeron-eqv-hashtable}, +and \scheme{make-ephemeron-hashtable}. -A copy of a weak eq or eqv hashtable created by \scheme{hashtable-copy} is +A copy of a weak hashtable created by \scheme{hashtable-copy} is also weak. If the copy is immutable, inaccessible keys may still be dropped from the hashtable, even though the contents of the table is otherwise unchanging. @@ -2438,16 +2441,19 @@ The effect of this can be observed via \scheme{hashtable-keys} and \formdef{make-ephemeron-eq-hashtable}{\categoryprocedure}{(make-ephemeron-eq-hashtable \var{size})} \formdef{make-ephemeron-eqv-hashtable}{\categoryprocedure}{(make-ephemeron-eqv-hashtable)} \formdef{make-ephemeron-eqv-hashtable}{\categoryprocedure}{(make-ephemeron-eqv-hashtable \var{size})} -\returns a new ephemeron eq hashtable +\formdef{make-ephemeron-hashtable}{\categoryprocedure}{(make-ephemeron-hashtable \var{hash} \var{equiv?})} +\formdef{make-ephemeron-hashtable}{\categoryprocedure}{(make-ephemeron-hashtable \var{hash} \var{equiv?} \var{size})} +\returns a new ephemeron hashtable \listlibraries \endentryheader -These procedures are like \scheme{make-weak-eq-hashtable} and -\scheme{make-weak-eqv-hashtable}, but a value in the hashtable can refer to a +These procedures are like \scheme{make-weak-eq-hashtable}, +\scheme{make-weak-eqv-hashtable}, and \scheme{make-weak-hashtable}, +but a value in the hashtable can refer to a key in the hashtable (directly or indirectly) without preventing garbage collection from reclaiming the key, because keys are paired with values using ephemeron pairs. -A copy of an ephemeron eq or eqv hashtable created by +A copy of an ephemeron hashtable created by \scheme{hashtable-copy} is also an ephemeron table, and an inaccesible key can be dropped from an immutable ephemeron hashtable in the same way as for an immutable weak hashtable. @@ -2461,7 +2467,7 @@ way as for an immutable weak hashtable. %---------------------------------------------------------------------------- \entryheader \formdef{hashtable-weak?}{\categoryprocedure}{(hashtable-weak? \var{obj})} -\returns \scheme{#t} if \var{obj} is a weak eq or eqv hashtable, \scheme{#f} otherwise +\returns \scheme{#t} if \var{obj} is a weak hashtable, \scheme{#f} otherwise \listlibraries \endentryheader @@ -2475,7 +2481,7 @@ way as for an immutable weak hashtable. %---------------------------------------------------------------------------- \entryheader \formdef{hashtable-ephemeron?}{\categoryprocedure}{(hashtable-ephemeron? \var{obj})} -\returns \scheme{#t} if \var{obj} is an ephemeron eq or eqv hashtable, \scheme{#f} otherwise +\returns \scheme{#t} if \var{obj} is an ephemeron hashtable, \scheme{#f} otherwise \listlibraries \endentryheader diff --git a/racket/src/ChezScheme/makefiles/Mf-install.in b/racket/src/ChezScheme/makefiles/Mf-install.in index f527d544a3..a8c17621a7 100644 --- a/racket/src/ChezScheme/makefiles/Mf-install.in +++ b/racket/src/ChezScheme/makefiles/Mf-install.in @@ -62,7 +62,7 @@ InstallLZ4Target= # no changes should be needed below this point # ############################################################################### -Version=csv9.5.3.51 +Version=csv9.5.3.52 Include=boot/$m PetiteBoot=boot/$m/petite.boot SchemeBoot=boot/$m/scheme.boot diff --git a/racket/src/ChezScheme/mats/hash.ms b/racket/src/ChezScheme/mats/hash.ms index 53fb0b435a..2918e7097a 100644 --- a/racket/src/ChezScheme/mats/hash.ms +++ b/racket/src/ChezScheme/mats/hash.ms @@ -1367,7 +1367,7 @@ ; test for proper shrinkage (eqv? - (let ([ht (make-eq-hashtable 32)]) + (let ([ht (make-weak-eq-hashtable 32)]) (for-each (lambda (k*) (for-each (lambda (k) (hashtable-delete! ht k)) k*)) (let ([k** (map (lambda (x) (map list (make-list 1000))) @@ -1592,7 +1592,7 @@ ; test for proper shrinkage (eqv? - (let ([ht (make-eq-hashtable 32)]) + (let ([ht (make-ephemeron-eq-hashtable 32)]) (for-each (lambda (k*) (for-each (lambda (k) (hashtable-delete! ht k)) k*)) (let ([k** (map (lambda (x) (map list (make-list 1000))) @@ -2056,7 +2056,7 @@ ; test for proper shrinkage (eqv? - (let ([ht (make-eq-hashtable 32)]) + (let ([ht (make-weak-eq-hashtable 32)]) (for-each (lambda (k*) (for-each (lambda (k) (eq-hashtable-delete! ht k)) k*)) (let ([k** (map (lambda (x) (map list (make-list 1000))) @@ -2235,7 +2235,7 @@ ; test for proper shrinkage (eqv? - (let ([ht (make-eq-hashtable 32)]) + (let ([ht (make-ephemeron-eq-hashtable 32)]) (for-each (lambda (k*) (for-each (lambda (k) (eq-hashtable-delete! ht k)) k*)) (let ([k** (map (lambda (x) (map list (make-list 1000))) @@ -2749,20 +2749,20 @@ (set! ko (void)) (collect (collect-maximum-generation)) (list (hashtable-size h2) (hashtable-size h3))) - '(4 4)) - (equal-entries? h2 `#((c) -5.75 17 ,(+ (most-positive-fixnum) 5)) '#(cval mval nval oval)) - (equal-entries? h3 `#((c) -5.75 17 ,(+ (most-positive-fixnum) 5)) '#(cval mval nval oval)) + '(2 2)) + (equal-entries? h2 `#((c) 17) '#(cval nval)) + (equal-entries? h3 `#((c) 17) '#(cval nval)) (eqv? (begin (set! h3 (void)) (collect (collect-maximum-generation)) (hashtable-size h2)) - 4) - (equal-entries? h2 `#((c) -5.75 17 ,(+ (most-positive-fixnum) 5)) '#(cval mval nval oval)) + 2) + (equal-entries? h2 `#((c) 17) '#(cval nval)) ; test for proper shrinkage (equal? - (let ([ht (make-eqv-hashtable 32)]) + (let ([ht (make-weak-eqv-hashtable 32)]) (for-each (lambda (k*) (for-each (lambda (k) (hashtable-delete! ht k)) k*)) (let ([k** (map (lambda (x) (map list (make-list 1000))) @@ -2984,20 +2984,20 @@ (set! ko (void)) (collect (collect-maximum-generation)) (list (hashtable-size h2) (hashtable-size h3))) - '(4 4)) - (equal-entries? h2 `#((c) -5.75 17 ,(+ (most-positive-fixnum) 5)) '#(cval mval nval oval)) - (equal-entries? h3 `#((c) -5.75 17 ,(+ (most-positive-fixnum) 5)) '#(cval mval nval oval)) + '(2 2)) + (equal-entries? h2 `#((c) 17) '#(cval nval)) + (equal-entries? h3 `#((c) 17) '#(cval nval)) (eqv? (begin (set! h3 (void)) (collect (collect-maximum-generation)) (hashtable-size h2)) - 4) - (equal-entries? h2 `#((c) -5.75 17 ,(+ (most-positive-fixnum) 5)) '#(cval mval nval oval)) + 2) + (equal-entries? h2 `#((c) 17) '#(cval nval)) ; test for proper shrinkage (equal? - (let ([ht (make-eqv-hashtable 32)]) + (let ([ht (make-ephemeron-eqv-hashtable 32)]) (for-each (lambda (k*) (for-each (lambda (k) (hashtable-delete! ht k)) k*)) (let ([k** (map (lambda (x) (map list (make-list 1000))) @@ -3791,6 +3791,510 @@ (test-hash 100000)) ) +(mat generic-hashtable-arguments + (error? ; wrong argument count + (make-weak-hashtable)) + (error? ; wrong argument count + (make-weak-hashtable equal-hash)) + (error? ; wrong argument count + (make-weak-hashtable equal-hash equal? 45 53)) + (error? ; not a procedure + (make-weak-hashtable 'a equal? 45)) + (error? ; not a procedure + (make-weak-hashtable equal-hash 'a 45)) + (error? ; invalid size + (make-weak-hashtable equal-hash equal? 'a)) + (error? ; invalid size + (make-weak-hashtable equal-hash equal? -45)) + (error? ; invalid size + (make-weak-hashtable equal-hash equal? 45.0)) + (error? ; wrong argument count + (make-ephemeron-hashtable)) + (error? ; wrong argument count + (make-ephemeron-hashtable equal-hash)) + (error? ; wrong argument count + (make-ephemeron-hashtable equal-hash equal? 45 53)) + (error? ; not a procedure + (make-ephemeron-hashtable 'a equal? 45)) + (error? ; not a procedure + (make-ephemeron-hashtable equal-hash 'a 45)) + (error? ; invalid size + (make-ephemeron-hashtable equal-hash equal? 'a)) + (error? ; invalid size + (make-ephemeron-hashtable equal-hash equal? -45)) + (error? ; invalid size + (make-ephemeron-hashtable equal-hash equal? 45.0))) + +(mat weak-equal-hashtable + (begin + (define ka (list 'a)) + (define kb (list 'b)) + (define kc (list 'c)) + (define kq (list 'q)) + (define ky (list 'y)) + (define kz (list 'z)) + (define km -5.75) + (define kn 17) + (define ko (+ (most-positive-fixnum) 5)) + #t) + (begin + (define h (make-weak-hashtable equal-hash equal? 32)) + (and (hashtable? h) + (not (eq-hashtable? h)) + (hashtable-mutable? h) + (hashtable-weak? h))) + (eq? (hashtable-hash-function h) equal-hash) + (eq? (hashtable-equivalence-function h) equal?) + (equal? (hashtable-size h) 0) + (same-elements? (hashtable-keys h) '#()) + (same-elements? (hashtable-values h) '#()) + (equal-entries? h '#() '#()) + (same-elements? (hashtable-cells h) '#()) + (same-elements? (hashtable-cells h 0) '#()) + (same-elements? (hashtable-cells h 10) '#()) + (eqv? (hashtable-set! h ka 'aval) (void)) + (equal? + (list + (hashtable-contains? h ka) + (hashtable-contains? h kb) + (hashtable-contains? h kc) + (hashtable-contains? h km) + (hashtable-contains? h kn) + (hashtable-contains? h ko)) + '(#t #f #f #f #f #f)) + (eqv? (hashtable-set! h kb 'bval) (void)) + (equal? + (list + (hashtable-contains? h ka) + (hashtable-contains? h kb) + (hashtable-contains? h kc) + (hashtable-contains? h km) + (hashtable-contains? h kn) + (hashtable-contains? h ko)) + '(#t #t #f #f #f #f)) + (eqv? (hashtable-set! h kc 'cval) (void)) + (equal? + (list + (hashtable-contains? h ka) + (hashtable-contains? h kb) + (hashtable-contains? h kc) + (hashtable-contains? h km) + (hashtable-contains? h kn) + (hashtable-contains? h ko)) + '(#t #t #t #f #f #f)) + (eqv? (hashtable-set! h km 'mval) (void)) + (equal? + (list + (hashtable-contains? h ka) + (hashtable-contains? h kb) + (hashtable-contains? h kc) + (hashtable-contains? h km) + (hashtable-contains? h kn) + (hashtable-contains? h ko)) + '(#t #t #t #t #f #f)) + (eqv? (hashtable-set! h kn 'nval) (void)) + (equal? + (list + (hashtable-contains? h ka) + (hashtable-contains? h kb) + (hashtable-contains? h kc) + (hashtable-contains? h km) + (hashtable-contains? h kn) + (hashtable-contains? h ko)) + '(#t #t #t #t #t #f)) + (eqv? (hashtable-set! h ko 'oval) (void)) + (equal? + (list + (hashtable-contains? h ka) + (hashtable-contains? h kb) + (hashtable-contains? h kc) + (hashtable-contains? h km) + (hashtable-contains? h kn) + (hashtable-contains? h ko)) + '(#t #t #t #t #t #t)) + (equal? (hashtable-size h) 6) + (equal-entries? h `#((a) (b) (c) -5.75 17 ,ko) '#(aval bval cval mval nval oval)) + #;(same-elements? + (list->vector (hashtable-map h cons)) + `#(((a) . aval) ((b) . bval) ((c) . cval) (-5.75 . mval) (17 . nval) (,ko . oval))) + #;(same-elements? + (let ([v (make-vector 6)] [i 0]) + (hashtable-for-each h (lambda (key val) (vector-set! v i (cons key val)) (set! i (fx+ i 1)))) + v) + `#(((a) . aval) ((b) . bval) ((c) . cval) (-5.75 . mval) (17 . nval) (,ko . oval))) + #;(same-elements? + (let ([v (make-vector 6)] [i 0]) + (hashtable-for-each-cell h (lambda (a) (vector-set! v i a) (set! i (fx+ i 1)))) + v) + `#(((a) . aval) ((b) . bval) ((c) . cval) (-5.75 . mval) (17 . nval) (,ko . oval))) + (eq? (hashtable-ref h ka 1) 'aval) + (eq? (hashtable-ref h kb #f) 'bval) + (eq? (hashtable-ref h kc 'nope) 'cval) + (eq? (hashtable-ref h (+ 2 -7.75) 'ugh) 'mval) + (eq? (hashtable-ref h (/ 34 2) 'ugh) 'nval) + (eq? (hashtable-ref h (+ (most-positive-fixnum) 7 -2) 'ugh) 'oval) + (eqv? (hashtable-delete! h kb) (void)) + (equal? (hashtable-size h) 5) + (equal-entries? h `#((a) (c) -5.75 17 ,ko) '#(aval cval mval nval oval)) + (begin + (define h2 (hashtable-copy h #t)) + (and (hashtable? h2) + (hashtable-mutable? h2) + (hashtable-weak? h2))) + (eq? (hashtable-hash-function h2) equal-hash) + (eq? (hashtable-equivalence-function h2) equal?) + (equal? (hashtable-size h2) 5) + (equal-entries? h `#((a) (c) -5.75 17 ,ko) '#(aval cval mval nval oval)) + (eqv? (hashtable-clear! h 4) (void)) + (equal? + (list + (hashtable-size h) + (hashtable-ref h ka 1) + (hashtable-ref h kb #f) + (hashtable-ref h kc 'nope) + (hashtable-ref h km 'nope) + (hashtable-ref h kn 'nope) + (hashtable-ref h ko 'nope)) + '(0 1 #f nope nope nope nope)) + (equal-entries? h '#() '#()) + (equal? + (list + (hashtable-size h2) + (hashtable-ref h2 ka 1) + (hashtable-ref h2 kb #f) + (hashtable-ref h2 kc 'nope) + (hashtable-ref h2 (- (+ km 1) 1) 'nope) + (hashtable-ref h2 (- (+ kn 1) 1) 'nope) + (hashtable-ref h2 (- (+ ko 1) 1) 'nope)) + '(5 aval #f cval mval nval oval)) + (equal-entries? h2 `#((a) (c) -5.75 17 ,ko) '#(aval cval mval nval oval)) + (eqv? + (hashtable-update! h kq + (lambda (x) (+ x 1)) + 17) + (void)) + (equal? (hashtable-ref h kq #f) 18) + (eqv? + (hashtable-update! h kq + (lambda (x) (+ x 1)) + 17) + (void)) + (equal? (hashtable-ref h kq #f) 19) + (equal? (hashtable-size h) 1) + (equal-entries? h '#((q)) '#(19)) + (eqv? + (begin + (set! kq (void)) + (collect (collect-maximum-generation)) + (hashtable-size h)) + 0) + (equal-entries? h '#() '#()) + (equal? (hashtable-ref h ky #f) #f) + (eqv? + (hashtable-set! h ky 'toad) + (void)) + (equal? (hashtable-ref h ky #f) 'toad) + (equal? (hashtable-ref h kz #f) #f) + (eqv? + (hashtable-update! h kz list 'frog) + (void)) + (equal? (hashtable-ref h kz #f) '(frog)) + (equal-entries? + h + (vector kz ky) + (vector (hashtable-ref h kz #f) 'toad)) + (eqv? (hashtable-ref h '(zippo) 'nil) 'nil) + (begin + (define h3 (hashtable-copy h2 #f)) + (and (hashtable? h3) + (not (hashtable-mutable? h3)) + (hashtable-weak? h3))) + (equal-entries? h2 `#((a) (c) -5.75 17 ,ko) '#(aval cval mval nval oval)) + (equal-entries? h3 `#((a) (c) -5.75 17 ,ko) '#(aval cval mval nval oval)) + (equal? + (begin + (set! ka (void)) + (set! km (void)) + (set! kn (void)) + (set! ko (void)) + (collect (collect-maximum-generation)) + (list (hashtable-size h2) (hashtable-size h3))) + '(2 2)) + (equal-entries? h2 `#((c) 17) '#(cval nval)) + (equal-entries? h3 `#((c) 17) '#(cval nval)) + (eqv? + (begin + (set! h3 (void)) + (collect (collect-maximum-generation)) + (hashtable-size h2)) + 2) + (equal-entries? h2 `#((c) 17) '#(cval nval)) + + ; test for proper shrinkage + (equal? + (let ([ht (make-weak-hashtable equal-hash equal? 32)]) + (for-each + (lambda (k*) (for-each (lambda (k) (hashtable-delete! ht k)) k*)) + (let ([k** (map (lambda (x) (map list (make-list 1000))) + (make-list 100))]) + (for-each + (lambda (k*) (map (lambda (k) (hashtable-set! ht k 75)) k*)) + k**) + k**)) + (call-with-values (lambda () (#%$hashtable-veclen ht)) cons)) + '(32 . 32)) + + ; test for proper shrinkage as objects are bwp'd + ; uses delete to trigger final shrinkage + (equal? + (let ([ht (make-weak-hashtable equal-hash equal? 32)]) + (hashtable-set! ht 'a 'b) + (for-each + (lambda (k*) (map (lambda (k) (hashtable-set! ht k 75)) k*)) + (map (lambda (x) (map list (make-list 1000))) (make-list 100))) + (collect (collect-maximum-generation)) + (hashtable-delete! ht 'a) + (list (hashtable-size ht) + (let-values ([(n1 n2) (#%$hashtable-veclen ht)]) + (= n1 n2 32)))) + '(0 #t)) + ) + +(mat ephemeron-equal-hashtable + (begin + (define ka (list 'a)) + (define kb (list 'b)) + (define kc (list 'c)) + (define kq (list 'q)) + (define ky (list 'y)) + (define kz (list 'z)) + (define km -5.75) + (define kn 17) + (define ko (+ (most-positive-fixnum) 5)) + #t) + (begin + (define h (make-ephemeron-hashtable equal-hash equal? 32)) + (and (hashtable? h) + (not (eq-hashtable? h)) + (hashtable-mutable? h) + (hashtable-ephemeron? h))) + (eq? (hashtable-hash-function h) equal-hash) + (eq? (hashtable-equivalence-function h) equal?) + (equal? (hashtable-size h) 0) + (same-elements? (hashtable-keys h) '#()) + (same-elements? (hashtable-values h) '#()) + (equal-entries? h '#() '#()) + (same-elements? (hashtable-cells h) '#()) + (same-elements? (hashtable-cells h 0) '#()) + (same-elements? (hashtable-cells h 10) '#()) + (eqv? (hashtable-set! h ka 'aval) (void)) + (equal? + (list + (hashtable-contains? h ka) + (hashtable-contains? h kb) + (hashtable-contains? h kc) + (hashtable-contains? h km) + (hashtable-contains? h kn) + (hashtable-contains? h ko)) + '(#t #f #f #f #f #f)) + (eqv? (hashtable-set! h kb 'bval) (void)) + (equal? + (list + (hashtable-contains? h ka) + (hashtable-contains? h kb) + (hashtable-contains? h kc) + (hashtable-contains? h km) + (hashtable-contains? h kn) + (hashtable-contains? h ko)) + '(#t #t #f #f #f #f)) + (eqv? (hashtable-set! h kc 'cval) (void)) + (equal? + (list + (hashtable-contains? h ka) + (hashtable-contains? h kb) + (hashtable-contains? h kc) + (hashtable-contains? h km) + (hashtable-contains? h kn) + (hashtable-contains? h ko)) + '(#t #t #t #f #f #f)) + (eqv? (hashtable-set! h km 'mval) (void)) + (equal? + (list + (hashtable-contains? h ka) + (hashtable-contains? h kb) + (hashtable-contains? h kc) + (hashtable-contains? h km) + (hashtable-contains? h kn) + (hashtable-contains? h ko)) + '(#t #t #t #t #f #f)) + (eqv? (hashtable-set! h kn 'nval) (void)) + (equal? + (list + (hashtable-contains? h ka) + (hashtable-contains? h kb) + (hashtable-contains? h kc) + (hashtable-contains? h km) + (hashtable-contains? h kn) + (hashtable-contains? h ko)) + '(#t #t #t #t #t #f)) + (eqv? (hashtable-set! h ko 'oval) (void)) + (equal? + (list + (hashtable-contains? h ka) + (hashtable-contains? h kb) + (hashtable-contains? h kc) + (hashtable-contains? h km) + (hashtable-contains? h kn) + (hashtable-contains? h ko)) + '(#t #t #t #t #t #t)) + (equal? (hashtable-size h) 6) + (equal-entries? h `#((a) (b) (c) -5.75 17 ,ko) '#(aval bval cval mval nval oval)) + #;(same-elements? + (list->vector (hashtable-map h cons)) + `#(((a) . aval) ((b) . bval) ((c) . cval) (-5.75 . mval) (17 . nval) (,ko . oval))) + #;(same-elements? + (let ([v (make-vector 6)] [i 0]) + (hashtable-for-each h (lambda (key val) (vector-set! v i (cons key val)) (set! i (fx+ i 1)))) + v) + `#(((a) . aval) ((b) . bval) ((c) . cval) (-5.75 . mval) (17 . nval) (,ko . oval))) + #;(same-elements? + (let ([v (make-vector 6)] [i 0]) + (hashtable-for-each-cell h (lambda (a) (vector-set! v i a) (set! i (fx+ i 1)))) + v) + `#(((a) . aval) ((b) . bval) ((c) . cval) (-5.75 . mval) (17 . nval) (,ko . oval))) + (eq? (hashtable-ref h ka 1) 'aval) + (eq? (hashtable-ref h kb #f) 'bval) + (eq? (hashtable-ref h kc 'nope) 'cval) + (eq? (hashtable-ref h (+ 2 -7.75) 'ugh) 'mval) + (eq? (hashtable-ref h (/ 34 2) 'ugh) 'nval) + (eq? (hashtable-ref h (+ (most-positive-fixnum) 7 -2) 'ugh) 'oval) + (eqv? (hashtable-delete! h kb) (void)) + (equal? (hashtable-size h) 5) + (equal-entries? h `#((a) (c) -5.75 17 ,ko) '#(aval cval mval nval oval)) + (begin + (define h2 (hashtable-copy h #t)) + (and (hashtable? h2) + (hashtable-mutable? h2) + (hashtable-ephemeron? h2))) + (eq? (hashtable-hash-function h2) equal-hash) + (eq? (hashtable-equivalence-function h2) equal?) + (equal? (hashtable-size h2) 5) + (equal-entries? h `#((a) (c) -5.75 17 ,ko) '#(aval cval mval nval oval)) + (eqv? (hashtable-clear! h 4) (void)) + (equal? + (list + (hashtable-size h) + (hashtable-ref h ka 1) + (hashtable-ref h kb #f) + (hashtable-ref h kc 'nope) + (hashtable-ref h km 'nope) + (hashtable-ref h kn 'nope) + (hashtable-ref h ko 'nope)) + '(0 1 #f nope nope nope nope)) + (equal-entries? h '#() '#()) + (equal? + (list + (hashtable-size h2) + (hashtable-ref h2 ka 1) + (hashtable-ref h2 kb #f) + (hashtable-ref h2 kc 'nope) + (hashtable-ref h2 (- (+ km 1) 1) 'nope) + (hashtable-ref h2 (- (+ kn 1) 1) 'nope) + (hashtable-ref h2 (- (+ ko 1) 1) 'nope)) + '(5 aval #f cval mval nval oval)) + (equal-entries? h2 `#((a) (c) -5.75 17 ,ko) '#(aval cval mval nval oval)) + (eqv? + (hashtable-update! h kq + (lambda (x) (+ x 1)) + 17) + (void)) + (equal? (hashtable-ref h kq #f) 18) + (eqv? + (hashtable-update! h kq + (lambda (x) (+ x 1)) + 17) + (void)) + (equal? (hashtable-ref h kq #f) 19) + (equal? (hashtable-size h) 1) + (equal-entries? h '#((q)) '#(19)) + (eqv? + (begin + (set! kq (void)) + (collect (collect-maximum-generation)) + (hashtable-size h)) + 0) + (equal-entries? h '#() '#()) + (equal? (hashtable-ref h ky #f) #f) + (eqv? + (hashtable-set! h ky 'toad) + (void)) + (equal? (hashtable-ref h ky #f) 'toad) + (equal? (hashtable-ref h kz #f) #f) + (eqv? + (hashtable-update! h kz list 'frog) + (void)) + (equal? (hashtable-ref h kz #f) '(frog)) + (equal-entries? + h + (vector kz ky) + (vector (hashtable-ref h kz #f) 'toad)) + (eqv? (hashtable-ref h '(zippo) 'nil) 'nil) + (begin + (define h3 (hashtable-copy h2 #f)) + (and (hashtable? h3) + (not (hashtable-mutable? h3)) + (hashtable-ephemeron? h3))) + (equal-entries? h2 `#((a) (c) -5.75 17 ,ko) '#(aval cval mval nval oval)) + (equal-entries? h3 `#((a) (c) -5.75 17 ,ko) '#(aval cval mval nval oval)) + (equal? + (begin + (set! ka (void)) + (set! km (void)) + (set! kn (void)) + (set! ko (void)) + (collect (collect-maximum-generation)) + (list (hashtable-size h2) (hashtable-size h3))) + '(2 2)) + (equal-entries? h2 `#((c) 17) '#(cval nval)) + (equal-entries? h3 `#((c) 17) '#(cval nval)) + (eqv? + (begin + (set! h3 (void)) + (collect (collect-maximum-generation)) + (hashtable-size h2)) + 2) + (equal-entries? h2 `#((c) 17) '#(cval nval)) + + ; test for proper shrinkage + (equal? + (let ([ht (make-ephemeron-hashtable equal-hash equal? 32)]) + (for-each + (lambda (k*) (for-each (lambda (k) (hashtable-delete! ht k)) k*)) + (let ([k** (map (lambda (x) (map list (make-list 1000))) + (make-list 100))]) + (for-each + (lambda (k*) (map (lambda (k) (hashtable-set! ht k 75)) k*)) + k**) + k**)) + (call-with-values (lambda () (#%$hashtable-veclen ht)) cons)) + '(32 . 32)) + + ; test for proper shrinkage as objects are bwp'd + ; uses delete to trigger final shrinkage + (equal? + (let ([ht (make-ephemeron-hashtable equal-hash equal? 32)]) + (hashtable-set! ht 'a 'b) + (for-each + (lambda (k*) (map (lambda (k) (hashtable-set! ht k 75)) k*)) + (map (lambda (x) (map list (make-list 1000))) (make-list 100))) + (collect (collect-maximum-generation)) + (hashtable-delete! ht 'a) + (list (hashtable-size ht) + (let-values ([(n1 n2) (#%$hashtable-veclen ht)]) + (= n1 n2 32)))) + '(0 #t)) +) + (mat hash-functions ; equal-hash (error? ; wrong argument count diff --git a/racket/src/ChezScheme/mats/patch-compile-0-f-t-f b/racket/src/ChezScheme/mats/patch-compile-0-f-t-f index 89b1262542..eb350bef17 100644 --- a/racket/src/ChezScheme/mats/patch-compile-0-f-t-f +++ b/racket/src/ChezScheme/mats/patch-compile-0-f-t-f @@ -1,5 +1,5 @@ -*** errors-compile-0-f-f-f 2020-11-19 11:38:38.000000000 -0700 ---- errors-compile-0-f-t-f 2020-11-19 10:55:55.000000000 -0700 +*** errors-compile-0-f-f-f 2020-11-23 06:11:33.000000000 -0700 +--- errors-compile-0-f-t-f 2020-11-23 05:33:39.000000000 -0700 *************** *** 200,206 **** 3.mo:Expected error in mat dipa-letrec: "attempt to reference undefined variable a". diff --git a/racket/src/ChezScheme/mats/patch-compile-0-t-f-f b/racket/src/ChezScheme/mats/patch-compile-0-t-f-f index 148051e92e..811e8797d5 100644 --- a/racket/src/ChezScheme/mats/patch-compile-0-t-f-f +++ b/racket/src/ChezScheme/mats/patch-compile-0-t-f-f @@ -1,5 +1,5 @@ -*** errors-compile-0-f-f-f 2020-11-19 11:38:38.000000000 -0700 ---- errors-compile-0-t-f-f 2020-11-19 11:05:19.000000000 -0700 +*** errors-compile-0-f-f-f 2020-11-23 06:11:33.000000000 -0700 +--- errors-compile-0-t-f-f 2020-11-23 05:42:16.000000000 -0700 *************** *** 168,174 **** 3.mo:Expected error in mat case-lambda: "incorrect number of arguments 2 to #". @@ -4980,10 +4980,26 @@ hash.mo:Expected error in mat eqv-hashtable-arguments: "make-ephemeron-eqv-hashtable: invalid size argument #t". hash.mo:Expected error in mat eqv-hashtable-arguments: "make-ephemeron-eqv-hashtable: invalid size argument #f". *************** -*** 8244,8259 **** +*** 8244,8275 **** hash.mo:Expected error in mat generic-hashtable: "hashtable-delete!: # is not mutable". hash.mo:Expected error in mat generic-hashtable: "hashtable-update!: # is not mutable". hash.mo:Expected error in mat generic-hashtable: "hashtable-update!: # is not mutable". +! hash.mo:Expected error in mat generic-hashtable-arguments: "incorrect argument count in call (make-weak-hashtable)". +! hash.mo:Expected error in mat generic-hashtable-arguments: "incorrect argument count in call (make-weak-hashtable equal-hash)". +! hash.mo:Expected error in mat generic-hashtable-arguments: "incorrect argument count in call (make-weak-hashtable equal-hash equal? 45 53)". + hash.mo:Expected error in mat generic-hashtable-arguments: "make-weak-hashtable: a is not a procedure". + hash.mo:Expected error in mat generic-hashtable-arguments: "make-weak-hashtable: a is not a procedure". + hash.mo:Expected error in mat generic-hashtable-arguments: "make-weak-hashtable: invalid size argument a". + hash.mo:Expected error in mat generic-hashtable-arguments: "make-weak-hashtable: invalid size argument -45". + hash.mo:Expected error in mat generic-hashtable-arguments: "make-weak-hashtable: invalid size argument 45.0". +! hash.mo:Expected error in mat generic-hashtable-arguments: "incorrect argument count in call (make-ephemeron-hashtable)". +! hash.mo:Expected error in mat generic-hashtable-arguments: "incorrect argument count in call (make-ephemeron-hashtable equal-hash)". +! hash.mo:Expected error in mat generic-hashtable-arguments: "incorrect argument count in call (make-ephemeron-hashtable equal-hash equal? 45 53)". + hash.mo:Expected error in mat generic-hashtable-arguments: "make-ephemeron-hashtable: a is not a procedure". + hash.mo:Expected error in mat generic-hashtable-arguments: "make-ephemeron-hashtable: a is not a procedure". + hash.mo:Expected error in mat generic-hashtable-arguments: "make-ephemeron-hashtable: invalid size argument a". + hash.mo:Expected error in mat generic-hashtable-arguments: "make-ephemeron-hashtable: invalid size argument -45". + hash.mo:Expected error in mat generic-hashtable-arguments: "make-ephemeron-hashtable: invalid size argument 45.0". ! hash.mo:Expected error in mat hash-functions: "incorrect argument count in call (equal-hash)". ! hash.mo:Expected error in mat hash-functions: "incorrect argument count in call (equal-hash 0 0)". ! hash.mo:Expected error in mat hash-functions: "incorrect argument count in call (symbol-hash)". @@ -4997,10 +5013,26 @@ hash.mo:Expected error in mat hash-functions: "string-ci-hash: hello is not a string". hash.mo:Expected error in mat fasl-other-hashtable: "fasl-write: invalid fasl object #". hash.mo:Expected error in mat fasl-other-hashtable: "fasl-write: invalid fasl object #". ---- 8244,8259 ---- +--- 8244,8275 ---- hash.mo:Expected error in mat generic-hashtable: "hashtable-delete!: # is not mutable". hash.mo:Expected error in mat generic-hashtable: "hashtable-update!: # is not mutable". hash.mo:Expected error in mat generic-hashtable: "hashtable-update!: # is not mutable". +! hash.mo:Expected error in mat generic-hashtable-arguments: "incorrect number of arguments 0 to #". +! hash.mo:Expected error in mat generic-hashtable-arguments: "incorrect number of arguments 1 to #". +! hash.mo:Expected error in mat generic-hashtable-arguments: "incorrect number of arguments 4 to #". + hash.mo:Expected error in mat generic-hashtable-arguments: "make-weak-hashtable: a is not a procedure". + hash.mo:Expected error in mat generic-hashtable-arguments: "make-weak-hashtable: a is not a procedure". + hash.mo:Expected error in mat generic-hashtable-arguments: "make-weak-hashtable: invalid size argument a". + hash.mo:Expected error in mat generic-hashtable-arguments: "make-weak-hashtable: invalid size argument -45". + hash.mo:Expected error in mat generic-hashtable-arguments: "make-weak-hashtable: invalid size argument 45.0". +! hash.mo:Expected error in mat generic-hashtable-arguments: "incorrect number of arguments 0 to #". +! hash.mo:Expected error in mat generic-hashtable-arguments: "incorrect number of arguments 1 to #". +! hash.mo:Expected error in mat generic-hashtable-arguments: "incorrect number of arguments 4 to #". + hash.mo:Expected error in mat generic-hashtable-arguments: "make-ephemeron-hashtable: a is not a procedure". + hash.mo:Expected error in mat generic-hashtable-arguments: "make-ephemeron-hashtable: a is not a procedure". + hash.mo:Expected error in mat generic-hashtable-arguments: "make-ephemeron-hashtable: invalid size argument a". + hash.mo:Expected error in mat generic-hashtable-arguments: "make-ephemeron-hashtable: invalid size argument -45". + hash.mo:Expected error in mat generic-hashtable-arguments: "make-ephemeron-hashtable: invalid size argument 45.0". ! hash.mo:Expected error in mat hash-functions: "incorrect number of arguments 0 to #". ! hash.mo:Expected error in mat hash-functions: "incorrect number of arguments 2 to #". ! hash.mo:Expected error in mat hash-functions: "incorrect number of arguments 0 to #". @@ -5015,7 +5047,7 @@ hash.mo:Expected error in mat fasl-other-hashtable: "fasl-write: invalid fasl object #". hash.mo:Expected error in mat fasl-other-hashtable: "fasl-write: invalid fasl object #". *************** -*** 8369,8376 **** +*** 8385,8392 **** 8.mo:Expected error in mat with-syntax: "invalid syntax a". 8.mo:Expected error in mat with-syntax: "duplicate pattern variable x in (x x)". 8.mo:Expected error in mat with-syntax: "duplicate pattern variable x in (x x)". @@ -5024,7 +5056,7 @@ 8.mo:Expected error in mat generate-temporaries: "generate-temporaries: improper list structure (a b . c)". 8.mo:Expected error in mat generate-temporaries: "generate-temporaries: cyclic list structure (a b c b c b ...)". 8.mo:Expected error in mat syntax->list: "syntax->list: invalid argument #". ---- 8369,8376 ---- +--- 8385,8392 ---- 8.mo:Expected error in mat with-syntax: "invalid syntax a". 8.mo:Expected error in mat with-syntax: "duplicate pattern variable x in (x x)". 8.mo:Expected error in mat with-syntax: "duplicate pattern variable x in (x x)". @@ -5034,7 +5066,7 @@ 8.mo:Expected error in mat generate-temporaries: "generate-temporaries: cyclic list structure (a b c b c b ...)". 8.mo:Expected error in mat syntax->list: "syntax->list: invalid argument #". *************** -*** 8987,9002 **** +*** 9003,9018 **** 8.mo:Expected error in mat rnrs-eval: "attempt to assign unbound identifier foo". 8.mo:Expected error in mat rnrs-eval: "invalid definition in immutable environment (define cons (quote #))". 8.mo:Expected error in mat top-level-syntax-functions: "top-level-syntax: "hello" is not a symbol". @@ -5051,7 +5083,7 @@ 8.mo:Expected error in mat top-level-syntax-functions: "define-top-level-syntax: hello is not an environment". 8.mo:Expected error in mat top-level-syntax-functions: "define-top-level-syntax: # is not a symbol". 8.mo:Expected error in mat top-level-syntax-functions: "define-top-level-syntax: cannot modify immutable environment #". ---- 8987,9002 ---- +--- 9003,9018 ---- 8.mo:Expected error in mat rnrs-eval: "attempt to assign unbound identifier foo". 8.mo:Expected error in mat rnrs-eval: "invalid definition in immutable environment (define cons (quote #))". 8.mo:Expected error in mat top-level-syntax-functions: "top-level-syntax: "hello" is not a symbol". @@ -5069,7 +5101,7 @@ 8.mo:Expected error in mat top-level-syntax-functions: "define-top-level-syntax: # is not a symbol". 8.mo:Expected error in mat top-level-syntax-functions: "define-top-level-syntax: cannot modify immutable environment #". *************** -*** 9093,9115 **** +*** 9109,9131 **** fx.mo:Expected error in mat fx=?: "fx=?: (a) is not a fixnum". 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". @@ -5093,7 +5125,7 @@ fx.mo:Expected error in mat $fxu<: "incorrect number of arguments 1 to #". fx.mo:Expected error in mat $fxu<: "incorrect number of arguments 3 to #". fx.mo:Expected error in mat $fxu<: "$fxu<: <-int> is not a fixnum". ---- 9093,9115 ---- +--- 9109,9131 ---- fx.mo:Expected error in mat fx=?: "fx=?: (a) is not a fixnum". 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". @@ -5118,7 +5150,7 @@ fx.mo:Expected error in mat $fxu<: "incorrect number of arguments 3 to #". fx.mo:Expected error in mat $fxu<: "$fxu<: <-int> is not a fixnum". *************** -*** 9151,9163 **** +*** 9167,9179 **** fx.mo:Expected error in mat fx-/wraparound: "fx-: <-int> is not a fixnum". fx.mo:Expected error in mat fx-/wraparound: "fx-: <-int> is not a fixnum". fx.mo:Expected error in mat fx*: "fx*: (a . b) is not a fixnum". @@ -5132,7 +5164,7 @@ 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". ---- 9151,9163 ---- +--- 9167,9179 ---- fx.mo:Expected error in mat fx-/wraparound: "fx-: <-int> is not a fixnum". fx.mo:Expected error in mat fx-/wraparound: "fx-: <-int> is not a fixnum". fx.mo:Expected error in mat fx*: "fx*: (a . b) is not a fixnum". @@ -5147,7 +5179,7 @@ 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". *************** -*** 9212,9224 **** +*** 9228,9240 **** fx.mo:Expected error in mat fx1+: "fx1+: <-int> is not a fixnum". fx.mo:Expected error in mat fx1+: "fx1+: is not a fixnum". fx.mo:Expected error in mat fx1+: "fx1+: a is not a fixnum". @@ -5161,7 +5193,7 @@ fx.mo:Expected error in mat fxmax: "fxmax: a is not a fixnum". fx.mo:Expected error in mat fxmax: "fxmax: is not a fixnum". fx.mo:Expected error in mat fxmax: "fxmax: <-int> is not a fixnum". ---- 9212,9224 ---- +--- 9228,9240 ---- fx.mo:Expected error in mat fx1+: "fx1+: <-int> is not a fixnum". fx.mo:Expected error in mat fx1+: "fx1+: is not a fixnum". fx.mo:Expected error in mat fx1+: "fx1+: a is not a fixnum". @@ -5176,7 +5208,7 @@ fx.mo:Expected error in mat fxmax: "fxmax: is not a fixnum". fx.mo:Expected error in mat fxmax: "fxmax: <-int> is not a fixnum". *************** -*** 9324,9333 **** +*** 9340,9349 **** fx.mo:Expected error in mat fxarithmetic-shift: "fxarithmetic-shift: fixnum overflow with arguments and 10". fx.mo:Expected error in mat fxarithmetic-shift: "fxarithmetic-shift: fixnum overflow with arguments -4097 and ". fx.mo:Expected error in mat fxarithmetic-shift: "fxarithmetic-shift: fixnum overflow with arguments <-int> and 1". @@ -5187,7 +5219,7 @@ fx.mo:Expected error in mat fxbit-field: "fxbit-field: 35.0 is not a fixnum". fx.mo:Expected error in mat fxbit-field: "fxbit-field: 5.0 is not a valid start index". fx.mo:Expected error in mat fxbit-field: "fxbit-field: 8.0 is not a valid end index". ---- 9324,9333 ---- +--- 9340,9349 ---- fx.mo:Expected error in mat fxarithmetic-shift: "fxarithmetic-shift: fixnum overflow with arguments and 10". fx.mo:Expected error in mat fxarithmetic-shift: "fxarithmetic-shift: fixnum overflow with arguments -4097 and ". fx.mo:Expected error in mat fxarithmetic-shift: "fxarithmetic-shift: fixnum overflow with arguments <-int> and 1". @@ -5199,7 +5231,7 @@ fx.mo:Expected error in mat fxbit-field: "fxbit-field: 5.0 is not a valid start index". fx.mo:Expected error in mat fxbit-field: "fxbit-field: 8.0 is not a valid end index". *************** -*** 9341,9374 **** +*** 9357,9390 **** fx.mo:Expected error in mat fxbit-field: "fxbit-field: is not a valid end index". fx.mo:Expected error in mat fxbit-field: "fxbit-field: is not a valid start index". fx.mo:Expected error in mat fxbit-field: "fxbit-field: is not a valid end index". @@ -5234,7 +5266,7 @@ fx.mo:Expected error in mat fxif: "fxif: a is not a fixnum". fx.mo:Expected error in mat fxif: "fxif: 3.4 is not a fixnum". fx.mo:Expected error in mat fxif: "fxif: (a) is not a fixnum". ---- 9341,9374 ---- +--- 9357,9390 ---- fx.mo:Expected error in mat fxbit-field: "fxbit-field: is not a valid end index". fx.mo:Expected error in mat fxbit-field: "fxbit-field: is not a valid start index". fx.mo:Expected error in mat fxbit-field: "fxbit-field: is not a valid end index". @@ -5270,7 +5302,7 @@ fx.mo:Expected error in mat fxif: "fxif: 3.4 is not a fixnum". fx.mo:Expected error in mat fxif: "fxif: (a) is not a fixnum". *************** -*** 9378,9421 **** +*** 9394,9437 **** fx.mo:Expected error in mat fxif: "fxif: <-int> is not a fixnum". fx.mo:Expected error in mat fxif: "fxif: <-int> is not a fixnum". fx.mo:Expected error in mat fxif: "fxif: <-int> is not a fixnum". @@ -5315,7 +5347,7 @@ fx.mo:Expected error in mat fxcopy-bit: "fxcopy-bit: 3.4 is not a fixnum". fx.mo:Expected error in mat fxcopy-bit: "fxcopy-bit: "3" is not a fixnum". fx.mo:Expected error in mat fxcopy-bit: "fxcopy-bit: is not a fixnum". ---- 9378,9421 ---- +--- 9394,9437 ---- fx.mo:Expected error in mat fxif: "fxif: <-int> is not a fixnum". fx.mo:Expected error in mat fxif: "fxif: <-int> is not a fixnum". fx.mo:Expected error in mat fxif: "fxif: <-int> is not a fixnum". @@ -5361,7 +5393,7 @@ fx.mo:Expected error in mat fxcopy-bit: "fxcopy-bit: "3" is not a fixnum". fx.mo:Expected error in mat fxcopy-bit: "fxcopy-bit: is not a fixnum". *************** -*** 9424,9434 **** +*** 9440,9450 **** fx.mo:Expected error in mat fxcopy-bit: "fxcopy-bit: invalid bit index -1". fx.mo:Expected error in mat fxcopy-bit: "fxcopy-bit: invalid bit index ". fx.mo:Expected error in mat fxcopy-bit: "fxcopy-bit: invalid bit index ". @@ -5373,7 +5405,7 @@ fx.mo:Expected error in mat fxcopy-bit-field: "fxcopy-bit-field: "3" is not a fixnum". fx.mo:Expected error in mat fxcopy-bit-field: "fxcopy-bit-field: 3.4 is not a valid start index". fx.mo:Expected error in mat fxcopy-bit-field: "fxcopy-bit-field: 3/4 is not a valid end index". ---- 9424,9434 ---- +--- 9440,9450 ---- fx.mo:Expected error in mat fxcopy-bit: "fxcopy-bit: invalid bit index -1". fx.mo:Expected error in mat fxcopy-bit: "fxcopy-bit: invalid bit index ". fx.mo:Expected error in mat fxcopy-bit: "fxcopy-bit: invalid bit index ". @@ -5386,7 +5418,7 @@ fx.mo:Expected error in mat fxcopy-bit-field: "fxcopy-bit-field: 3.4 is not a valid start index". fx.mo:Expected error in mat fxcopy-bit-field: "fxcopy-bit-field: 3/4 is not a valid end index". *************** -*** 9488,9497 **** +*** 9504,9513 **** fx.mo:Expected error in mat fxdiv0-and-mod0: "fxmod0: (a) is not a fixnum". fx.mo:Expected error in mat fxdiv0-and-mod0: "fxmod0: undefined for 0". fx.mo:Expected error in mat fxdiv0-and-mod0: "fxmod0: undefined for 0". @@ -5397,7 +5429,7 @@ fx.mo:Expected error in mat fx+/carry: "fx+/carry: 1.0 is not a fixnum". fx.mo:Expected error in mat fx+/carry: "fx+/carry: 2.0 is not a fixnum". fx.mo:Expected error in mat fx+/carry: "fx+/carry: 3.0 is not a fixnum". ---- 9488,9497 ---- +--- 9504,9513 ---- fx.mo:Expected error in mat fxdiv0-and-mod0: "fxmod0: (a) is not a fixnum". fx.mo:Expected error in mat fxdiv0-and-mod0: "fxmod0: undefined for 0". fx.mo:Expected error in mat fxdiv0-and-mod0: "fxmod0: undefined for 0". @@ -5409,7 +5441,7 @@ fx.mo:Expected error in mat fx+/carry: "fx+/carry: 2.0 is not a fixnum". fx.mo:Expected error in mat fx+/carry: "fx+/carry: 3.0 is not a fixnum". *************** -*** 9507,9516 **** +*** 9523,9532 **** fx.mo:Expected error in mat fx+/carry: "fx+/carry: <-int> is not a fixnum". fx.mo:Expected error in mat fx+/carry: "fx+/carry: <-int> is not a fixnum". fx.mo:Expected error in mat fx+/carry: "fx+/carry: <-int> is not a fixnum". @@ -5420,7 +5452,7 @@ fx.mo:Expected error in mat fx-/carry: "fx-/carry: 1.0 is not a fixnum". fx.mo:Expected error in mat fx-/carry: "fx-/carry: 2.0 is not a fixnum". fx.mo:Expected error in mat fx-/carry: "fx-/carry: 3.0 is not a fixnum". ---- 9507,9516 ---- +--- 9523,9532 ---- fx.mo:Expected error in mat fx+/carry: "fx+/carry: <-int> is not a fixnum". fx.mo:Expected error in mat fx+/carry: "fx+/carry: <-int> is not a fixnum". fx.mo:Expected error in mat fx+/carry: "fx+/carry: <-int> is not a fixnum". @@ -5432,7 +5464,7 @@ fx.mo:Expected error in mat fx-/carry: "fx-/carry: 2.0 is not a fixnum". fx.mo:Expected error in mat fx-/carry: "fx-/carry: 3.0 is not a fixnum". *************** -*** 9526,9535 **** +*** 9542,9551 **** fx.mo:Expected error in mat fx-/carry: "fx-/carry: <-int> is not a fixnum". fx.mo:Expected error in mat fx-/carry: "fx-/carry: <-int> is not a fixnum". fx.mo:Expected error in mat fx-/carry: "fx-/carry: <-int> is not a fixnum". @@ -5443,7 +5475,7 @@ fx.mo:Expected error in mat fx*/carry: "fx*/carry: 1.0 is not a fixnum". fx.mo:Expected error in mat fx*/carry: "fx*/carry: 2.0 is not a fixnum". fx.mo:Expected error in mat fx*/carry: "fx*/carry: 3.0 is not a fixnum". ---- 9526,9535 ---- +--- 9542,9551 ---- fx.mo:Expected error in mat fx-/carry: "fx-/carry: <-int> is not a fixnum". fx.mo:Expected error in mat fx-/carry: "fx-/carry: <-int> is not a fixnum". fx.mo:Expected error in mat fx-/carry: "fx-/carry: <-int> is not a fixnum". @@ -5455,7 +5487,7 @@ fx.mo:Expected error in mat fx*/carry: "fx*/carry: 2.0 is not a fixnum". fx.mo:Expected error in mat fx*/carry: "fx*/carry: 3.0 is not a fixnum". *************** -*** 9545,9555 **** +*** 9561,9571 **** fx.mo:Expected error in mat fx*/carry: "fx*/carry: <-int> is not a fixnum". fx.mo:Expected error in mat fx*/carry: "fx*/carry: <-int> is not a fixnum". fx.mo:Expected error in mat fx*/carry: "fx*/carry: <-int> is not a fixnum". @@ -5467,7 +5499,7 @@ fx.mo:Expected error in mat fxrotate-bit-field: "fxrotate-bit-field: a is not a fixnum". fx.mo:Expected error in mat fxrotate-bit-field: "fxrotate-bit-field: invalid start index 0.0". fx.mo:Expected error in mat fxrotate-bit-field: "fxrotate-bit-field: invalid end index 2.0". ---- 9545,9555 ---- +--- 9561,9571 ---- fx.mo:Expected error in mat fx*/carry: "fx*/carry: <-int> is not a fixnum". fx.mo:Expected error in mat fx*/carry: "fx*/carry: <-int> is not a fixnum". fx.mo:Expected error in mat fx*/carry: "fx*/carry: <-int> is not a fixnum". @@ -5480,7 +5512,7 @@ fx.mo:Expected error in mat fxrotate-bit-field: "fxrotate-bit-field: invalid start index 0.0". fx.mo:Expected error in mat fxrotate-bit-field: "fxrotate-bit-field: invalid end index 2.0". *************** -*** 9572,9581 **** +*** 9588,9597 **** fx.mo:Expected error in mat fxrotate-bit-field: "fxrotate-bit-field: invalid end index ". fx.mo:Expected error in mat fxrotate-bit-field: "fxrotate-bit-field: invalid end index ". fx.mo:Expected error in mat fxrotate-bit-field: "fxrotate-bit-field: count 1 is greater than difference between end index 5 and start index 5". @@ -5491,7 +5523,7 @@ fx.mo:Expected error in mat fxreverse-bit-field: "fxreverse-bit-field: a is not a fixnum". fx.mo:Expected error in mat fxreverse-bit-field: "fxreverse-bit-field: invalid start index 0.0". fx.mo:Expected error in mat fxreverse-bit-field: "fxreverse-bit-field: invalid end index 2.0". ---- 9572,9581 ---- +--- 9588,9597 ---- fx.mo:Expected error in mat fxrotate-bit-field: "fxrotate-bit-field: invalid end index ". fx.mo:Expected error in mat fxrotate-bit-field: "fxrotate-bit-field: invalid end index ". fx.mo:Expected error in mat fxrotate-bit-field: "fxrotate-bit-field: count 1 is greater than difference between end index 5 and start index 5". @@ -5503,7 +5535,7 @@ fx.mo:Expected error in mat fxreverse-bit-field: "fxreverse-bit-field: invalid start index 0.0". fx.mo:Expected error in mat fxreverse-bit-field: "fxreverse-bit-field: invalid end index 2.0". *************** -*** 9591,9608 **** +*** 9607,9624 **** fx.mo:Expected error in mat fxreverse-bit-field: "fxreverse-bit-field: invalid end index ". fx.mo:Expected error in mat fxreverse-bit-field: "fxreverse-bit-field: invalid end index <-int>". fx.mo:Expected error in mat fxreverse-bit-field: "fxreverse-bit-field: start index 7 is greater than end index 5". @@ -5522,7 +5554,7 @@ fl.mo:Expected error in mat fl=: "fl=: (a) is not a flonum". fl.mo:Expected error in mat fl=: "fl=: a is not a flonum". fl.mo:Expected error in mat fl=: "fl=: a is not a flonum". ---- 9591,9608 ---- +--- 9607,9624 ---- fx.mo:Expected error in mat fxreverse-bit-field: "fxreverse-bit-field: invalid end index ". fx.mo:Expected error in mat fxreverse-bit-field: "fxreverse-bit-field: invalid end index <-int>". fx.mo:Expected error in mat fxreverse-bit-field: "fxreverse-bit-field: start index 7 is greater than end index 5". @@ -5542,7 +5574,7 @@ fl.mo:Expected error in mat fl=: "fl=: a is not a flonum". fl.mo:Expected error in mat fl=: "fl=: a is not a flonum". *************** -*** 9610,9616 **** +*** 9626,9632 **** fl.mo:Expected error in mat fl=: "fl=: 3 is not a flonum". fl.mo:Expected error in mat fl=: "fl=: 7/2 is not a flonum". fl.mo:Expected error in mat fl=: "fl=: 7/2 is not a flonum". @@ -5550,7 +5582,7 @@ fl.mo:Expected error in mat fl<: "fl<: (a) is not a flonum". fl.mo:Expected error in mat fl<: "fl<: a is not a flonum". fl.mo:Expected error in mat fl<: "fl<: a is not a flonum". ---- 9610,9616 ---- +--- 9626,9632 ---- fl.mo:Expected error in mat fl=: "fl=: 3 is not a flonum". fl.mo:Expected error in mat fl=: "fl=: 7/2 is not a flonum". fl.mo:Expected error in mat fl=: "fl=: 7/2 is not a flonum". @@ -5559,7 +5591,7 @@ fl.mo:Expected error in mat fl<: "fl<: a is not a flonum". fl.mo:Expected error in mat fl<: "fl<: a is not a flonum". *************** -*** 9618,9624 **** +*** 9634,9640 **** fl.mo:Expected error in mat fl<: "fl<: 3 is not a flonum". fl.mo:Expected error in mat fl<: "fl<: 7/2 is not a flonum". fl.mo:Expected error in mat fl<: "fl<: 7/2 is not a flonum". @@ -5567,7 +5599,7 @@ fl.mo:Expected error in mat fl>: "fl>: (a) is not a flonum". fl.mo:Expected error in mat fl>: "fl>: a is not a flonum". fl.mo:Expected error in mat fl>: "fl>: a is not a flonum". ---- 9618,9624 ---- +--- 9634,9640 ---- fl.mo:Expected error in mat fl<: "fl<: 3 is not a flonum". fl.mo:Expected error in mat fl<: "fl<: 7/2 is not a flonum". fl.mo:Expected error in mat fl<: "fl<: 7/2 is not a flonum". @@ -5576,7 +5608,7 @@ fl.mo:Expected error in mat fl>: "fl>: a is not a flonum". fl.mo:Expected error in mat fl>: "fl>: a is not a flonum". *************** -*** 9626,9632 **** +*** 9642,9648 **** fl.mo:Expected error in mat fl>: "fl>: 3 is not a flonum". fl.mo:Expected error in mat fl>: "fl>: 7/2 is not a flonum". fl.mo:Expected error in mat fl>: "fl>: 7/2 is not a flonum". @@ -5584,7 +5616,7 @@ fl.mo:Expected error in mat fl<=: "fl<=: (a) is not a flonum". fl.mo:Expected error in mat fl<=: "fl<=: a is not a flonum". fl.mo:Expected error in mat fl<=: "fl<=: a is not a flonum". ---- 9626,9632 ---- +--- 9642,9648 ---- fl.mo:Expected error in mat fl>: "fl>: 3 is not a flonum". fl.mo:Expected error in mat fl>: "fl>: 7/2 is not a flonum". fl.mo:Expected error in mat fl>: "fl>: 7/2 is not a flonum". @@ -5593,7 +5625,7 @@ fl.mo:Expected error in mat fl<=: "fl<=: a is not a flonum". fl.mo:Expected error in mat fl<=: "fl<=: a is not a flonum". *************** -*** 9634,9640 **** +*** 9650,9656 **** fl.mo:Expected error in mat fl<=: "fl<=: 3 is not a flonum". fl.mo:Expected error in mat fl<=: "fl<=: 7/2 is not a flonum". fl.mo:Expected error in mat fl<=: "fl<=: 7/2 is not a flonum". @@ -5601,7 +5633,7 @@ fl.mo:Expected error in mat fl>=: "fl>=: (a) is not a flonum". fl.mo:Expected error in mat fl>=: "fl>=: a is not a flonum". fl.mo:Expected error in mat fl>=: "fl>=: a is not a flonum". ---- 9634,9640 ---- +--- 9650,9656 ---- fl.mo:Expected error in mat fl<=: "fl<=: 3 is not a flonum". fl.mo:Expected error in mat fl<=: "fl<=: 7/2 is not a flonum". fl.mo:Expected error in mat fl<=: "fl<=: 7/2 is not a flonum". @@ -5610,7 +5642,7 @@ fl.mo:Expected error in mat fl>=: "fl>=: a is not a flonum". fl.mo:Expected error in mat fl>=: "fl>=: a is not a flonum". *************** -*** 9642,9681 **** +*** 9658,9697 **** fl.mo:Expected error in mat fl>=: "fl>=: 3 is not a flonum". fl.mo:Expected error in mat fl>=: "fl>=: 7/2 is not a flonum". fl.mo:Expected error in mat fl>=: "fl>=: 7/2 is not a flonum". @@ -5651,7 +5683,7 @@ fl.mo:Expected error in mat fl>=?: "fl>=?: a is not a flonum". fl.mo:Expected error in mat fl>=?: "fl>=?: a is not a flonum". fl.mo:Expected error in mat fl>=?: "fl>=?: 3 is not a flonum". ---- 9642,9681 ---- +--- 9658,9697 ---- fl.mo:Expected error in mat fl>=: "fl>=: 3 is not a flonum". fl.mo:Expected error in mat fl>=: "fl>=: 7/2 is not a flonum". fl.mo:Expected error in mat fl>=: "fl>=: 7/2 is not a flonum". @@ -5693,7 +5725,7 @@ fl.mo:Expected error in mat fl>=?: "fl>=?: a is not a flonum". fl.mo:Expected error in mat fl>=?: "fl>=?: 3 is not a flonum". *************** -*** 9685,9691 **** +*** 9701,9707 **** fl.mo:Expected error in mat fl+: "fl+: (a . b) is not a flonum". fl.mo:Expected error in mat fl+: "fl+: 1 is not a flonum". fl.mo:Expected error in mat fl+: "fl+: 2/3 is not a flonum". @@ -5701,7 +5733,7 @@ fl.mo:Expected error in mat fl-: "fl-: (a . b) is not a flonum". fl.mo:Expected error in mat fl-: "fl-: 1 is not a flonum". fl.mo:Expected error in mat fl-: "fl-: a is not a flonum". ---- 9685,9691 ---- +--- 9701,9707 ---- fl.mo:Expected error in mat fl+: "fl+: (a . b) is not a flonum". fl.mo:Expected error in mat fl+: "fl+: 1 is not a flonum". fl.mo:Expected error in mat fl+: "fl+: 2/3 is not a flonum". @@ -5710,7 +5742,7 @@ fl.mo:Expected error in mat fl-: "fl-: 1 is not a flonum". fl.mo:Expected error in mat fl-: "fl-: a is not a flonum". *************** -*** 9695,9784 **** +*** 9711,9800 **** fl.mo:Expected error in mat fl*: "fl*: (a . b) is not a flonum". fl.mo:Expected error in mat fl*: "fl*: 1 is not a flonum". fl.mo:Expected error in mat fl*: "fl*: 2/3 is not a flonum". @@ -5801,7 +5833,7 @@ fl.mo:Expected error in mat flsingle: "flsingle: a is not a flonum". fl.mo:Expected error in mat flsingle: "flsingle: 3 is not a flonum". fl.mo:Expected error in mat flsingle: "flsingle: 2.0+1.0i is not a flonum". ---- 9695,9784 ---- +--- 9711,9800 ---- fl.mo:Expected error in mat fl*: "fl*: (a . b) is not a flonum". fl.mo:Expected error in mat fl*: "fl*: 1 is not a flonum". fl.mo:Expected error in mat fl*: "fl*: 2/3 is not a flonum". @@ -5893,7 +5925,7 @@ fl.mo:Expected error in mat flsingle: "flsingle: 3 is not a flonum". fl.mo:Expected error in mat flsingle: "flsingle: 2.0+1.0i is not a flonum". *************** -*** 9797,9832 **** +*** 9813,9848 **** fl.mo:Expected error in mat flinfinite?: "flinfinite?: 3 is not a flonum". fl.mo:Expected error in mat flinfinite?: "flinfinite?: 3/4 is not a flonum". fl.mo:Expected error in mat flinfinite?: "flinfinite?: hi is not a flonum". @@ -5930,7 +5962,7 @@ fl.mo:Expected error in mat fleven?: "fleven?: a is not a flonum". fl.mo:Expected error in mat fleven?: "fleven?: 3 is not a flonum". fl.mo:Expected error in mat fleven?: "fleven?: 3.2 is not an integer". ---- 9797,9832 ---- +--- 9813,9848 ---- fl.mo:Expected error in mat flinfinite?: "flinfinite?: 3 is not a flonum". fl.mo:Expected error in mat flinfinite?: "flinfinite?: 3/4 is not a flonum". fl.mo:Expected error in mat flinfinite?: "flinfinite?: hi is not a flonum". @@ -5968,7 +6000,7 @@ fl.mo:Expected error in mat fleven?: "fleven?: 3 is not a flonum". fl.mo:Expected error in mat fleven?: "fleven?: 3.2 is not an integer". *************** -*** 9834,9841 **** +*** 9850,9857 **** fl.mo:Expected error in mat fleven?: "fleven?: 1+1i is not a flonum". fl.mo:Expected error in mat fleven?: "fleven?: +inf.0 is not an integer". fl.mo:Expected error in mat fleven?: "fleven?: +nan.0 is not an integer". @@ -5977,7 +6009,7 @@ fl.mo:Expected error in mat flodd?: "flodd?: a is not a flonum". fl.mo:Expected error in mat flodd?: "flodd?: 3 is not a flonum". fl.mo:Expected error in mat flodd?: "flodd?: 3.2 is not an integer". ---- 9834,9841 ---- +--- 9850,9857 ---- fl.mo:Expected error in mat fleven?: "fleven?: 1+1i is not a flonum". fl.mo:Expected error in mat fleven?: "fleven?: +inf.0 is not an integer". fl.mo:Expected error in mat fleven?: "fleven?: +nan.0 is not an integer". @@ -5987,7 +6019,7 @@ fl.mo:Expected error in mat flodd?: "flodd?: 3 is not a flonum". fl.mo:Expected error in mat flodd?: "flodd?: 3.2 is not an integer". *************** -*** 9843,9849 **** +*** 9859,9865 **** fl.mo:Expected error in mat flodd?: "flodd?: 3+1i is not a flonum". fl.mo:Expected error in mat flodd?: "flodd?: +inf.0 is not an integer". fl.mo:Expected error in mat flodd?: "flodd?: +nan.0 is not an integer". @@ -5995,7 +6027,7 @@ fl.mo:Expected error in mat flmin: "flmin: a is not a flonum". fl.mo:Expected error in mat flmin: "flmin: a is not a flonum". fl.mo:Expected error in mat flmin: "flmin: a is not a flonum". ---- 9843,9849 ---- +--- 9859,9865 ---- fl.mo:Expected error in mat flodd?: "flodd?: 3+1i is not a flonum". fl.mo:Expected error in mat flodd?: "flodd?: +inf.0 is not an integer". fl.mo:Expected error in mat flodd?: "flodd?: +nan.0 is not an integer". @@ -6004,7 +6036,7 @@ fl.mo:Expected error in mat flmin: "flmin: a is not a flonum". fl.mo:Expected error in mat flmin: "flmin: a is not a flonum". *************** -*** 9851,9857 **** +*** 9867,9873 **** fl.mo:Expected error in mat flmin: "flmin: a is not a flonum". fl.mo:Expected error in mat flmin: "flmin: 0.0+1.0i is not a flonum". fl.mo:Expected error in mat flmin: "flmin: 0+1i is not a flonum". @@ -6012,7 +6044,7 @@ fl.mo:Expected error in mat flmax: "flmax: a is not a flonum". fl.mo:Expected error in mat flmax: "flmax: a is not a flonum". fl.mo:Expected error in mat flmax: "flmax: 3 is not a flonum". ---- 9851,9857 ---- +--- 9867,9873 ---- fl.mo:Expected error in mat flmin: "flmin: a is not a flonum". fl.mo:Expected error in mat flmin: "flmin: 0.0+1.0i is not a flonum". fl.mo:Expected error in mat flmin: "flmin: 0+1i is not a flonum". @@ -6021,7 +6053,7 @@ fl.mo:Expected error in mat flmax: "flmax: a is not a flonum". fl.mo:Expected error in mat flmax: "flmax: 3 is not a flonum". *************** -*** 9859,9872 **** +*** 9875,9888 **** fl.mo:Expected error in mat flmax: "flmax: a is not a flonum". fl.mo:Expected error in mat flmax: "flmax: 0.0+1.0i is not a flonum". fl.mo:Expected error in mat flmax: "flmax: 0+1i is not a flonum". @@ -6036,7 +6068,7 @@ fl.mo:Expected error in mat fldenominator: "fldenominator: a is not a flonum". fl.mo:Expected error in mat fldenominator: "fldenominator: 3 is not a flonum". fl.mo:Expected error in mat fldenominator: "fldenominator: 0+1i is not a flonum". ---- 9859,9872 ---- +--- 9875,9888 ---- fl.mo:Expected error in mat flmax: "flmax: a is not a flonum". fl.mo:Expected error in mat flmax: "flmax: 0.0+1.0i is not a flonum". fl.mo:Expected error in mat flmax: "flmax: 0+1i is not a flonum". @@ -6052,7 +6084,7 @@ fl.mo:Expected error in mat fldenominator: "fldenominator: 3 is not a flonum". fl.mo:Expected error in mat fldenominator: "fldenominator: 0+1i is not a flonum". *************** -*** 9912,9918 **** +*** 9928,9934 **** cfl.mo:Expected error in mat cfl-: "cfl-: a is not a cflonum". cfl.mo:Expected error in mat cfl-: "cfl-: a is not a cflonum". cfl.mo:Expected error in mat cfl-: "cfl-: a is not a cflonum". @@ -6060,7 +6092,7 @@ cfl.mo:Expected error in mat cfl-: "cfl-: a is not a cflonum". cfl.mo:Expected error in mat cfl-: "cfl-: a is not a cflonum". cfl.mo:Expected error in mat cfl-: "cfl-: a is not a cflonum". ---- 9912,9918 ---- +--- 9928,9934 ---- cfl.mo:Expected error in mat cfl-: "cfl-: a is not a cflonum". cfl.mo:Expected error in mat cfl-: "cfl-: a is not a cflonum". cfl.mo:Expected error in mat cfl-: "cfl-: a is not a cflonum". @@ -6069,7 +6101,7 @@ cfl.mo:Expected error in mat cfl-: "cfl-: a is not a cflonum". cfl.mo:Expected error in mat cfl-: "cfl-: a is not a cflonum". *************** -*** 9922,9935 **** +*** 9938,9951 **** cfl.mo:Expected error in mat cfl/: "cfl/: a is not a cflonum". cfl.mo:Expected error in mat cfl/: "cfl/: a is not a cflonum". cfl.mo:Expected error in mat cfl/: "cfl/: a is not a cflonum". @@ -6084,7 +6116,7 @@ foreign.mo:Expected error in mat load-shared-object: "load-shared-object: invalid path 3". foreign.mo:Expected error in mat foreign-procedure: "foreign-procedure: no entry for "i do not exist"". foreign.mo:Expected error in mat foreign-procedure: "foreign-procedure: no entry for "i do not exist"". ---- 9922,9935 ---- +--- 9938,9951 ---- cfl.mo:Expected error in mat cfl/: "cfl/: a is not a cflonum". cfl.mo:Expected error in mat cfl/: "cfl/: a is not a cflonum". cfl.mo:Expected error in mat cfl/: "cfl/: a is not a cflonum". @@ -6100,7 +6132,7 @@ foreign.mo:Expected error in mat foreign-procedure: "foreign-procedure: no entry for "i do not exist"". foreign.mo:Expected error in mat foreign-procedure: "foreign-procedure: no entry for "i do not exist"". *************** -*** 9964,9971 **** +*** 9980,9987 **** foreign.mo:Expected error in mat foreign-procedure: "id: invalid foreign-procedure argument foo". foreign.mo:Expected error in mat foreign-procedure: "foreign-procedure: invalid foreign procedure handle abcde". foreign.mo:Expected error in mat foreign-procedure: "float_id: invalid foreign-procedure argument 0". @@ -6109,7 +6141,7 @@ foreign.mo:Expected error in mat foreign-sizeof: "foreign-sizeof: invalid foreign type specifier i-am-not-a-type". foreign.mo:Expected error in mat foreign-sizeof: "foreign-sizeof: invalid foreign type specifier 1". foreign.mo:Expected error in mat foreign-bytevectors: "u8*->u8*: invalid foreign-procedure argument "hello"". ---- 9964,9971 ---- +--- 9980,9987 ---- foreign.mo:Expected error in mat foreign-procedure: "id: invalid foreign-procedure argument foo". foreign.mo:Expected error in mat foreign-procedure: "foreign-procedure: invalid foreign procedure handle abcde". foreign.mo:Expected error in mat foreign-procedure: "float_id: invalid foreign-procedure argument 0". @@ -6119,7 +6151,7 @@ foreign.mo:Expected error in mat foreign-sizeof: "foreign-sizeof: invalid foreign type specifier 1". foreign.mo:Expected error in mat foreign-bytevectors: "u8*->u8*: invalid foreign-procedure argument "hello"". *************** -*** 10464,10476 **** +*** 10480,10492 **** unix.mo:Expected error in mat file-operations: "file-access-time: failed for "testlink": no such file or directory". unix.mo:Expected error in mat file-operations: "file-change-time: failed for "testlink": no such file or directory". unix.mo:Expected error in mat file-operations: "file-modification-time: failed for "testlink": no such file or directory". @@ -6133,7 +6165,7 @@ windows.mo:Expected error in mat registry: "get-registry: pooh is not a string". windows.mo:Expected error in mat registry: "put-registry!: 3 is not a string". windows.mo:Expected error in mat registry: "put-registry!: 3 is not a string". ---- 10464,10476 ---- +--- 10480,10492 ---- unix.mo:Expected error in mat file-operations: "file-access-time: failed for "testlink": no such file or directory". unix.mo:Expected error in mat file-operations: "file-change-time: failed for "testlink": no such file or directory". unix.mo:Expected error in mat file-operations: "file-modification-time: failed for "testlink": no such file or directory". @@ -6148,7 +6180,7 @@ windows.mo:Expected error in mat registry: "put-registry!: 3 is not a string". windows.mo:Expected error in mat registry: "put-registry!: 3 is not a string". *************** -*** 10498,10569 **** +*** 10514,10585 **** ieee.mo:Expected error in mat flonum->fixnum: "flonum->fixnum: result for -inf.0 would be outside of fixnum range". ieee.mo:Expected error in mat flonum->fixnum: "flonum->fixnum: result for +nan.0 would be outside of fixnum range". ieee.mo:Expected error in mat fllp: "fllp: 3 is not a flonum". @@ -6221,7 +6253,7 @@ date.mo:Expected error in mat time: "time>=?: 3 is not a time record". date.mo:Expected error in mat time: "time>=?: # is not a time record". date.mo:Expected error in mat time: "time>=?: types of