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:
parent
60e9245390
commit
c52113397c
|
@ -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
|
||||||
|
|
12
Makefile
12
Makefile
|
@ -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)"
|
||||||
|
|
|
@ -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]))
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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".
|
||||||
|
|
|
@ -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"".
|
||||||
|
|
|
@ -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 ...)))".
|
||||||
|
|
|
@ -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 ...)))".
|
||||||
|
|
|
@ -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)".
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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])
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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]))
|
|
||||||
|
|
|
@ -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)]
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue
Block a user