- generated bytevector=? procedure now gets out quickly on eq

arguments.  cp0 optimizes away a number of additional equality
  operations at optimize-level 3 (including bytevector=?) when
  applied to the same variable references, as it already did for
  eq?, eqv?, and equal?, at all optimize levels.
    cpnanopass.ss, cp0.ss, primdata.ss,
    cp0.ms
- updated bullyx patches
    patch*
- updated release notes and tweaked user's guide.
    release-notes.stex, objects.stex

original commit: e90c39a72563eafa4fccaf1d197060bf20aa552f
This commit is contained in:
Kent Dybvig 2017-03-15 21:24:52 -04:00
parent b7cd626f71
commit f825e23db2
20 changed files with 444 additions and 253 deletions

11
LOG
View File

@ -393,3 +393,14 @@
mkheader.ss, primdata.ss, prims.ss,
fasl.c, gc.c, types.h
root-experr*, patch*
- generated bytevector=? procedure now gets out quickly on eq
arguments. cp0 optimizes away a number of additional equality
operations at optimize-level 3 (including bytevector=?) when
applied to the same variable references, as it already did for
eq?, eqv?, and equal?, at all optimize levels.
cpnanopass.ss, cp0.ss, primdata.ss,
cp0.ms
- updated bullyx patches
patch*
- updated release notes and tweaked user's guide.
release-notes.stex, objects.stex

View File

