diff --git a/LOG b/LOG index 9cf09542f1..7b9b8d19f8 100644 --- a/LOG +++ b/LOG @@ -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 diff --git a/csug/objects.stex b/csug/objects.stex index 2beb3e0e74..2321c8901e 100644 --- a/csug/objects.stex +++ b/csug/objects.stex @@ -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 diff --git a/mats/cp0.ms b/mats/cp0.ms index a7bac69d5a..ae6bf8cafb 100644 --- a/mats/cp0.ms +++ b/mats/cp0.ms @@ -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)))) +) diff --git a/mats/patch-compile-0-f-f-t b/mats/patch-compile-0-f-f-t index 88c5c43641..243cb4ae5d 100644 --- a/mats/patch-compile-0-f-f-t +++ b/mats/patch-compile-0-f-f-t @@ -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 #". ---- 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 #". *************** -*** 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*: 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". diff --git a/mats/patch-compile-0-f-t-f b/mats/patch-compile-0-f-t-f index 9bfceb4b64..ba52fc5de6 100644 --- a/mats/patch-compile-0-f-t-f +++ b/mats/patch-compile-0-f-t-f @@ -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". diff --git a/mats/patch-compile-0-t-f-f b/mats/patch-compile-0-t-f-f index 426a07dd60..0b26f0e4e2 100644 --- a/mats/patch-compile-0-t-f-f +++ b/mats/patch-compile-0-t-f-f @@ -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 #". diff --git a/mats/patch-compile-0-t-f-t b/mats/patch-compile-0-t-f-t index f6667ba0b8..ceb3c83a52 100644 --- a/mats/patch-compile-0-t-f-t +++ b/mats/patch-compile-0-t-f-t @@ -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 #". ---- 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 #". *************** -*** 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". diff --git a/mats/patch-compile-0-t-t-f b/mats/patch-compile-0-t-t-f index 84b68511bf..2a2408e353 100644 --- a/mats/patch-compile-0-t-t-f +++ b/mats/patch-compile-0-t-t-f @@ -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.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.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 # at char 3 of #". record.mo:Expected error in mat record16: "read: unresolvable cycle constructing record of type # at char 3 of #". record.mo:Expected error in mat record16: "read: unresolvable cycle constructing record of type # at char 3 of #". @@ -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: 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 # at char 3 of #". record.mo:Expected error in mat record16: "read: unresolvable cycle constructing record of type # at char 3 of #". record.mo:Expected error in mat record16: "read: unresolvable cycle constructing record of type # at char 3 of #". @@ -142,7 +142,7 @@ record.mo:Expected error in mat foreign-data: "foreign-alloc: 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 #". @@ -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 #". @@ -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 # is not for parent of record type #". record.mo:Expected error in mat r6rs-records-procedural: "make-record-type-descriptor: cannot extend sealed record type #". 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: # is not a record". record.mo:Expected error in mat r6rs-records-syntactic: "record-rtd: # 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 # is not for parent of record type #". record.mo:Expected error in mat r6rs-records-procedural: "make-record-type-descriptor: cannot extend sealed record type #". record.mo:Expected error in mat r6rs-records-syntactic: "invalid syntax point". diff --git a/mats/patch-interpret-0-f-f-f b/mats/patch-interpret-0-f-f-f index 7e973fc2e1..d95938c137 100644 --- a/mats/patch-interpret-0-f-f-f +++ b/mats/patch-interpret-0-f-f-f @@ -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". diff --git a/mats/patch-interpret-0-f-t-f b/mats/patch-interpret-0-f-t-f index 05407d0156..03ca1bd4b5 100644 --- a/mats/patch-interpret-0-f-t-f +++ b/mats/patch-interpret-0-f-t-f @@ -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". diff --git a/mats/patch-interpret-0-t-f-f b/mats/patch-interpret-0-t-f-f index 0e7f608d34..b3055fa305 100644 --- a/mats/patch-interpret-0-t-f-f +++ b/mats/patch-interpret-0-t-f-f @@ -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 #". 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 #". 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 #". foreign.mo:Expected error in mat foreign-strings: "foreign-callable: invalid return value ("ello" 4) from #". foreign.mo:Expected error in mat foreign-strings: "foreign-callable: invalid return value ("ello" 4) from #". ---- 9199,9230 ---- +--- 9244,9275 ---- foreign.mo:Expected error in mat foreign-sizeof: "incorrect number of arguments to #". 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 #". foreign.mo:Expected error in mat foreign-strings: "foreign-callable: invalid return value ("ello" 4) from #". *************** -*** 9232,9257 **** +*** 9277,9302 **** foreign.mo:Expected error in mat foreign-strings: "foreign-callable: invalid return value ("ello" 4) from #". foreign.mo:Expected error in mat foreign-strings: "foreign-callable: invalid return value ("ello" 4) from #". foreign.mo:Expected error in mat foreign-strings: "foreign-callable: invalid return value ("ello" 4) from #". @@ -369,7 +369,7 @@ foreign.mo:Expected error in mat foreign-fixed-types: "foreign-callable: invalid return value (- x 7) from #". foreign.mo:Expected error in mat foreign-fixed-types: "foreign-callable: invalid return value (- x 7) from #". foreign.mo:Expected error in mat foreign-fixed-types: "foreign-callable: invalid return value (- x 7) from #". ---- 9232,9257 ---- +--- 9277,9302 ---- foreign.mo:Expected error in mat foreign-strings: "foreign-callable: invalid return value ("ello" 4) from #". foreign.mo:Expected error in mat foreign-strings: "foreign-callable: invalid return value ("ello" 4) from #". foreign.mo:Expected error in mat foreign-strings: "foreign-callable: invalid return value ("ello" 4) from #". @@ -397,7 +397,7 @@ foreign.mo:Expected error in mat foreign-fixed-types: "foreign-callable: invalid return value (- x 7) from #". foreign.mo:Expected error in mat foreign-fixed-types: "foreign-callable: invalid return value (- x 7) from #". *************** -*** 9262,9296 **** +*** 9307,9341 **** foreign.mo:Expected error in mat foreign-fixed-types: "foreign-callable: invalid return value (- x 7) from #". foreign.mo:Expected error in mat foreign-fixed-types: "foreign-callable: invalid return value (- x 7) from #". foreign.mo:Expected error in mat foreign-fixed-types: "foreign-callable: invalid return value (- x 7) from #". @@ -433,7 +433,7 @@ foreign.mo:Expected error in mat foreign-C-types: "foreign-callable: invalid return value (73 74) from #". foreign.mo:Expected error in mat foreign-C-types: "foreign-callable: invalid return value (73 74) from #". foreign.mo:Expected error in mat foreign-C-types: "foreign-callable: invalid return value (73 74) from #". ---- 9262,9296 ---- +--- 9307,9341 ---- foreign.mo:Expected error in mat foreign-fixed-types: "foreign-callable: invalid return value (- x 7) from #". foreign.mo:Expected error in mat foreign-fixed-types: "foreign-callable: invalid return value (- x 7) from #". foreign.mo:Expected error in mat foreign-fixed-types: "foreign-callable: invalid return value (- x 7) from #". @@ -470,7 +470,7 @@ foreign.mo:Expected error in mat foreign-C-types: "foreign-callable: invalid return value (73 74) from #". foreign.mo:Expected error in mat foreign-C-types: "foreign-callable: invalid return value (73 74) from #". *************** -*** 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 -x1 is not bound". oop.mo:Expected error in mat oop: "variable -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 ...)))". diff --git a/mats/patch-interpret-0-t-t-f b/mats/patch-interpret-0-t-t-f index 94be1beeff..3cd0ba8ea1 100644 --- a/mats/patch-interpret-0-t-t-f +++ b/mats/patch-interpret-0-t-t-f @@ -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 #". 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.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.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 # at char 3 of #". record.mo:Expected error in mat record16: "read: unresolvable cycle constructing record of type # at char 3 of #". record.mo:Expected error in mat record16: "read: unresolvable cycle constructing record of type # at char 3 of #". @@ -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: 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 # at char 3 of #". record.mo:Expected error in mat record16: "read: unresolvable cycle constructing record of type # at char 3 of #". record.mo:Expected error in mat record16: "read: unresolvable cycle constructing record of type # at char 3 of #". @@ -312,7 +312,7 @@ record.mo:Expected error in mat foreign-data: "foreign-alloc: 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 #". @@ -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 #". @@ -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 # is not for parent of record type #". record.mo:Expected error in mat r6rs-records-procedural: "make-record-type-descriptor: cannot extend sealed record type #". 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: # is not a record". record.mo:Expected error in mat r6rs-records-syntactic: "record-rtd: # 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 # is not for parent of record type #". record.mo:Expected error in mat r6rs-records-procedural: "make-record-type-descriptor: cannot extend sealed record type #". 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: # 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 -x1 is not bound". oop.mo:Expected error in mat oop: "variable -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 ...)))". diff --git a/mats/patch-interpret-3-f-f-f b/mats/patch-interpret-3-f-f-f index 1257f33134..16607f5a7f 100644 --- a/mats/patch-interpret-3-f-f-f +++ b/mats/patch-interpret-3-f-f-f @@ -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 ---- diff --git a/mats/patch-interpret-3-f-t-f b/mats/patch-interpret-3-f-t-f index 080fd2cbe3..7121cbb40d 100644 --- a/mats/patch-interpret-3-f-t-f +++ b/mats/patch-interpret-3-f-t-f @@ -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 ---- diff --git a/mats/patch-interpret-3-t-f-f b/mats/patch-interpret-3-t-f-f index 2fc10147e2..bb2fde6755 100644 --- a/mats/patch-interpret-3-t-f-f +++ b/mats/patch-interpret-3-t-f-f @@ -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 ---- diff --git a/mats/patch-interpret-3-t-t-f b/mats/patch-interpret-3-t-t-f index e065edaac8..0a0c39fd00 100644 --- a/mats/patch-interpret-3-t-t-f +++ b/mats/patch-interpret-3-t-t-f @@ -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 ---- diff --git a/release_notes/release_notes.stex b/release_notes/release_notes.stex index 50ccd52c4d..47a802941b 100644 --- a/release_notes/release_notes.stex +++ b/release_notes/release_notes.stex @@ -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 diff --git a/s/cp0.ss b/s/cp0.ss index f38fe8d9de..cdb9bddf28 100644 --- a/s/cp0.ss +++ b/s/cp0.ss @@ -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 ($fxu< tfixnum? tfixnum?) boolean? diff --git a/s/cpnanopass.ss b/s/cpnanopass.ss index 97af826aad..235542667f 100644 --- a/s/cpnanopass.ss +++ b/s/cpnanopass.ss @@ -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))] diff --git a/s/primdata.ss b/s/primdata.ss index 95db74d46d..bb66c52049 100644 --- a/s/primdata.ss +++ b/s/primdata.ss @@ -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 (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 (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 (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 (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 (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 (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 (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 (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 (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])