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.
This commit is contained in:
Matthew Flatt 2020-11-22 21:01:24 -07:00
parent 60e9245390
commit c52113397c
23 changed files with 928 additions and 466 deletions

View File

@ -338,7 +338,7 @@ RACKET_FOR_BOOTFILES = $(RACKET)
RACKET_FOR_BUILD = $(RACKET) RACKET_FOR_BUILD = $(RACKET)
# This branch name changes each time the pb boot files are updated: # 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 PB_REPO = https://github.com/racket/pb
# Alternative source for Chez Scheme boot files, normally set by # Alternative source for Chez Scheme boot files, normally set by

View File

@ -47,7 +47,7 @@ RACKETCS_SUFFIX =
RACKET = RACKET =
RACKET_FOR_BOOTFILES = $(RACKET) RACKET_FOR_BOOTFILES = $(RACKET)
RACKET_FOR_BUILD = $(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 PB_REPO = https://github.com/racket/pb
EXTRA_REPOS_BASE = EXTRA_REPOS_BASE =
CS_CROSS_SUFFIX = CS_CROSS_SUFFIX =
@ -306,14 +306,14 @@ maybe-fetch-pb-as-is:
echo done echo done
fetch-pb-from: fetch-pb-from:
mkdir -p racket/src/ChezScheme/boot 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 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.8-1 cd racket/src/ChezScheme/boot/pb && git checkout -q circa-7.9.0.9-1
pb-stage: pb-stage:
cd racket/src/ChezScheme/boot/pb && git branch 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.8-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" cd racket/src/ChezScheme/boot/pb && git add . && git commit --amend -m "new build"
pb-push: 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: 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 "$(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)" 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)"

View File