@ -427,6 +427,12 @@ These extensions are disabled in an input stream after \scheme{#!r6rs} has
been seen by the reader, unless \scheme{#!chezscheme} has been seen more
recently.
\index{immutable strings}\index{mutable strings}%
All strings are mutable by default, including constants.
A program can create immutable strings via
\index{\scheme{string->immutable-string}}\scheme{string->immutable-string}.
Any attempt to modify an immutable string causes an exception to be raised.
The length and indices of a string in {\ChezScheme} are always fixnums.
@ -466,7 +472,7 @@ When passed one argument, each of these predicates returns \scheme{#t}.
\endentryheader
\noindent
\var{src} and \var{dst} must be strings.
\var{src} and \var{dst} must be strings, and \var{dst} must be mutable.
\var{src-start}, \var{dst-start}, and \var{n} must be exact nonnegative
integers.
The sum of \var{src-start} and \var{n} must not exceed the length of \var{src},
@ -503,6 +509,7 @@ s2 ;=> "-bollolly-"
\endentryheader
\noindent
\var{string} must be mutable.
The characters of \var{string} from \var{start} (inclusive) to \var{end}
(exclusive) are set to \var{char}.
\var{start} and \var{end} must be nonnegative integers; \var{start}
@ -525,6 +532,7 @@ If $end\le start$, the string is left unchanged.
\endentryheader
\noindent
\var{string} must be mutable.
\var{n} must be an exact nonnegative fixnum not greater than the length of
\var{string}.
If \var{n} is zero, \scheme{string-truncate!} returns the empty string.
@ -543,37 +551,35 @@ s ;=> "$$$"
%----------------------------------------------------------------------------
\entryheader
\formdef{mutable-string?}{\categoryprocedure}{(mutable-string? \var{obj})}
\returns \scheme{#t} if \var{obj} is a mutable string, \scheme{#f} otherwise
\formdef{immutable-string?}{\categoryprocedure}{(immutable-string? \var{obj})}
\returns \scheme{#t} if \var{obj} is a mutable/immutable string, \scheme{#f} otherwise
\returns \scheme{#t} if \var{obj} is an immutable string, \scheme{#f} otherwise
\listlibraries
\endentryheader
\noindent
String-mutation operations, such as \scheme{string-set!}, fail when given an immutable string.
Strings are mutable by default, but \scheme{string->immutable-string}
creates immutable strings.
\schemedisplay
\noskip\schemedisplay
(mutable-string? (string #\a #\b #\c)) ;=> #t
(mutable-string? (string->immutable-string "abc")) ;=> #f
(immutable-string? (string #\a #\b #\c)) ;=> #f
(immutable-string? (string->immutable-string "abc")) ;=> #t
(immutable-string? (cons 3 4)) ;=> #f
\endschemedisplay
%----------------------------------------------------------------------------
\entryheader
\formdef{string->immutable-string}{\categoryprocedure}{(string->immutable-string \var{string})}
\returns either an immutable copy of \var{string} or \var{string} itself
\returns an immutable string equal to \var{string}
\listlibraries
\endentryheader
\noindent
\var{string} must be a string. The result is \var{string} itself if \var{string}
is immutable, otherwise the result is an immutable string with the same content as \var{string}.
\index{immutable strings}\index{mutable strings}%
The result is \var{string} itself if \var{string}
is immutable; otherwise, the result is an immutable string with the same content as \var{string}.
\schemedisplay
(define s (string->string-immutable "xyz"))
(string-set! s 0 #\a) ;=> \var{exception: "xyz" is immutable}
(define s (string->immutable-string (string #\x #\y #\z)))
(string-set! s 0 #\a) ;=> \var{exception: not mutable}
\endschemedisplay
@ -591,6 +597,12 @@ recently.
The length and indices of a vector in {\ChezScheme} are always fixnums.
\index{immutable vectors}\index{mutable vectors}%
All vectors are mutable by default, including constants.
A program can create immutable vectors via
\index{\scheme{vector->immutable-vector}}\scheme{vector->immutable-vector}.
Any attempt to modify an immutable vector causes an exception to be raised.
%----------------------------------------------------------------------------
\entryheader
\formdef{vector-copy}{\categoryprocedure}{(vector-copy \var{vector})}
@ -618,6 +630,7 @@ The elements themselves are not copied.
\endentryheader
\noindent
\var{vector} must be mutable.
\scheme{vector-set-fixnum!} changes the \var{n}th element of \var{vector} to \var{fixnum}.
\var{n} must be an exact nonnegative integer strictly less than
the length of \var{vector}.
@ -641,42 +654,41 @@ See also the description of fixnum-only vectors (fxvectors) below.
%----------------------------------------------------------------------------
\entryheader
\formdef{mutable-vector?}{\categoryprocedure}{(mutable-vector? \var{obj})}
\returns \scheme{#t} if \var{obj} is a mutable vector, \scheme{#f} otherwise
\formdef{immutable-vector?}{\categoryprocedure}{(immutable-vector? \var{obj})}
\returns \scheme{#t} if \var{obj} is a mutable/immutable vector, \scheme{#f} otherwise
\returns \scheme{#t} if \var{obj} is an immutable vector, \scheme{#f} otherwise
\listlibraries
\endentryheader
\noindent
Vector-mutation operations, such as \scheme{vector-set!}, fail when given an immutable vector.
Vectors are mutable by default, but \scheme{vector->immutable-vector}
creates immutable vectors.
\schemedisplay
\noskip\schemedisplay
(mutable-vector? (vector 1 2 3)) ;=> #t
(mutable-vector? (vector->immutable-vector (vector 1 2 3))) ;=> #f
(immutable-vector? (vector 1 2 3)) ;=> #f
(immutable-vector? (vector->immutable-vector (vector 1 2 3))) ;=> #t
(immutable-vector? (cons 3 4)) ;=> #f
\endschemedisplay
%----------------------------------------------------------------------------
\entryheader
\formdef{vector->immutable-vector}{\categoryprocedure}{(vector->immutable-vector \var{vector})}
\returns either an immutable copy of \var{vector} or \var{vector} itself
\returns an immutable vector equal to \var{vector}
\listlibraries
\endentryheader
\noindent
\var{vector} must be a vector. The result is \var{vector} itself if \var{vector}
is immutable, otherwise the result is an immutable vector with the same content as \var{vector}.
\index{immutable vectors}\index{mutable vectors}%
The result is \var{vector} itself if \var{vector}
is immutable; otherwise, the result is an immutable vector with the same content as \var{vector}.
\schemedisplay
(define s (vector->vector-immutable (vector 1 2 3)))
(vector-set! s 0 0) ;=> \var{exception: \#(1 2 3) is immutable}
(define v (vector->immutable-vector (vector 1 2 3)))
(vector-set! v 0 0) ;=> \var{exception: not mutable}
\endschemedisplay
\section{Fixnum-Only Vectors\label{SECTFXVECTORS}}
\index{fxvectors}%
Fixnum-only vectors, or ``fxvectors,'' are like vectors but contain
only fixnums.
Fxvectors are written with the \scheme{#vfx} prefix in place of the
@ -695,6 +707,12 @@ The storage management system also takes advantage of the fact that
fxvectors contain no pointers to place them in an area of memory that
does not have to be traced during collection.
\index{immutable fxvectors}\index{mutable fxvectors}%
All fxvectors are mutable by default, including constants.
A program can create immutable fxvectors via
\index{\scheme{fxvector->immutable-fxvector}}\scheme{fxvector->immutable-fxvector}.
Any attempt to modify an immutable fxvector causes an exception to be raised.
See also \scheme{vector-set-fixnum!} above.
%----------------------------------------------------------------------------
@ -787,6 +805,7 @@ the length of \var{fxvector}.
\endentryheader
\noindent
\var{fxvector} must be mutable.
\var{n} must be a nonnegative fixnum strictly less than
the length of \var{fxvector}.
\scheme{fxvector-set!} changes the \var{n}th element of \var{fxvector} to \var{fixnum}.
@ -806,6 +825,7 @@ the length of \var{fxvector}.
\endentryheader
\noindent
\var{fxvector} must be mutable.
\scheme{fxvector-fill!} replaces each element of \var{fxvector} with \var{fixnum}.
\schemedisplay
@ -871,21 +891,18 @@ as \var{fxvector}.
%----------------------------------------------------------------------------
\entryheader
\formdef{mutable-fxvector?}{\categoryprocedure}{(mutable-fxvector? \var{obj})}
\returns \scheme{#t} if \var{obj} is a mutable fxvector, \scheme{#f} otherwise
\formdef{immutable-fxvector?}{\categoryprocedure}{(immutable-fxvector? \var{obj})}
\returns \scheme{#t} if \var{obj} is a mutable/immutable fxvector, \scheme{#f} otherwise
\returns \scheme{#t} if \var{obj} is an immutable fxvector, \scheme{#f} otherwise
\listlibraries
\endentryheader
\noindent
Fxvector-mutation operations, such as \scheme{fxvector-set!}, fail when given an immutable fxvector.
Fxvectors are mutable by default, but \scheme{fxvector->immutable-fxvector}
creates immutable fxvectors.
\schemedisplay
\noskip\schemedisplay
(mutable-fxvector? (fxvector 1 2 3)) ;=> #t
(mutable-fxvector? (fxvector->immutable-fxvector (fxvector 1 2 3))) ;=> #f
(immutable-fxvector? (fxvector 1 2 3)) ;=> #f
(immutable-fxvector? (fxvector->immutable-fxvector (fxvector 1 2 3))) ;=> #t
(immutable-fxvector? (cons 3 4)) ;=> #f
\endschemedisplay
%----------------------------------------------------------------------------
@ -896,12 +913,13 @@ creates immutable fxvectors.
\endentryheader
\noindent
\var{fxvector} must be a fxvector. The result is \var{fxvector} itself if \var{fxvector}
is immutable, otherwise the result is an immutable fxvector with the same content as \var{fxvector}.
\index{immutable fxvectors}\index{mutable fxvectors}%
The result is \var{fxvector} itself if \var{fxvector}
is immutable; otherwise, the result is an immutable fxvector with the same content as \var{fxvector}.
\schemedisplay
(define s (fxvector->fxvector-immutable (fxvector 1 2 3)))
(fxvector-set! s 0 0) ;=> \var{exception: \#vfx(1 2 3) is immutable}
(define v (fxvector->immutable-fxvector (fxvector 1 2 3)))
(fxvector-set! v 0 0) ;=> \var{exception: not mutable}
\endschemedisplay
@ -922,6 +940,12 @@ primitives for loading and storing 3, 5, 6, and 7-byte quantities.
The length and indices of a bytevector in {\ChezScheme} are always fixnums.
\index{immutable bytevectors}\index{mutable bytevectors}%
All bytevectors are mutable by default, including constants.
A program can create immutable bytevectors via
\index{\scheme{bytevector->immutable-bytevector}}\scheme{bytevector->immutable-bytevector}.
Any attempt to modify an immutable bytevector causes an exception to be raised.
%----------------------------------------------------------------------------
\entryheader
\formdef{bytevector}{\categoryprocedure}{(bytevector \var{fill} \dots)}
@ -992,6 +1016,7 @@ are signed rather than unsigned.
\endentryheader
\noindent
\var{bytevector} must be mutable.
\var{n} must be an exact nonnegative fixnum not greater than the length of
\var{bytevector}.
If \var{n} is zero, \scheme{bytevector-truncate!} returns the empty bytevector.
@ -1055,6 +1080,7 @@ complement value.
\endentryheader
\noindent
\var{bytevector} must be mutable.
\var{n} must be an exact nonnegative integer and
indexes the starting byte of the value.
The sum of \var{n} and the number of bytes occupied by the value must
@ -1084,39 +1110,37 @@ Negative values are stored as their two's complement equivalent.
%----------------------------------------------------------------------------
\entryheader
\formdef{mutable-bytevector?}{\categoryprocedure}{(mutable-bytevector? \var{obj})}
\returns \scheme{#t} if \var{obj} is a mutable bytevector, \scheme{#f} otherwise
\formdef{immutable-bytevector?}{\categoryprocedure}{(immutable-bytevector? \var{obj})}
\returns \scheme{#t} if \var{obj} is a mutable/immutable bytevector, \scheme{#f} otherwise
\returns \scheme{#t} if \var{obj} is an immutable bytevector, \scheme{#f} otherwise
\listlibraries
\endentryheader
\noindent
Bytevector-mutation operations, such as \scheme{bytevector-set!}, fail when given an immutable bytevector.
Bytevectors are mutable by default, but \scheme{bytevector->immutable-bytevector}
creates immutable bytevectors.
\schemedisplay
\noskip\schemedisplay
(mutable-bytevector? (bytevector 1 2 3)) ;=> #t
(mutable-bytevector?
(bytevector->immutable-bytevector (bytevector 1 2 3))) ;=> #f
(bytevector->immutable-bytevector (bytevector 1 2 3))) ;=> #f
(immutable-bytevector? (bytevector 1 2 3)) ;=> #f
(immutable-bytevector?
(bytevector->immutable-bytevector (bytevector 1 2 3))) ;=> #t
(bytevector->immutable-bytevector (bytevector 1 2 3))) ;=> #t
(immutable-bytevector? (cons 3 4)) ;=> #f
\endschemedisplay
%----------------------------------------------------------------------------
\entryheader
\formdef{bytevector->immutable-bytevector}{\categoryprocedure}{(bytevector->immutable-bytevector \var{bytevector})}
\returns either an immutable copy of \var{bytevector} or \var{bytevector} itself
\returns an immutable \var{bytevector} equal to \var{bytevector}
\listlibraries
\endentryheader
\noindent
\var{bytevector} must be a bytevector. The result is \var{bytevector} itself if \var{bytevector}
is immutable, otherwise the result is an immutable bytevector with the same content as \var{bytevector}.
\index{immutable bytevectors}\index{mutable bytevectors}%
The result is \var{bytevector} itself if \var{bytevector}
is immutable; otherwise, the result is an immutable bytevector with the same content as \var{bytevector}.
\schemedisplay
(define s (bytevector->bytevector-immutable (bytevector 1 2 3)))
(bytevector-set! s 0 0) ;=> \var{exception: \#vu8(1 2 3) is immutable}
(define bv (bytevector->immutable-bytevector (bytevector 1 2 3)))
(bytevector-u8-set! bv 0 0) ;=> \var{exception: not mutable}
\endschemedisplay
@ -1136,6 +1160,12 @@ The box syntax is disabled in an input stream after \scheme{#!r6rs} has
been seen by the reader, unless \scheme{#!chezscheme} has been seen more
recently.
\index{immutable boxes}\index{mutable boxes}%
All boxes are mutable by default, including constants.
A program can create immutable boxes via
\index{\scheme{box-immutable}}\scheme{box-immutable}.
Any attempt to modify an immutable box causes an exception to be raised.
%----------------------------------------------------------------------------
\entryheader
\formdef{box?}{\categoryprocedure}{(box? \var{obj})}
@ -1187,16 +1217,17 @@ recently.
\endentryheader
\noindent
\var{box} must be mutable.
\scheme{set-box!} sets the contents of \var{box} to \var{obj}.
\schemedisplay
(let ([b (box 'x)])
(set-box! b 'y)
b) ;=> #&y
(set-box! b 'y)
b) ;=> #&y
(let ([incr!
(lambda (x)
(set-box! x (+ (unbox x) 1)))])
(set-box! x (+ (unbox x) 1)))])
(let ([b (box 3)])
(incr! b)
(unbox b))) ;=> 4
@ -1205,21 +1236,18 @@ recently.
%----------------------------------------------------------------------------
\entryheader
\formdef{mutable-box?}{\categoryprocedure}{(mutable-box? \var{obj})}
\returns \scheme{#t} if \var{obj} is a mutable box, \scheme{#f} otherwise
\formdef{immutable-box?}{\categoryprocedure}{(immutable-box? \var{obj})}
\returns \scheme{#t} if \var{obj} is a mutable/immutable box, \scheme{#f} otherwise
\returns \scheme{#t} if \var{obj} is an immutable box, \scheme{#f} otherwise
\listlibraries
\endentryheader
\noindent
Box-mutation operations, such as \scheme{set-box!}, fail when given an immutable box.
Boxes are mutable by default, but \scheme{box-immutable}
creates immutable boxes.
\schemedisplay
(box-mutable? (box 1)) ;=> #t
(box-mutable? (box-immutable 1) ;=> #f
(box-immutable? (box 1)) ;=> #f
(box-immutable? (box-immutable 1) ;=> #t
\noskip\schemedisplay
(mutable-box? (box 1)) ;=> #t
(mutable-box? (box-immutable 1)) ;=> #f
(immutable-box? (box 1)) ;=> #f
(immutable-box? (box-immutable 1)) ;=> #t
(mutable-box? (cons 3 4)) ;=> #f
\endschemedisplay
%----------------------------------------------------------------------------
@ -1230,12 +1258,13 @@ creates immutable boxes.
\endentryheader
\noindent
Since boxes are intended to support a mutable level of indirection, imutable boxes
are rarely useful, but they are provided for consistency with vectors.
\index{immutable boxes}\index{mutable boxes}%
Boxes are typically intended to support shared, mutable structure, so immutable boxes
are not often useful.
\schemedisplay
(define s (box-immutable 1))
(set-box! s 0) ;=> \var{exception: \#\&1 is immutable}
(define b (box-immutable 1))
(set-box! b 0) ;=> \var{exception: not mutable}
\endschemedisplay

View File

@ -2707,3 +2707,124 @@
(#2%display "1")
(#2%list q n))))
)
(mat equality-of-refs
(begin
(define-syntax eqtest
(syntax-rules ()
[(_ eqprim) (eqtest eqprim #f)]
[(_ eqprim generic?)
(parameterize ([enable-cp0 #t] [#%$suppress-primitive-inlining #f])
(let ([arity-mask (procedure-arity-mask eqprim)] [primref `($primitive ,(if (= (optimize-level) 3) 3 2) eqprim)])
(define-syntax ifsafe
(syntax-rules ()
[(_ n e1 e2)
(if (and (fxbit-set? arity-mask n) (or generic? (= (optimize-level) 3))) e1 e2)]))
(and
(equivalent-expansion?
(expand/optimize
`(lambda (x) (eqprim x)))
(ifsafe 1
`(lambda (x) #t)
`(lambda (x) (,primref x))))
(equivalent-expansion?
(expand/optimize
`(lambda (x) (eqprim (begin (x) x))))
(ifsafe 1
`(lambda (x) (x) #t)
`(lambda (x) (,primref (begin (x) x)))))
(equivalent-expansion?
(expand/optimize
`(lambda (x) (set! x (x x)) (x (eqprim x))))
(ifsafe 1
`(lambda (x) (set! x (x x)) (x #t))
`(lambda (x) (set! x (x x)) (x (,primref x)))))
(equivalent-expansion?
(expand/optimize
`(lambda (x) (eqprim (x x))))
(ifsafe 1
`(lambda (x) (x x) #t)
`(lambda (x) (,primref (x x)))))
(equivalent-expansion?
(expand/optimize
`(lambda (x) (eqprim x x)))
(ifsafe 2
`(lambda (x) #t)
`(lambda (x) (,primref x x))))
(equivalent-expansion?
(expand/optimize
`(lambda (x) (eqprim (begin (x) x) x)))
(ifsafe 2
`(lambda (x) (x) #t)
`(lambda (x) (,primref (begin (x) x) x))))
(equivalent-expansion?
(expand/optimize
`(lambda (x) (eqprim x (begin (x) x))))
(ifsafe 2
`(lambda (x) (x) #t)
`(lambda (x) (,primref x (begin (x) x)))))
(equivalent-expansion?
(expand/optimize
`(lambda (x) (eqprim (begin (x) x) (begin (x x) x))))
(ifsafe 2
`(lambda (x) (x) (x x) #t)
`(lambda (x) (,primref (begin (x) x) (begin (x x) x)))))
(equivalent-expansion?
(expand/optimize
`(lambda (x y) (eqprim x y)))
`(lambda (x y) (,primref x y)))
(equivalent-expansion?
(expand/optimize
`(lambda (x) (eqprim x x x x x)))
(ifsafe 5
`(lambda (x) #t)
`(lambda (x) (,primref x x x x x))))
(equivalent-expansion?
(expand/optimize
`(lambda (x y) (eqprim x x x x y)))
`(lambda (x y) (,primref x x x x y)))
(equivalent-expansion?
(expand/optimize
`(lambda (x) (eqprim x x (begin (x) x) x x)))
(ifsafe 5
`(lambda (x) (x) #t)
`(lambda (x) (,primref x x (begin (x) x) x x))))
(equivalent-expansion?
(expand/optimize
`(lambda (x) (eqprim x x (begin (set! x 15) x) x x)))
`(lambda (x) (,primref x x (begin (set! x 15) x) x x)))
)))]))
#t)
(eqtest eq? #t)
(eqtest eqv? #t)
(eqtest equal? #t)
(eqtest bytevector=?)
(eqtest enum-set=?)
(eqtest bound-identifier=?)
(eqtest free-identifier=?)
(eqtest ftype-pointer=?)
(eqtest literal-identifier=?)
(eqtest time=?)
(eqtest boolean=?)
(eqtest symbol=?)
(eqtest char=?)
(eqtest char-ci=?)
(eqtest string=?)
(eqtest string-ci=?)
(eqtest r6rs:char=?)
(eqtest r6rs:char-ci=?)
(eqtest r6rs:string=?)
(eqtest r6rs:string-ci=?)
(eqtest fx=)
(eqtest fx=?)
(parameterize ([enable-cp0 #t] [#%$suppress-primitive-inlining #f])
(equivalent-expansion?
(expand/optimize
`(lambda (x) (fl= x x))) ; x could be +nan.0
`(lambda (x) (($primitive ,(if (fx= (optimize-level) 3) 3 2) fl=) x x))))
(parameterize ([enable-cp0 #t] [#%$suppress-primitive-inlining #f])
(equivalent-expansion?
(expand/optimize
`(lambda (x) (= x x))) ; x could be +nan.0
`(lambda (x) (($primitive ,(if (fx= (optimize-level) 3) 3 2) =) x x))))
)

View File

@ -1,7 +1,7 @@
*** errors-compile-0-f-f-f 2016-06-06 17:53:10.623331500 -0400
--- errors-compile-0-f-f-t 2016-06-06 18:02:37.804196600 -0400
*** errors-compile-0-f-f-f 2017-03-15 13:19:08.859800901 -0400
--- errors-compile-0-f-f-t 2017-03-15 13:25:14.618006463 -0400
***************
*** 3565,3571 ****
*** 3603,3609 ****
misc.mo:Expected error in mat compute-composition: "compute-composition: invalid generation -1".
misc.mo:Expected error in mat compute-composition: "compute-composition: invalid generation "static"".
misc.mo:Expected error in mat make-object-finder: "make-object-finder: 17 is not a procedure".
@ -9,7 +9,7 @@
misc.mo:Expected error in mat make-object-finder: "make-object-finder: invalid generation oldgen".
misc.mo:Expected error in mat make-object-finder: "make-object-finder: invalid generation -1".
misc.mo:Expected error in mat make-object-finder: "incorrect number of arguments to #<procedure find-next>".
--- 3565,3571 ----
--- 3603,3609 ----
misc.mo:Expected error in mat compute-composition: "compute-composition: invalid generation -1".
misc.mo:Expected error in mat compute-composition: "compute-composition: invalid generation "static"".
misc.mo:Expected error in mat make-object-finder: "make-object-finder: 17 is not a procedure".
@ -18,7 +18,7 @@
misc.mo:Expected error in mat make-object-finder: "make-object-finder: invalid generation -1".
misc.mo:Expected error in mat make-object-finder: "incorrect number of arguments to #<procedure find-next>".
***************
*** 7040,7050 ****
*** 7085,7095 ****
7.mo:Expected error in mat sstats: "set-sstats-gc-bytes!: twelve is not an exact integer".
7.mo:Expected error in mat bytes-allocated: "bytes-allocated: invalid generation yuk".
7.mo:Expected error in mat bytes-allocated: "bytes-allocated: invalid generation -1".
@ -30,7 +30,7 @@
7.mo:Expected error in mat bytes-allocated: "bytes-allocated: invalid space gnu".
7.mo:Expected error in mat bytes-allocated: "bytes-allocated: invalid space gnu".
7.mo:Expected error in mat bytes-allocated: "bytes-allocated: invalid space gnu".
--- 7040,7050 ----
--- 7085,7095 ----
7.mo:Expected error in mat sstats: "set-sstats-gc-bytes!: twelve is not an exact integer".
7.mo:Expected error in mat bytes-allocated: "bytes-allocated: invalid generation yuk".
7.mo:Expected error in mat bytes-allocated: "bytes-allocated: invalid generation -1".
@ -43,7 +43,7 @@
7.mo:Expected error in mat bytes-allocated: "bytes-allocated: invalid space gnu".
7.mo:Expected error in mat bytes-allocated: "bytes-allocated: invalid space gnu".
***************
*** 8406,8418 ****
*** 8451,8463 ****
fx.mo:Expected error in mat r6rs:fx-: "fx-: #f is not a fixnum".
fx.mo:Expected error in mat r6rs:fx-: "fx-: #f is not a fixnum".
fx.mo:Expected error in mat fx*: "fx*: (a . b) is not a fixnum".
@ -57,7 +57,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".
--- 8406,8418 ----
--- 8451,8463 ----
fx.mo:Expected error in mat r6rs:fx-: "fx-: #f is not a fixnum".
fx.mo:Expected error in mat r6rs:fx-: "fx-: #f is not a fixnum".
fx.mo:Expected error in mat fx*: "fx*: (a . b) is not a fixnum".

View File

@ -1,5 +1,5 @@
*** errors-compile-0-f-f-f 2017-03-15 00:21:57.000000000 -0400
--- errors-compile-0-f-t-f 2017-03-14 23:53:20.000000000 -0400
*** errors-compile-0-f-f-f 2017-03-15 13:19:08.859800901 -0400
--- errors-compile-0-f-t-f 2017-03-15 13:34:41.791223868 -0400
***************
*** 125,131 ****
3.mo:Expected error in mat dipa-letrec: "attempt to reference undefined variable a".

View File

@ -1,5 +1,5 @@
*** errors-compile-0-f-f-f 2017-03-15 00:21:57.000000000 -0400
--- errors-compile-0-t-f-f 2017-03-14 23:59:50.000000000 -0400
*** errors-compile-0-f-f-f 2017-03-15 13:19:08.859800901 -0400
--- errors-compile-0-t-f-f 2017-03-15 13:31:20.355212128 -0400
***************
*** 93,99 ****
3.mo:Expected error in mat case-lambda: "incorrect number of arguments to #<procedure foo>".

View File

@ -1,7 +1,7 @@
*** errors-compile-0-t-f-f 2016-06-06 18:12:13.534516500 -0400
--- errors-compile-0-t-f-t 2016-06-06 17:56:30.227458200 -0400
*** errors-compile-0-t-f-f 2017-03-15 13:31:20.355212128 -0400
--- errors-compile-0-t-f-t 2017-03-15 13:21:31.790099674 -0400
***************
*** 3565,3571 ****
*** 3603,3609 ****
misc.mo:Expected error in mat compute-composition: "compute-composition: invalid generation -1".
misc.mo:Expected error in mat compute-composition: "compute-composition: invalid generation "static"".
misc.mo:Expected error in mat make-object-finder: "make-object-finder: 17 is not a procedure".
@ -9,7 +9,7 @@
misc.mo:Expected error in mat make-object-finder: "make-object-finder: invalid generation oldgen".
misc.mo:Expected error in mat make-object-finder: "make-object-finder: invalid generation -1".
misc.mo:Expected error in mat make-object-finder: "incorrect number of arguments to #<procedure find-next>".
--- 3565,3571 ----
--- 3603,3609 ----
misc.mo:Expected error in mat compute-composition: "compute-composition: invalid generation -1".
misc.mo:Expected error in mat compute-composition: "compute-composition: invalid generation "static"".
misc.mo:Expected error in mat make-object-finder: "make-object-finder: 17 is not a procedure".
@ -18,7 +18,7 @@
misc.mo:Expected error in mat make-object-finder: "make-object-finder: invalid generation -1".
misc.mo:Expected error in mat make-object-finder: "incorrect number of arguments to #<procedure find-next>".
***************
*** 7040,7050 ****
*** 7085,7095 ****
7.mo:Expected error in mat sstats: "set-sstats-gc-bytes!: twelve is not an exact integer".
7.mo:Expected error in mat bytes-allocated: "bytes-allocated: invalid generation yuk".
7.mo:Expected error in mat bytes-allocated: "bytes-allocated: invalid generation -1".
@ -30,7 +30,7 @@
7.mo:Expected error in mat bytes-allocated: "bytes-allocated: invalid space gnu".
7.mo:Expected error in mat bytes-allocated: "bytes-allocated: invalid space gnu".
7.mo:Expected error in mat bytes-allocated: "bytes-allocated: invalid space gnu".
--- 7040,7050 ----
--- 7085,7095 ----
7.mo:Expected error in mat sstats: "set-sstats-gc-bytes!: twelve is not an exact integer".
7.mo:Expected error in mat bytes-allocated: "bytes-allocated: invalid generation yuk".
7.mo:Expected error in mat bytes-allocated: "bytes-allocated: invalid generation -1".

View File

@ -1,5 +1,5 @@
*** errors-compile-0-t-f-f 2016-06-06 18:12:13.534516500 -0400
--- errors-compile-0-t-t-f 2016-06-06 18:06:30.926483000 -0400
*** errors-compile-0-t-f-f 2017-03-15 13:31:20.355212128 -0400
--- errors-compile-0-t-t-f 2017-03-15 13:27:50.847239990 -0400
***************
*** 144,150 ****
3.mo:Expected error in mat cpvalid: "attempt to reference undefined variable b".
@ -18,7 +18,7 @@
3.mo:Expected error in mat cpvalid: "attempt to reference undefined variable c".
3.mo:Expected warning in mat cpvalid: "possible attempt to reference undefined variable x".
***************
*** 3607,3613 ****
*** 3645,3651 ****
misc.mo:Expected error in mat cpletrec: "foreign-procedure: no entry for "foo"".
misc.mo:Expected error in mat cpletrec: "attempt to reference undefined variable q".
misc.mo:Expected error in mat cpletrec: "attempt to reference undefined variable bar".
@ -26,7 +26,7 @@
misc.mo:Expected error in mat cpletrec: "attempt to reference undefined variable b".
misc.mo:Expected error in mat cpletrec: "attempt to reference undefined variable b".
misc.mo:Expected error in mat cpletrec: "attempt to reference undefined variable a".
--- 3607,3613 ----
--- 3645,3651 ----
misc.mo:Expected error in mat cpletrec: "foreign-procedure: no entry for "foo"".
misc.mo:Expected error in mat cpletrec: "attempt to reference undefined variable q".
misc.mo:Expected error in mat cpletrec: "attempt to reference undefined variable bar".
@ -35,7 +35,7 @@
misc.mo:Expected error in mat cpletrec: "attempt to reference undefined variable b".
misc.mo:Expected error in mat cpletrec: "attempt to reference undefined variable a".
***************
*** 7050,7057 ****
*** 7095,7102 ****
7.mo:Expected error in mat bytes-allocated: "bytes-allocated: invalid space gnu".
7.mo:Expected error in mat error: "a: hit me!".
7.mo:Expected error in mat error: "f: n is 0".
@ -44,7 +44,7 @@
record.mo:Expected error in mat record2: "invalid value 3 for foreign type double-float".
record.mo:Expected error in mat record2: "3 is not of type #<record type fudge>".
record.mo:Expected error in mat record2: "make-record-type: invalid field list ((immutable double-float a) . b)".
--- 7050,7057 ----
--- 7095,7102 ----
7.mo:Expected error in mat bytes-allocated: "bytes-allocated: invalid space gnu".
7.mo:Expected error in mat error: "a: hit me!".
7.mo:Expected error in mat error: "f: n is 0".
@ -54,7 +54,7 @@
record.mo:Expected error in mat record2: "3 is not of type #<record type fudge>".
record.mo:Expected error in mat record2: "make-record-type: invalid field list ((immutable double-float a) . b)".
***************
*** 7059,7073 ****
*** 7104,7118 ****
record.mo:Expected error in mat type-descriptor: "invalid syntax (type-descriptor 3)".
record.mo:Expected error in mat type-descriptor: "type-descriptor: unrecognized record car".
record.mo:Expected error in mat record3: "variable set-fudge-a! is not bound".
@ -70,7 +70,7 @@
record.mo:Expected error in mat record9: "record-reader: invalid input #f".
record.mo:Expected error in mat record9: "record-reader: invalid second argument fudge".
record.mo:Expected error in mat record9: "record-reader: invalid second argument fudge".
--- 7059,7073 ----
--- 7104,7118 ----
record.mo:Expected error in mat type-descriptor: "invalid syntax (type-descriptor 3)".
record.mo:Expected error in mat type-descriptor: "type-descriptor: unrecognized record car".
record.mo:Expected error in mat record3: "variable set-fudge-a! is not bound".
@ -87,7 +87,7 @@
record.mo:Expected error in mat record9: "record-reader: invalid second argument fudge".
record.mo:Expected error in mat record9: "record-reader: invalid second argument fudge".
***************
*** 7080,7105 ****
*** 7125,7150 ****
record.mo:Expected error in mat record10: "read: unresolvable cycle constructing record of type #<record type bar> at char 3 of #<input port string>".
record.mo:Expected error in mat record16: "read: unresolvable cycle constructing record of type #<record type bazar> at char 3 of #<input port string>".
record.mo:Expected error in mat record16: "read: unresolvable cycle constructing record of type #<record type bazar> at char 3 of #<input port string>".
@ -114,7 +114,7 @@
record.mo:Expected error in mat foreign-data: "foreign-alloc: 0 is not a positive fixnum".
record.mo:Expected error in mat foreign-data: "foreign-alloc: <int> is not a positive fixnum".
record.mo:Expected error in mat foreign-data: "foreign-alloc: -5 is not a positive fixnum".
--- 7080,7105 ----
--- 7125,7150 ----
record.mo:Expected error in mat record10: "read: unresolvable cycle constructing record of type #<record type bar> at char 3 of #<input port string>".
record.mo:Expected error in mat record16: "read: unresolvable cycle constructing record of type #<record type bazar> at char 3 of #<input port string>".
record.mo:Expected error in mat record16: "read: unresolvable cycle constructing record of type #<record type bazar> at char 3 of #<input port string>".
@ -142,7 +142,7 @@
record.mo:Expected error in mat foreign-data: "foreign-alloc: <int> is not a positive fixnum".
record.mo:Expected error in mat foreign-data: "foreign-alloc: -5 is not a positive fixnum".
***************
*** 7221,7259 ****
*** 7266,7304 ****
record.mo:Expected error in mat record22: "invalid field specifier (immutable creepy q)".
record.mo:Expected error in mat record22: "invalid field specifier (immutable creepy q)".
record.mo:Expected error in mat record23: "make-record-type: cannot extend sealed record type #<record type foo>".
@ -182,7 +182,7 @@
record.mo:Expected error in mat record?: "record?: 4 is not a record type descriptor".
record.mo:Expected error in mat record?: "record?: a is not a record type descriptor".
record.mo:Expected error in mat record?: "record?: #(1) is not a record type descriptor".
--- 7221,7259 ----
--- 7266,7304 ----
record.mo:Expected error in mat record22: "invalid field specifier (immutable creepy q)".
record.mo:Expected error in mat record22: "invalid field specifier (immutable creepy q)".
record.mo:Expected error in mat record23: "make-record-type: cannot extend sealed record type #<record type foo>".
@ -223,7 +223,7 @@
record.mo:Expected error in mat record?: "record?: a is not a record type descriptor".
record.mo:Expected error in mat record?: "record?: #(1) is not a record type descriptor".
***************
*** 7279,7314 ****
*** 7324,7359 ****
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-syntactic: "invalid syntax point".
@ -260,7 +260,7 @@
record.mo:Expected error in mat r6rs-records-syntactic: "record-rtd: #<ex3> is not a record".
record.mo:Expected error in mat r6rs-records-syntactic: "record-rtd: #<ex3> is not a record".
record.mo:Expected error in mat r6rs-records-syntactic: "parent record type is sealed ex3".
--- 7279,7314 ----
--- 7324,7359 ----
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-syntactic: "invalid syntax point".

View File

@ -1,5 +1,5 @@
*** errors-compile-0-f-f-f 2017-03-15 00:21:57.000000000 -0400
--- errors-interpret-0-f-f-f 2017-03-15 00:06:40.000000000 -0400
*** errors-compile-0-f-f-f 2017-03-15 13:19:08.859800901 -0400
--- errors-interpret-0-f-f-f 2017-03-15 13:37:17.060462746 -0400
***************
*** 1,7 ****
primvars.mo:Expected error in mat make-parameter: "make-parameter: 2 is not a procedure".

View File

@ -1,5 +1,5 @@
*** errors-compile-0-f-t-f 2017-03-14 23:53:20.000000000 -0400
--- errors-interpret-0-f-t-f 2017-03-15 00:13:47.000000000 -0400
*** errors-compile-0-f-t-f 2017-03-15 13:34:41.791223868 -0400
--- errors-interpret-0-f-t-f 2017-03-15 13:39:51.605705652 -0400
***************
*** 1,7 ****
primvars.mo:Expected error in mat make-parameter: "make-parameter: 2 is not a procedure".

View File

@ -1,5 +1,5 @@
*** errors-compile-0-t-f-f 2016-06-06 18:12:13.534516500 -0400
--- errors-interpret-0-t-f-f 2016-06-06 19:24:55.494488400 -0400
*** errors-compile-0-t-f-f 2017-03-15 13:31:20.355212128 -0400
--- errors-interpret-0-t-f-f 2017-03-15 14:09:36.249053122 -0400
***************
*** 1,7 ****
primvars.mo:Expected error in mat make-parameter: "make-parameter: 2 is not a procedure".
@ -169,7 +169,7 @@
3.mo:Expected error in mat letrec: "variable f is not bound".
3.mo:Expected error in mat letrec: "attempt to reference undefined variable a".
***************
*** 3959,3974 ****
*** 4004,4019 ****
6.mo:Expected error in mat pretty-print: "incorrect number of arguments to #<procedure pretty-format>".
6.mo:Expected error in mat pretty-print: "pretty-format: 3 is not a symbol".
6.mo:Expected error in mat pretty-print: "pretty-format: invalid format (bad 0 ... ... 0 format)".
@ -186,9 +186,9 @@
6.mo:Expected warning in mat cp1in-verify-format-warnings: "compile: too few arguments for control string "abc~s" in call to fprintf at line 1, char 29 of testfile.ss".
6.mo:Expected warning in mat cp1in-verify-format-warnings: "compile: too many arguments for control string "~%~abc~adef~ag~s~~~%" in call to fprintf at line 1, char 29 of testfile.ss".
6.mo:Expected error in mat print-parameters: "write: cycle detected; proceeding with (print-graph #t)".
--- 3965,3974 ----
--- 4010,4019 ----
***************
*** 6914,6920 ****
*** 6959,6965 ****
7.mo:Expected error in mat maybe-compile: "separate-compile: Exception in include: failed for testfile-mc-1a.ss: no such file or directory
7.mo:Expected error in mat maybe-compile: "separate-compile: Exception in maybe-compile-library: failed for "testfile-mc-1a.ss": no such file or directory
7.mo:Expected error in mat maybe-compile: "separate-compile: Exception in maybe-compile-library: file "testfile-mc-1a.ss" not found in source directories
@ -196,7 +196,7 @@
7.mo:Expected error in mat eval: "interpret: 7 is not an environment".
7.mo:Expected error in mat eval: "compile: 7 is not an environment".
7.mo:Expected error in mat expand: "sc-expand: 7 is not an environment".
--- 6914,6920 ----
--- 6959,6965 ----
7.mo:Expected error in mat maybe-compile: "separate-compile: Exception in include: failed for testfile-mc-1a.ss: no such file or directory
7.mo:Expected error in mat maybe-compile: "separate-compile: Exception in maybe-compile-library: failed for "testfile-mc-1a.ss": no such file or directory
7.mo:Expected error in mat maybe-compile: "separate-compile: Exception in maybe-compile-library: file "testfile-mc-1a.ss" not found in source directories
@ -205,7 +205,7 @@
7.mo:Expected error in mat eval: "compile: 7 is not an environment".
7.mo:Expected error in mat expand: "sc-expand: 7 is not an environment".
***************
*** 7232,7238 ****
*** 7277,7283 ****
record.mo:Expected error in mat record25: "invalid value #\9 for foreign type uptr".
record.mo:Expected error in mat record25: "invalid value 10 for foreign type float".
record.mo:Expected error in mat record25: "invalid value 11.0+0.0i for foreign type double".
@ -213,7 +213,7 @@
record.mo:Expected error in mat record25: "invalid value 12.0 for foreign type long-long".
record.mo:Expected error in mat record25: "invalid value 13.0 for foreign type unsigned-long-long".
record.mo:Expected error in mat record25: "invalid value 3.0 for foreign type int".
--- 7232,7238 ----
--- 7277,7283 ----
record.mo:Expected error in mat record25: "invalid value #\9 for foreign type uptr".
record.mo:Expected error in mat record25: "invalid value 10 for foreign type float".
record.mo:Expected error in mat record25: "invalid value 11.0+0.0i for foreign type double".
@ -222,7 +222,7 @@
record.mo:Expected error in mat record25: "invalid value 13.0 for foreign type unsigned-long-long".
record.mo:Expected error in mat record25: "invalid value 3.0 for foreign type int".
***************
*** 9168,9192 ****
*** 9213,9237 ****
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".
@ -248,7 +248,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 integer-34".
foreign.mo:Expected error in mat foreign-procedure: "invalid foreign-procedure result type specifier chare".
--- 9168,9192 ----
--- 9213,9237 ----
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".
@ -275,7 +275,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 result type specifier chare".
***************
*** 9199,9230 ****
*** 9244,9275 ****
foreign.mo:Expected error in mat foreign-sizeof: "incorrect number of arguments to #<procedure foreign-sizeof>".
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".
@ -308,7 +308,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>".
--- 9199,9230 ----
--- 9244,9275 ----
foreign.mo:Expected error in mat foreign-sizeof: "incorrect number of arguments to #<procedure foreign-sizeof>".
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".
@ -342,7 +342,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>".
***************
*** 9232,9257 ****
*** 9277,9302 ****
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>".
@ -369,7 +369,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>".
--- 9232,9257 ----
--- 9277,9302 ----
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>".
@ -397,7 +397,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>".
***************
*** 9262,9296 ****
*** 9307,9341 ****
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>".
@ -433,7 +433,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>".
--- 9262,9296 ----
--- 9307,9341 ----
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>".
@ -470,7 +470,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>".
***************
*** 9876,9885 ****
*** 9921,9930 ****
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 (andmap symbol? (syntax (x ...)))".
@ -481,7 +481,7 @@
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-set! is not bound".
--- 9876,9885 ----
--- 9921,9930 ----
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 (andmap symbol? (syntax (x ...)))".

View File

@ -1,5 +1,5 @@
*** errors-compile-0-t-t-f 2016-06-06 18:06:30.926483000 -0400
--- errors-interpret-0-t-t-f 2016-06-06 19:30:54.817658600 -0400
*** errors-compile-0-t-t-f 2017-03-15 13:27:50.847239990 -0400
--- errors-interpret-0-t-t-f 2017-03-15 14:13:06.129081411 -0400
***************
*** 1,7 ****
primvars.mo:Expected error in mat make-parameter: "make-parameter: 2 is not a procedure".
@ -169,7 +169,7 @@
3.mo:Expected error in mat letrec: "variable f is not bound".
3.mo:Expected error in mat letrec: "attempt to reference undefined variable a".
***************
*** 3959,3974 ****
*** 4004,4019 ****
6.mo:Expected error in mat pretty-print: "incorrect number of arguments to #<procedure pretty-format>".
6.mo:Expected error in mat pretty-print: "pretty-format: 3 is not a symbol".
6.mo:Expected error in mat pretty-print: "pretty-format: invalid format (bad 0 ... ... 0 format)".
@ -186,9 +186,9 @@
6.mo:Expected warning in mat cp1in-verify-format-warnings: "compile: too few arguments for control string "abc~s" in call to fprintf at line 1, char 29 of testfile.ss".
6.mo:Expected warning in mat cp1in-verify-format-warnings: "compile: too many arguments for control string "~%~abc~adef~ag~s~~~%" in call to fprintf at line 1, char 29 of testfile.ss".
6.mo:Expected error in mat print-parameters: "write: cycle detected; proceeding with (print-graph #t)".
--- 3965,3974 ----
--- 4010,4019 ----
***************
*** 6914,6920 ****
*** 6959,6965 ****
7.mo:Expected error in mat maybe-compile: "separate-compile: Exception in include: failed for testfile-mc-1a.ss: no such file or directory
7.mo:Expected error in mat maybe-compile: "separate-compile: Exception in maybe-compile-library: failed for "testfile-mc-1a.ss": no such file or directory
7.mo:Expected error in mat maybe-compile: "separate-compile: Exception in maybe-compile-library: file "testfile-mc-1a.ss" not found in source directories
@ -196,7 +196,7 @@
7.mo:Expected error in mat eval: "interpret: 7 is not an environment".
7.mo:Expected error in mat eval: "compile: 7 is not an environment".
7.mo:Expected error in mat expand: "sc-expand: 7 is not an environment".
--- 6914,6920 ----
--- 6959,6965 ----
7.mo:Expected error in mat maybe-compile: "separate-compile: Exception in include: failed for testfile-mc-1a.ss: no such file or directory
7.mo:Expected error in mat maybe-compile: "separate-compile: Exception in maybe-compile-library: failed for "testfile-mc-1a.ss": no such file or directory
7.mo:Expected error in mat maybe-compile: "separate-compile: Exception in maybe-compile-library: file "testfile-mc-1a.ss" not found in source directories
@ -205,7 +205,7 @@
7.mo:Expected error in mat eval: "compile: 7 is not an environment".
7.mo:Expected error in mat expand: "sc-expand: 7 is not an environment".
***************
*** 7050,7057 ****
*** 7095,7102 ****
7.mo:Expected error in mat bytes-allocated: "bytes-allocated: invalid space gnu".
7.mo:Expected error in mat error: "a: hit me!".
7.mo:Expected error in mat error: "f: n is 0".
@ -214,7 +214,7 @@
record.mo:Expected error in mat record2: "invalid value 3 for foreign type double-float".
record.mo:Expected error in mat record2: "3 is not of type #<record type fudge>".
record.mo:Expected error in mat record2: "make-record-type: invalid field list ((immutable double-float a) . b)".
--- 7050,7057 ----
--- 7095,7102 ----
7.mo:Expected error in mat bytes-allocated: "bytes-allocated: invalid space gnu".
7.mo:Expected error in mat error: "a: hit me!".
7.mo:Expected error in mat error: "f: n is 0".
@ -224,7 +224,7 @@
record.mo:Expected error in mat record2: "3 is not of type #<record type fudge>".
record.mo:Expected error in mat record2: "make-record-type: invalid field list ((immutable double-float a) . b)".
***************
*** 7059,7073 ****
*** 7104,7118 ****
record.mo:Expected error in mat type-descriptor: "invalid syntax (type-descriptor 3)".
record.mo:Expected error in mat type-descriptor: "type-descriptor: unrecognized record car".
record.mo:Expected error in mat record3: "variable set-fudge-a! is not bound".
@ -240,7 +240,7 @@
record.mo:Expected error in mat record9: "record-reader: invalid input #f".
record.mo:Expected error in mat record9: "record-reader: invalid second argument fudge".
record.mo:Expected error in mat record9: "record-reader: invalid second argument fudge".
--- 7059,7073 ----
--- 7104,7118 ----
record.mo:Expected error in mat type-descriptor: "invalid syntax (type-descriptor 3)".
record.mo:Expected error in mat type-descriptor: "type-descriptor: unrecognized record car".
record.mo:Expected error in mat record3: "variable set-fudge-a! is not bound".
@ -257,7 +257,7 @@
record.mo:Expected error in mat record9: "record-reader: invalid second argument fudge".
record.mo:Expected error in mat record9: "record-reader: invalid second argument fudge".
***************
*** 7080,7105 ****
*** 7125,7150 ****
record.mo:Expected error in mat record10: "read: unresolvable cycle constructing record of type #<record type bar> at char 3 of #<input port string>".
record.mo:Expected error in mat record16: "read: unresolvable cycle constructing record of type #<record type bazar> at char 3 of #<input port string>".
record.mo:Expected error in mat record16: "read: unresolvable cycle constructing record of type #<record type bazar> at char 3 of #<input port string>".
@ -284,7 +284,7 @@
record.mo:Expected error in mat foreign-data: "foreign-alloc: 0 is not a positive fixnum".
record.mo:Expected error in mat foreign-data: "foreign-alloc: <int> is not a positive fixnum".
record.mo:Expected error in mat foreign-data: "foreign-alloc: -5 is not a positive fixnum".
--- 7080,7105 ----
--- 7125,7150 ----
record.mo:Expected error in mat record10: "read: unresolvable cycle constructing record of type #<record type bar> at char 3 of #<input port string>".
record.mo:Expected error in mat record16: "read: unresolvable cycle constructing record of type #<record type bazar> at char 3 of #<input port string>".
record.mo:Expected error in mat record16: "read: unresolvable cycle constructing record of type #<record type bazar> at char 3 of #<input port string>".
@ -312,7 +312,7 @@
record.mo:Expected error in mat foreign-data: "foreign-alloc: <int> is not a positive fixnum".
record.mo:Expected error in mat foreign-data: "foreign-alloc: -5 is not a positive fixnum".
***************
*** 7221,7259 ****
*** 7266,7304 ****
record.mo:Expected error in mat record22: "invalid field specifier (immutable creepy q)".
record.mo:Expected error in mat record22: "invalid field specifier (immutable creepy q)".
record.mo:Expected error in mat record23: "make-record-type: cannot extend sealed record type #<record type foo>".
@ -352,7 +352,7 @@
record.mo:Expected error in mat record?: "record?: 4 is not a record type descriptor".
record.mo:Expected error in mat record?: "record?: a is not a record type descriptor".
record.mo:Expected error in mat record?: "record?: #(1) is not a record type descriptor".
--- 7221,7259 ----
--- 7266,7304 ----
record.mo:Expected error in mat record22: "invalid field specifier (immutable creepy q)".
record.mo:Expected error in mat record22: "invalid field specifier (immutable creepy q)".
record.mo:Expected error in mat record23: "make-record-type: cannot extend sealed record type #<record type foo>".
@ -393,7 +393,7 @@
record.mo:Expected error in mat record?: "record?: a is not a record type descriptor".
record.mo:Expected error in mat record?: "record?: #(1) is not a record type descriptor".
***************
*** 7279,7314 ****
*** 7324,7359 ****
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-syntactic: "invalid syntax point".
@ -430,7 +430,7 @@
record.mo:Expected error in mat r6rs-records-syntactic: "record-rtd: #<ex3> is not a record".
record.mo:Expected error in mat r6rs-records-syntactic: "record-rtd: #<ex3> is not a record".
record.mo:Expected error in mat r6rs-records-syntactic: "parent record type is sealed ex3".
--- 7279,7314 ----
--- 7324,7359 ----
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-syntactic: "invalid syntax point".
@ -468,7 +468,7 @@
record.mo:Expected error in mat r6rs-records-syntactic: "record-rtd: #<ex3> is not a record".
record.mo:Expected error in mat r6rs-records-syntactic: "parent record type is sealed ex3".
***************
*** 9876,9885 ****
*** 9921,9930 ****
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 (andmap symbol? (syntax (x ...)))".
@ -479,7 +479,7 @@
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-set! is not bound".
--- 9876,9885 ----
--- 9921,9930 ----
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 (andmap symbol? (syntax (x ...)))".

View File

@ -1,5 +1,5 @@
*** errors-compile-3-f-f-f 2017-03-14 23:50:07.000000000 -0400
--- errors-interpret-3-f-f-f 2017-03-15 00:26:52.000000000 -0400
*** errors-compile-3-f-f-f 2017-03-15 14:40:40.405994677 -0400
--- errors-interpret-3-f-f-f 2017-03-15 14:58:08.035311732 -0400
***************
*** 1,3 ****
--- 1,9 ----

View File

@ -1,5 +1,5 @@
*** errors-compile-3-f-t-f 2017-03-14 23:56:31.000000000 -0400
--- errors-interpret-3-f-t-f 2017-03-15 00:17:15.000000000 -0400
*** errors-compile-3-f-t-f 2017-03-15 14:55:31.783838227 -0400
--- errors-interpret-3-f-t-f 2017-03-15 15:00:39.238802247 -0400
***************
*** 1,3 ****
--- 1,9 ----

View File

@ -1,5 +1,5 @@
*** errors-compile-3-t-f-f 2016-06-06 20:40:53.944458100 -0400
--- errors-interpret-3-t-f-f 2016-06-06 21:50:19.270923200 -0400
*** errors-compile-3-t-f-f 2017-03-15 14:52:21.788478423 -0400
--- errors-interpret-3-t-f-f 2017-03-15 15:29:24.979528265 -0400
***************
*** 1,3 ****
--- 1,9 ----

View File

@ -1,5 +1,5 @@
*** errors-compile-3-t-t-f 2016-06-06 20:35:36.101034000 -0400
--- errors-interpret-3-t-t-f 2016-06-06 21:55:56.687725100 -0400
*** errors-compile-3-t-t-f 2017-03-15 14:49:04.970141609 -0400
--- errors-interpret-3-t-t-f 2017-03-15 15:32:47.443984424 -0400
***************
*** 1,3 ****
--- 1,9 ----

View File

@ -58,6 +58,16 @@ Online versions of both books can be found at
%-----------------------------------------------------------------------------
\section{Functionality Changes}\label{section:functionality}
\subsection{Immutable vectors, fxvectors, bytevectors, strings, and boxes (9.4.1)}
Support for immutable vectors, fxvectors, bytevectors, strings, and boxes
has been added.
Immutable vectors are created via \scheme{vector->immutable-vector},
and immutable fxvectors, bytevectors, and strings are created by similarly named
procedures.
Immutable boxes are created via \scheme{box-immutable}.
Any attempt to modify an immutable object causes an exception to be raised.
\subsection{Optional timeout for \protect\scheme{condition-wait} (9.4.1)}
The \scheme{condition-wait} procedure now takes an optional

104
s/cp0.ss
View File

@ -1876,6 +1876,25 @@
xval]
[else #f])))))
; could handle inequalies as well (returning #f), but that seems less likely to crop up
(define handle-equality
(lambda (ctxt arg arg*)
(and
(or (null? arg*)
(nanopass-case (Lsrc Expr) (result-exp (value-visit-operand! arg))
[(ref ,maybe-src ,x0)
(and (not (prelex-was-assigned x0))
(andmap
(lambda (arg)
(and (nanopass-case (Lsrc Expr) (result-exp (value-visit-operand! arg))
[(ref ,maybe-src ,x) (eq? x x0)]
[else #f])))
arg*))]
[else #f]))
(begin
(residualize-seq '() (cons arg arg*) ctxt)
true-rec))))
(define-inline 2 machine-type
[() (begin
(residualize-seq '() '() ctxt)
@ -2128,19 +2147,16 @@
[args #f])
(define-inline 2 (eq? eqv? equal?)
[(x y)
(let ([xval (value-visit-operand! x)]
[yval (value-visit-operand! y)])
(and (nanopass-case (Lsrc Expr) (result-exp xval)
[(ref ,maybe-src0 ,x0)
(and (not (prelex-was-assigned x0))
(nanopass-case (Lsrc Expr) (result-exp yval)
[(ref ,maybe-src1 ,x1) (eq? x0 x1)]
[else #f]))]
[else #f])
(begin
(residualize-seq '() (list x y) ctxt)
true-rec)))])
[(arg1 arg2) (handle-equality ctxt arg1 (list arg2))])
(define-inline 3 (bytevector=? enum-set=? bound-identifier=? free-identifier=? ftype-pointer=? literal-identifier=? time=?)
[(arg1 arg2) (handle-equality ctxt arg1 (list arg2))])
(define-inline 3 (char=? char-ci=? string=? string-ci=?)
[(arg . arg*) (handle-equality ctxt arg arg*)])
(define-inline 3 (boolean=? symbol=? r6rs:char=? r6rs:char-ci=? r6rs:string=? r6rs:string-ci=?)
[(arg1 arg2 . arg*) (handle-equality ctxt arg1 (cons arg2 arg*))])
(define-inline 3 (ash
bitwise-arithmetic-shift bitwise-arithmetic-shift-left
@ -2343,41 +2359,37 @@
(let ()
(define $fold
(case-lambda
[(generic-op orig-opnd* pred* opred ctxt) ($fold generic-op orig-opnd* pred* opred ctxt #f)]
[(generic-op orig-opnd* pred* opred ctxt maybe-sc-handler)
(define cookie '(fig . newton))
(and (okay-to-handle?)
(or (let loop ([opnd* orig-opnd*] [pred* pred*] [rval* '()])
(if (null? opnd*)
(let ([val (guard (c [#t cookie]) (apply generic-op (reverse rval*)))])
(and (not (eq? val cookie))
(opred val)
(begin
(residualize-seq '() orig-opnd* ctxt)
`(quote ,val))))
(let-values ([(pred pred*) (if (procedure? pred*) (values pred* pred*) (values (car pred*) (cdr pred*)))])
(visit-and-maybe-extract* pred ([val (car opnd*)])
(loop (cdr opnd*) pred* (cons val rval*))))))
(and maybe-sc-handler (maybe-sc-handler))))]))
(lambda (generic-op orig-opnd* pred* opred level ctxt handler)
(define cookie '(fig . newton))
(and (okay-to-handle?)
(or (let loop ([opnd* orig-opnd*] [pred* pred*] [rval* '()])
(if (null? opnd*)
(let ([val (guard (c [#t cookie]) (apply generic-op (reverse rval*)))])
(and (not (eq? val cookie))
(opred val)
(begin
(residualize-seq '() orig-opnd* ctxt)
`(quote ,val))))
(let-values ([(pred pred*) (if (procedure? pred*) (values pred* pred*) (values (car pred*) (cdr pred*)))])
(visit-and-maybe-extract* pred ([val (car opnd*)])
(loop (cdr opnd*) pred* (cons val rval*))))))
(apply handler level ctxt orig-opnd*)))))
(define null-handler (lambda args #f))
(define-syntax fold
(lambda (x)
(syntax-case x ()
[(_ (prim ipred ...) opred generic-op)
(with-syntax ([(arg ...) (generate-temporaries #'(ipred ...))])
#'(define-inline 2 prim
[(arg ...) ($fold generic-op (list arg ...) (list ipred ...) opred ctxt)]))]
[(_ (prim ipred ... . rpred) opred generic-op)
(with-syntax ([(arg ...) (generate-temporaries #'(ipred ...))])
#'(define-inline 2 prim
[(arg ... . rest) ($fold generic-op (cons* arg ... rest) (cons* ipred ... rpred) opred ctxt)]))]
[(_ (prim ipred ...) opred generic-op ?special-case-handler)
[(_ (prim ipred ...) opred generic-op) #'(fold (prim ipred ...) opred generic-op null-handler)]
[(_ (prim ipred ...) opred generic-op handler)
(with-syntax ([(arg ...) (generate-temporaries #'(ipred ...))])
#'(define-inline 2 prim
[(arg ...)
(let ([special-case-handler ?special-case-handler])
($fold generic-op (list arg ...) (list ipred ...) opred ctxt
(lambda () (special-case-handler level ctxt arg ...))))]))])))
($fold generic-op (list arg ...) (list ipred ...) opred level ctxt handler)]))]
[(_ (prim ipred ... . rpred) opred generic-op) #'(fold (prim ipred ... . rpred) opred generic-op null-handler)]
[(_ (prim ipred ... . rpred) opred generic-op handler)
(with-syntax ([(arg ...) (generate-temporaries #'(ipred ...))])
#'(define-inline 2 prim
[(arg ... . rest)
($fold generic-op (cons* arg ... rest) (cons* ipred ... rpred) opred level ctxt handler)]))])))
(define tfixnum? target-fixnum?)
(define u<=fxwidth?
@ -2399,12 +2411,16 @@
(fold (fx< tfixnum? . tfixnum?) boolean? #2%<)
(fold (fx<= tfixnum? . tfixnum?) boolean? #2%<=)
(fold (fx= tfixnum? . tfixnum?) boolean? #2%=)
(fold (fx= tfixnum? . tfixnum?) boolean? #2%=
(lambda (level ctxt arg . arg*)
(and (fx= level 3) (handle-equality ctxt arg arg*))))
(fold (fx> tfixnum? . tfixnum?) boolean? #2%>)
(fold (fx>= tfixnum? . tfixnum?) boolean? #2%>=)
(fold (fx<? tfixnum? tfixnum? . tfixnum?) boolean? #2%<)
(fold (fx<=? tfixnum? tfixnum? . tfixnum?) boolean? #2%<=)
(fold (fx=? tfixnum? tfixnum? . tfixnum?) boolean? #2%=)
(fold (fx=? tfixnum? tfixnum? . tfixnum?) boolean? #2%=
(lambda (level ctxt arg . arg*)
(and (fx= level 3) (handle-equality ctxt arg arg*))))
(fold (fx>? tfixnum? tfixnum? . tfixnum?) boolean? #2%>)
(fold (fx>=? tfixnum? tfixnum? . tfixnum?) boolean? #2%>=)
(fold ($fxu< tfixnum? tfixnum?) boolean?

View File

@ -12038,56 +12038,60 @@
(jump ,%ref-ret (,%ac0))))]
[(bytevector=?)
(let ([bv1 (make-tmp 'bv1)] [bv2 (make-tmp 'bv2)] [idx (make-tmp 'idx)] [len2 (make-tmp 'len2)])
(let ([Ltop (make-local-label 'Ltop)] [Lfail (make-local-label 'Lfail)])
(let ([Ltop (make-local-label 'Ltop)] [Ltrue (make-local-label 'Ltrue)] [Lfail (make-local-label 'Lfail)])
(define iptr-bytes (in-context Triv (%constant ptr-bytes)))
`(lambda ,(make-info "bytevector=?" '(2)) 0 (,bv1 ,bv2 ,idx ,len2)
,(%seq
(set! ,bv1 ,(make-arg-opnd 1))
(set! ,bv2 ,(make-arg-opnd 2))
(set! ,idx ,(%inline srl
,(%mref ,bv1 ,(constant bytevector-type-disp))
,(%constant bytevector-length-offset)))
(set! ,len2 ,(%inline srl
,(%mref ,bv2 ,(constant bytevector-type-disp))
,(%constant bytevector-length-offset)))
(if ,(%inline eq? ,len2 ,idx)
(if ,(%inline eq? ,bv1 ,bv2)
(goto ,Ltrue)
,(%seq
(label ,Ltop)
(if ,(%inline >= ,idx ,iptr-bytes)
(if ,(%inline eq?
,(%mref ,bv1 ,(constant bytevector-data-disp))
,(%mref ,bv2 ,(constant bytevector-data-disp)))
,(%seq
(set! ,idx ,(%inline - ,idx ,iptr-bytes))
(set! ,bv1 ,(%inline + ,bv1 ,iptr-bytes))
(set! ,bv2 ,(%inline + ,bv2 ,iptr-bytes))
(goto ,Ltop))
(goto ,Lfail))
(if (if ,(%inline eq? ,idx (immediate 0))
(true)
,(%seq
(set! ,bv1 ,(%mref ,bv1 ,(constant bytevector-data-disp)))
(set! ,bv2 ,(%mref ,bv2 ,(constant bytevector-data-disp)))
(set! ,idx ,(%inline - ,iptr-bytes ,idx))
(set! ,idx ,(%inline sll ,idx (immediate 3)))
,(constant-case native-endianness
[(little)
(%seq
(set! ,bv1 ,(%inline sll ,bv1 ,idx))
(set! ,bv2 ,(%inline sll ,bv2 ,idx)))]
[(big)
(%seq
(set! ,bv1 ,(%inline srl ,bv1 ,idx))
(set! ,bv2 ,(%inline srl ,bv2 ,idx)))])
,(%inline eq? ,bv1 ,bv2)))
,(%seq
(set! ,%ac0 ,(%constant strue))
(jump ,%ref-ret (,%ac0)))
(goto ,Lfail))))
,(%seq
(label ,Lfail)
(set! ,%ac0 ,(%constant sfalse))
(jump ,%ref-ret (,%ac0))))))))]
(set! ,idx ,(%inline srl
,(%mref ,bv1 ,(constant bytevector-type-disp))
,(%constant bytevector-length-offset)))
(set! ,len2 ,(%inline srl
,(%mref ,bv2 ,(constant bytevector-type-disp))
,(%constant bytevector-length-offset)))
(if ,(%inline eq? ,len2 ,idx)
,(%seq
(label ,Ltop)
(if ,(%inline >= ,idx ,iptr-bytes)
(if ,(%inline eq?
,(%mref ,bv1 ,(constant bytevector-data-disp))
,(%mref ,bv2 ,(constant bytevector-data-disp)))
,(%seq
(set! ,idx ,(%inline - ,idx ,iptr-bytes))
(set! ,bv1 ,(%inline + ,bv1 ,iptr-bytes))
(set! ,bv2 ,(%inline + ,bv2 ,iptr-bytes))
(goto ,Ltop))
(goto ,Lfail))
(if (if ,(%inline eq? ,idx (immediate 0))
(true)
,(%seq
(set! ,bv1 ,(%mref ,bv1 ,(constant bytevector-data-disp)))
(set! ,bv2 ,(%mref ,bv2 ,(constant bytevector-data-disp)))
(set! ,idx ,(%inline - ,iptr-bytes ,idx))
(set! ,idx ,(%inline sll ,idx (immediate 3)))
,(constant-case native-endianness
[(little)
(%seq
(set! ,bv1 ,(%inline sll ,bv1 ,idx))
(set! ,bv2 ,(%inline sll ,bv2 ,idx)))]
[(big)
(%seq
(set! ,bv1 ,(%inline srl ,bv1 ,idx))
(set! ,bv2 ,(%inline srl ,bv2 ,idx)))])
,(%inline eq? ,bv1 ,bv2)))
,(%seq
(label ,Ltrue)
(set! ,%ac0 ,(%constant strue))
(jump ,%ref-ret (,%ac0)))
(goto ,Lfail))))
,(%seq
(label ,Lfail)
(set! ,%ac0 ,(%constant sfalse))
(jump ,%ref-ret (,%ac0))))))))))]
[(dofargint32) (make-dofargint "dofargint32" 32 (intrinsic-entry-live* dofargint32) (intrinsic-return-live* dofargint32))]
[(dofargint64) (make-dofargint "dofargint64" 64 (intrinsic-entry-live* dofargint64) (intrinsic-return-live* dofargint64))]
[(dofretint32) (make-dofretint "doretint32" 32 (intrinsic-entry-live* dofretint32) (intrinsic-return-live* dofretint32))]

View File

@ -252,7 +252,7 @@
((r6rs: string->number) [sig [(string) (string sub-ufixnum) -> (maybe-number)]] [flags discard ieee r5rs]) ; radix restricted to 2, 4, 8, 16
(not [sig [(ptr) -> (boolean)]] [flags pure unrestricted mifoldable discard ieee r5rs cp02])
(boolean? [sig [(ptr) -> (boolean)]] [flags pure unrestricted mifoldable discard ieee r5rs])
(boolean=? [sig [(boolean boolean boolean ...) -> (boolean)]] [flags pure mifoldable discard])
(boolean=? [sig [(boolean boolean boolean ...) -> (boolean)]] [flags pure mifoldable discard cp03])
(pair? [sig [(ptr) -> (boolean)]] [flags pure unrestricted mifoldable discard ieee r5rs])
(cons [sig [(ptr ptr) -> (#1=(ptr . ptr))]] [flags unrestricted alloc ieee r5rs])
; c..r non-alphabetic so marks come before references
@ -298,14 +298,14 @@
(for-each [sig [(procedure list list ...) -> (ptr ...)]] [flags cp03 ieee r5rs])
(symbol? [sig [(ptr) -> (boolean)]] [flags pure unrestricted mifoldable discard ieee r5rs])
(symbol->string [sig [(symbol) -> (string)]] [flags true mifoldable discard ieee r5rs])
(symbol=? [sig [(symbol symbol symbol ...) -> (boolean)]] [flags pure mifoldable discard])
(symbol=? [sig [(symbol symbol symbol ...) -> (boolean)]] [flags pure mifoldable discard cp03])
(string->symbol [sig [(string) -> (symbol)]] [flags true mifoldable discard ieee r5rs])
(char? [sig [(ptr) -> (boolean)]] [flags pure unrestricted mifoldable discard ieee r5rs])
(char->integer [sig [(char) -> (fixnum)]] [flags pure mifoldable discard true ieee r5rs])
(integer->char [sig [(sub-ufixnum) -> (char)]] [flags pure mifoldable discard true ieee r5rs])
((r6rs: char<=?) [sig [(char char char ...) -> (boolean)]] [flags pure mifoldable discard ieee r5rs]) ; restricted to 2+ arguments
((r6rs: char<?) [sig [(char char char ...) -> (boolean)]] [flags pure mifoldable discard ieee r5rs]) ; restricted to 2+ arguments
((r6rs: char=?) [sig [(char char char ...) -> (boolean)]] [flags pure mifoldable discard ieee r5rs]) ; restricted to 2+ arguments
((r6rs: char=?) [sig [(char char char ...) -> (boolean)]] [flags pure mifoldable discard ieee r5rs cp03]) ; restricted to 2+ arguments
((r6rs: char>=?) [sig [(char char char ...) -> (boolean)]] [flags pure mifoldable discard ieee r5rs]) ; restricted to 2+ arguments
((r6rs: char>?) [sig [(char char char ...) -> (boolean)]] [flags pure mifoldable discard ieee r5rs]) ; restricted to 2+ arguments
(string? [sig [(ptr) -> (boolean)]] [flags pure unrestricted mifoldable discard ieee r5rs])
@ -315,7 +315,7 @@
(string-ref [sig [(string sub-index) -> (ptr)]] [flags true ieee r5rs mifoldable discard cp02])
((r6rs: string<=?) [sig [(string string string ...) -> (boolean)]] [flags mifoldable discard ieee r5rs]) ; restricted to 2+ arguments
((r6rs: string<?) [sig [(string string string ...) -> (boolean)]] [flags mifoldable discard ieee r5rs]) ; restricted to 2+ arguments
((r6rs: string=?) [sig [(string string string ...) -> (boolean)]] [flags mifoldable discard ieee r5rs]) ; restricted to 2+ arguments
((r6rs: string=?) [sig [(string string string ...) -> (boolean)]] [flags mifoldable discard ieee r5rs cp03]) ; restricted to 2+ arguments
((r6rs: string>=?) [sig [(string string string ...) -> (boolean)]] [flags mifoldable discard ieee r5rs]) ; restricted to 2+ arguments
((r6rs: string>?) [sig [(string string string ...) -> (boolean)]] [flags mifoldable discard ieee r5rs]) ; restricted to 2+ arguments
(substring [sig [(string sub-length sub-length) -> (string)]] [flags alloc ieee r5rs])
@ -354,7 +354,7 @@
(bytevector? [sig [(ptr) -> (boolean)]] [flags pure unrestricted mifoldable discard])
(make-bytevector [sig [(length) (length u8/s8) -> (bytevector)]] [flags alloc])
(bytevector-length [sig [(bytevector) -> (length)]] [flags true mifoldable discard])
(bytevector=? [sig [(bytevector bytevector) -> (boolean)]] [flags mifoldable discard])
(bytevector=? [sig [(bytevector bytevector) -> (boolean)]] [flags mifoldable discard cp03])
(bytevector-fill! [sig [(bytevector u8/s8) -> (void)]] [flags true])
(bytevector-copy! [sig [(bytevector sub-length bytevector sub-length sub-length) -> (void)]] [flags true])
(bytevector-copy [sig [(bytevector) -> (bytevector)]] [flags alloc])
@ -431,7 +431,7 @@
(enum-set->list [sig [(enum-set) -> (list)]] [flags pure mifoldable discard alloc])
(enum-set-member? [sig [(symbol enum-set) -> (boolean)]] [flags pure mifoldable discard])
(enum-set-subset? [sig [(enum-set enum-set) -> (boolean)]] [flags pure mifoldable discard])
(enum-set=? [sig [(enum-set enum-set) -> (boolean)]] [flags pure mifoldable discard])
(enum-set=? [sig [(enum-set enum-set) -> (boolean)]] [flags pure mifoldable discard cp03])
(enum-set-union [sig [(enum-set enum-set) -> (enum-set)]] [flags pure alloc])
(enum-set-intersection [sig [(enum-set enum-set) -> (enum-set)]] [flags pure alloc])
(enum-set-difference [sig [(enum-set enum-set) -> (enum-set)]] [flags pure alloc])
@ -795,8 +795,8 @@
(define-symbol-flags* ([libraries (rnrs) (rnrs syntax-case)] [flags primitive proc])
(make-variable-transformer [sig [(procedure) -> (ptr)]] [flags pure mifoldable discard])
(identifier? [sig [(ptr) -> (boolean)]] [flags pure unrestricted mifoldable discard])
(bound-identifier=? [sig [(identifier identifier) -> (boolean)]] [flags pure mifoldable discard])
(free-identifier=? [sig [(identifier identifier) -> (boolean)]] [flags pure mifoldable discard])
(bound-identifier=? [sig [(identifier identifier) -> (boolean)]] [flags pure mifoldable discard cp03])
(free-identifier=? [sig [(identifier identifier) -> (boolean)]] [flags pure mifoldable discard cp03])
(syntax->datum [sig [(ptr) -> (ptr)]] [flags pure unrestricted mifoldable discard])
(datum->syntax [sig [(identifier ptr) -> (ptr)]] [flags pure mifoldable discard])
(generate-temporaries [sig [(list) -> (list)]] [flags alloc])
@ -810,7 +810,7 @@
(char-foldcase [sig [(char) -> (char)]] [flags pure mifoldable discard])
((r6rs: char-ci<=?) [sig [(char char char ...) -> (boolean)]] [flags pure mifoldable discard ieee r5rs]) ; restricted to 2+ arguments
((r6rs: char-ci<?) [sig [(char char char ...) -> (boolean)]] [flags pure mifoldable discard ieee r5rs]) ; restricted to 2+ arguments
((r6rs: char-ci=?) [sig [(char char char ...) -> (boolean)]] [flags pure mifoldable discard ieee r5rs]) ; restricted to 2+ arguments
((r6rs: char-ci=?) [sig [(char char char ...) -> (boolean)]] [flags pure mifoldable discard ieee r5rs cp03]) ; restricted to 2+ arguments
((r6rs: char-ci>=?) [sig [(char char char ...) -> (boolean)]] [flags pure mifoldable discard ieee r5rs]) ; restricted to 2+ arguments
((r6rs: char-ci>?) [sig [(char char char ...) -> (boolean)]] [flags pure mifoldable discard ieee r5rs]) ; restricted to 2+ arguments
(char-alphabetic? [sig [(char) -> (boolean)]] [flags pure mifoldable discard ieee r5rs])
@ -826,7 +826,7 @@
(string-foldcase [sig [(string) -> (string)]] [flags mifoldable discard])
((r6rs: string-ci<=?) [sig [(string string string ...) -> (boolean)]] [flags mifoldable discard ieee r5rs]) ; restricted to 2+ arguments
((r6rs: string-ci<?) [sig [(string string string ...) -> (boolean)]] [flags mifoldable discard ieee r5rs]) ; restricted to 2+ arguments
((r6rs: string-ci=?) [sig [(string string string ...) -> (boolean)]] [flags mifoldable discard ieee r5rs]) ; restricted to 2+ arguments
((r6rs: string-ci=?) [sig [(string string string ...) -> (boolean)]] [flags mifoldable discard ieee r5rs cp03]) ; restricted to 2+ arguments
((r6rs: string-ci>=?) [sig [(string string string ...) -> (boolean)]] [flags mifoldable discard ieee r5rs]) ; restricted to 2+ arguments
((r6rs: string-ci>?) [sig [(string string string ...) -> (boolean)]] [flags mifoldable discard ieee r5rs]) ; restricted to 2+ arguments
(string-normalize-nfd [sig [(string) -> (string)]] [flags mifoldable discard])
@ -874,7 +874,7 @@
(subtract-duration (sig [(time time) -> (time)]) [flags alloc])
(subtract-duration! (sig [(time time) -> (time)]) [flags alloc])
(time? [sig [(ptr) -> (boolean)]] [flags pure unrestricted mifoldable discard])
(time=? [sig [(time time) -> (boolean)]] [flags mifoldable discard])
(time=? [sig [(time time) -> (boolean)]] [flags mifoldable discard cp03])
(time<? [sig [(time time) -> (boolean)]] [flags mifoldable discard])
(time<=? [sig [(time time) -> (boolean)]] [flags mifoldable discard])
(time>=? [sig [(time time) -> (boolean)]] [flags mifoldable discard])
@ -1171,13 +1171,13 @@
(cflonum? [sig [(ptr) -> (boolean)]] [flags pure unrestricted mifoldable discard])
(char<=? [sig [(char char ...) -> (boolean)]] [flags pure mifoldable discard]) ; not restricted to 2+ arguments
(char<? [sig [(char char ...) -> (boolean)]] [flags pure mifoldable discard]) ; not restricted to 2+ arguments
(char=? [sig [(char char ...) -> (boolean)]] [flags pure mifoldable discard]) ; not restricted to 2+ arguments
(char=? [sig [(char char ...) -> (boolean)]] [flags pure mifoldable discard cp03]) ; not restricted to 2+ arguments
(char>=? [sig [(char char ...) -> (boolean)]] [flags pure mifoldable discard]) ; not restricted to 2+ arguments
(char>? [sig [(char char ...) -> (boolean)]] [flags pure mifoldable discard]) ; not restricted to 2+ arguments
(char- [sig [(char char) -> (fixnum)]] [flags pure mifoldable discard true])
(char-ci<=? [sig [(char char ...) -> (boolean)]] [flags pure mifoldable discard]) ; not restricted to 2+ arguments
(char-ci<? [sig [(char char ...) -> (boolean)]] [flags pure mifoldable discard]) ; not restricted to 2+ arguments
(char-ci=? [sig [(char char ...) -> (boolean)]] [flags pure mifoldable discard]) ; not restricted to 2+ arguments
(char-ci=? [sig [(char char ...) -> (boolean)]] [flags pure mifoldable discard cp03]) ; not restricted to 2+ arguments
(char-ci>=? [sig [(char char ...) -> (boolean)]] [flags pure mifoldable discard]) ; not restricted to 2+ arguments
(char-ci>? [sig [(char char ...) -> (boolean)]] [flags pure mifoldable discard]) ; not restricted to 2+ arguments
(char-name [sig [(sub-ptr) (sub-symbol maybe-char) -> (ptr)]] [flags])
@ -1295,7 +1295,7 @@
(format-condition? [sig [(ptr) -> (boolean)]] [flags pure unrestricted mifoldable discard])
(fprintf [sig [(textual-output-port string sub-ptr ...) -> (void)]] [flags true])
(fresh-line [sig [() (textual-output-port) -> (void)]] [flags true])
(ftype-pointer=? [sig [(ftype-pointer ftype-pointer) -> (boolean)]] [flags pure mifoldable discard])
(ftype-pointer=? [sig [(ftype-pointer ftype-pointer) -> (boolean)]] [flags pure mifoldable discard cp03])
(ftype-pointer-address [sig [(ftype-pointer) -> (exact-integer)]] [flags mifoldable discard true])
(ftype-pointer-ftype [sig [(ftype-pointer) -> (ptr)]] [flags mifoldable discard true])
(ftype-pointer-null? [sig [(ftype-pointer) -> (boolean)]] [flags pure mifoldable discard])
@ -1378,7 +1378,7 @@
(list->fxvector [sig [(sub-list) -> (fxvector)]] [flags alloc])
(list-copy [sig [(list) -> (list)]] [flags alloc])
(list-head [sig [(sub-ptr sub-index) -> (ptr)]] [flags alloc])
(literal-identifier=? [sig [(identifier identifier) -> (boolean)]] [flags pure mifoldable discard])
(literal-identifier=? [sig [(identifier identifier) -> (boolean)]] [flags pure mifoldable discard cp03])
(load [sig [(pathname) (pathname procedure) -> (void)]] [flags true ieee r5rs])
(load-library [sig [(pathname) (pathname procedure) -> (void)]] [flags true])
(profile-load-data [sig [(pathname) -> (void)]] [flags true])
@ -1598,12 +1598,12 @@
(string->number [sig [(string) (string sub-ufixnum) -> (maybe-number)]] [flags discard]) ; radix not restricted to 2, 4, 8, 16
(string<=? [sig [(string string ...) -> (boolean)]] [flags mifoldable discard]) ; not restricted to 2+ arguments
(string<? [sig [(string string ...) -> (boolean)]] [flags mifoldable discard]) ; not restricted to 2+ arguments
(string=? [sig [(string string ...) -> (boolean)]] [flags mifoldable discard]) ; not restricted to 2+ arguments
(string=? [sig [(string string ...) -> (boolean)]] [flags mifoldable discard cp03]) ; not restricted to 2+ arguments
(string>=? [sig [(string string ...) -> (boolean)]] [flags mifoldable discard]) ; not restricted to 2+ arguments
(string>? [sig [(string string ...) -> (boolean)]] [flags mifoldable discard]) ; not restricted to 2+ arguments
(string-ci<=? [sig [(string string ...) -> (boolean)]] [flags mifoldable discard ieee r5rs]) ; not restricted to 2+ arguments
(string-ci<? [sig [(string string ...) -> (boolean)]] [flags mifoldable discard ieee r5rs]) ; not restricted to 2+ arguments
(string-ci=? [sig [(string string ...) -> (boolean)]] [flags mifoldable discard ieee r5rs]) ; not restricted to 2+ arguments
(string-ci=? [sig [(string string ...) -> (boolean)]] [flags mifoldable discard ieee r5rs cp03]) ; not restricted to 2+ arguments
(string-ci>=? [sig [(string string ...) -> (boolean)]] [flags mifoldable discard ieee r5rs]) ; not restricted to 2+ arguments
(string-ci>? [sig [(string string ...) -> (boolean)]] [flags mifoldable discard ieee r5rs]) ; not restricted to 2+ arguments
(string-copy! [sig [(string sub-length string sub-length sub-length) -> (void)]] [flags true])