@ -14,7 +14,7 @@
;; In the Racket source repo, this version should change only when ;; In the Racket source repo, this version should change only when
;; "racket_version.h" changes: ;; "racket_version.h" changes:
(define version "7.9.0.8") (define version "7.9.0.9")
(define deps `("racket-lib" (define deps `("racket-lib"
["racket" #:version ,version])) ["racket" #:version ,version]))

View File

@ -2529,7 +2529,7 @@ static void resweep_dirty_weak_pairs(thread_gc *tgc) {
youngest = TARGET_GENERATION(si); youngest = TARGET_GENERATION(si);
} else if (FORWARDEDP(p, si)) { } else if (FORWARDEDP(p, si)) {
IGEN newpg; IGEN newpg;
*pp = FWDADDRESS(p); *pp = GET_FWDADDRESS(p);
newpg = TARGET_GENERATION(si); newpg = TARGET_GENERATION(si);
if (newpg < youngest) youngest = newpg; if (newpg < youngest) youngest = newpg;
} else { } else {
@ -2647,7 +2647,7 @@ static void check_ephemeron(thread_gc *tgc, ptr pe) {
IGEN tg = TARGET_GENERATION(si); IGEN tg = TARGET_GENERATION(si);
if (tg < from_g) S_record_new_dirty_card(tgc, &INITCAR(pe), tg); if (tg < from_g) S_record_new_dirty_card(tgc, &INITCAR(pe), tg);
#endif #endif
INITCAR(pe) = FWDADDRESS(p); INITCAR(pe) = GET_FWDADDRESS(p);
relocate_impure(&INITCDR(pe), from_g); relocate_impure(&INITCDR(pe), from_g);
} else { } else {
/* Not reached, so far; install as trigger */ /* Not reached, so far; install as trigger */

View File

@ -87,14 +87,13 @@ FORCEINLINE seginfo *MaybeSegInfo(uptr i) {
/* Must be consistent with `eq-hash` in "../s/library.ss" */ /* Must be consistent with `eq-hash` in "../s/library.ss" */
FORCEINLINE uptr eq_hash(ptr key) { FORCEINLINE uptr eq_hash(ptr key) {
uptr x = (uptr)((iptr)key >> (primary_type_bits - fixnum_offset)); iptr x = (iptr)key >> primary_type_bits;
x = x >> fixnum_offset; /* unsigned shift */
#if (ptr_bits == 64) #if (ptr_bits == 64)
uptr x1 = x ^ ((x >> 32) & (uptr)0xFFFFFFFF); iptr x1 = x ^ ((x >> 32) & (iptr)0xFFFFFFFF);
#else #else
uptr x1 = x; iptr x1 = x;
#endif #endif
uptr x2 = x1 ^ ((x1 >> 16) & (uptr)0xFFFF); iptr x2 = x1 ^ ((x1 >> 16) & (iptr)0xFFFF);
uptr x3 = x2 ^ ((x2 >> 8) & (uptr)0xFF); iptr x3 = x2 ^ ((x2 >> 8) & (iptr)0xFF);
return x3; return (uptr)x3;
} }

View File

@ -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-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)}
\formdef{make-weak-eqv-hashtable}{\categoryprocedure}{(make-weak-eqv-hashtable \var{size})} \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 \listlibraries
\endentryheader \endentryheader
These procedures are like the Revised$^6$ Report procedures \scheme{make-eq-hashtable} These procedures are like the Revised$^6$ Report procedures \scheme{make-eq-hashtable},
and \scheme{make-eqv-hashtable} \scheme{make-eqv-hashtable}, and \scheme{make-hashtable},
except the keys of the hashtable are held weakly, i.e., they are not except the keys of the hashtable are held weakly, i.e., they are not
protected from the garbage collector. protected from the garbage collector.
Keys reclaimed by the garbage collector are removed from the table, 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, not reclaimed, since keys are paired values using weak pairs. Consequently,
if a value in the hashtable refers to its own key, then if a value in the hashtable refers to its own key, then
garbage collection is prevented from reclaiming the key. See 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. also weak.
If the copy is immutable, inaccessible keys may still be dropped from the If the copy is immutable, inaccessible keys may still be dropped from the
hashtable, even though the contents of the table is otherwise unchanging. 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-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)}
\formdef{make-ephemeron-eqv-hashtable}{\categoryprocedure}{(make-ephemeron-eqv-hashtable \var{size})} \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 \listlibraries
\endentryheader \endentryheader
These procedures are like \scheme{make-weak-eq-hashtable} and These procedures are like \scheme{make-weak-eq-hashtable},
\scheme{make-weak-eqv-hashtable}, but a value in the hashtable can refer to a \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 key in the hashtable (directly or indirectly) without preventing garbage collection from
reclaiming the key, because keys are paired with values using ephemeron pairs. 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 \scheme{hashtable-copy} is also an ephemeron table, and an inaccesible
key can be dropped from an immutable ephemeron hashtable in the same key can be dropped from an immutable ephemeron hashtable in the same
way as for an immutable weak hashtable. way as for an immutable weak hashtable.
@ -2461,7 +2467,7 @@ way as for an immutable weak hashtable.
%---------------------------------------------------------------------------- %----------------------------------------------------------------------------
\entryheader \entryheader
\formdef{hashtable-weak?}{\categoryprocedure}{(hashtable-weak? \var{obj})} \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 \listlibraries
\endentryheader \endentryheader
@ -2475,7 +2481,7 @@ way as for an immutable weak hashtable.
%---------------------------------------------------------------------------- %----------------------------------------------------------------------------
\entryheader \entryheader
\formdef{hashtable-ephemeron?}{\categoryprocedure}{(hashtable-ephemeron? \var{obj})} \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 \listlibraries
\endentryheader \endentryheader

View File

@ -62,7 +62,7 @@ InstallLZ4Target=
# no changes should be needed below this point # # no changes should be needed below this point #
############################################################################### ###############################################################################
Version=csv9.5.3.51 Version=csv9.5.3.52
Include=boot/$m Include=boot/$m
PetiteBoot=boot/$m/petite.boot PetiteBoot=boot/$m/petite.boot
SchemeBoot=boot/$m/scheme.boot SchemeBoot=boot/$m/scheme.boot

View File

@ -1367,7 +1367,7 @@
; test for proper shrinkage ; test for proper shrinkage
(eqv? (eqv?
(let ([ht (make-eq-hashtable 32)]) (let ([ht (make-weak-eq-hashtable 32)])
(for-each (for-each
(lambda (k*) (for-each (lambda (k) (hashtable-delete! ht k)) k*)) (lambda (k*) (for-each (lambda (k) (hashtable-delete! ht k)) k*))
(let ([k** (map (lambda (x) (map list (make-list 1000))) (let ([k** (map (lambda (x) (map list (make-list 1000)))
@ -1592,7 +1592,7 @@
; test for proper shrinkage ; test for proper shrinkage
(eqv? (eqv?
(let ([ht (make-eq-hashtable 32)]) (let ([ht (make-ephemeron-eq-hashtable 32)])
(for-each (for-each
(lambda (k*) (for-each (lambda (k) (hashtable-delete! ht k)) k*)) (lambda (k*) (for-each (lambda (k) (hashtable-delete! ht k)) k*))
(let ([k** (map (lambda (x) (map list (make-list 1000))) (let ([k** (map (lambda (x) (map list (make-list 1000)))
@ -2056,7 +2056,7 @@
; test for proper shrinkage ; test for proper shrinkage
(eqv? (eqv?
(let ([ht (make-eq-hashtable 32)]) (let ([ht (make-weak-eq-hashtable 32)])
(for-each (for-each
(lambda (k*) (for-each (lambda (k) (eq-hashtable-delete! ht k)) k*)) (lambda (k*) (for-each (lambda (k) (eq-hashtable-delete! ht k)) k*))
(let ([k** (map (lambda (x) (map list (make-list 1000))) (let ([k** (map (lambda (x) (map list (make-list 1000)))
@ -2235,7 +2235,7 @@
; test for proper shrinkage ; test for proper shrinkage
(eqv? (eqv?
(let ([ht (make-eq-hashtable 32)]) (let ([ht (make-ephemeron-eq-hashtable 32)])
(for-each (for-each
(lambda (k*) (for-each (lambda (k) (eq-hashtable-delete! ht k)) k*)) (lambda (k*) (for-each (lambda (k) (eq-hashtable-delete! ht k)) k*))
(let ([k** (map (lambda (x) (map list (make-list 1000))) (let ([k** (map (lambda (x) (map list (make-list 1000)))
@ -2749,20 +2749,20 @@
(set! ko (void)) (set! ko (void))
(collect (collect-maximum-generation)) (collect (collect-maximum-generation))
(list (hashtable-size h2) (hashtable-size h3))) (list (hashtable-size h2) (hashtable-size h3)))
'(4 4)) '(2 2))
(equal-entries? h2 `#((c) -5.75 17 ,(+ (most-positive-fixnum) 5)) '#(cval mval nval oval)) (equal-entries? h2 `#((c) 17) '#(cval nval))
(equal-entries? h3 `#((c) -5.75 17 ,(+ (most-positive-fixnum) 5)) '#(cval mval nval oval)) (equal-entries? h3 `#((c) 17) '#(cval nval))
(eqv? (eqv?
(begin (begin
(set! h3 (void)) (set! h3 (void))
(collect (collect-maximum-generation)) (collect (collect-maximum-generation))
(hashtable-size h2)) (hashtable-size h2))
4) 2)
(equal-entries? h2 `#((c) -5.75 17 ,(+ (most-positive-fixnum) 5)) '#(cval mval nval oval)) (equal-entries? h2 `#((c) 17) '#(cval nval))
; test for proper shrinkage ; test for proper shrinkage
(equal? (equal?
(let ([ht (make-eqv-hashtable 32)]) (let ([ht (make-weak-eqv-hashtable 32)])
(for-each (for-each
(lambda (k*) (for-each (lambda (k) (hashtable-delete! ht k)) k*)) (lambda (k*) (for-each (lambda (k) (hashtable-delete! ht k)) k*))
(let ([k** (map (lambda (x) (map list (make-list 1000))) (let ([k** (map (lambda (x) (map list (make-list 1000)))
@ -2984,20 +2984,20 @@
(set! ko (void)) (set! ko (void))
(collect (collect-maximum-generation)) (collect (collect-maximum-generation))
(list (hashtable-size h2) (hashtable-size h3))) (list (hashtable-size h2) (hashtable-size h3)))
'(4 4)) '(2 2))
(equal-entries? h2 `#((c) -5.75 17 ,(+ (most-positive-fixnum) 5)) '#(cval mval nval oval)) (equal-entries? h2 `#((c) 17) '#(cval nval))
(equal-entries? h3 `#((c) -5.75 17 ,(+ (most-positive-fixnum) 5)) '#(cval mval nval oval)) (equal-entries? h3 `#((c) 17) '#(cval nval))
(eqv? (eqv?
(begin (begin
(set! h3 (void)) (set! h3 (void))
(collect (collect-maximum-generation)) (collect (collect-maximum-generation))
(hashtable-size h2)) (hashtable-size h2))
4) 2)
(equal-entries? h2 `#((c) -5.75 17 ,(+ (most-positive-fixnum) 5)) '#(cval mval nval oval)) (equal-entries? h2 `#((c) 17) '#(cval nval))
; test for proper shrinkage ; test for proper shrinkage
(equal? (equal?
(let ([ht (make-eqv-hashtable 32)]) (let ([ht (make-ephemeron-eqv-hashtable 32)])
(for-each (for-each
(lambda (k*) (for-each (lambda (k) (hashtable-delete! ht k)) k*)) (lambda (k*) (for-each (lambda (k) (hashtable-delete! ht k)) k*))
(let ([k** (map (lambda (x) (map list (make-list 1000))) (let ([k** (map (lambda (x) (map list (make-list 1000)))
@ -3791,6 +3791,510 @@
(test-hash 100000)) (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 (mat hash-functions
; equal-hash ; equal-hash
(error? ; wrong argument count (error? ; wrong argument count

View File

@ -1,5 +1,5 @@
*** errors-compile-0-f-f-f 2020-11-19 11:38:38.000000000 -0700 *** errors-compile-0-f-f-f 2020-11-23 06:11:33.000000000 -0700
--- errors-compile-0-f-t-f 2020-11-19 10:55:55.000000000 -0700 --- errors-compile-0-f-t-f 2020-11-23 05:33:39.000000000 -0700
*************** ***************
*** 200,206 **** *** 200,206 ****
3.mo:Expected error in mat dipa-letrec: "attempt to reference undefined variable a". 3.mo:Expected error in mat dipa-letrec: "attempt to reference undefined variable a".

View File

@ -1,5 +1,5 @@
*** errors-compile-0-f-f-f 2020-11-19 11:38:38.000000000 -0700 *** errors-compile-0-f-f-f 2020-11-23 06:11:33.000000000 -0700
--- errors-compile-0-t-f-f 2020-11-19 11:05:19.000000000 -0700 --- errors-compile-0-t-f-f 2020-11-23 05:42:16.000000000 -0700
*************** ***************
*** 168,174 **** *** 168,174 ****
3.mo:Expected error in mat case-lambda: "incorrect number of arguments 2 to #<procedure foo>". 3.mo:Expected error in mat case-lambda: "incorrect number of arguments 2 to #<procedure foo>".
@ -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 #t".
hash.mo:Expected error in mat eqv-hashtable-arguments: "make-ephemeron-eqv-hashtable: invalid size argument #f". 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!: #<hashtable> is not mutable". hash.mo:Expected error in mat generic-hashtable: "hashtable-delete!: #<hashtable> is not mutable".
hash.mo:Expected error in mat generic-hashtable: "hashtable-update!: #<hashtable> is not mutable". hash.mo:Expected error in mat generic-hashtable: "hashtable-update!: #<hashtable> is not mutable".
hash.mo:Expected error in mat generic-hashtable: "hashtable-update!: #<hashtable> is not mutable". hash.mo:Expected error in mat generic-hashtable: "hashtable-update!: #<hashtable> 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)".
! 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 (equal-hash 0 0)".
! hash.mo:Expected error in mat hash-functions: "incorrect argument count in call (symbol-hash)". ! 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 hash-functions: "string-ci-hash: hello is not a string".
hash.mo:Expected error in mat fasl-other-hashtable: "fasl-write: invalid fasl object #<eqv hashtable>". hash.mo:Expected error in mat fasl-other-hashtable: "fasl-write: invalid fasl object #<eqv hashtable>".
hash.mo:Expected error in mat fasl-other-hashtable: "fasl-write: invalid fasl object #<hashtable>". hash.mo:Expected error in mat fasl-other-hashtable: "fasl-write: invalid fasl object #<hashtable>".
--- 8244,8259 ---- --- 8244,8275 ----
hash.mo:Expected error in mat generic-hashtable: "hashtable-delete!: #<hashtable> is not mutable". hash.mo:Expected error in mat generic-hashtable: "hashtable-delete!: #<hashtable> is not mutable".
hash.mo:Expected error in mat generic-hashtable: "hashtable-update!: #<hashtable> is not mutable". hash.mo:Expected error in mat generic-hashtable: "hashtable-update!: #<hashtable> is not mutable".
hash.mo:Expected error in mat generic-hashtable: "hashtable-update!: #<hashtable> is not mutable". hash.mo:Expected error in mat generic-hashtable: "hashtable-update!: #<hashtable> is not mutable".
! hash.mo:Expected error in mat generic-hashtable-arguments: "incorrect number of arguments 0 to #<procedure make-weak-hashtable>".
! hash.mo:Expected error in mat generic-hashtable-arguments: "incorrect number of arguments 1 to #<procedure make-weak-hashtable>".
! hash.mo:Expected error in mat generic-hashtable-arguments: "incorrect number of arguments 4 to #<procedure make-weak-hashtable>".
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 #<procedure make-ephemeron-hashtable>".
! hash.mo:Expected error in mat generic-hashtable-arguments: "incorrect number of arguments 1 to #<procedure make-ephemeron-hashtable>".
! hash.mo:Expected error in mat generic-hashtable-arguments: "incorrect number of arguments 4 to #<procedure make-ephemeron-hashtable>".
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 #<procedure equal-hash>". ! hash.mo:Expected error in mat hash-functions: "incorrect number of arguments 0 to #<procedure equal-hash>".
! hash.mo:Expected error in mat hash-functions: "incorrect number of arguments 2 to #<procedure equal-hash>". ! hash.mo:Expected error in mat hash-functions: "incorrect number of arguments 2 to #<procedure equal-hash>".
! hash.mo:Expected error in mat hash-functions: "incorrect number of arguments 0 to #<procedure symbol-hash>". ! hash.mo:Expected error in mat hash-functions: "incorrect number of arguments 0 to #<procedure symbol-hash>".
@ -5015,7 +5047,7 @@
hash.mo:Expected error in mat fasl-other-hashtable: "fasl-write: invalid fasl object #<eqv hashtable>". hash.mo:Expected error in mat fasl-other-hashtable: "fasl-write: invalid fasl object #<eqv hashtable>".
hash.mo:Expected error in mat fasl-other-hashtable: "fasl-write: invalid fasl object #<hashtable>". hash.mo:Expected error in mat fasl-other-hashtable: "fasl-write: invalid fasl object #<hashtable>".
*************** ***************
*** 8369,8376 **** *** 8385,8392 ****
8.mo:Expected error in mat with-syntax: "invalid syntax a". 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)".
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: 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 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 #<syntax a>". 8.mo:Expected error in mat syntax->list: "syntax->list: invalid argument #<syntax a>".
--- 8369,8376 ---- --- 8385,8392 ----
8.mo:Expected error in mat with-syntax: "invalid syntax a". 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)".
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 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 #<syntax a>". 8.mo:Expected error in mat syntax->list: "syntax->list: invalid argument #<syntax a>".
*************** ***************
*** 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: "attempt to assign unbound identifier foo".
8.mo:Expected error in mat rnrs-eval: "invalid definition in immutable environment (define cons (quote #<procedure vector>))". 8.mo:Expected error in mat rnrs-eval: "invalid definition in immutable environment (define cons (quote #<procedure vector>))".
8.mo:Expected error in mat top-level-syntax-functions: "top-level-syntax: "hello" is not a symbol". 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: hello is not an environment".
8.mo:Expected error in mat top-level-syntax-functions: "define-top-level-syntax: #<environment *scheme*> is not a symbol". 8.mo:Expected error in mat top-level-syntax-functions: "define-top-level-syntax: #<environment *scheme*> is not a symbol".
8.mo:Expected error in mat top-level-syntax-functions: "define-top-level-syntax: cannot modify immutable environment #<environment *scheme*>". 8.mo:Expected error in mat top-level-syntax-functions: "define-top-level-syntax: cannot modify immutable environment #<environment *scheme*>".
--- 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: "attempt to assign unbound identifier foo".
8.mo:Expected error in mat rnrs-eval: "invalid definition in immutable environment (define cons (quote #<procedure vector>))". 8.mo:Expected error in mat rnrs-eval: "invalid definition in immutable environment (define cons (quote #<procedure vector>))".
8.mo:Expected error in mat top-level-syntax-functions: "top-level-syntax: "hello" is not a symbol". 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: #<environment *scheme*> is not a symbol". 8.mo:Expected error in mat top-level-syntax-functions: "define-top-level-syntax: #<environment *scheme*> is not a symbol".
8.mo:Expected error in mat top-level-syntax-functions: "define-top-level-syntax: cannot modify immutable environment #<environment *scheme*>". 8.mo:Expected error in mat top-level-syntax-functions: "define-top-level-syntax: cannot modify immutable environment #<environment *scheme*>".
*************** ***************
*** 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=?: (a) 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=?: <int> 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=?: <-int> is not a fixnum".
@ -5093,7 +5125,7 @@
fx.mo:Expected error in mat $fxu<: "incorrect number of arguments 1 to #<procedure $fxu<>". fx.mo:Expected error in mat $fxu<: "incorrect number of arguments 1 to #<procedure $fxu<>".
fx.mo:Expected error in mat $fxu<: "incorrect number of arguments 3 to #<procedure $fxu<>". fx.mo:Expected error in mat $fxu<: "incorrect number of arguments 3 to #<procedure $fxu<>".
fx.mo:Expected error in mat $fxu<: "$fxu<: <-int> is not a fixnum". 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=?: (a) 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=?: <int> 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=?: <-int> is not a fixnum".
@ -5118,7 +5150,7 @@
fx.mo:Expected error in mat $fxu<: "incorrect number of arguments 3 to #<procedure $fxu<>". fx.mo:Expected error in mat $fxu<: "incorrect number of arguments 3 to #<procedure $fxu<>".
fx.mo:Expected error in mat $fxu<: "$fxu<: <-int> is not a fixnum". 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-/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". 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*: <int> 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*: <-int> 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". 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-/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". 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*: <-int> is not a fixnum".
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".
*************** ***************
*** 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+: <-int> is not a fixnum".
fx.mo:Expected error in mat fx1+: "fx1+: <int> is not a fixnum". fx.mo:Expected error in mat fx1+: "fx1+: <int> is not a fixnum".
fx.mo:Expected error in mat fx1+: "fx1+: a 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: a is not a fixnum".
fx.mo:Expected error in mat fxmax: "fxmax: <int> is not a fixnum". fx.mo:Expected error in mat fxmax: "fxmax: <int> is not a fixnum".
fx.mo:Expected error in mat fxmax: "fxmax: <-int> 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+: <-int> is not a fixnum".
fx.mo:Expected error in mat fx1+: "fx1+: <int> is not a fixnum". fx.mo:Expected error in mat fx1+: "fx1+: <int> is not a fixnum".
fx.mo:Expected error in mat fx1+: "fx1+: a 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: <int> is not a fixnum". fx.mo:Expected error in mat fxmax: "fxmax: <int> is not a fixnum".
fx.mo:Expected error in mat fxmax: "fxmax: <-int> 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 <int> and 10". fx.mo:Expected error in mat fxarithmetic-shift: "fxarithmetic-shift: fixnum overflow with arguments <int> and 10".
fx.mo:Expected error in mat fxarithmetic-shift: "fxarithmetic-shift: fixnum overflow with arguments -4097 and <int>". fx.mo:Expected error in mat fxarithmetic-shift: "fxarithmetic-shift: fixnum overflow with arguments -4097 and <int>".
fx.mo:Expected error in mat fxarithmetic-shift: "fxarithmetic-shift: fixnum overflow with arguments <-int> and 1". 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: 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: 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". 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 <int> and 10". fx.mo:Expected error in mat fxarithmetic-shift: "fxarithmetic-shift: fixnum overflow with arguments <int> and 10".
fx.mo:Expected error in mat fxarithmetic-shift: "fxarithmetic-shift: fixnum overflow with arguments -4097 and <int>". fx.mo:Expected error in mat fxarithmetic-shift: "fxarithmetic-shift: fixnum overflow with arguments -4097 and <int>".
fx.mo:Expected error in mat fxarithmetic-shift: "fxarithmetic-shift: fixnum overflow with arguments <-int> and 1". 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: 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". 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: <int> is not a valid end index". fx.mo:Expected error in mat fxbit-field: "fxbit-field: <int> is not a valid end index".
fx.mo:Expected error in mat fxbit-field: "fxbit-field: <int> is not a valid start index". fx.mo:Expected error in mat fxbit-field: "fxbit-field: <int> is not a valid start index".
fx.mo:Expected error in mat fxbit-field: "fxbit-field: <int> is not a valid end index". fx.mo:Expected error in mat fxbit-field: "fxbit-field: <int> 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: 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: 3.4 is not a fixnum".
fx.mo:Expected error in mat fxif: "fxif: (a) 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: <int> is not a valid end index". fx.mo:Expected error in mat fxbit-field: "fxbit-field: <int> is not a valid end index".
fx.mo:Expected error in mat fxbit-field: "fxbit-field: <int> is not a valid start index". fx.mo:Expected error in mat fxbit-field: "fxbit-field: <int> is not a valid start index".
fx.mo:Expected error in mat fxbit-field: "fxbit-field: <int> is not a valid end index". fx.mo:Expected error in mat fxbit-field: "fxbit-field: <int> 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: 3.4 is not a fixnum".
fx.mo:Expected error in mat fxif: "fxif: (a) 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". 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.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: "3" is not a fixnum".
fx.mo:Expected error in mat fxcopy-bit: "fxcopy-bit: <int> is not a fixnum". fx.mo:Expected error in mat fxcopy-bit: "fxcopy-bit: <int> 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". 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: "3" is not a fixnum".
fx.mo:Expected error in mat fxcopy-bit: "fxcopy-bit: <int> is not a fixnum". fx.mo:Expected error in mat fxcopy-bit: "fxcopy-bit: <int> 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 -1".
fx.mo:Expected error in mat fxcopy-bit: "fxcopy-bit: invalid bit index <int>". fx.mo:Expected error in mat fxcopy-bit: "fxcopy-bit: invalid bit index <int>".
fx.mo:Expected error in mat fxcopy-bit: "fxcopy-bit: invalid bit index <int>". fx.mo:Expected error in mat fxcopy-bit: "fxcopy-bit: invalid bit index <int>".
@ -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" 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 start index".
fx.mo:Expected error in mat fxcopy-bit-field: "fxcopy-bit-field: 3/4 is not a valid end 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 -1".
fx.mo:Expected error in mat fxcopy-bit: "fxcopy-bit: invalid bit index <int>". fx.mo:Expected error in mat fxcopy-bit: "fxcopy-bit: invalid bit index <int>".
fx.mo:Expected error in mat fxcopy-bit: "fxcopy-bit: invalid bit index <int>". fx.mo:Expected error in mat fxcopy-bit: "fxcopy-bit: invalid bit index <int>".
@ -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 start index".
fx.mo:Expected error in mat fxcopy-bit-field: "fxcopy-bit-field: 3/4 is not a valid end 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: (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".
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: 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: 2.0 is not a fixnum".
fx.mo:Expected error in mat fx+/carry: "fx+/carry: 3.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: (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".
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: 2.0 is not a fixnum".
fx.mo:Expected error in mat fx+/carry: "fx+/carry: 3.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". 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: 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: 2.0 is not a fixnum".
fx.mo:Expected error in mat fx-/carry: "fx-/carry: 3.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". 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: 2.0 is not a fixnum".
fx.mo:Expected error in mat fx-/carry: "fx-/carry: 3.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". 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: 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: 2.0 is not a fixnum".
fx.mo:Expected error in mat fx*/carry: "fx*/carry: 3.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". 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: 2.0 is not a fixnum".
fx.mo:Expected error in mat fx*/carry: "fx*/carry: 3.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". 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: 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 start index 0.0".
fx.mo:Expected error in mat fxrotate-bit-field: "fxrotate-bit-field: invalid end index 2.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". 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 start index 0.0".
fx.mo:Expected error in mat fxrotate-bit-field: "fxrotate-bit-field: invalid end index 2.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 <int>". fx.mo:Expected error in mat fxrotate-bit-field: "fxrotate-bit-field: invalid end index <int>".
fx.mo:Expected error in mat fxrotate-bit-field: "fxrotate-bit-field: invalid end index <int>". fx.mo:Expected error in mat fxrotate-bit-field: "fxrotate-bit-field: invalid end index <int>".
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". 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: 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 start index 0.0".
fx.mo:Expected error in mat fxreverse-bit-field: "fxreverse-bit-field: invalid end index 2.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 <int>". fx.mo:Expected error in mat fxrotate-bit-field: "fxrotate-bit-field: invalid end index <int>".
fx.mo:Expected error in mat fxrotate-bit-field: "fxrotate-bit-field: invalid end index <int>". fx.mo:Expected error in mat fxrotate-bit-field: "fxrotate-bit-field: invalid end index <int>".
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". 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 start index 0.0".
fx.mo:Expected error in mat fxreverse-bit-field: "fxreverse-bit-field: invalid end index 2.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 <int>". 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: invalid end index <-int>". 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". 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". 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 <int>". 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: invalid end index <-int>". 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". 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".
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=: 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".
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". 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=: 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".
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".
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<: 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".
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". 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<: 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".
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".
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>: 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".
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". 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>: 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".
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".
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<=: 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".
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". 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<=: 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".
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".
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>=: 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".
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>=?: 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". 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>=: 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".
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>=?: a is not a flonum".
fl.mo:Expected error in mat fl>=?: "fl>=?: 3 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+: (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+: 1 is not a flonum".
fl.mo:Expected error in mat fl+: "fl+: 2/3 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-: (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-: 1 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".
--- 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+: (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+: 1 is not a flonum".
fl.mo:Expected error in mat fl+: "fl+: 2/3 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-: 1 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".
*************** ***************
*** 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*: (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*: 1 is not a flonum".
fl.mo:Expected error in mat fl*: "fl*: 2/3 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: 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: 3 is not a flonum".
fl.mo:Expected error in mat flsingle: "flsingle: 2.0+1.0i 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*: (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*: 1 is not a flonum".
fl.mo:Expected error in mat fl*: "fl*: 2/3 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: 3 is not a flonum".
fl.mo:Expected error in mat flsingle: "flsingle: 2.0+1.0i 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 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?: 3/4 is not a flonum".
fl.mo:Expected error in mat flinfinite?: "flinfinite?: hi 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?: 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 is not a flonum".
fl.mo:Expected error in mat fleven?: "fleven?: 3.2 is not an integer". 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 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?: 3/4 is not a flonum".
fl.mo:Expected error in mat flinfinite?: "flinfinite?: hi 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 is not a flonum".
fl.mo:Expected error in mat fleven?: "fleven?: 3.2 is not an integer". 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?: 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?: +inf.0 is not an integer".
fl.mo:Expected error in mat fleven?: "fleven?: +nan.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?: 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 is not a flonum".
fl.mo:Expected error in mat flodd?: "flodd?: 3.2 is not an integer". 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?: 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?: +inf.0 is not an integer".
fl.mo:Expected error in mat fleven?: "fleven?: +nan.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 is not a flonum".
fl.mo:Expected error in mat flodd?: "flodd?: 3.2 is not an integer". 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?: 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?: +inf.0 is not an integer".
fl.mo:Expected error in mat flodd?: "flodd?: +nan.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". 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?: 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?: +inf.0 is not an integer".
fl.mo:Expected error in mat flodd?: "flodd?: +nan.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".
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: 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.0+1.0i is not a flonum".
fl.mo:Expected error in mat flmin: "flmin: 0+1i 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: 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". 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: 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.0+1.0i is not a flonum".
fl.mo:Expected error in mat flmin: "flmin: 0+1i 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: a is not a flonum".
fl.mo:Expected error in mat flmax: "flmax: 3 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: 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.0+1.0i is not a flonum".
fl.mo:Expected error in mat flmax: "flmax: 0+1i 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: 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: 3 is not a flonum".
fl.mo:Expected error in mat fldenominator: "fldenominator: 0+1i 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: 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.0+1.0i is not a flonum".
fl.mo:Expected error in mat flmax: "flmax: 0+1i 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: 3 is not a flonum".
fl.mo:Expected error in mat fldenominator: "fldenominator: 0+1i 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". 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". 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". 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".
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". 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 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"".
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". 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"".
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: "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: "foreign-procedure: invalid foreign procedure handle abcde".
foreign.mo:Expected error in mat foreign-procedure: "float_id: invalid foreign-procedure argument 0". 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 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-sizeof: "foreign-sizeof: invalid foreign type specifier 1".
foreign.mo:Expected error in mat foreign-bytevectors: "u8*->u8*: invalid foreign-procedure argument "hello"". 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: "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: "foreign-procedure: invalid foreign procedure handle abcde".
foreign.mo:Expected error in mat foreign-procedure: "float_id: invalid foreign-procedure argument 0". 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-sizeof: "foreign-sizeof: invalid foreign type specifier 1".
foreign.mo:Expected error in mat foreign-bytevectors: "u8*->u8*: invalid foreign-procedure argument "hello"". 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-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-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". 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: "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".
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-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-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". 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".
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 -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 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". 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>=?: 3 is not a time record".
date.mo:Expected error in mat time: "time>=?: #<procedure car> is not a time record". date.mo:Expected error in mat time: "time>=?: #<procedure car> is not a time record".
date.mo:Expected error in mat time: "time>=?: types of <time> and <time> differ". date.mo:Expected error in mat time: "time>=?: types of <time> and <time> differ".
--- 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 -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 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". ieee.mo:Expected error in mat fllp: "fllp: 3 is not a flonum".
@ -6295,7 +6327,7 @@
date.mo:Expected error in mat time: "time>=?: #<procedure car> is not a time record". date.mo:Expected error in mat time: "time>=?: #<procedure car> is not a time record".
date.mo:Expected error in mat time: "time>=?: types of <time> and <time> differ". date.mo:Expected error in mat time: "time>=?: types of <time> and <time> differ".
*************** ***************
*** 10571,10584 **** *** 10587,10600 ****
date.mo:Expected error in mat time: "add-duration: <time> does not have type time-duration". date.mo:Expected error in mat time: "add-duration: <time> does not have type time-duration".
date.mo:Expected error in mat time: "subtract-duration: <time> does not have type time-duration". date.mo:Expected error in mat time: "subtract-duration: <time> does not have type time-duration".
date.mo:Expected error in mat time: "copy-time: <date> is not a time record". date.mo:Expected error in mat time: "copy-time: <date> is not a time record".
@ -6310,7 +6342,7 @@
date.mo:Expected error in mat date: "make-date: invalid nanosecond -1". date.mo:Expected error in mat date: "make-date: invalid nanosecond -1".
date.mo:Expected error in mat date: "make-date: invalid nanosecond <int>". date.mo:Expected error in mat date: "make-date: invalid nanosecond <int>".
date.mo:Expected error in mat date: "make-date: invalid nanosecond zero". date.mo:Expected error in mat date: "make-date: invalid nanosecond zero".
--- 10571,10584 ---- --- 10587,10600 ----
date.mo:Expected error in mat time: "add-duration: <time> does not have type time-duration". date.mo:Expected error in mat time: "add-duration: <time> does not have type time-duration".
date.mo:Expected error in mat time: "subtract-duration: <time> does not have type time-duration". date.mo:Expected error in mat time: "subtract-duration: <time> does not have type time-duration".
date.mo:Expected error in mat time: "copy-time: <date> is not a time record". date.mo:Expected error in mat time: "copy-time: <date> is not a time record".
@ -6326,7 +6358,7 @@
date.mo:Expected error in mat date: "make-date: invalid nanosecond <int>". date.mo:Expected error in mat date: "make-date: invalid nanosecond <int>".
date.mo:Expected error in mat date: "make-date: invalid nanosecond zero". date.mo:Expected error in mat date: "make-date: invalid nanosecond zero".
*************** ***************
*** 10604,10664 **** *** 10620,10680 ****
date.mo:Expected error in mat date: "make-date: invalid time-zone offset 90000". date.mo:Expected error in mat date: "make-date: invalid time-zone offset 90000".
date.mo:Expected error in mat date: "make-date: invalid time-zone offset est". date.mo:Expected error in mat date: "make-date: invalid time-zone offset est".
date.mo:Expected error in mat date: "make-date: invalid time-zone offset "est"". date.mo:Expected error in mat date: "make-date: invalid time-zone offset "est"".
@ -6388,7 +6420,7 @@
date.mo:Expected error in mat date: "current-date: invalid time-zone offset -90000". date.mo:Expected error in mat date: "current-date: invalid time-zone offset -90000".
date.mo:Expected error in mat date: "current-date: invalid time-zone offset 90000". date.mo:Expected error in mat date: "current-date: invalid time-zone offset 90000".
date.mo:Expected error in mat conversions/sleep: "date->time-utc: <time> is not a date record". date.mo:Expected error in mat conversions/sleep: "date->time-utc: <time> is not a date record".
--- 10604,10664 ---- --- 10620,10680 ----
date.mo:Expected error in mat date: "make-date: invalid time-zone offset 90000". date.mo:Expected error in mat date: "make-date: invalid time-zone offset 90000".
date.mo:Expected error in mat date: "make-date: invalid time-zone offset est". date.mo:Expected error in mat date: "make-date: invalid time-zone offset est".
date.mo:Expected error in mat date: "make-date: invalid time-zone offset "est"". date.mo:Expected error in mat date: "make-date: invalid time-zone offset "est"".

View File

@ -1,5 +1,5 @@
*** errors-compile-0-f-f-f 2020-11-19 11:38:38.000000000 -0700 *** errors-compile-0-f-f-f 2020-11-23 06:11:33.000000000 -0700
--- errors-interpret-0-f-f-f 2020-11-19 11:16:11.000000000 -0700 --- errors-interpret-0-f-f-f 2020-11-23 05:51:54.000000000 -0700
*************** ***************
*** 18,25 **** *** 18,25 ****
primvars.mo:Expected error testing (environment (quote (chezscheme)) (quote (chezscheme)) (quote #f)): Exception in environment: invalid library reference #f primvars.mo:Expected error testing (environment (quote (chezscheme)) (quote (chezscheme)) (quote #f)): Exception in environment: invalid library reference #f
@ -260,7 +260,7 @@
record.mo:Expected error in mat r6rs-records-procedural: "make-record-constructor-descriptor: record constructor descriptor #<record constructor descriptor> is not for parent of record type #<record type grand-child>". record.mo:Expected error in mat r6rs-records-procedural: "make-record-constructor-descriptor: record constructor descriptor #<record constructor descriptor> is not for parent of record type #<record type grand-child>".
record.mo:Expected error in mat r6rs-records-procedural: "make-record-type-descriptor: cannot extend sealed record type #<record type bar>". record.mo:Expected error in mat r6rs-records-procedural: "make-record-type-descriptor: cannot extend sealed record type #<record type bar>".
*************** ***************
*** 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-/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". fx.mo:Expected error in mat fx*: "fx*: (a . b) is not a fixnum".
@ -274,7 +274,7 @@
fx.mo:Expected error in mat r6rs:fx*: "fx*: <int> 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*: <-int> 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". 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-/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". fx.mo:Expected error in mat fx*: "fx*: (a . b) is not a fixnum".
@ -289,7 +289,7 @@
fx.mo:Expected error in mat r6rs:fx*: "fx*: <-int> 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". fx.mo:Expected error in mat r6rs:fx*: "fx*: #f is not a fixnum".
*************** ***************
*** 9937,9961 **** *** 9953,9977 ****
foreign.mo:Expected error in mat foreign-procedure: "foreign-procedure: invalid foreign procedure handle foo". foreign.mo:Expected error in mat foreign-procedure: "foreign-procedure: invalid foreign procedure handle foo".
foreign.mo:Expected error in mat foreign-procedure: "foreign-procedure: invalid foreign procedure handle foo". foreign.mo:Expected error in mat foreign-procedure: "foreign-procedure: invalid foreign procedure handle foo".
foreign.mo:Expected error in mat foreign-procedure: "foreign-procedure: invalid foreign procedure handle foo". foreign.mo:Expected error in mat foreign-procedure: "foreign-procedure: invalid foreign procedure handle foo".
@ -315,7 +315,7 @@
foreign.mo:Expected error in mat foreign-procedure: "invalid foreign-procedure argument type specifier booleen". foreign.mo:Expected error in mat foreign-procedure: "invalid foreign-procedure argument type specifier booleen".
foreign.mo:Expected error in mat foreign-procedure: "invalid foreign-procedure argument type specifier integer-34". foreign.mo:Expected error in mat foreign-procedure: "invalid foreign-procedure argument type specifier integer-34".
foreign.mo:Expected error in mat foreign-procedure: "invalid foreign-procedure result type specifier chare". foreign.mo:Expected error in mat foreign-procedure: "invalid foreign-procedure result type specifier chare".
--- 9937,9961 ---- --- 9953,9977 ----
foreign.mo:Expected error in mat foreign-procedure: "foreign-procedure: invalid foreign procedure handle foo". foreign.mo:Expected error in mat foreign-procedure: "foreign-procedure: invalid foreign procedure handle foo".
foreign.mo:Expected error in mat foreign-procedure: "foreign-procedure: invalid foreign procedure handle foo". foreign.mo:Expected error in mat foreign-procedure: "foreign-procedure: invalid foreign procedure handle foo".
foreign.mo:Expected error in mat foreign-procedure: "foreign-procedure: invalid foreign procedure handle foo". foreign.mo:Expected error in mat foreign-procedure: "foreign-procedure: invalid foreign procedure handle foo".
@ -342,7 +342,7 @@
foreign.mo:Expected error in mat foreign-procedure: "invalid foreign-procedure argument type specifier integer-34". foreign.mo:Expected error in mat foreign-procedure: "invalid foreign-procedure argument type specifier integer-34".
foreign.mo:Expected error in mat foreign-procedure: "invalid foreign-procedure result type specifier chare". foreign.mo:Expected error in mat foreign-procedure: "invalid foreign-procedure result type specifier chare".
*************** ***************
*** 9968,9999 **** *** 9984,10015 ****
foreign.mo:Expected error in mat foreign-sizeof: "incorrect argument count in call (foreign-sizeof (quote int) (quote int))". foreign.mo:Expected error in mat foreign-sizeof: "incorrect argument count in call (foreign-sizeof (quote int) (quote int))".
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 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-sizeof: "foreign-sizeof: invalid foreign type specifier 1".
@ -375,7 +375,7 @@
foreign.mo:Expected error in mat foreign-strings: "foreign-callable: invalid return value ("ello" 4) from #<procedure>". foreign.mo:Expected error in mat foreign-strings: "foreign-callable: invalid return value ("ello" 4) from #<procedure>".
foreign.mo:Expected error in mat foreign-strings: "foreign-callable: invalid return value ("ello" 4) from #<procedure>". foreign.mo:Expected error in mat foreign-strings: "foreign-callable: invalid return value ("ello" 4) from #<procedure>".
foreign.mo:Expected error in mat foreign-strings: "foreign-callable: invalid return value ("ello" 4) from #<procedure>". foreign.mo:Expected error in mat foreign-strings: "foreign-callable: invalid return value ("ello" 4) from #<procedure>".
--- 9968,9999 ---- --- 9984,10015 ----
foreign.mo:Expected error in mat foreign-sizeof: "incorrect argument count in call (foreign-sizeof (quote int) (quote int))". foreign.mo:Expected error in mat foreign-sizeof: "incorrect argument count in call (foreign-sizeof (quote int) (quote int))".
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 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-sizeof: "foreign-sizeof: invalid foreign type specifier 1".
@ -409,7 +409,7 @@
foreign.mo:Expected error in mat foreign-strings: "foreign-callable: invalid return value ("ello" 4) from #<procedure>". foreign.mo:Expected error in mat foreign-strings: "foreign-callable: invalid return value ("ello" 4) from #<procedure>".
foreign.mo:Expected error in mat foreign-strings: "foreign-callable: invalid return value ("ello" 4) from #<procedure>". foreign.mo:Expected error in mat foreign-strings: "foreign-callable: invalid return value ("ello" 4) from #<procedure>".
*************** ***************
*** 10001,10026 **** *** 10017,10042 ****
foreign.mo:Expected error in mat foreign-strings: "foreign-callable: invalid return value ("ello" 4) from #<procedure>". foreign.mo:Expected error in mat foreign-strings: "foreign-callable: invalid return value ("ello" 4) from #<procedure>".
foreign.mo:Expected error in mat foreign-strings: "foreign-callable: invalid return value ("ello" 4) from #<procedure>". foreign.mo:Expected error in mat foreign-strings: "foreign-callable: invalid return value ("ello" 4) from #<procedure>".
foreign.mo:Expected error in mat foreign-strings: "foreign-callable: invalid return value ("ello" 4) from #<procedure>". foreign.mo:Expected error in mat foreign-strings: "foreign-callable: invalid return value ("ello" 4) from #<procedure>".
@ -436,7 +436,7 @@
foreign.mo:Expected error in mat foreign-fixed-types: "foreign-callable: invalid return value (- x 7) from #<procedure>". foreign.mo:Expected error in mat foreign-fixed-types: "foreign-callable: invalid return value (- x 7) from #<procedure>".
foreign.mo:Expected error in mat foreign-fixed-types: "foreign-callable: invalid return value (- x 7) from #<procedure>". foreign.mo:Expected error in mat foreign-fixed-types: "foreign-callable: invalid return value (- x 7) from #<procedure>".
foreign.mo:Expected error in mat foreign-fixed-types: "foreign-callable: invalid return value (- x 7) from #<procedure>". foreign.mo:Expected error in mat foreign-fixed-types: "foreign-callable: invalid return value (- x 7) from #<procedure>".
--- 10001,10026 ---- --- 10017,10042 ----
foreign.mo:Expected error in mat foreign-strings: "foreign-callable: invalid return value ("ello" 4) from #<procedure>". foreign.mo:Expected error in mat foreign-strings: "foreign-callable: invalid return value ("ello" 4) from #<procedure>".
foreign.mo:Expected error in mat foreign-strings: "foreign-callable: invalid return value ("ello" 4) from #<procedure>". foreign.mo:Expected error in mat foreign-strings: "foreign-callable: invalid return value ("ello" 4) from #<procedure>".
foreign.mo:Expected error in mat foreign-strings: "foreign-callable: invalid return value ("ello" 4) from #<procedure>". foreign.mo:Expected error in mat foreign-strings: "foreign-callable: invalid return value ("ello" 4) from #<procedure>".
@ -464,7 +464,7 @@
foreign.mo:Expected error in mat foreign-fixed-types: "foreign-callable: invalid return value (- x 7) from #<procedure>". foreign.mo:Expected error in mat foreign-fixed-types: "foreign-callable: invalid return value (- x 7) from #<procedure>".
foreign.mo:Expected error in mat foreign-fixed-types: "foreign-callable: invalid return value (- x 7) from #<procedure>". foreign.mo:Expected error in mat foreign-fixed-types: "foreign-callable: invalid return value (- x 7) from #<procedure>".
*************** ***************
*** 10032,10066 **** *** 10048,10082 ****
foreign.mo:Expected error in mat foreign-fixed-types: "foreign-callable: invalid return value (- x 7) from #<procedure>". foreign.mo:Expected error in mat foreign-fixed-types: "foreign-callable: invalid return value (- x 7) from #<procedure>".
foreign.mo:Expected error in mat foreign-fixed-types: "foreign-callable: invalid return value (- x 7) from #<procedure>". foreign.mo:Expected error in mat foreign-fixed-types: "foreign-callable: invalid return value (- x 7) from #<procedure>".
foreign.mo:Expected error in mat foreign-fixed-types: "foreign-callable: invalid return value (- x 7) from #<procedure>". foreign.mo:Expected error in mat foreign-fixed-types: "foreign-callable: invalid return value (- x 7) from #<procedure>".
@ -500,7 +500,7 @@
foreign.mo:Expected error in mat foreign-C-types: "foreign-callable: invalid return value (73 74) from #<procedure>". foreign.mo:Expected error in mat foreign-C-types: "foreign-callable: invalid return value (73 74) from #<procedure>".
foreign.mo:Expected error in mat foreign-C-types: "foreign-callable: invalid return value (73 74) from #<procedure>". foreign.mo:Expected error in mat foreign-C-types: "foreign-callable: invalid return value (73 74) from #<procedure>".
foreign.mo:Expected error in mat foreign-C-types: "foreign-callable: invalid return value (73 74) from #<procedure>". foreign.mo:Expected error in mat foreign-C-types: "foreign-callable: invalid return value (73 74) from #<procedure>".
--- 10032,10066 ---- --- 10048,10082 ----
foreign.mo:Expected error in mat foreign-fixed-types: "foreign-callable: invalid return value (- x 7) from #<procedure>". foreign.mo:Expected error in mat foreign-fixed-types: "foreign-callable: invalid return value (- x 7) from #<procedure>".
foreign.mo:Expected error in mat foreign-fixed-types: "foreign-callable: invalid return value (- x 7) from #<procedure>". foreign.mo:Expected error in mat foreign-fixed-types: "foreign-callable: invalid return value (- x 7) from #<procedure>".
foreign.mo:Expected error in mat foreign-fixed-types: "foreign-callable: invalid return value (- x 7) from #<procedure>". foreign.mo:Expected error in mat foreign-fixed-types: "foreign-callable: invalid return value (- x 7) from #<procedure>".
@ -537,7 +537,7 @@
foreign.mo:Expected error in mat foreign-C-types: "foreign-callable: invalid return value (73 74) from #<procedure>". foreign.mo:Expected error in mat foreign-C-types: "foreign-callable: invalid return value (73 74) from #<procedure>".
foreign.mo:Expected error in mat foreign-C-types: "foreign-callable: invalid return value (73 74) from #<procedure>". foreign.mo:Expected error in mat foreign-C-types: "foreign-callable: invalid return value (73 74) from #<procedure>".
*************** ***************
*** 10667,10676 **** *** 10683,10692 ****
exceptions.mo:Expected error in mat assert: "failed assertion (memq (quote b) (quote (1 2 a 3 4)))". exceptions.mo:Expected error in mat assert: "failed assertion (memq (quote b) (quote (1 2 a 3 4)))".
exceptions.mo:Expected error in mat assert: "failed assertion (q ...)". exceptions.mo:Expected error in mat assert: "failed assertion (q ...)".
exceptions.mo:Expected error in mat assert: "failed assertion (andmap symbol? (syntax (x ...)))". exceptions.mo:Expected error in mat assert: "failed assertion (andmap symbol? (syntax (x ...)))".
@ -548,7 +548,7 @@
oop.mo:Expected error in mat oop: "m1: not applicable to 17". oop.mo:Expected error in mat oop: "m1: not applicable to 17".
oop.mo:Expected error in mat oop: "variable <a>-x1 is not bound". oop.mo:Expected error in mat oop: "variable <a>-x1 is not bound".
oop.mo:Expected error in mat oop: "variable <a>-x1-set! is not bound". oop.mo:Expected error in mat oop: "variable <a>-x1-set! is not bound".
--- 10667,10676 ---- --- 10683,10692 ----
exceptions.mo:Expected error in mat assert: "failed assertion (memq (quote b) (quote (1 2 a 3 4)))". exceptions.mo:Expected error in mat assert: "failed assertion (memq (quote b) (quote (1 2 a 3 4)))".
exceptions.mo:Expected error in mat assert: "failed assertion (q ...)". exceptions.mo:Expected error in mat assert: "failed assertion (q ...)".
exceptions.mo:Expected error in mat assert: "failed assertion (andmap symbol? (syntax (x ...)))". exceptions.mo:Expected error in mat assert: "failed assertion (andmap symbol? (syntax (x ...)))".

View File

@ -1,5 +1,5 @@
*** errors-compile-0-f-t-f 2020-11-19 10:55:55.000000000 -0700 *** errors-compile-0-f-t-f 2020-11-23 05:33:39.000000000 -0700
--- errors-interpret-0-f-t-f 2020-11-19 11:27:36.000000000 -0700 --- errors-interpret-0-f-t-f 2020-11-23 06:01:59.000000000 -0700
*************** ***************
*** 18,25 **** *** 18,25 ****
primvars.mo:Expected error testing (environment (quote (chezscheme)) (quote (chezscheme)) (quote #f)): Exception in environment: invalid library reference #f primvars.mo:Expected error testing (environment (quote (chezscheme)) (quote (chezscheme)) (quote #f)): Exception in environment: invalid library reference #f
@ -504,7 +504,7 @@
record.mo:Expected error in mat r6rs-records-syntactic: "define-record-type: incompatible record type cpoint - different parent". record.mo:Expected error in mat r6rs-records-syntactic: "define-record-type: incompatible record type cpoint - different parent".
record.mo:Expected error in mat r6rs-records-syntactic: "cannot extend define-record-type parent fratrat". record.mo:Expected error in mat r6rs-records-syntactic: "cannot extend define-record-type parent fratrat".
*************** ***************
*** 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-/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". fx.mo:Expected error in mat fx*: "fx*: (a . b) is not a fixnum".
@ -518,7 +518,7 @@
fx.mo:Expected error in mat r6rs:fx*: "fx*: <int> 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*: <-int> 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". 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-/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". fx.mo:Expected error in mat fx*: "fx*: (a . b) is not a fixnum".
@ -533,7 +533,7 @@
fx.mo:Expected error in mat r6rs:fx*: "fx*: <-int> 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". fx.mo:Expected error in mat r6rs:fx*: "fx*: #f is not a fixnum".
*************** ***************
*** 10667,10676 **** *** 10683,10692 ****
exceptions.mo:Expected error in mat assert: "failed assertion (memq (quote b) (quote (1 2 a 3 4)))". exceptions.mo:Expected error in mat assert: "failed assertion (memq (quote b) (quote (1 2 a 3 4)))".
exceptions.mo:Expected error in mat assert: "failed assertion (q ...)". exceptions.mo:Expected error in mat assert: "failed assertion (q ...)".
exceptions.mo:Expected error in mat assert: "failed assertion (andmap symbol? (syntax (x ...)))". exceptions.mo:Expected error in mat assert: "failed assertion (andmap symbol? (syntax (x ...)))".
@ -544,7 +544,7 @@
oop.mo:Expected error in mat oop: "m1: not applicable to 17". oop.mo:Expected error in mat oop: "m1: not applicable to 17".
oop.mo:Expected error in mat oop: "variable <a>-x1 is not bound". oop.mo:Expected error in mat oop: "variable <a>-x1 is not bound".
oop.mo:Expected error in mat oop: "variable <a>-x1-set! is not bound". oop.mo:Expected error in mat oop: "variable <a>-x1-set! is not bound".
--- 10667,10676 ---- --- 10683,10692 ----
exceptions.mo:Expected error in mat assert: "failed assertion (memq (quote b) (quote (1 2 a 3 4)))". exceptions.mo:Expected error in mat assert: "failed assertion (memq (quote b) (quote (1 2 a 3 4)))".
exceptions.mo:Expected error in mat assert: "failed assertion (q ...)". exceptions.mo:Expected error in mat assert: "failed assertion (q ...)".
exceptions.mo:Expected error in mat assert: "failed assertion (andmap symbol? (syntax (x ...)))". exceptions.mo:Expected error in mat assert: "failed assertion (andmap symbol? (syntax (x ...)))".

View File

@ -8244,6 +8244,22 @@ hash.mo:Expected error in mat generic-hashtable: "hashtable-clear!: #<hashtable>
hash.mo:Expected error in mat generic-hashtable: "hashtable-delete!: #<hashtable> is not mutable". hash.mo:Expected error in mat generic-hashtable: "hashtable-delete!: #<hashtable> is not mutable".
hash.mo:Expected error in mat generic-hashtable: "hashtable-update!: #<hashtable> is not mutable". hash.mo:Expected error in mat generic-hashtable: "hashtable-update!: #<hashtable> is not mutable".
hash.mo:Expected error in mat generic-hashtable: "hashtable-update!: #<hashtable> is not mutable". hash.mo:Expected error in mat generic-hashtable: "hashtable-update!: #<hashtable> 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)".
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 (equal-hash 0 0)".
hash.mo:Expected error in mat hash-functions: "incorrect argument count in call (symbol-hash)". hash.mo:Expected error in mat hash-functions: "incorrect argument count in call (symbol-hash)".

View File

@ -357,7 +357,7 @@
;; --------------------------------------------------------------------- ;; ---------------------------------------------------------------------
;; Version and machine types: ;; Version and machine types:
(define-constant scheme-version #x09050333) (define-constant scheme-version #x09050334)
(define-syntax define-machine-types (define-syntax define-machine-types
(lambda (x) (lambda (x)
@ -2152,10 +2152,10 @@
;; a copy of this conversion for rehashing in "segment.h". ;; a copy of this conversion for rehashing in "segment.h".
(let* ([x x-expr] (let* ([x x-expr]
[x1 (constant-case ptr-bits [x1 (constant-case ptr-bits
[(64) (fxxor x (fxand (fxsrl x 32) #xFFFFFFFF))] [(64) (fxxor x (fxand (fxsra x 32) #xFFFFFFFF))]
[else x])] [else x])]
[x2 (fxxor x1 (fxand (fxsrl x1 16) #xFFFF))] [x2 (fxxor x1 (fxand (fxsra x1 16) #xFFFF))]
[x3 (fxxor x2 (fxand (fxsrl x2 8) #xFF))]) [x3 (fxxor x2 (fxand (fxsra x2 8) #xFF))])
x3)])) x3)]))
; keep in sync with make-date ; keep in sync with make-date

View File

@ -36,8 +36,8 @@
(define-record-type gen-ht (define-record-type gen-ht
(parent ht) (parent ht)
(fields (immutable hash) (immutable equiv?)) (fields (immutable hash) (immutable equiv?) (immutable eqht))
(nongenerative #{gen-ht bu811z2onf9o6tfc-7}) (nongenerative #{gen-ht bu811z2onf9o6tfc-9})
(sealed #t)) (sealed #t))
(define-record-type eqv-ht (define-record-type eqv-ht

View File

@ -22,6 +22,11 @@ Documentation notes:
hashtable-entries. hashtable-entries.
- symbols are collectable, so weak hash tables should not be used to create - symbols are collectable, so weak hash tables should not be used to create
permanent associations with symbols as keys permanent associations with symbols as keys
- a weak or ephemeron generic hashtable maps keys to #f using weak
pairs, and then uses a weak or ephemeron eq hashtable to map the key
to its value; use the size of the eq hashtable as the generic hashtable's
size
- an eqv hashtabble pairs an eq hashtable and an generic hashtable
|# |#
#| #|
@ -133,7 +138,12 @@ Documentation notes:
(if (null? b) (if (null? b)
v v
(let ([a (car b)]) (let ([a (car b)])
(if (equiv? (car a) x) (cdr a) (loop (cdr b))))))))) (if (equiv? (car a) x)
(let ([eqht (gen-ht-eqht h)])
(if eqht
(eq-hashtable-ref eqht (car a) v)
(cdr a)))
(loop (cdr b)))))))))
(define $gen-hashtable-ref-cell (define $gen-hashtable-ref-cell
(lambda (h x who) (lambda (h x who)
@ -142,7 +152,12 @@ Documentation notes:
(if (null? b) (if (null? b)
#f #f
(let ([a (car b)]) (let ([a (car b)])
(if (equiv? (car a) x) a (loop (cdr b))))))))) (if (equiv? (car a) x)
(let ([eqht (gen-ht-eqht h)])
(if eqht
(eq-hashtable-ref-cell eqht (car a))
a))
(loop (cdr b)))))))))
(define $gen-hashtable-contains? (define $gen-hashtable-contains?
(lambda (h x who) (lambda (h x who)
@ -155,19 +170,19 @@ Documentation notes:
(module ($gen-hashtable-set! $gen-hashtable-update! $gen-hashtable-cell $gen-hashtable-delete!) (module ($gen-hashtable-set! $gen-hashtable-update! $gen-hashtable-cell $gen-hashtable-delete!)
(define-syntax incr-size! (define-syntax incr-size!
(syntax-rules () (syntax-rules ()
[(_ h vec who) [(_ h eqht vec who)
(let ([size (fx+ (ht-size h) 1)] [n (vector-length vec)]) (let ([size (fx+ (ht-size h) 1)] [n (vector-length vec)])
(ht-size-set! h size) (ht-size-set! h size)
(when (and (fx> size n) (fx< n (fxsrl (most-positive-fixnum) 1))) (when (and (fx> size n) (fx< n (fxsrl (most-positive-fixnum) 1)))
(adjust! h vec (fxsll n 1) who)))])) (adjust! h vec (if eqht (fxmin (fxsll n 1) (vector-length (ht-vec eqht))) (fxsll n 1)) who)))]))
(define-syntax decr-size! (define-syntax decr-size!
(syntax-rules () (syntax-rules ()
[(_ h vec who) [(_ h eqht vec who)
(let ([size (fx- (ht-size h) 1)] [n (vector-length vec)]) (let ([size (fx- (ht-size h) 1)] [n (vector-length vec)])
(ht-size-set! h size) (ht-size-set! h size)
(when (and (fx< size (fxsrl n 2)) (fx> n (ht-minlen h))) (when (and (fx< size (fxsrl n 2)) (fx> n (ht-minlen h)))
(adjust! h vec (fxsrl n 1) who)))])) (adjust! h vec (if eqht (fxmin (fxsrl n 1) (vector-length (ht-vec eqht))) (fxsrl n 1)) who)))]))
(define adjust! (define adjust!
(lambda (h vec1 n2 who) (lambda (h vec1 n2 who)
@ -178,8 +193,11 @@ Documentation notes:
(lambda (b) (lambda (b)
(for-each (for-each
(lambda (a) (lambda (a)
(let ([hc (do-hash hash (car a) mask2 who)]) (let ([k (car a)])
(vector-set! vec2 hc (cons a (vector-ref vec2 hc))))) (if (eq? k #!bwp)
(ht-size-set! h (fx- (ht-size h) 1))
(let ([hc (do-hash hash k mask2 who)])
(vector-set! vec2 hc (cons a (vector-ref vec2 hc)))))))
b)) b))
vec1) vec1)
(ht-vec-set! h vec2)))) (ht-vec-set! h vec2))))
@ -191,11 +209,21 @@ Documentation notes:
(let ([bucket (vector-ref vec idx)]) (let ([bucket (vector-ref vec idx)])
(let loop ([b bucket]) (let loop ([b bucket])
(if (null? b) (if (null? b)
(begin (let ([eqht (gen-ht-eqht h)])
(vector-set! vec idx (cons (cons x v) bucket)) (cond
(incr-size! h vec who)) [eqht
(eq-hashtable-set! eqht x v)
(vector-set! vec idx (cons (weak-cons x '()) bucket))]
[else
(vector-set! vec idx (cons (cons x v) bucket))])
(incr-size! h eqht vec who))
(let ([a (car b)]) (let ([a (car b)])
(if (equiv? (car a) x) (set-cdr! a v) (loop (cdr b))))))))))) (if (equiv? (car a) x)
(let ([eqht (gen-ht-eqht h)])
(if eqht
(eq-hashtable-set! eqht (car a) v)
(set-cdr! a v)))
(loop (cdr b)))))))))))
(define $gen-hashtable-update! (define $gen-hashtable-update!
(lambda (h x p v who) (lambda (h x p v who)
@ -204,12 +232,21 @@ Documentation notes:
(let ([bucket (vector-ref vec idx)]) (let ([bucket (vector-ref vec idx)])
(let loop ([b bucket]) (let loop ([b bucket])
(if (null? b) (if (null? b)
(begin (let ([eqht (gen-ht-eqht h)])
(vector-set! vec idx (cons (cons x (p v)) bucket)) (cond
(incr-size! h vec who)) [eqht
(eq-hashtable-set! eqht x (p v))
(vector-set! vec idx (cons (weak-cons x '()) bucket))]
[else
(vector-set! vec idx (cons (cons x (p v)) bucket))])
(incr-size! h eqht vec who))
(let ([a (car b)]) (let ([a (car b)])
(if (equiv? (car a) x) (if (equiv? (car a) x)
(set-cdr! a (p (cdr a))) (let ([eqht (gen-ht-eqht h)])
(if eqht
(let ([c (eq-hashtable-cell eqht (car a) v)])
(set-cdr! c (p (cdr c))))
(set-cdr! a (p (cdr a)))))
(loop (cdr b))))))))))) (loop (cdr b)))))))))))
(define $gen-hashtable-cell (define $gen-hashtable-cell
@ -219,13 +256,24 @@ Documentation notes:
(let ([bucket (vector-ref vec idx)]) (let ([bucket (vector-ref vec idx)])
(let loop ([b bucket]) (let loop ([b bucket])
(if (null? b) (if (null? b)
(let ([a (cons x v)]) (let* ([eqht (gen-ht-eqht h)]
(vector-set! vec idx (cons a bucket)) [a (cond
(incr-size! h vec who) [eqht
(let ([a (eq-hashtable-cell eqht x v)])
(vector-set! vec idx (cons (weak-cons x '()) bucket))
a)]
[else
(let ([a (cons x v)])
(vector-set! vec idx (cons a bucket))
a)])])
(incr-size! h eqht vec who)
a) a)
(let ([a (car b)]) (let ([a (car b)])
(if (equiv? (car a) x) (if (equiv? (car a) x)
a (let ([eqht (gen-ht-eqht h)])
(if eqht
(eq-hashtable-cell eqht (car a) v)
a))
(loop (cdr b))))))))))) (loop (cdr b)))))))))))
(define $gen-hashtable-delete! (define $gen-hashtable-delete!
@ -236,32 +284,37 @@ Documentation notes:
(unless (null? b) (unless (null? b)
(let ([a (car b)]) (let ([a (car b)])
(if (equiv? (car a) x) (if (equiv? (car a) x)
(begin (let ([eqht (gen-ht-eqht h)])
(when eqht (eq-hashtable-delete! eqht (car a)))
(if p (set-cdr! p (cdr b)) (vector-set! vec idx (cdr b))) (if p (set-cdr! p (cdr b)) (vector-set! vec idx (cdr b)))
(decr-size! h vec who)) (decr-size! h eqht vec who))
(loop (cdr b) b)))))))))) (loop (cdr b) b))))))))))
(module ($gen-hashtable-copy $symbol-hashtable-copy) (module ($gen-hashtable-copy $symbol-hashtable-copy)
(define copy-hashtable-vector (define copy-hashtable-vector
(lambda (h) (lambda (h eq-ht)
(let* ([vec1 (ht-vec h)] (let* ([vec1 (ht-vec h)]
[n (vector-length vec1)] [n (vector-length vec1)]
[vec2 (make-vector n '())]) [vec2 (make-vector n '())])
(do ([i 0 (fx+ i 1)]) (do ([i 0 (fx+ i 1)])
((fx= i n)) ((fx= i n))
(vector-set! vec2 i (vector-set! vec2 i
(map (lambda (a) (cons (car a) (cdr a))) (if eq-ht
(vector-ref vec1 i)))) (map (lambda (a) (weak-cons (car a) '()))
(vector-ref vec1 i))
(map (lambda (a) (cons (car a) (cdr a)))
(vector-ref vec1 i)))))
vec2))) vec2)))
(define $gen-hashtable-copy (define $gen-hashtable-copy
(lambda (h mutable?) (lambda (h mutable?)
(make-gen-ht 'generic mutable? (copy-hashtable-vector h) (ht-minlen h) (ht-size h) (let ([eq-ht (gen-ht-eqht h)])
(gen-ht-hash h) (gen-ht-equiv? h)))) (make-gen-ht 'generic mutable? (copy-hashtable-vector h eq-ht) (ht-minlen h) (ht-size h)
(gen-ht-hash h) (gen-ht-equiv? h) (and eq-ht ($eq-hashtable-copy eq-ht mutable?))))))
(define $symbol-hashtable-copy (define $symbol-hashtable-copy
(lambda (h mutable?) (lambda (h mutable?)
(make-symbol-ht 'symbol mutable? (copy-hashtable-vector h) (ht-minlen h) (ht-size h) (make-symbol-ht 'symbol mutable? (copy-hashtable-vector h #f) (ht-minlen h) (ht-size h)
(symbol-ht-equiv? h))))) (symbol-ht-equiv? h)))))
(define $ht-hashtable-clear! (define $ht-hashtable-clear!
@ -270,6 +323,11 @@ Documentation notes:
(ht-minlen-set! h minlen) (ht-minlen-set! h minlen)
(ht-size-set! h 0))) (ht-size-set! h 0)))
(define $gen-hashtable-clear!
(lambda (h minlen)
(let ([h (gen-ht-eqht h)]) (when h ($eq-hashtable-clear! h minlen)))
($ht-hashtable-clear! h minlen)))
(define $ht-hashtable-keys (define $ht-hashtable-keys
(lambda (h max-sz) (lambda (h max-sz)
(let ([size (fxmin max-sz (ht-size h))]) (let ([size (fxmin max-sz (ht-size h))])
@ -286,6 +344,13 @@ Documentation notes:
(g (cdr b) (fx+ ikey 1)))))))) (g (cdr b) (fx+ ikey 1))))))))
keys)))) keys))))
(define $gen-hashtable-keys
(lambda (h max-sz)
(let ([eqht (gen-ht-eqht h)])
(if eqht
($eq-hashtable-keys eqht max-sz)
($ht-hashtable-keys h max-sz)))))
(define $ht-hashtable-values (define $ht-hashtable-values
(lambda (h max-sz) (lambda (h max-sz)
(let ([size (fxmin max-sz (ht-size h))]) (let ([size (fxmin max-sz (ht-size h))])
@ -302,6 +367,13 @@ Documentation notes:
(g (cdr b) (fx+ ival 1)))))))) (g (cdr b) (fx+ ival 1))))))))
vals)))) vals))))
(define $gen-hashtable-values
(lambda (h max-sz)
(let ([eqht (gen-ht-eqht h)])
(if eqht
($eq-hashtable-values eqht max-sz)
($ht-hashtable-values h max-sz)))))
(define $ht-hashtable-entries (define $ht-hashtable-entries
(lambda (h max-sz) (lambda (h max-sz)
(let ([size (fxmin max-sz (ht-size h))]) (let ([size (fxmin max-sz (ht-size h))])
@ -320,6 +392,13 @@ Documentation notes:
(g (cdr b) (fx+ ikey 1)))))))) (g (cdr b) (fx+ ikey 1))))))))
(values keys vals))))) (values keys vals)))))
(define $gen-hashtable-entries
(lambda (h max-sz)
(let ([eqht (gen-ht-eqht h)])
(if eqht
($eq-hashtable-entries eqht max-sz)
($ht-hashtable-entries h max-sz)))))
(define $ht-hashtable-cells (define $ht-hashtable-cells
(lambda (h max-sz) (lambda (h max-sz)
(let ([sz (fxmin max-sz (ht-size h))]) (let ([sz (fxmin max-sz (ht-size h))])
@ -336,6 +415,13 @@ Documentation notes:
(g (cdr b) (fx+ icell 1)))))))) (g (cdr b) (fx+ icell 1))))))))
cells)))) cells))))
(define $gen-hashtable-cells
(lambda (h max-sz)
(let ([eqht (gen-ht-eqht h)])
(if eqht
($eq-hashtable-cells eqht max-sz)
($ht-hashtable-cells h max-sz)))))
(define eqv-generic? (define eqv-generic?
(lambda (x) (lambda (x)
; all numbers except fixnums must go through generic hashtable ; all numbers except fixnums must go through generic hashtable
@ -408,24 +494,24 @@ Documentation notes:
(define $eqv-hashtable-keys (define $eqv-hashtable-keys
(lambda (h max-sz) (lambda (h max-sz)
(let* ([keys1 ($eq-hashtable-keys (eqv-ht-eqht h) max-sz)] (let* ([keys1 ($eq-hashtable-keys (eqv-ht-eqht h) max-sz)]
[keys2 ($ht-hashtable-keys (eqv-ht-genht h) (fx- max-sz (vector-length keys1)))]) [keys2 ($gen-hashtable-keys (eqv-ht-genht h) (fx- max-sz (vector-length keys1)))])
(vector-append keys1 keys2)))) (vector-append keys1 keys2))))
(define $eqv-hashtable-values (define $eqv-hashtable-values
(lambda (h max-sz) (lambda (h max-sz)
(let* ([vals1 ($eq-hashtable-values (eqv-ht-eqht h) max-sz)] (let* ([vals1 ($eq-hashtable-values (eqv-ht-eqht h) max-sz)]
[vals2 ($ht-hashtable-values (eqv-ht-genht h) (fx- max-sz (vector-length vals1)))]) [vals2 ($gen-hashtable-values (eqv-ht-genht h) (fx- max-sz (vector-length vals1)))])
(vector-append vals1 vals2)))) (vector-append vals1 vals2))))
(define $eqv-hashtable-entries (define $eqv-hashtable-entries
(lambda (h max-sz) (lambda (h max-sz)
(let*-values ([(keys1 vals1) ($eq-hashtable-entries (eqv-ht-eqht h) max-sz)] (let*-values ([(keys1 vals1) ($eq-hashtable-entries (eqv-ht-eqht h) max-sz)]
[(keys2 vals2) ($ht-hashtable-entries (eqv-ht-genht h) (fx- max-sz (vector-length keys1)))]) [(keys2 vals2) ($gen-hashtable-entries (eqv-ht-genht h) (fx- max-sz (vector-length keys1)))])
(values (values
(vector-append keys1 keys2) (vector-append keys1 keys2)
(vector-append vals1 vals2))))) (vector-append vals1 vals2)))))
(define $eqv-hashtable-cells (define $eqv-hashtable-cells
(lambda (h max-sz) (lambda (h max-sz)
(let* ([cells1 ($eq-hashtable-cells (eqv-ht-eqht h) max-sz)] (let* ([cells1 ($eq-hashtable-cells (eqv-ht-eqht h) max-sz)]
[cells2 ($ht-hashtable-cells (eqv-ht-genht h) (fx- max-sz (vector-length cells1)))]) [cells2 ($gen-hashtable-cells (eqv-ht-genht h) (fx- max-sz (vector-length cells1)))])
(vector-append cells1 cells2))))) (vector-append cells1 cells2)))))
(define (fixmix x) (define (fixmix x)
@ -469,6 +555,11 @@ Documentation notes:
(unless (xht? h) ($oops who "~s is not a hashtable" h)) (unless (xht? h) ($oops who "~s is not a hashtable" h))
(case (xht-type h) (case (xht-type h)
[(eqv) (values (vector-length (ht-vec (eqv-ht-eqht h))) (vector-length (ht-vec (eqv-ht-genht h))))] [(eqv) (values (vector-length (ht-vec (eqv-ht-eqht h))) (vector-length (ht-vec (eqv-ht-genht h))))]
[(generic) (let ([eqht (gen-ht-eqht h)]
[len (vector-length (ht-vec h))])
(if eqht
(values len (vector-length (ht-vec eqht)))
len))]
[else (vector-length (ht-vec h))]))) [else (vector-length (ht-vec h))])))
(set-who! $ht-veclen (set-who! $ht-veclen
@ -574,29 +665,45 @@ Documentation notes:
(let () (let ()
(define $make-hashtable (define $make-hashtable
(lambda (minlen hash equiv?) (lambda (minlen hash equiv? subtype)
(if (and (eq? hash symbol-hash) (if (and (eq? hash symbol-hash)
(eq? subtype (constant eq-hashtable-subtype-normal))
(or (eq? equiv? eq?) (or (eq? equiv? eq?)
(eq? equiv? symbol=?) (eq? equiv? symbol=?)
(eq? equiv? eqv?) (eq? equiv? eqv?)
(eq? equiv? equal?))) (eq? equiv? equal?)))
(make-symbol-ht 'symbol #t (make-vector minlen '()) minlen 0 equiv?) (make-symbol-ht 'symbol #t (make-vector minlen '()) minlen 0 equiv?)
(make-gen-ht 'generic #t (make-vector minlen '()) minlen 0 hash equiv?)))) (make-gen-ht 'generic #t (make-vector minlen '()) minlen 0 hash equiv?
(cond
[(eq? subtype (constant eq-hashtable-subtype-normal)) #f]
[else ($make-eq-hashtable minlen subtype)])))))
(define $make-eqv-hashtable (define $make-eqv-hashtable
(lambda (minlen subtype) (lambda (minlen subtype)
(make-eqv-ht 'eqv #t (make-eqv-ht 'eqv #t
($make-eq-hashtable minlen subtype) ($make-eq-hashtable minlen subtype)
($make-hashtable minlen number-hash eqv?)))) ($make-hashtable minlen number-hash eqv? subtype))))
(define $make-gen-hashtable
(case-lambda
[(who hash equiv? subtype)
(unless (procedure? hash) ($oops who "~s is not a procedure" hash))
(unless (procedure? equiv?) ($oops who "~s is not a procedure" equiv?))
($make-hashtable (constant hashtable-default-size) hash equiv? subtype)]
[(who hash equiv? k subtype)
(unless (procedure? hash) ($oops who "~s is not a procedure" hash))
(unless (procedure? equiv?) ($oops who "~s is not a procedure" equiv?))
($make-hashtable (size->minlen who k) hash equiv? subtype)]))
(set-who! make-hashtable (set-who! make-hashtable
(case-lambda (case-lambda
[(hash equiv?) [(hash equiv?) ($make-gen-hashtable who hash equiv? (constant eq-hashtable-subtype-normal))]
(unless (procedure? hash) ($oops who "~s is not a procedure" hash)) [(hash equiv? k) ($make-gen-hashtable who hash equiv? k (constant eq-hashtable-subtype-normal))]))
(unless (procedure? equiv?) ($oops who "~s is not a procedure" equiv?)) (set-who! make-weak-hashtable
($make-hashtable (constant hashtable-default-size) hash equiv?)] (case-lambda
[(hash equiv? k) [(hash equiv?) ($make-gen-hashtable who hash equiv? (constant eq-hashtable-subtype-weak))]
(unless (procedure? hash) ($oops who "~s is not a procedure" hash)) [(hash equiv? k) ($make-gen-hashtable who hash equiv? k (constant eq-hashtable-subtype-weak))]))
(unless (procedure? equiv?) ($oops who "~s is not a procedure" equiv?)) (set-who! make-ephemeron-hashtable
($make-hashtable (size->minlen who k) hash equiv?)])) (case-lambda
[(hash equiv?) ($make-gen-hashtable who hash equiv? (constant eq-hashtable-subtype-ephemeron))]
[(hash equiv? k) ($make-gen-hashtable who hash equiv? k (constant eq-hashtable-subtype-ephemeron))]))
(set-who! make-eqv-hashtable (set-who! make-eqv-hashtable
(case-lambda (case-lambda
[() ($make-eqv-hashtable (constant hashtable-default-size) (constant eq-hashtable-subtype-normal))] [() ($make-eqv-hashtable (constant hashtable-default-size) (constant eq-hashtable-subtype-normal))]
@ -682,6 +789,8 @@ Documentation notes:
(case (xht-type h) (case (xht-type h)
[(eq) (eq? (constant eq-hashtable-subtype-weak) (eq-ht-subtype h))] [(eq) (eq? (constant eq-hashtable-subtype-weak) (eq-ht-subtype h))]
[(eqv) (eq? (constant eq-hashtable-subtype-weak) (eq-ht-subtype (eqv-ht-eqht h)))] [(eqv) (eq? (constant eq-hashtable-subtype-weak) (eq-ht-subtype (eqv-ht-eqht h)))]
[(generic) (let ([eq-ht (gen-ht-eqht h)])
(and eq-ht (eq? (constant eq-hashtable-subtype-weak) (eq-ht-subtype eq-ht))))]
[else #f]))) [else #f])))
(set-who! hashtable-ephemeron? (set-who! hashtable-ephemeron?
@ -690,6 +799,8 @@ Documentation notes:
(case (xht-type h) (case (xht-type h)
[(eq) (eq? (constant eq-hashtable-subtype-ephemeron) (eq-ht-subtype h))] [(eq) (eq? (constant eq-hashtable-subtype-ephemeron) (eq-ht-subtype h))]
[(eqv) (eq? (constant eq-hashtable-subtype-ephemeron) (eq-ht-subtype (eqv-ht-eqht h)))] [(eqv) (eq? (constant eq-hashtable-subtype-ephemeron) (eq-ht-subtype (eqv-ht-eqht h)))]
[(generic) (let ([eq-ht (gen-ht-eqht h)])
(and eq-ht (eq? (constant eq-hashtable-subtype-ephemeron) (eq-ht-subtype eq-ht))))]
[else #f]))) [else #f])))
(set-who! symbol-hashtable-ref (set-who! symbol-hashtable-ref
@ -856,7 +967,8 @@ Documentation notes:
[(eq) ($eq-hashtable-clear! h (ht-minlen h))] [(eq) ($eq-hashtable-clear! h (ht-minlen h))]
[(eqv) [(eqv)
(let ([h (eqv-ht-eqht h)]) ($eq-hashtable-clear! h (ht-minlen h))) (let ([h (eqv-ht-eqht h)]) ($eq-hashtable-clear! h (ht-minlen h)))
(let ([h (eqv-ht-genht h)]) ($ht-hashtable-clear! h (ht-minlen h)))] (let ([h (eqv-ht-genht h)]) ($gen-hashtable-clear! h (ht-minlen h)))]
[(generic) ($gen-hashtable-clear! h (ht-minlen h))]
[else ($ht-hashtable-clear! h (ht-minlen h))])] [else ($ht-hashtable-clear! h (ht-minlen h))])]
[(h k) [(h k)
(unless (xht? h) (unless (xht? h)
@ -868,7 +980,8 @@ Documentation notes:
[(eq) ($eq-hashtable-clear! h minlen)] [(eq) ($eq-hashtable-clear! h minlen)]
[(eqv) [(eqv)
($eq-hashtable-clear! (eqv-ht-eqht h) minlen) ($eq-hashtable-clear! (eqv-ht-eqht h) minlen)
($ht-hashtable-clear! (eqv-ht-genht h) minlen)] ($gen-hashtable-clear! (eqv-ht-genht h) minlen)]
[(generic) ($gen-hashtable-clear! h minlen)]
[else ($ht-hashtable-clear! h minlen)]))]))) [else ($ht-hashtable-clear! h minlen)]))])))
(let () (let ()
@ -879,13 +992,14 @@ Documentation notes:
(define-syntax hashtable-content-dispatch (define-syntax hashtable-content-dispatch
(syntax-rules () (syntax-rules ()
[(_ who $eq-hashtable-content $eqv-hashtable-content $ht-hashtable-content) [(_ who $eq-hashtable-content $eqv-hashtable-content $gen-hashtable-content $ht-hashtable-content)
(let () (let ()
(define (dispatch h max-sz) (define (dispatch h max-sz)
(unless (xht? h) (invalid-table who h)) (unless (xht? h) (invalid-table who h))
(case (xht-type h) (case (xht-type h)
[(eq) ($eq-hashtable-content h max-sz)] [(eq) ($eq-hashtable-content h max-sz)]
[(eqv) ($eqv-hashtable-content h max-sz)] [(eqv) ($eqv-hashtable-content h max-sz)]
[(generic) ($gen-hashtable-content h max-sz)]
[else ($ht-hashtable-content h max-sz)])) [else ($ht-hashtable-content h max-sz)]))
(case-lambda (case-lambda
[(h max-sz) [(h max-sz)
@ -903,6 +1017,7 @@ Documentation notes:
(hashtable-content-dispatch who (hashtable-content-dispatch who
$eq-hashtable-keys $eq-hashtable-keys
$eqv-hashtable-keys $eqv-hashtable-keys
$gen-hashtable-keys
$ht-hashtable-keys)) $ht-hashtable-keys))
(set-who! #(r6rs: hashtable-keys) (set-who! #(r6rs: hashtable-keys)
@ -911,18 +1026,21 @@ Documentation notes:
(case (xht-type h) (case (xht-type h)
[(eq) ($eq-hashtable-keys h (most-positive-fixnum))] [(eq) ($eq-hashtable-keys h (most-positive-fixnum))]
[(eqv) ($eqv-hashtable-keys h (most-positive-fixnum))] [(eqv) ($eqv-hashtable-keys h (most-positive-fixnum))]
[(generic) ($gen-hashtable-keys h (most-positive-fixnum))]
[else ($ht-hashtable-keys h (most-positive-fixnum))]))) [else ($ht-hashtable-keys h (most-positive-fixnum))])))
(set-who! hashtable-values (set-who! hashtable-values
(hashtable-content-dispatch who (hashtable-content-dispatch who
$eq-hashtable-values $eq-hashtable-values
$eqv-hashtable-values $eqv-hashtable-values
$gen-hashtable-values
$ht-hashtable-values)) $ht-hashtable-values))
(set-who! hashtable-entries (set-who! hashtable-entries
(hashtable-content-dispatch who (hashtable-content-dispatch who
$eq-hashtable-entries $eq-hashtable-entries
$eqv-hashtable-entries $eqv-hashtable-entries
$gen-hashtable-entries
$ht-hashtable-entries)) $ht-hashtable-entries))
(set-who! #(r6rs: hashtable-entries) (set-who! #(r6rs: hashtable-entries)
@ -931,12 +1049,14 @@ Documentation notes:
(case (xht-type h) (case (xht-type h)
[(eq) ($eq-hashtable-entries h (most-positive-fixnum))] [(eq) ($eq-hashtable-entries h (most-positive-fixnum))]
[(eqv) ($eqv-hashtable-entries h (most-positive-fixnum))] [(eqv) ($eqv-hashtable-entries h (most-positive-fixnum))]
[(generic) ($gen-hashtable-entries h (most-positive-fixnum))]
[else ($ht-hashtable-entries h (most-positive-fixnum))]))) [else ($ht-hashtable-entries h (most-positive-fixnum))])))
(set-who! hashtable-cells (set-who! hashtable-cells
(hashtable-content-dispatch who (hashtable-content-dispatch who
$eq-hashtable-cells $eq-hashtable-cells
$eqv-hashtable-cells $eqv-hashtable-cells
$gen-hashtable-cells
$ht-hashtable-cells))) $ht-hashtable-cells)))
(set-who! hashtable-cells (set-who! hashtable-cells
@ -950,16 +1070,23 @@ Documentation notes:
(case (xht-type h) (case (xht-type h)
[(eq) ($eq-hashtable-cells h max-sz)] [(eq) ($eq-hashtable-cells h max-sz)]
[(eqv) ($eqv-hashtable-cells h max-sz)] [(eqv) ($eqv-hashtable-cells h max-sz)]
[(generic) ($gen-hashtable-cells h max-sz)]
[else ($ht-hashtable-cells h max-sz)]))] [else ($ht-hashtable-cells h max-sz)]))]
[(h) (hashtable-cells h (hashtable-size h))])) [(h) (hashtable-cells h (hashtable-size h))]))
(set! hashtable-size (set! hashtable-size
(lambda (h) (let ([$gen-ht-size (lambda (h)
(unless (xht? h) ($oops 'hashtable-size "~s is not a hashtable" h)) (let ([eqht (gen-ht-eqht h)])
(if (eq? (xht-type h) 'eqv) (if eqht
(fx+ (ht-size (eqv-ht-eqht h)) (ht-size eqht)
(ht-size (eqv-ht-genht h))) (ht-size h))))])
(ht-size h)))) (lambda (h)
(unless (xht? h) ($oops 'hashtable-size "~s is not a hashtable" h))
(case (xht-type h)
[(eqv) (fx+ (ht-size (eqv-ht-eqht h))
($gen-ht-size (eqv-ht-genht h)))]
[(generic) ($gen-ht-size h)]
[else (ht-size h)]))))
(set! hashtable-mutable? (set! hashtable-mutable?
(lambda (h) (lambda (h)

View File

@ -1487,6 +1487,7 @@
(make-source-table [sig [() -> (source-table)]] [flags unrestricted alloc]) (make-source-table [sig [() -> (source-table)]] [flags unrestricted alloc])
(make-ephemeron-eq-hashtable [sig [() (uint) -> (eq-hashtable)]] [flags alloc]) (make-ephemeron-eq-hashtable [sig [() (uint) -> (eq-hashtable)]] [flags alloc])
(make-ephemeron-eqv-hashtable [sig [() (uint) -> (hashtable)]] [flags alloc]) (make-ephemeron-eqv-hashtable [sig [() (uint) -> (hashtable)]] [flags alloc])
(make-ephemeron-hashtable [sig [(procedure procedure) (procedure procedure uint) -> (hashtable)]] [flags alloc])
(make-engine [sig [(procedure) -> (engine)]] [flags pure alloc]) (make-engine [sig [(procedure) -> (engine)]] [flags pure alloc])
(make-format-condition [sig [() -> (condition)]] [flags pure unrestricted mifoldable discard]) (make-format-condition [sig [() -> (condition)]] [flags pure unrestricted mifoldable discard])
(make-flvector [sig [(length) (length flonum) -> (flvector)]] [flags alloc]) (make-flvector [sig [(length) (length flonum) -> (flvector)]] [flags alloc])
@ -1513,6 +1514,7 @@
(make-thread-parameter [feature pthreads] [sig [(ptr) (ptr procedure) -> (thread-parameter)]] [flags true cp02 cp03]) (make-thread-parameter [feature pthreads] [sig [(ptr) (ptr procedure) -> (thread-parameter)]] [flags true cp02 cp03])
(make-weak-eq-hashtable [sig [() (uint) -> (eq-hashtable)]] [flags alloc]) (make-weak-eq-hashtable [sig [() (uint) -> (eq-hashtable)]] [flags alloc])
(make-weak-eqv-hashtable [sig [() (uint) -> (hashtable)]] [flags alloc]) (make-weak-eqv-hashtable [sig [() (uint) -> (hashtable)]] [flags alloc])
(make-weak-hashtable [sig [(procedure procedure) (procedure procedure uint) -> (hashtable)]] [flags alloc])
(make-wrapper-procedure [sig [(procedure sint ptr) -> (procedure)]] [flags pure true mifoldable discard]) (make-wrapper-procedure [sig [(procedure sint ptr) -> (procedure)]] [flags pure true mifoldable discard])
(mark-port-closed! [sig [(port) -> (void)]] [flags true]) (mark-port-closed! [sig [(port) -> (void)]] [flags true])
(maximum-memory-bytes [sig [() -> (uint)]] [flags alloc]) (maximum-memory-bytes [sig [() -> (uint)]] [flags alloc])

View File

@ -2,7 +2,7 @@
;; Check to make we're using a build of Chez Scheme ;; Check to make we're using a build of Chez Scheme
;; that has all the features we need. ;; that has all the features we need.
(define-values (need-maj need-min need-sub need-dev) (define-values (need-maj need-min need-sub need-dev)
(values 9 5 3 51)) (values 9 5 3 52))
(unless (guard (x [else #f]) (eval 'scheme-fork-version-number)) (unless (guard (x [else #f]) (eval 'scheme-fork-version-number))
(error 'compile-file (error 'compile-file

View File

@ -1,22 +1,21 @@
(define-thread-local datums (make-weak-hash)) (define-thread-local datums (make-weak-hashtable equal-hash-code equal?))
(define intern-regexp? #f) (define intern-regexp? #f)
(define (set-intern-regexp?! p) (set! intern-regexp? p)) (define (set-intern-regexp?! p) (set! intern-regexp? p))
(define (datum-intern-literal v) (define (datum-intern-literal v)
(when (current-future) (block-future)) (when (current-future) (block-future))
(cond (let ([intern (lambda (v)
[(or (number? v) (with-interrupts-disabled*
(string? v) (car (hashtable-cell datums v #f))))])
(char? v) (cond
(bytes? v) [(or (and (number? v)
(intern-regexp? v)) (not (fixnum? v)))
(with-interrupts-disabled* (immutable-string? v)
(or (weak-hash-ref-key datums v #f) (immutable-bytevector? v)
(let ([v (cond (intern-regexp? v))
[(string? v) (string->immutable-string v)] (intern v)]
[(bytes? v) (bytes->immutable-bytes v)] [(string? v) (intern (string->immutable-string v))]
[else v])]) [(bytes? v) (intern (bytes->immutable-bytes v))]
(hash-set! datums v #t) [else v])))
v)))]
[else v]))

View File

@ -1638,13 +1638,13 @@
ids) ids)
'())))]) '())))])
(let* ([wb (with-interrupts-disabled* (let* ([wb (with-interrupts-disabled*
(weak-hash-ref ffi-expr->code expr #f))] (hash-ref ffi-expr->code expr #f))]
[code (if wb (car wb) #!bwp)]) [code (if wb (car wb) #!bwp)])
(if (eq? code #!bwp) (if (eq? code #!bwp)
(let ([code (eval/foreign expr (if call? 'comp-ffi-call 'comp-ffi-back))]) (let ([code (eval/foreign expr (if call? 'comp-ffi-call 'comp-ffi-back))])
(hashtable-set! ffi-code->expr (car code) expr) (hashtable-set! ffi-code->expr (car code) expr)
(with-interrupts-disabled* (with-interrupts-disabled*
(weak-hash-set! ffi-expr->code expr (weak-cons code #f))) (hash-set! ffi-expr->code expr (weak-cons code #f)))
code) code)
code)))] code)))]
[gen-proc (car gen-proc+ret-maker+arg-makers)] [gen-proc (car gen-proc+ret-maker+arg-makers)]

View File

@ -1,7 +1,7 @@
;; Mutable hash table are safe for engine-based concurrency, but they ;; Mutable hash table are safe for engine-based concurrency, but they
;; are not safe for concurrent access across Scheme threads. ;; are not safe for concurrent access across Scheme threads.
;; Mutable and weak-equal hash tables need a lock ;; Mutable hash tables need a lock
;; and an iteration vector ;; and an iteration vector
(define-record locked-iterable-hash (lock (define-record locked-iterable-hash (lock
cells ; vector of cells for iteration cells ; vector of cells for iteration
@ -20,7 +20,7 @@
(define (mutable-hash-lock ht) (locked-iterable-hash-lock ht)) (define (mutable-hash-lock ht) (locked-iterable-hash-lock ht))
(define (mutable-hash-cells ht) (locked-iterable-hash-cells ht)) (define (mutable-hash-cells ht) (locked-iterable-hash-cells ht))
(define (authentic-hash? v) (or (intmap? v) (mutable-hash? v) (weak-equal-hash? v))) (define (authentic-hash? v) (or (intmap? v) (mutable-hash? v)))
(define (hash? v) (or (authentic-hash? v) (define (hash? v) (or (authentic-hash? v)
(and (impersonator? v) (and (impersonator? v)
(authentic-hash? (impersonator-val v))))) (authentic-hash? (impersonator-val v)))))
@ -30,6 +30,11 @@
[() (create-mutable-hash (make-hashtable key-equal-hash-code key-equal?) 'equal?)] [() (create-mutable-hash (make-hashtable key-equal-hash-code key-equal?) 'equal?)]
[(alist) (fill-hash! 'make-hash (make-hash) alist)])) [(alist) (fill-hash! 'make-hash (make-hash) alist)]))
(define make-weak-hash
(case-lambda
[() (create-mutable-hash (make-weak-hashtable key-equal-hash-code key-equal?) 'equal?)]
[(alist) (fill-hash! 'make-weak-hash (make-weak-hash) alist)]))
(define make-hasheq (define make-hasheq
(case-lambda (case-lambda
[() (create-eq-mutable-hash (make-eq-hashtable))] [() (create-eq-mutable-hash (make-eq-hashtable))]
@ -105,11 +110,9 @@
[(and (current-future) (eq-mutable-hash? ht)) [(and (current-future) (eq-mutable-hash? ht))
(future-sync 'hash-set! (lambda () (mutable-hash-set! ht k v)))] (future-sync 'hash-set! (lambda () (mutable-hash-set! ht k v)))]
[else (mutable-hash-set! ht k v)])] [else (mutable-hash-set! ht k v)])]
[(weak-equal-hash? ht) (weak-hash-set! ht k v)]
[(and (impersonator? ht) [(and (impersonator? ht)
(let ([ht (impersonator-val ht)]) (let ([ht (impersonator-val ht)])
(or (mutable-hash? ht) (mutable-hash? ht)))
(weak-equal-hash? ht))))
(impersonate-hash-set! ht k v)] (impersonate-hash-set! ht k v)]
[else (raise-argument-error 'hash-set! "(and/c hash? (not/c immutable?))" ht)])) [else (raise-argument-error 'hash-set! "(and/c hash? (not/c immutable?))" ht)]))
@ -126,11 +129,9 @@
[(and (current-future) (eq-mutable-hash? ht)) [(and (current-future) (eq-mutable-hash? ht))
(future-sync 'hash-remove! (lambda () (mutable-hash-remove! ht k)))] (future-sync 'hash-remove! (lambda () (mutable-hash-remove! ht k)))]
[else (mutable-hash-remove! ht k)])] [else (mutable-hash-remove! ht k)])]
[(weak-equal-hash? ht) (weak-hash-remove! ht k)]
[(and (impersonator? ht) [(and (impersonator? ht)
(let ([ht (impersonator-val ht)]) (let ([ht (impersonator-val ht)])
(or (mutable-hash? ht) (mutable-hash? ht)))
(weak-equal-hash? ht))))
(impersonate-hash-remove! ht k)] (impersonate-hash-remove! ht k)]
[else (raise-argument-error 'hash-remove! "(and/c hash? (not/c immutable?))" ht)])) [else (raise-argument-error 'hash-remove! "(and/c hash? (not/c immutable?))" ht)]))
@ -155,11 +156,9 @@
(cond (cond
[(current-future) (future-sync 'hash-clear! (lambda () (mutable-hash-clear! ht)))] [(current-future) (future-sync 'hash-clear! (lambda () (mutable-hash-clear! ht)))]
[else (mutable-hash-clear! ht)])] [else (mutable-hash-clear! ht)])]
[(weak-equal-hash? ht) (weak-hash-clear! ht)]
[(and (impersonator? ht) [(and (impersonator? ht)
(let ([ht (impersonator-val ht)]) (let ([ht (impersonator-val ht)])
(or (mutable-hash? ht) (mutable-hash? ht)))
(weak-equal-hash? ht))))
(unless (impersonate-hash-clear ht #t) (unless (impersonate-hash-clear ht #t)
;; fall back to iterated remove ;; fall back to iterated remove
(let loop ([i (hash-iterate-first ht)]) (let loop ([i (hash-iterate-first ht)])
@ -183,7 +182,6 @@
[(and (current-future) (eq-mutable-hash? ht)) [(and (current-future) (eq-mutable-hash? ht))
(future-sync 'hash-copy (lambda () (mutable-hash-copy ht)))] (future-sync 'hash-copy (lambda () (mutable-hash-copy ht)))]
[else (mutable-hash-copy ht)])] [else (mutable-hash-copy ht)])]
[(weak-equal-hash? ht) (weak-hash-copy ht)]
[(intmap? ht) [(intmap? ht)
(let ([new-ht (cond (let ([new-ht (cond
[(intmap-eq? ht) (make-hasheq)] [(intmap-eq? ht) (make-hasheq)]
@ -255,7 +253,6 @@
[(mutable-hash? ht) (eq-mutable-hash? ht)] [(mutable-hash? ht) (eq-mutable-hash? ht)]
[(intmap? ht) [(intmap? ht)
(intmap-eq? ht)] (intmap-eq? ht)]
[(weak-equal-hash? ht) #f]
[(and (impersonator? ht) [(and (impersonator? ht)
(authentic-hash? (impersonator-val ht))) (authentic-hash? (impersonator-val ht)))
(hash-eq? (impersonator-val ht))] (hash-eq? (impersonator-val ht))]
@ -267,7 +264,6 @@
(eq? (hashtable-equivalence-function (mutable-hash-ht ht)) eqv?)] (eq? (hashtable-equivalence-function (mutable-hash-ht ht)) eqv?)]
[(intmap? ht) [(intmap? ht)
(intmap-eqv? ht)] (intmap-eqv? ht)]
[(weak-equal-hash? ht) #f]
[(and (impersonator? ht) [(and (impersonator? ht)
(authentic-hash? (impersonator-val ht))) (authentic-hash? (impersonator-val ht)))
(hash-eqv? (impersonator-val ht))] (hash-eqv? (impersonator-val ht))]
@ -279,7 +275,6 @@
(eq? (hashtable-equivalence-function (mutable-hash-ht ht)) key-equal?)] (eq? (hashtable-equivalence-function (mutable-hash-ht ht)) key-equal?)]
[(intmap? ht) [(intmap? ht)
(intmap-equal? ht)] (intmap-equal? ht)]
[(weak-equal-hash? ht) #t]
[(and (impersonator? ht) [(and (impersonator? ht)
(authentic-hash? (impersonator-val ht))) (authentic-hash? (impersonator-val ht)))
(hash-equal? (impersonator-val ht))] (hash-equal? (impersonator-val ht))]
@ -290,7 +285,6 @@
[(mutable-hash? ht) [(mutable-hash? ht)
(hashtable-weak? (mutable-hash-ht ht))] (hashtable-weak? (mutable-hash-ht ht))]
[(intmap? ht) #f] [(intmap? ht) #f]
[(weak-equal-hash? ht) #t]
[(and (impersonator? ht) [(and (impersonator? ht)
(authentic-hash? (impersonator-val ht))) (authentic-hash? (impersonator-val ht)))
(hash-weak? (impersonator-val ht))] (hash-weak? (impersonator-val ht))]
@ -329,8 +323,6 @@
v)])] v)])]
[(intmap? ht) [(intmap? ht)
(intmap-ref ht k none)] (intmap-ref ht k none)]
[(weak-equal-hash? ht)
(weak-hash-ref ht k none)]
[(and (impersonator? ht) [(and (impersonator? ht)
(authentic-hash? (impersonator-val ht))) (authentic-hash? (impersonator-val ht)))
(impersonate-hash-ref ht k)] (impersonate-hash-ref ht k)]
@ -363,8 +355,6 @@
(mutable-hash-ref-key/none ht k)])] (mutable-hash-ref-key/none ht k)])]
[(intmap? ht) [(intmap? ht)
(intmap-ref-key ht k none)] (intmap-ref-key ht k none)]
[(weak-equal-hash? ht)
(weak-hash-ref-key ht k none)]
[(and (impersonator? ht) [(and (impersonator? ht)
(authentic-hash? (impersonator-val ht))) (authentic-hash? (impersonator-val ht)))
(impersonate-hash-ref-key ht k)] (impersonate-hash-ref-key ht k)]
@ -406,7 +396,7 @@
[(mutable-hash? ht) [(mutable-hash? ht)
(mutable-hash-map ht proc #f)] (mutable-hash-map ht proc #f)]
[else [else
;; mutable, impersonated, and weak-equal: ;; mutable and impersonated:
(let loop ([i (hash-iterate-first ht)]) (let loop ([i (hash-iterate-first ht)])
(when i (when i
(let-values ([(key val) (hash-iterate-key+value ht i none2)]) (let-values ([(key val) (hash-iterate-key+value ht i none2)])
@ -428,7 +418,7 @@
[(mutable-hash? ht) [(mutable-hash? ht)
(mutable-hash-map ht proc #t)] (mutable-hash-map ht proc #t)]
[else [else
;; mutable, impersonated, and weak-equal: ;; mutable and impersonated:
(let loop ([i (hash-iterate-first ht)]) (let loop ([i (hash-iterate-first ht)])
(if (not i) (if (not i)
'() '()
@ -526,7 +516,6 @@
[else [else
(hashtable-size (mutable-hash-ht ht))])] (hashtable-size (mutable-hash-ht ht))])]
[(intmap? ht) (intmap-count ht)] [(intmap? ht) (intmap-count ht)]
[(weak-equal-hash? ht) (weak-hash-count ht)]
[(and (impersonator? ht) [(and (impersonator? ht)
(authentic-hash? (impersonator-val ht))) (authentic-hash? (impersonator-val ht)))
(hash-count (impersonator-val ht))] (hash-count (impersonator-val ht))]
@ -662,9 +651,7 @@
vec))]))) vec))])))
(define (get-locked-iterable-hash-cells ht n) (define (get-locked-iterable-hash-cells ht n)
(cond (hashtable-cells (mutable-hash-ht ht) n))
[(mutable-hash? ht) (hashtable-cells (mutable-hash-ht ht) n)]
[else (weak-equal-hash-cells ht n)]))
;; Separate calls to `hashtable-cells` may return the ;; Separate calls to `hashtable-cells` may return the
;; cells in a different order, so we have to merge the ;; cells in a different order, so we have to merge the
@ -898,211 +885,6 @@
(define unsafe-weak-hash-iterate-key+value hash-iterate-key+value) (define unsafe-weak-hash-iterate-key+value hash-iterate-key+value)
(define unsafe-weak-hash-iterate-pair hash-iterate-pair) (define unsafe-weak-hash-iterate-pair hash-iterate-pair)
;; ----------------------------------------
;; Chez Scheme doesn't provide weak hash table with `equal?` comparisons,
;; so build our own
(define-record weak-equal-hash locked-iterable-hash
(keys-ht ; integer[equal hash code] -> weak list of keys
vals-ht ; weak, eq?-based hash table: key -> value
count ; number of items in the table (= sum of list lengths)
prune-at)) ; count at which we should try to prune empty weak boxes
(define (weak-equal-hash-lock t) (locked-iterable-hash-lock t))
(define (make-weak-hash-with-lock lock)
(make-weak-equal-hash lock #f #f (hasheqv) (make-weak-eq-hashtable) 0 128))
(define make-weak-hash
(case-lambda
[() (make-weak-hash-with-lock (make-lock 'equal?))]
[(alist) (fill-hash! 'make-weak-hash (make-weak-hash) alist)]))
(define (weak-hash-copy ht)
(lock-acquire (weak-equal-hash-lock ht))
(let ([new-ht (make-weak-equal-hash (weak-equal-hash-lock ht)
#f
#t
(weak-equal-hash-keys-ht ht)
(hashtable-copy (weak-equal-hash-vals-ht ht) #t)
(weak-equal-hash-count ht)
(weak-equal-hash-prune-at ht))])
(lock-release (weak-equal-hash-lock ht))
new-ht))
(define weak-hash-ref
(case-lambda
[(t key fail code key-equal?)
(lock-acquire (weak-equal-hash-lock t))
(let ([keys (intmap-ref (weak-equal-hash-keys-ht t) code '())])
(let loop ([keys keys])
(cond
[(null? keys)
;; Not in the table:
(lock-release (weak-equal-hash-lock t))
fail]
[(key-equal? (car keys) key)
(let* ([k (car keys)]
[v (hashtable-ref (weak-equal-hash-vals-ht t) (car keys) none)])
(lock-release (weak-equal-hash-lock t))
v)]
[else (loop (cdr keys))])))]
[(t key fail)
(weak-hash-ref t key fail (key-equal-hash-code key) key-equal?)]))
;; Only used in atomic mode:
(define (weak-hash-ref-key ht key default)
(let* ([code (key-equal-hash-code key)]
[keys (intmap-ref (weak-equal-hash-keys-ht ht) code '())])
(let loop ([keys keys])
(cond
[(null? keys) default]
[(key-equal? (car keys) key) (car keys)]
[else (loop (cdr keys))]))))
(define weak-hash-set!
(case-lambda
[(t k v code key-equal?)
(lock-acquire (weak-equal-hash-lock t))
(set-locked-iterable-hash-retry?! t #t)
(let ([keys (intmap-ref (weak-equal-hash-keys-ht t) code '())])
(let loop ([keys keys])
(cond
[(null? keys)
;; Not in the table:
(when (= (weak-equal-hash-count t) (weak-equal-hash-prune-at t))
(prune-table! t))
(let* ([ht (weak-equal-hash-keys-ht t)])
(set-weak-equal-hash-count! t
(add1 (weak-equal-hash-count t)))
(set-weak-equal-hash-keys-ht! t
(intmap-set ht code
(weak/fl-cons k
(intmap-ref ht code '()))))
(hashtable-set! (weak-equal-hash-vals-ht t) k v))
(lock-release (weak-equal-hash-lock t))]
[(key-equal? (car keys) k)
(let ([k (car keys)])
(hashtable-set! (weak-equal-hash-vals-ht t) k v))
(lock-release (weak-equal-hash-lock t))]
[else (loop (cdr keys))])))]
[(t k v)
(weak-hash-set! t k v (key-equal-hash-code k) key-equal?)]))
(define (weak-hash-remove! t k)
(let ([code (key-equal-hash-code k)])
(lock-acquire (weak-equal-hash-lock t))
(let* ([keys (intmap-ref (weak-equal-hash-keys-ht t) code '())]
[new-keys
(let loop ([keys keys])
(cond
[(null? keys)
;; Not in the table
#f]
[(let ([a (car keys)])
(and (key-equal? a k)
a))
=> (lambda (a)
(let ([ht (weak-equal-hash-vals-ht t)])
(cond
[(locked-iterable-hash-cells t)
;; Clear cell, because it may be in `(locked-iterable-hash-cells ht)`
(let ([cell (hashtable-ref-cell ht a)])
(hashtable-delete! ht a)
(set-car! cell #!bwp)
(set-cdr! cell #!bwp))]
[else
(hashtable-delete! ht a)]))
(cdr keys))]
[else
(let ([new-keys (loop (cdr keys))])
(and new-keys
(let ([a (car keys)])
(if (bwp-object? a)
new-keys
(weak/fl-cons a new-keys)))))]))])
(when new-keys
(set-weak-equal-hash-keys-ht! t
(if (null? new-keys)
(intmap-remove (weak-equal-hash-keys-ht t) code)
(intmap-set (weak-equal-hash-keys-ht t) code new-keys))))
(set-locked-iterable-hash-retry?! t #t)
(lock-release (weak-equal-hash-lock t)))))
(define (weak-hash-clear! t)
(lock-acquire (weak-equal-hash-lock t))
(set-weak-equal-hash-keys-ht! t (hasheqv))
(hashtable-clear! (weak-equal-hash-vals-ht t))
(set-weak-equal-hash-count! t 0)
(set-weak-equal-hash-prune-at! t 128)
(set-locked-iterable-hash-cells! t #f)
(lock-release (weak-equal-hash-lock t)))
(define (weak-hash-count t)
(hashtable-size (weak-equal-hash-vals-ht t)))
(define (weak-equal-hash-cells ht len)
(let ([vec (#%make-vector len #f)]
[pos (box 0)])
(call/cc
(lambda (esc)
(intmap-for-each
(weak-equal-hash-keys-ht ht)
(lambda (k l)
(let loop ([l l])
(cond
[(null? l) (void)]
[else
(let ([key (car l)])
(cond
[(eq? #!bwp key) (loop (cdr l))]
[else
(#%vector-set! vec (unbox pos) (hashtable-ref-cell (weak-equal-hash-vals-ht ht) key))
(set-box! pos (add1 (unbox pos)))
(if (= (unbox pos) len)
;; That's enough keys
(esc (void))
(loop (cdr l)))]))]))))))
;; Resize `vec` if we got fewer than `len` keys
(cond
[(< (unbox pos) len)
(let* ([len (unbox pos)]
[compact-vec (#%make-vector len)])
(let loop ([i 0])
(unless (fx= i len)
(#%vector-set! compact-vec i (#%vector-ref vec i))
(loop (fx+ i 1))))
compact-vec)]
[else vec])))
;; Remove empty weak boxes from a table. Count the number
;; of remaining entries, and remember to prune again when
;; the number of entries doubles (up to at least reaches 128)
(define (prune-table! t)
(let ([ht (weak-equal-hash-keys-ht t)])
(let-values ([(new-ht count)
(let loop ([new-ht empty-hasheqv]
[i (intmap-iterate-first ht)]
[count 0])
(cond
[(not i) (values new-ht count)]
[else
(let-values ([(key l) (intmap-iterate-key+value ht i #f)])
(let ([l (let loop ([l l])
(cond
[(null? l) l]
[(bwp-object? (car l)) (loop (cdr l))]
[else (weak/fl-cons (car l) (loop (cdr l)))]))])
(loop (if (null? l)
new-ht
(intmap-set new-ht key l))
(intmap-iterate-next ht i)
(+ count (length l)))))]))])
(set-weak-equal-hash-keys-ht! t new-ht)
(set-weak-equal-hash-count! t count)
(set-weak-equal-hash-prune-at! t (max 128 (* 2 count))))))
;; ---------------------------------------- ;; ----------------------------------------
;; When `eq?`ness of flonums is not preserved by ;; When `eq?`ness of flonums is not preserved by
;; the GC, then we need special handling for flonums. ;; the GC, then we need special handling for flonums.
@ -1118,10 +900,6 @@
hash=?) hash=?)
(record-type-hash-procedure (record-type-descriptor mutable-hash) (record-type-hash-procedure (record-type-descriptor mutable-hash)
hash-hash-code) hash-hash-code)
(record-type-equal-procedure (record-type-descriptor weak-equal-hash)
hash=?)
(record-type-hash-procedure (record-type-descriptor weak-equal-hash)
hash-hash-code)
(record-type-hash-procedure (record-type-descriptor hash-impersonator) (record-type-hash-procedure (record-type-descriptor hash-impersonator)
hash-hash-code) hash-hash-code)
@ -1140,7 +918,7 @@
(define/who (impersonate-hash ht ref set remove key . args) (define/who (impersonate-hash ht ref set remove key . args)
(check who (check who
(lambda (p) (let ([p (strip-impersonator p)]) (lambda (p) (let ([p (strip-impersonator p)])
(or (mutable-hash? p) (weak-equal-hash? p)))) (mutable-hash? p)))
:contract "(and/c hash? (not/c immutable?))" :contract "(and/c hash? (not/c immutable?))"
ht) ht)
(do-impersonate-hash who ht ref set remove key args (do-impersonate-hash who ht ref set remove key args

View File

@ -639,10 +639,7 @@
;; Call with lock: ;; Call with lock:
(define (prefab-ref prefab-key+count code) (define (prefab-ref prefab-key+count code)
(and prefabs (and prefabs
(let ([e (weak-hash-ref prefabs prefab-key+count #f code equal?)]) (hashtable-ref prefabs (cons code prefab-key+count) #f)))
(and e
(not (eq? (car e) #!bwp))
(cdr e)))))
(define (prefab-key+count->rtd prefab-key+count) (define (prefab-key+count->rtd prefab-key+count)
(let ([code (equal-hash-code prefab-key+count)]) (let ([code (equal-hash-code prefab-key+count)])
@ -677,15 +674,17 @@
;; rtd was created concurrently ;; rtd was created concurrently
=> (lambda (rtd) rtd)] => (lambda (rtd) rtd)]
[else [else
(putprop uid 'prefab-key+count prefab-key+count) (let ([pr (cons code prefab-key+count)])
(unless prefabs (set! prefabs (make-weak-hash-with-lock #f))) (putprop uid 'prefab-key+count prefab-key+count)
(weak-hash-set! prefabs prefab-key+count (ephemeron-cons prefab-key+count rtd) code equal?) (putprop uid 'prefab-pr pr) ; retain
(unless parent-rtd (unless prefabs (set! prefabs (make-ephemeron-hashtable car equal?)))
(record-type-equal-procedure rtd default-struct-equal?) (hashtable-set! prefabs pr rtd)
(record-type-hash-procedure rtd default-struct-hash)) (unless parent-rtd
(register-mutables! mutables rtd parent-rtd) (record-type-equal-procedure rtd default-struct-equal?)
(inspector-set! rtd 'prefab) (record-type-hash-procedure rtd default-struct-hash))
rtd])))]))) (register-mutables! mutables rtd parent-rtd)
(inspector-set! rtd 'prefab)
rtd)])))])))
(define (register-mutables! mutables rtd parent-rtd) (define (register-mutables! mutables rtd parent-rtd)
(unless (and (equal? '#() mutables) (unless (and (equal? '#() mutables)

View File

@ -16,7 +16,7 @@
#define MZSCHEME_VERSION_X 7 #define MZSCHEME_VERSION_X 7
#define MZSCHEME_VERSION_Y 9 #define MZSCHEME_VERSION_Y 9
#define MZSCHEME_VERSION_Z 0 #define MZSCHEME_VERSION_Z 0
#define MZSCHEME_VERSION_W 8 #define MZSCHEME_VERSION_W 9
/* A level of indirection makes `#` work as needed: */ /* A level of indirection makes `#` work as needed: */
#define AS_a_STR_HELPER(x) #x #define AS_a_STR_HELPER(x) #x