flvectors

svn: r17177
This commit is contained in:
Matthew Flatt 2009-12-03 16:42:32 +00:00
parent 61cc458a72
commit 4eef1b3cee
19 changed files with 878 additions and 376 deletions

View File

@ -36,7 +36,6 @@ Creates a new custodian as a subordinate of @var{m}. If @var{m} is
Places the value @var{o} into the management of the custodian Places the value @var{o} into the management of the custodian
@var{m}. If @var{m} is @cpp{NULL}, the current custodian is used. @var{m}. If @var{m} is @cpp{NULL}, the current custodian is used.
The @var{f} function is called by the custodian if it is ever asked to The @var{f} function is called by the custodian if it is ever asked to
``shutdown'' its values; @var{o} and @var{data} are passed on to ``shutdown'' its values; @var{o} and @var{data} are passed on to
@var{f}, which has the type @var{f}, which has the type
@ -52,6 +51,10 @@ be remembered until either the custodian shuts it down or
zero, the value is allowed to be garbaged collected (and automatically zero, the value is allowed to be garbaged collected (and automatically
removed from the custodian). removed from the custodian).
Independent of whether @var{strong} is zero, the value @var{o} is
initially weakly held. A value associated with a custodian can
therefore be finalized via will executors.
The return value from @cpp{scheme_add_managed} can be used to refer The return value from @cpp{scheme_add_managed} can be used to refer
to the value's custodian later in a call to to the value's custodian later in a call to
@cpp{scheme_remove_managed}. A value can be registered with at @cpp{scheme_remove_managed}. A value can be registered with at

View File

@ -849,6 +849,58 @@ Returns @scheme[#t] if the native encoding of numbers is big-endian
for the machine running Scheme, @scheme[#f] if the native encoding for the machine running Scheme, @scheme[#f] if the native encoding
is little-endian.} is little-endian.}
@; ------------------------------------------------------------------------
@section{Inexact-Real Vectors}
A @deftech{flvector} is like a @tech{vector}, but it holds only
inexact real numbers. This representation can be more compact, and
unsafe operations on @tech{flvector}s (see
@schememodname[scheme/unsafe/ops]) can execute more efficiently than
unsafe operations on @tech{vectors} of inexact reals.
An f64vector as provided by @schememodname[scheme/foreign] stores the
same kinds of values as an @tech{flvector}, but with extra
indirections that make f64vectors more convenient for working with
foreign libraries. The lack of indirections make unsafe
@tech{flvector} access more efficient.
@defproc[(flvector? [v any/c]) boolean?]{
Returns @scheme[#t] if @scheme[v] is a @tech{flvector}, @scheme[#f] otherwise.}
@defproc[(flvector [x inexact-real?] ...) flvector?]{
Creates a @tech{flvector} containing the given inexact real numbers.}
@defproc[(make-flvector [size exact-nonnegative-integer?]
[x inexact-real? 0.0])
flvector?]{
Creates a @tech{flvector} with @scheme[size] elements, where every
slot in the @tech{flvector} is filled with @scheme[x].}
@defproc[(flvector-length [vec flvector?]) exact-nonnegative-integer?]{
Returns the length of @scheme[vec] (i.e., the number of slots in the
@tech{flvector}).}
@defproc[(flvector-ref [vec flvector?] [pos exact-nonnegative-integer?])
inexact-real?]{
Returns the inexact real number in slot @scheme[pos] of
@scheme[vec]. The first slot is position @scheme[0], and the last slot
is one less than @scheme[(flvector-length vec)].}
@defproc[(flvector-set! [vec flvector?] [pos exact-nonnegative-integer?]
[x inexact-real?])
inexact-real?]{
Sets the inexact real number in slot @scheme[pos] of @scheme[vec]. The
first slot is position @scheme[0], and the last slot is one less than
@scheme[(flvector-length vec)].}
@; ------------------------------------------------------------------------ @; ------------------------------------------------------------------------
@section{Extra Constants and Functions} @section{Extra Constants and Functions}

View File

@ -169,6 +169,18 @@ Unsafe versions of @scheme[bytes-length], @scheme[bytes-ref], and
fixnum).} fixnum).}
@deftogether[(
@defproc[(unsafe-flvector-length [v flvector?]) fixnum?]
@defproc[(unsafe-flvector-ref [v flvector?][k fixnum?]) any/c]
@defproc[(unsafe-flvector-set! [v flvector?][k fixnum?][x inexact-real?]) void?]
)]{
Unsafe versions of @scheme[flvector-length], @scheme[flvector-ref], and
@scheme[flvector-set!]. A @tech{flvector}'s size can never be larger than a
@tech{fixnum} (so even @scheme[flvector-length] always returns a
fixnum).}
@deftogether[( @deftogether[(
@defproc[(unsafe-f64vector-ref [vec f64vector?][k fixnum?]) inexact-real?] @defproc[(unsafe-f64vector-ref [vec f64vector?][k fixnum?]) inexact-real?]
@defproc[(unsafe-f64vector-set! [vec f64vector?][k fixnum?][n inexact-real?]) void?] @defproc[(unsafe-f64vector-set! [vec f64vector?][k fixnum?][n inexact-real?]) void?]

View File

@ -413,6 +413,10 @@
(un-exact 'a 'unbox (box 'a)) (un-exact 'a 'unbox (box 'a))
(un-exact 3 'vector-length (vector 'a 'b 'c)) (un-exact 3 'vector-length (vector 'a 'b 'c))
(bin-exact 1.1 'flvector-ref (flvector 1.1 2.2 3.3) 0)
(bin-exact 3.3 'flvector-ref (flvector 1.1 2.2 3.3) 2)
(un-exact 3 'flvector-length (flvector 1.1 2.2 3.3))
(bin-exact #\a 'string-ref "abc\u2001" 0) (bin-exact #\a 'string-ref "abc\u2001" 0)
(bin-exact #\b 'string-ref "abc\u2001" 1) (bin-exact #\b 'string-ref "abc\u2001" 1)
(bin-exact #\c 'string-ref "abc\u2001" 2) (bin-exact #\c 'string-ref "abc\u2001" 2)
@ -454,7 +458,8 @@
'(0 1 2))))]) '(0 1 2))))])
(test-setter make-vector #f 7 'vector-set! vector-set! vector-ref) (test-setter make-vector #f 7 'vector-set! vector-set! vector-ref)
(test-setter make-bytes 0 7 'bytes-set! bytes-set! bytes-ref) (test-setter make-bytes 0 7 'bytes-set! bytes-set! bytes-ref)
(test-setter make-string #\a #\7 'string-set! string-set! string-ref)) (test-setter make-string #\a #\7 'string-set! string-set! string-ref)
(test-setter make-flvector 1.0 7.0 'flvector-set! flvector-set! flvector-ref))
)) ))

View File

@ -187,6 +187,19 @@
#:post (lambda (x) (list x (string-ref v 2))) #:post (lambda (x) (list x (string-ref v 2)))
#:literal-ok? #f)) #:literal-ok? #f))
(let ([flvector (lambda args
(let ([v (make-flvector (length args))])
(for ([a args]
[i (in-naturals)])
(flvector-set! v i a))
v))])
(test-bin 9.5 'unsafe-flvector-ref (flvector 1.0 9.5 18.7) 1)
(let ([v (flvector 1.0 9.5 18.7)])
(test-tri (list (void) 27.4) 'unsafe-flvector-set! v 2 27.4
#:pre (lambda () (flvector-set! v 2 0.0))
#:post (lambda (x) (list x (flvector-ref v 2)))
#:literal-ok? #f)))
(test-bin 9.5 'unsafe-f64vector-ref (f64vector 1.0 9.5 18.7) 1) (test-bin 9.5 'unsafe-f64vector-ref (f64vector 1.0 9.5 18.7) 1)
(let ([v (f64vector 1.0 9.5 18.7)]) (let ([v (f64vector 1.0 9.5 18.7)])
(test-tri (list (void) 27.4) 'unsafe-f64vector-set! v 2 27.4 (test-tri (list (void) 27.4) 'unsafe-f64vector-set! v 2 27.4

View File

@ -1,3 +1,6 @@
Version 4.2.3.4
Added flvectors
Version 4.2.3.3 Version 4.2.3.3
Added unsafe-f64vector-ref and unsafe-f64vector-set! Added unsafe-f64vector-ref and unsafe-f64vector-set!
Changed JIT to inline numeric ops with more than 2 arguments Changed JIT to inline numeric ops with more than 2 arguments

View File

@ -318,6 +318,12 @@ typedef struct Scheme_Vector {
Scheme_Object *els[1]; Scheme_Object *els[1];
} Scheme_Vector; } Scheme_Vector;
typedef struct Scheme_Double_Vector {
Scheme_Object so;
long size;
double els[1];
} Scheme_Double_Vector;
typedef struct Scheme_Print_Params Scheme_Print_Params; typedef struct Scheme_Print_Params Scheme_Print_Params;
typedef void (*Scheme_Type_Printer)(Scheme_Object *v, int for_display, Scheme_Print_Params *pp); typedef void (*Scheme_Type_Printer)(Scheme_Object *v, int for_display, Scheme_Print_Params *pp);
@ -435,6 +441,8 @@ typedef long (*Scheme_Secondary_Hash_Proc)(Scheme_Object *obj, void *cycle_data)
#define SCHEME_MUTABLE_VECTORP(obj) (SCHEME_VECTORP(obj) && SCHEME_MUTABLEP(obj)) #define SCHEME_MUTABLE_VECTORP(obj) (SCHEME_VECTORP(obj) && SCHEME_MUTABLEP(obj))
#define SCHEME_IMMUTABLE_VECTORP(obj) (SCHEME_VECTORP(obj) && SCHEME_IMMUTABLEP(obj)) #define SCHEME_IMMUTABLE_VECTORP(obj) (SCHEME_VECTORP(obj) && SCHEME_IMMUTABLEP(obj))
#define SCHEME_FLVECTORP(obj) SAME_TYPE(SCHEME_TYPE(obj), scheme_flvector_type)
#define SCHEME_STRUCTP(obj) (SAME_TYPE(SCHEME_TYPE(obj), scheme_structure_type) || SAME_TYPE(SCHEME_TYPE(obj), scheme_proc_struct_type)) #define SCHEME_STRUCTP(obj) (SAME_TYPE(SCHEME_TYPE(obj), scheme_structure_type) || SAME_TYPE(SCHEME_TYPE(obj), scheme_proc_struct_type))
#define SCHEME_STRUCT_TYPEP(obj) SAME_TYPE(SCHEME_TYPE(obj), scheme_struct_type_type) #define SCHEME_STRUCT_TYPEP(obj) SAME_TYPE(SCHEME_TYPE(obj), scheme_struct_type_type)
@ -539,6 +547,9 @@ typedef long (*Scheme_Secondary_Hash_Proc)(Scheme_Object *obj, void *cycle_data)
#define SCHEME_VEC_ELS(obj) (((Scheme_Vector *)(obj))->els) #define SCHEME_VEC_ELS(obj) (((Scheme_Vector *)(obj))->els)
#define SCHEME_VEC_BASE(obj) SCHEME_VEC_ELS(obj) #define SCHEME_VEC_BASE(obj) SCHEME_VEC_ELS(obj)
#define SCHEME_FLVEC_SIZE(obj) (((Scheme_Double_Vector *)(obj))->size)
#define SCHEME_FLVEC_ELS(obj) (((Scheme_Double_Vector *)(obj))->els)
#define SCHEME_ENVBOX_VAL(obj) (*((Scheme_Object **)(obj))) #define SCHEME_ENVBOX_VAL(obj) (*((Scheme_Object **)(obj)))
#define SCHEME_WEAK_BOX_VAL(obj) SCHEME_BOX_VAL(obj) #define SCHEME_WEAK_BOX_VAL(obj) SCHEME_BOX_VAL(obj)

View File

@ -1,12 +1,12 @@
{ {
static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,52,46,50,46,51,46,51,50,0,0,0,1,0,0,3,0,12,0, static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,52,46,50,46,51,46,52,50,0,0,0,1,0,0,3,0,12,0,
25,0,29,0,34,0,41,0,44,0,49,0,56,0,63,0,67,0,72,0,78, 19,0,23,0,28,0,41,0,44,0,49,0,56,0,63,0,67,0,72,0,78,
0,92,0,106,0,109,0,115,0,119,0,121,0,132,0,134,0,148,0,155,0, 0,92,0,106,0,109,0,115,0,119,0,121,0,132,0,134,0,148,0,155,0,
177,0,179,0,193,0,4,1,33,1,44,1,55,1,65,1,101,1,134,1,167, 177,0,179,0,193,0,4,1,33,1,44,1,55,1,65,1,101,1,134,1,167,
1,226,1,36,2,114,2,180,2,185,2,205,2,96,3,116,3,167,3,233,3, 1,226,1,36,2,114,2,180,2,185,2,205,2,96,3,116,3,167,3,233,3,
118,4,4,5,56,5,79,5,158,5,0,0,105,7,0,0,29,11,11,68,104, 118,4,4,5,56,5,79,5,158,5,0,0,105,7,0,0,29,11,11,68,104,
101,114,101,45,115,116,120,72,112,97,114,97,109,101,116,101,114,105,122,101,63, 101,114,101,45,115,116,120,66,100,101,102,105,110,101,63,97,110,100,64,108,101,
97,110,100,64,108,101,116,42,66,100,101,102,105,110,101,62,111,114,64,99,111, 116,42,72,112,97,114,97,109,101,116,101,114,105,122,101,62,111,114,64,99,111,
110,100,66,108,101,116,114,101,99,66,117,110,108,101,115,115,63,108,101,116,64, 110,100,66,108,101,116,114,101,99,66,117,110,108,101,115,115,63,108,101,116,64,
119,104,101,110,65,113,117,111,116,101,29,94,2,13,68,35,37,107,101,114,110, 119,104,101,110,65,113,117,111,116,101,29,94,2,13,68,35,37,107,101,114,110,
101,108,11,29,94,2,13,68,35,37,112,97,114,97,109,122,11,62,105,102,65, 101,108,11,29,94,2,13,68,35,37,112,97,114,97,109,122,11,62,105,102,65,
@ -21,57 +21,57 @@
2,161,2,1,36,2,2,2,1,2,2,96,11,11,8,240,35,79,0,0,16, 2,161,2,1,36,2,2,2,1,2,2,96,11,11,8,240,35,79,0,0,16,
0,96,37,11,8,240,35,79,0,0,16,0,13,16,4,35,29,11,11,2,1, 0,96,37,11,8,240,35,79,0,0,16,0,13,16,4,35,29,11,11,2,1,
11,18,16,2,99,64,104,101,114,101,8,31,8,30,8,29,8,28,8,27,93, 11,18,16,2,99,64,104,101,114,101,8,31,8,30,8,29,8,28,8,27,93,
8,224,42,79,0,0,95,9,8,224,42,79,0,0,2,1,27,248,22,137,4, 8,224,42,79,0,0,95,9,8,224,42,79,0,0,2,1,27,248,22,143,4,
195,249,22,130,4,80,158,38,35,251,22,77,2,16,248,22,92,199,12,249,22, 195,249,22,136,4,80,158,38,35,251,22,77,2,16,248,22,92,199,12,249,22,
67,2,17,248,22,94,201,27,248,22,137,4,195,249,22,130,4,80,158,38,35, 67,2,17,248,22,94,201,27,248,22,143,4,195,249,22,136,4,80,158,38,35,
251,22,77,2,16,248,22,92,199,249,22,67,2,17,248,22,94,201,12,27,248, 251,22,77,2,16,248,22,92,199,249,22,67,2,17,248,22,94,201,12,27,248,
22,69,248,22,137,4,196,28,248,22,75,193,20,15,159,36,35,36,28,248,22, 22,69,248,22,143,4,196,28,248,22,75,193,20,15,159,36,35,36,28,248,22,
75,248,22,69,194,248,22,68,193,249,22,130,4,80,158,38,35,251,22,77,2, 75,248,22,69,194,248,22,68,193,249,22,136,4,80,158,38,35,251,22,77,2,
16,248,22,68,199,249,22,67,2,4,248,22,69,201,11,18,16,2,101,10,8, 16,248,22,68,199,249,22,67,2,4,248,22,69,201,11,18,16,2,101,10,8,
31,8,30,8,29,8,28,8,27,16,4,11,11,2,18,3,1,8,101,110,118, 31,8,30,8,29,8,28,8,27,16,4,11,11,2,18,3,1,8,101,110,118,
49,50,57,54,48,16,4,11,11,2,19,3,1,8,101,110,118,49,50,57,54, 49,50,57,54,48,16,4,11,11,2,19,3,1,8,101,110,118,49,50,57,54,
49,93,8,224,43,79,0,0,95,9,8,224,43,79,0,0,2,1,27,248,22, 49,93,8,224,43,79,0,0,95,9,8,224,43,79,0,0,2,1,27,248,22,
69,248,22,137,4,196,28,248,22,75,193,20,15,159,36,35,36,28,248,22,75, 69,248,22,143,4,196,28,248,22,75,193,20,15,159,36,35,36,28,248,22,75,
248,22,69,194,248,22,68,193,249,22,130,4,80,158,38,35,250,22,77,2,20, 248,22,69,194,248,22,68,193,249,22,136,4,80,158,38,35,250,22,77,2,20,
248,22,77,249,22,77,248,22,77,2,21,248,22,68,201,251,22,77,2,16,2, 248,22,77,249,22,77,248,22,77,2,21,248,22,68,201,251,22,77,2,16,2,
21,2,21,249,22,67,2,7,248,22,69,204,18,16,2,101,11,8,31,8,30, 21,2,21,249,22,67,2,7,248,22,69,204,18,16,2,101,11,8,31,8,30,
8,29,8,28,8,27,16,4,11,11,2,18,3,1,8,101,110,118,49,50,57, 8,29,8,28,8,27,16,4,11,11,2,18,3,1,8,101,110,118,49,50,57,
54,51,16,4,11,11,2,19,3,1,8,101,110,118,49,50,57,54,52,93,8, 54,51,16,4,11,11,2,19,3,1,8,101,110,118,49,50,57,54,52,93,8,
224,44,79,0,0,95,9,8,224,44,79,0,0,2,1,248,22,137,4,193,27, 224,44,79,0,0,95,9,8,224,44,79,0,0,2,1,248,22,143,4,193,27,
248,22,137,4,194,249,22,67,248,22,77,248,22,68,196,248,22,69,195,27,248, 248,22,143,4,194,249,22,67,248,22,77,248,22,68,196,248,22,69,195,27,248,
22,69,248,22,137,4,23,197,1,249,22,130,4,80,158,38,35,28,248,22,53, 22,69,248,22,143,4,23,197,1,249,22,136,4,80,158,38,35,28,248,22,53,
248,22,131,4,248,22,68,23,198,2,27,249,22,2,32,0,89,162,8,44,36, 248,22,137,4,248,22,68,23,198,2,27,249,22,2,32,0,89,162,8,44,36,
42,9,222,33,39,248,22,137,4,248,22,92,23,200,2,250,22,77,2,22,248, 42,9,222,33,39,248,22,143,4,248,22,92,23,200,2,250,22,77,2,22,248,
22,77,249,22,77,248,22,77,248,22,68,23,204,2,250,22,78,2,23,249,22, 22,77,249,22,77,248,22,77,248,22,68,23,204,2,250,22,78,2,23,249,22,
2,22,68,23,204,2,248,22,94,23,206,2,249,22,67,248,22,68,23,202,1, 2,22,68,23,204,2,248,22,94,23,206,2,249,22,67,248,22,68,23,202,1,
249,22,2,22,92,23,200,1,250,22,78,2,20,249,22,2,32,0,89,162,8, 249,22,2,22,92,23,200,1,250,22,78,2,20,249,22,2,32,0,89,162,8,
44,36,46,9,222,33,40,248,22,137,4,248,22,68,201,248,22,69,198,27,248, 44,36,46,9,222,33,40,248,22,143,4,248,22,68,201,248,22,69,198,27,248,
22,137,4,194,249,22,67,248,22,77,248,22,68,196,248,22,69,195,27,248,22, 22,143,4,194,249,22,67,248,22,77,248,22,68,196,248,22,69,195,27,248,22,
69,248,22,137,4,23,197,1,249,22,130,4,80,158,38,35,250,22,78,2,22, 69,248,22,143,4,23,197,1,249,22,136,4,80,158,38,35,250,22,78,2,22,
249,22,2,32,0,89,162,8,44,36,46,9,222,33,42,248,22,137,4,248,22, 249,22,2,32,0,89,162,8,44,36,46,9,222,33,42,248,22,143,4,248,22,
68,201,248,22,69,198,27,248,22,69,248,22,137,4,196,27,248,22,137,4,248, 68,201,248,22,69,198,27,248,22,69,248,22,143,4,196,27,248,22,143,4,248,
22,68,195,249,22,130,4,80,158,39,35,28,248,22,75,195,250,22,78,2,20, 22,68,195,249,22,136,4,80,158,39,35,28,248,22,75,195,250,22,78,2,20,
9,248,22,69,199,250,22,77,2,11,248,22,77,248,22,68,199,250,22,78,2, 9,248,22,69,199,250,22,77,2,11,248,22,77,248,22,68,199,250,22,78,2,
5,248,22,69,201,248,22,69,202,27,248,22,69,248,22,137,4,23,197,1,27, 5,248,22,69,201,248,22,69,202,27,248,22,69,248,22,143,4,23,197,1,27,
249,22,1,22,81,249,22,2,22,137,4,248,22,137,4,248,22,68,199,249,22, 249,22,1,22,81,249,22,2,22,143,4,248,22,143,4,248,22,68,199,249,22,
130,4,80,158,39,35,251,22,77,1,22,119,105,116,104,45,99,111,110,116,105, 136,4,80,158,39,35,251,22,77,1,22,119,105,116,104,45,99,111,110,116,105,
110,117,97,116,105,111,110,45,109,97,114,107,2,24,250,22,78,1,23,101,120, 110,117,97,116,105,111,110,45,109,97,114,107,2,24,250,22,78,1,23,101,120,
116,101,110,100,45,112,97,114,97,109,101,116,101,114,105,122,97,116,105,111,110, 116,101,110,100,45,112,97,114,97,109,101,116,101,114,105,122,97,116,105,111,110,
21,95,1,27,99,111,110,116,105,110,117,97,116,105,111,110,45,109,97,114,107, 21,95,1,27,99,111,110,116,105,110,117,97,116,105,111,110,45,109,97,114,107,
45,115,101,116,45,102,105,114,115,116,11,2,24,201,250,22,78,2,20,9,248, 45,115,101,116,45,102,105,114,115,116,11,2,24,201,250,22,78,2,20,9,248,
22,69,203,27,248,22,69,248,22,137,4,196,28,248,22,75,193,20,15,159,36, 22,69,203,27,248,22,69,248,22,143,4,196,28,248,22,75,193,20,15,159,36,
35,36,249,22,130,4,80,158,38,35,27,248,22,137,4,248,22,68,197,28,249, 35,36,249,22,136,4,80,158,38,35,27,248,22,143,4,248,22,68,197,28,249,
22,167,8,62,61,62,248,22,131,4,248,22,92,196,250,22,77,2,20,248,22, 22,173,8,62,61,62,248,22,137,4,248,22,92,196,250,22,77,2,20,248,22,
77,249,22,77,21,93,2,25,248,22,68,199,250,22,78,2,8,249,22,77,2, 77,249,22,77,21,93,2,25,248,22,68,199,250,22,78,2,8,249,22,77,2,
25,249,22,77,248,22,101,203,2,25,248,22,69,202,251,22,77,2,16,28,249, 25,249,22,77,248,22,101,203,2,25,248,22,69,202,251,22,77,2,16,28,249,
22,167,8,248,22,131,4,248,22,68,200,64,101,108,115,101,10,248,22,68,197, 22,173,8,248,22,137,4,248,22,68,200,64,101,108,115,101,10,248,22,68,197,
250,22,78,2,20,9,248,22,69,200,249,22,67,2,8,248,22,69,202,100,8, 250,22,78,2,20,9,248,22,69,200,249,22,67,2,8,248,22,69,202,100,8,
31,8,30,8,29,8,28,8,27,16,4,11,11,2,18,3,1,8,101,110,118, 31,8,30,8,29,8,28,8,27,16,4,11,11,2,18,3,1,8,101,110,118,
49,50,57,56,54,16,4,11,11,2,19,3,1,8,101,110,118,49,50,57,56, 49,50,57,56,54,16,4,11,11,2,19,3,1,8,101,110,118,49,50,57,56,
55,93,8,224,45,79,0,0,18,16,2,158,94,10,64,118,111,105,100,8,47, 55,93,8,224,45,79,0,0,18,16,2,158,94,10,64,118,111,105,100,8,47,
95,9,8,224,45,79,0,0,2,1,27,248,22,69,248,22,137,4,196,249,22, 95,9,8,224,45,79,0,0,2,1,27,248,22,69,248,22,143,4,196,249,22,
130,4,80,158,38,35,28,248,22,53,248,22,131,4,248,22,68,197,250,22,77, 136,4,80,158,38,35,28,248,22,53,248,22,137,4,248,22,68,197,250,22,77,
2,26,248,22,77,248,22,68,199,248,22,92,198,27,248,22,131,4,248,22,68, 2,26,248,22,77,248,22,68,199,248,22,92,198,27,248,22,137,4,248,22,68,
197,250,22,77,2,26,248,22,77,248,22,68,197,250,22,78,2,23,248,22,69, 197,250,22,77,2,26,248,22,77,248,22,68,197,250,22,78,2,23,248,22,69,
199,248,22,69,202,159,35,20,102,159,35,16,1,11,16,0,83,158,41,20,100, 199,248,22,69,202,159,35,20,102,159,35,16,1,11,16,0,83,158,41,20,100,
144,69,35,37,109,105,110,45,115,116,120,2,1,11,11,11,10,35,80,158,35, 144,69,35,37,109,105,110,45,115,116,120,2,1,11,11,11,10,35,80,158,35,
@ -90,16 +90,16 @@
44,36,57,9,223,0,33,41,35,20,102,159,35,16,1,2,2,16,0,11,16, 44,36,57,9,223,0,33,41,35,20,102,159,35,16,1,2,2,16,0,11,16,
5,2,9,89,162,8,44,36,52,9,223,0,33,43,35,20,102,159,35,16,1, 5,2,9,89,162,8,44,36,52,9,223,0,33,43,35,20,102,159,35,16,1,
2,2,16,0,11,16,5,2,5,89,162,8,44,36,53,9,223,0,33,44,35, 2,2,16,0,11,16,5,2,5,89,162,8,44,36,53,9,223,0,33,44,35,
20,102,159,35,16,1,2,2,16,0,11,16,5,2,3,89,162,8,44,36,54, 20,102,159,35,16,1,2,2,16,0,11,16,5,2,6,89,162,8,44,36,54,
9,223,0,33,45,35,20,102,159,35,16,1,2,2,16,0,11,16,5,2,8, 9,223,0,33,45,35,20,102,159,35,16,1,2,2,16,0,11,16,5,2,8,
89,162,8,44,36,57,9,223,0,33,46,35,20,102,159,35,16,1,2,2,16, 89,162,8,44,36,57,9,223,0,33,46,35,20,102,159,35,16,1,2,2,16,
1,33,48,11,16,5,2,6,89,162,8,44,36,53,9,223,0,33,49,35,20, 1,33,48,11,16,5,2,3,89,162,8,44,36,53,9,223,0,33,49,35,20,
102,159,35,16,1,2,2,16,0,11,16,0,94,2,14,2,15,93,2,14,9, 102,159,35,16,1,2,2,16,0,11,16,0,94,2,14,2,15,93,2,14,9,
9,35,0}; 9,35,0};
EVAL_ONE_SIZED_STR((char *)expr, 2018); EVAL_ONE_SIZED_STR((char *)expr, 2018);
} }
{ {
static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,52,46,50,46,51,46,51,59,0,0,0,1,0,0,13,0,18,0, static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,52,46,50,46,51,46,52,59,0,0,0,1,0,0,13,0,18,0,
35,0,50,0,68,0,84,0,94,0,112,0,132,0,148,0,166,0,197,0,226, 35,0,50,0,68,0,84,0,94,0,112,0,132,0,148,0,166,0,197,0,226,
0,248,0,6,1,12,1,26,1,31,1,41,1,49,1,77,1,109,1,154,1, 0,248,0,6,1,12,1,26,1,31,1,41,1,49,1,77,1,109,1,154,1,
199,1,223,1,6,2,8,2,65,2,155,3,196,3,31,5,135,5,239,5,100, 199,1,223,1,6,2,8,2,65,2,155,3,196,3,31,5,135,5,239,5,100,
@ -131,176 +131,176 @@
116,101,32,115,116,114,105,110,103,6,36,36,99,97,110,110,111,116,32,97,100, 116,101,32,115,116,114,105,110,103,6,36,36,99,97,110,110,111,116,32,97,100,
100,32,97,32,115,117,102,102,105,120,32,116,111,32,97,32,114,111,111,116,32, 100,32,97,32,115,117,102,102,105,120,32,116,111,32,97,32,114,111,111,116,32,
112,97,116,104,58,32,5,0,27,20,14,159,80,158,36,50,250,80,158,39,51, 112,97,116,104,58,32,5,0,27,20,14,159,80,158,36,50,250,80,158,39,51,
249,22,27,11,80,158,41,50,22,189,12,10,248,22,160,5,23,196,2,28,248, 249,22,27,11,80,158,41,50,22,131,13,10,248,22,166,5,23,196,2,28,248,
22,157,6,23,194,2,12,87,94,248,22,171,8,23,194,1,248,80,159,37,53, 22,163,6,23,194,2,12,87,94,248,22,177,8,23,194,1,248,80,159,37,53,
36,195,28,248,22,75,23,195,2,9,27,248,22,68,23,196,2,27,28,248,22, 36,195,28,248,22,75,23,195,2,9,27,248,22,68,23,196,2,27,28,248,22,
171,13,23,195,2,23,194,1,28,248,22,170,13,23,195,2,249,22,172,13,23, 177,13,23,195,2,23,194,1,28,248,22,176,13,23,195,2,249,22,178,13,23,
196,1,250,80,158,42,48,248,22,187,13,2,19,11,10,250,80,158,40,48,248, 196,1,250,80,158,42,48,248,22,129,14,2,19,11,10,250,80,158,40,48,248,
22,187,13,2,19,23,197,1,10,28,23,193,2,249,22,67,248,22,174,13,249, 22,129,14,2,19,23,197,1,10,28,23,193,2,249,22,67,248,22,180,13,249,
22,172,13,23,198,1,247,22,188,13,27,248,22,69,23,200,1,28,248,22,75, 22,178,13,23,198,1,247,22,130,14,27,248,22,69,23,200,1,28,248,22,75,
23,194,2,9,27,248,22,68,23,195,2,27,28,248,22,171,13,23,195,2,23, 23,194,2,9,27,248,22,68,23,195,2,27,28,248,22,177,13,23,195,2,23,
194,1,28,248,22,170,13,23,195,2,249,22,172,13,23,196,1,250,80,158,47, 194,1,28,248,22,176,13,23,195,2,249,22,178,13,23,196,1,250,80,158,47,
48,248,22,187,13,2,19,11,10,250,80,158,45,48,248,22,187,13,2,19,23, 48,248,22,129,14,2,19,11,10,250,80,158,45,48,248,22,129,14,2,19,23,
197,1,10,28,23,193,2,249,22,67,248,22,174,13,249,22,172,13,23,198,1, 197,1,10,28,23,193,2,249,22,67,248,22,180,13,249,22,178,13,23,198,1,
247,22,188,13,248,80,159,45,52,36,248,22,69,23,199,1,87,94,23,193,1, 247,22,130,14,248,80,159,45,52,36,248,22,69,23,199,1,87,94,23,193,1,
248,80,159,43,52,36,248,22,69,23,197,1,87,94,23,193,1,27,248,22,69, 248,80,159,43,52,36,248,22,69,23,197,1,87,94,23,193,1,27,248,22,69,
23,198,1,28,248,22,75,23,194,2,9,27,248,22,68,23,195,2,27,28,248, 23,198,1,28,248,22,75,23,194,2,9,27,248,22,68,23,195,2,27,28,248,
22,171,13,23,195,2,23,194,1,28,248,22,170,13,23,195,2,249,22,172,13, 22,177,13,23,195,2,23,194,1,28,248,22,176,13,23,195,2,249,22,178,13,
23,196,1,250,80,158,45,48,248,22,187,13,2,19,11,10,250,80,158,43,48, 23,196,1,250,80,158,45,48,248,22,129,14,2,19,11,10,250,80,158,43,48,
248,22,187,13,2,19,23,197,1,10,28,23,193,2,249,22,67,248,22,174,13, 248,22,129,14,2,19,23,197,1,10,28,23,193,2,249,22,67,248,22,180,13,
249,22,172,13,23,198,1,247,22,188,13,248,80,159,43,52,36,248,22,69,23, 249,22,178,13,23,198,1,247,22,130,14,248,80,159,43,52,36,248,22,69,23,
199,1,248,80,159,41,52,36,248,22,69,196,27,248,22,147,13,23,195,2,28, 199,1,248,80,159,41,52,36,248,22,69,196,27,248,22,153,13,23,195,2,28,
23,193,2,192,87,94,23,193,1,28,248,22,162,6,23,195,2,27,248,22,169, 23,193,2,192,87,94,23,193,1,28,248,22,168,6,23,195,2,27,248,22,175,
13,195,28,192,192,248,22,170,13,195,11,87,94,28,28,248,22,148,13,23,195, 13,195,28,192,192,248,22,176,13,195,11,87,94,28,28,248,22,154,13,23,195,
2,10,27,248,22,147,13,23,196,2,28,23,193,2,192,87,94,23,193,1,28, 2,10,27,248,22,153,13,23,196,2,28,23,193,2,192,87,94,23,193,1,28,
248,22,162,6,23,196,2,27,248,22,169,13,23,197,2,28,23,193,2,192,87, 248,22,168,6,23,196,2,27,248,22,175,13,23,197,2,28,23,193,2,192,87,
94,23,193,1,248,22,170,13,23,197,2,11,12,250,22,135,9,76,110,111,114, 94,23,193,1,248,22,176,13,23,197,2,11,12,250,22,141,9,76,110,111,114,
109,97,108,45,112,97,116,104,45,99,97,115,101,6,42,42,112,97,116,104,32, 109,97,108,45,112,97,116,104,45,99,97,115,101,6,42,42,112,97,116,104,32,
40,102,111,114,32,97,110,121,32,115,121,115,116,101,109,41,32,111,114,32,118, 40,102,111,114,32,97,110,121,32,115,121,115,116,101,109,41,32,111,114,32,118,
97,108,105,100,45,112,97,116,104,32,115,116,114,105,110,103,23,197,2,28,28, 97,108,105,100,45,112,97,116,104,32,115,116,114,105,110,103,23,197,2,28,28,
248,22,148,13,23,195,2,249,22,167,8,248,22,149,13,23,197,2,2,20,249, 248,22,154,13,23,195,2,249,22,173,8,248,22,155,13,23,197,2,2,20,249,
22,167,8,247,22,181,7,2,20,27,28,248,22,162,6,23,196,2,23,195,2, 22,173,8,247,22,187,7,2,20,27,28,248,22,168,6,23,196,2,23,195,2,
248,22,171,7,248,22,152,13,23,197,2,28,249,22,136,14,0,21,35,114,120, 248,22,177,7,248,22,158,13,23,197,2,28,249,22,142,14,0,21,35,114,120,
34,94,91,92,92,93,91,92,92,93,91,63,93,91,92,92,93,34,23,195,2, 34,94,91,92,92,93,91,92,92,93,91,63,93,91,92,92,93,34,23,195,2,
28,248,22,162,6,195,248,22,155,13,195,194,27,248,22,137,7,23,195,1,249, 28,248,22,168,6,195,248,22,161,13,195,194,27,248,22,143,7,23,195,1,249,
22,156,13,248,22,174,7,250,22,142,14,0,6,35,114,120,34,47,34,28,249, 22,162,13,248,22,180,7,250,22,148,14,0,6,35,114,120,34,47,34,28,249,
22,136,14,0,22,35,114,120,34,91,47,92,92,93,91,46,32,93,43,91,47, 22,142,14,0,22,35,114,120,34,91,47,92,92,93,91,46,32,93,43,91,47,
92,92,93,42,36,34,23,201,2,23,199,1,250,22,142,14,0,19,35,114,120, 92,92,93,42,36,34,23,201,2,23,199,1,250,22,148,14,0,19,35,114,120,
34,91,32,46,93,43,40,91,47,92,92,93,42,41,36,34,23,202,1,6,2, 34,91,32,46,93,43,40,91,47,92,92,93,42,41,36,34,23,202,1,6,2,
2,92,49,80,159,43,36,37,2,20,28,248,22,162,6,194,248,22,155,13,194, 2,92,49,80,159,43,36,37,2,20,28,248,22,168,6,194,248,22,161,13,194,
193,87,94,28,27,248,22,147,13,23,196,2,28,23,193,2,192,87,94,23,193, 193,87,94,28,27,248,22,153,13,23,196,2,28,23,193,2,192,87,94,23,193,
1,28,248,22,162,6,23,196,2,27,248,22,169,13,23,197,2,28,23,193,2, 1,28,248,22,168,6,23,196,2,27,248,22,175,13,23,197,2,28,23,193,2,
192,87,94,23,193,1,248,22,170,13,23,197,2,11,12,250,22,135,9,23,196, 192,87,94,23,193,1,248,22,176,13,23,197,2,11,12,250,22,141,9,23,196,
2,2,21,23,197,2,28,248,22,169,13,23,195,2,12,248,22,165,11,249,22, 2,2,21,23,197,2,28,248,22,175,13,23,195,2,12,248,22,171,11,249,22,
174,10,248,22,191,6,250,22,146,7,2,22,23,200,1,23,201,1,247,22,23, 180,10,248,22,133,7,250,22,152,7,2,22,23,200,1,23,201,1,247,22,23,
87,94,28,27,248,22,147,13,23,196,2,28,23,193,2,192,87,94,23,193,1, 87,94,28,27,248,22,153,13,23,196,2,28,23,193,2,192,87,94,23,193,1,
28,248,22,162,6,23,196,2,27,248,22,169,13,23,197,2,28,23,193,2,192, 28,248,22,168,6,23,196,2,27,248,22,175,13,23,197,2,28,23,193,2,192,
87,94,23,193,1,248,22,170,13,23,197,2,11,12,250,22,135,9,23,196,2, 87,94,23,193,1,248,22,176,13,23,197,2,11,12,250,22,141,9,23,196,2,
2,21,23,197,2,28,248,22,169,13,23,195,2,12,248,22,165,11,249,22,174, 2,21,23,197,2,28,248,22,175,13,23,195,2,12,248,22,171,11,249,22,180,
10,248,22,191,6,250,22,146,7,2,22,23,200,1,23,201,1,247,22,23,87, 10,248,22,133,7,250,22,152,7,2,22,23,200,1,23,201,1,247,22,23,87,
94,87,94,28,27,248,22,147,13,23,196,2,28,23,193,2,192,87,94,23,193, 94,87,94,28,27,248,22,153,13,23,196,2,28,23,193,2,192,87,94,23,193,
1,28,248,22,162,6,23,196,2,27,248,22,169,13,23,197,2,28,23,193,2, 1,28,248,22,168,6,23,196,2,27,248,22,175,13,23,197,2,28,23,193,2,
192,87,94,23,193,1,248,22,170,13,23,197,2,11,12,250,22,135,9,195,2, 192,87,94,23,193,1,248,22,176,13,23,197,2,11,12,250,22,141,9,195,2,
21,23,197,2,28,248,22,169,13,23,195,2,12,248,22,165,11,249,22,174,10, 21,23,197,2,28,248,22,175,13,23,195,2,12,248,22,171,11,249,22,180,10,
248,22,191,6,250,22,146,7,2,22,199,23,201,1,247,22,23,249,22,3,89, 248,22,133,7,250,22,152,7,2,22,199,23,201,1,247,22,23,249,22,3,89,
162,8,44,36,49,9,223,2,33,33,196,248,22,165,11,249,22,140,11,23,196, 162,8,44,36,49,9,223,2,33,33,196,248,22,171,11,249,22,146,11,23,196,
1,247,22,23,87,94,250,80,159,38,39,36,2,6,196,197,251,80,159,39,41, 1,247,22,23,87,94,250,80,159,38,39,36,2,6,196,197,251,80,159,39,41,
36,2,6,32,0,89,162,8,44,36,44,9,222,33,35,197,198,32,37,89,162, 36,2,6,32,0,89,162,8,44,36,44,9,222,33,35,197,198,32,37,89,162,
43,41,58,65,99,108,111,111,112,222,33,38,28,248,22,75,23,199,2,87,94, 43,41,58,65,99,108,111,111,112,222,33,38,28,248,22,75,23,199,2,87,94,
23,198,1,248,23,196,1,251,22,146,7,2,23,23,199,1,28,248,22,75,23, 23,198,1,248,23,196,1,251,22,152,7,2,23,23,199,1,28,248,22,75,23,
203,2,87,94,23,202,1,23,201,1,250,22,1,22,165,13,23,204,1,23,205, 203,2,87,94,23,202,1,23,201,1,250,22,1,22,171,13,23,204,1,23,205,
1,23,198,1,27,249,22,165,13,248,22,68,23,202,2,23,199,2,28,248,22, 1,23,198,1,27,249,22,171,13,248,22,68,23,202,2,23,199,2,28,248,22,
160,13,23,194,2,27,250,22,1,22,165,13,23,197,1,23,202,2,28,248,22, 166,13,23,194,2,27,250,22,1,22,171,13,23,197,1,23,202,2,28,248,22,
160,13,23,194,2,192,87,94,23,193,1,27,248,22,69,23,202,1,28,248,22, 166,13,23,194,2,192,87,94,23,193,1,27,248,22,69,23,202,1,28,248,22,
75,23,194,2,87,94,23,193,1,248,23,199,1,251,22,146,7,2,23,23,202, 75,23,194,2,87,94,23,193,1,248,23,199,1,251,22,152,7,2,23,23,202,
1,28,248,22,75,23,206,2,87,94,23,205,1,23,204,1,250,22,1,22,165, 1,28,248,22,75,23,206,2,87,94,23,205,1,23,204,1,250,22,1,22,171,
13,23,207,1,23,208,1,23,201,1,27,249,22,165,13,248,22,68,23,197,2, 13,23,207,1,23,208,1,23,201,1,27,249,22,171,13,248,22,68,23,197,2,
23,202,2,28,248,22,160,13,23,194,2,27,250,22,1,22,165,13,23,197,1, 23,202,2,28,248,22,166,13,23,194,2,27,250,22,1,22,171,13,23,197,1,
204,28,248,22,160,13,193,192,253,2,37,203,204,205,206,23,15,248,22,69,201, 204,28,248,22,166,13,193,192,253,2,37,203,204,205,206,23,15,248,22,69,201,
253,2,37,202,203,204,205,206,248,22,69,200,87,94,23,193,1,27,248,22,69, 253,2,37,202,203,204,205,206,248,22,69,200,87,94,23,193,1,27,248,22,69,
23,201,1,28,248,22,75,23,194,2,87,94,23,193,1,248,23,198,1,251,22, 23,201,1,28,248,22,75,23,194,2,87,94,23,193,1,248,23,198,1,251,22,
146,7,2,23,23,201,1,28,248,22,75,23,205,2,87,94,23,204,1,23,203, 152,7,2,23,23,201,1,28,248,22,75,23,205,2,87,94,23,204,1,23,203,
1,250,22,1,22,165,13,23,206,1,23,207,1,23,200,1,27,249,22,165,13, 1,250,22,1,22,171,13,23,206,1,23,207,1,23,200,1,27,249,22,171,13,
248,22,68,23,197,2,23,201,2,28,248,22,160,13,23,194,2,27,250,22,1, 248,22,68,23,197,2,23,201,2,28,248,22,166,13,23,194,2,27,250,22,1,
22,165,13,23,197,1,203,28,248,22,160,13,193,192,253,2,37,202,203,204,205, 22,171,13,23,197,1,203,28,248,22,166,13,193,192,253,2,37,202,203,204,205,
206,248,22,69,201,253,2,37,201,202,203,204,205,248,22,69,200,27,247,22,189, 206,248,22,69,201,253,2,37,201,202,203,204,205,248,22,69,200,27,247,22,131,
13,253,2,37,198,199,200,201,202,198,87,95,28,28,248,22,148,13,23,194,2, 14,253,2,37,198,199,200,201,202,198,87,95,28,28,248,22,154,13,23,194,2,
10,27,248,22,147,13,23,195,2,28,23,193,2,192,87,94,23,193,1,28,248, 10,27,248,22,153,13,23,195,2,28,23,193,2,192,87,94,23,193,1,28,248,
22,162,6,23,195,2,27,248,22,169,13,23,196,2,28,23,193,2,192,87,94, 22,168,6,23,195,2,27,248,22,175,13,23,196,2,28,23,193,2,192,87,94,
23,193,1,248,22,170,13,23,196,2,11,12,252,22,135,9,23,200,2,2,24, 23,193,1,248,22,176,13,23,196,2,11,12,252,22,141,9,23,200,2,2,24,
35,23,198,2,23,199,2,28,28,248,22,162,6,23,195,2,10,248,22,150,7, 35,23,198,2,23,199,2,28,28,248,22,168,6,23,195,2,10,248,22,156,7,
23,195,2,87,94,23,194,1,12,252,22,135,9,23,200,2,2,25,36,23,198, 23,195,2,87,94,23,194,1,12,252,22,141,9,23,200,2,2,25,36,23,198,
2,23,199,1,91,159,38,11,90,161,38,35,11,248,22,168,13,23,197,2,87, 2,23,199,1,91,159,38,11,90,161,38,35,11,248,22,174,13,23,197,2,87,
94,23,195,1,87,94,28,192,12,250,22,136,9,23,201,1,2,26,23,199,1, 94,23,195,1,87,94,28,192,12,250,22,142,9,23,201,1,2,26,23,199,1,
249,22,7,194,195,91,159,37,11,90,161,37,35,11,87,95,28,28,248,22,148, 249,22,7,194,195,91,159,37,11,90,161,37,35,11,87,95,28,28,248,22,154,
13,23,196,2,10,27,248,22,147,13,23,197,2,28,23,193,2,192,87,94,23, 13,23,196,2,10,27,248,22,153,13,23,197,2,28,23,193,2,192,87,94,23,
193,1,28,248,22,162,6,23,197,2,27,248,22,169,13,23,198,2,28,23,193, 193,1,28,248,22,168,6,23,197,2,27,248,22,175,13,23,198,2,28,23,193,
2,192,87,94,23,193,1,248,22,170,13,23,198,2,11,12,252,22,135,9,2, 2,192,87,94,23,193,1,248,22,176,13,23,198,2,11,12,252,22,141,9,2,
9,2,24,35,23,200,2,23,201,2,28,28,248,22,162,6,23,197,2,10,248, 9,2,24,35,23,200,2,23,201,2,28,28,248,22,168,6,23,197,2,10,248,
22,150,7,23,197,2,12,252,22,135,9,2,9,2,25,36,23,200,2,23,201, 22,156,7,23,197,2,12,252,22,141,9,2,9,2,25,36,23,200,2,23,201,
2,91,159,38,11,90,161,38,35,11,248,22,168,13,23,199,2,87,94,23,195, 2,91,159,38,11,90,161,38,35,11,248,22,174,13,23,199,2,87,94,23,195,
1,87,94,28,192,12,250,22,136,9,2,9,2,26,23,201,2,249,22,7,194, 1,87,94,28,192,12,250,22,142,9,2,9,2,26,23,201,2,249,22,7,194,
195,27,249,22,157,13,250,22,141,14,0,20,35,114,120,35,34,40,63,58,91, 195,27,249,22,163,13,250,22,147,14,0,20,35,114,120,35,34,40,63,58,91,
46,93,91,94,46,93,42,124,41,36,34,248,22,153,13,23,201,1,28,248,22, 46,93,91,94,46,93,42,124,41,36,34,248,22,159,13,23,201,1,28,248,22,
162,6,23,203,2,249,22,174,7,23,204,1,8,63,23,202,1,28,248,22,148, 168,6,23,203,2,249,22,180,7,23,204,1,8,63,23,202,1,28,248,22,154,
13,23,199,2,248,22,149,13,23,199,1,87,94,23,198,1,247,22,150,13,28, 13,23,199,2,248,22,155,13,23,199,1,87,94,23,198,1,247,22,156,13,28,
248,22,147,13,194,249,22,165,13,195,194,192,91,159,37,11,90,161,37,35,11, 248,22,153,13,194,249,22,171,13,195,194,192,91,159,37,11,90,161,37,35,11,
87,95,28,28,248,22,148,13,23,196,2,10,27,248,22,147,13,23,197,2,28, 87,95,28,28,248,22,154,13,23,196,2,10,27,248,22,153,13,23,197,2,28,
23,193,2,192,87,94,23,193,1,28,248,22,162,6,23,197,2,27,248,22,169, 23,193,2,192,87,94,23,193,1,28,248,22,168,6,23,197,2,27,248,22,175,
13,23,198,2,28,23,193,2,192,87,94,23,193,1,248,22,170,13,23,198,2, 13,23,198,2,28,23,193,2,192,87,94,23,193,1,248,22,176,13,23,198,2,
11,12,252,22,135,9,2,10,2,24,35,23,200,2,23,201,2,28,28,248,22, 11,12,252,22,141,9,2,10,2,24,35,23,200,2,23,201,2,28,28,248,22,
162,6,23,197,2,10,248,22,150,7,23,197,2,12,252,22,135,9,2,10,2, 168,6,23,197,2,10,248,22,156,7,23,197,2,12,252,22,141,9,2,10,2,
25,36,23,200,2,23,201,2,91,159,38,11,90,161,38,35,11,248,22,168,13, 25,36,23,200,2,23,201,2,91,159,38,11,90,161,38,35,11,248,22,174,13,
23,199,2,87,94,23,195,1,87,94,28,192,12,250,22,136,9,2,10,2,26, 23,199,2,87,94,23,195,1,87,94,28,192,12,250,22,142,9,2,10,2,26,
23,201,2,249,22,7,194,195,27,249,22,157,13,249,22,160,7,250,22,142,14, 23,201,2,249,22,7,194,195,27,249,22,163,13,249,22,166,7,250,22,148,14,
0,9,35,114,120,35,34,91,46,93,34,248,22,153,13,23,203,1,6,1,1, 0,9,35,114,120,35,34,91,46,93,34,248,22,159,13,23,203,1,6,1,1,
95,28,248,22,162,6,23,202,2,249,22,174,7,23,203,1,8,63,23,201,1, 95,28,248,22,168,6,23,202,2,249,22,180,7,23,203,1,8,63,23,201,1,
28,248,22,148,13,23,199,2,248,22,149,13,23,199,1,87,94,23,198,1,247, 28,248,22,154,13,23,199,2,248,22,155,13,23,199,1,87,94,23,198,1,247,
22,150,13,28,248,22,147,13,194,249,22,165,13,195,194,192,249,247,22,129,5, 22,156,13,28,248,22,153,13,194,249,22,171,13,195,194,192,249,247,22,135,5,
194,11,249,80,159,37,46,36,9,9,249,80,159,37,46,36,195,9,27,247,22, 194,11,249,80,159,37,46,36,9,9,249,80,159,37,46,36,195,9,27,247,22,
191,13,249,80,158,38,47,28,23,195,2,27,248,22,179,7,6,11,11,80,76, 133,14,249,80,158,38,47,28,23,195,2,27,248,22,185,7,6,11,11,80,76,
84,67,79,76,76,69,67,84,83,28,192,192,6,0,0,6,0,0,27,28,23, 84,67,79,76,76,69,67,84,83,28,192,192,6,0,0,6,0,0,27,28,23,
196,1,250,22,165,13,248,22,187,13,69,97,100,100,111,110,45,100,105,114,247, 196,1,250,22,171,13,248,22,129,14,69,97,100,100,111,110,45,100,105,114,247,
22,177,7,6,8,8,99,111,108,108,101,99,116,115,11,27,248,80,159,41,52, 22,183,7,6,8,8,99,111,108,108,101,99,116,115,11,27,248,80,159,41,52,
36,250,22,81,23,203,1,248,22,77,248,22,187,13,72,99,111,108,108,101,99, 36,250,22,81,23,203,1,248,22,77,248,22,129,14,72,99,111,108,108,101,99,
116,115,45,100,105,114,23,204,1,28,193,249,22,67,195,194,192,32,47,89,162, 116,115,45,100,105,114,23,204,1,28,193,249,22,67,195,194,192,32,47,89,162,
8,44,38,54,2,18,222,33,48,27,249,22,134,14,23,197,2,23,198,2,28, 8,44,38,54,2,18,222,33,48,27,249,22,140,14,23,197,2,23,198,2,28,
23,193,2,87,94,23,196,1,27,248,22,92,23,195,2,27,27,248,22,101,23, 23,193,2,87,94,23,196,1,27,248,22,92,23,195,2,27,27,248,22,101,23,
197,1,27,249,22,134,14,23,201,2,23,196,2,28,23,193,2,87,94,23,194, 197,1,27,249,22,140,14,23,201,2,23,196,2,28,23,193,2,87,94,23,194,
1,27,248,22,92,23,195,2,27,250,2,47,23,203,2,23,204,1,248,22,101, 1,27,248,22,92,23,195,2,27,250,2,47,23,203,2,23,204,1,248,22,101,
23,199,1,28,249,22,156,7,23,196,2,2,27,249,22,81,23,202,2,194,249, 23,199,1,28,249,22,162,7,23,196,2,2,27,249,22,81,23,202,2,194,249,
22,67,248,22,156,13,23,197,1,194,87,95,23,199,1,23,193,1,28,249,22, 22,67,248,22,162,13,23,197,1,194,87,95,23,199,1,23,193,1,28,249,22,
156,7,23,196,2,2,27,249,22,81,23,200,2,9,249,22,67,248,22,156,13, 162,7,23,196,2,2,27,249,22,81,23,200,2,9,249,22,67,248,22,162,13,
23,197,1,9,28,249,22,156,7,23,196,2,2,27,249,22,81,197,194,87,94, 23,197,1,9,28,249,22,162,7,23,196,2,2,27,249,22,81,197,194,87,94,
23,196,1,249,22,67,248,22,156,13,23,197,1,194,87,94,23,193,1,28,249, 23,196,1,249,22,67,248,22,162,13,23,197,1,194,87,94,23,193,1,28,249,
22,156,7,23,198,2,2,27,249,22,81,195,9,87,94,23,194,1,249,22,67, 22,162,7,23,198,2,2,27,249,22,81,195,9,87,94,23,194,1,249,22,67,
248,22,156,13,23,199,1,9,87,95,28,28,248,22,150,7,194,10,248,22,162, 248,22,162,13,23,199,1,9,87,95,28,28,248,22,156,7,194,10,248,22,168,
6,194,12,250,22,135,9,2,13,6,21,21,98,121,116,101,32,115,116,114,105, 6,194,12,250,22,141,9,2,13,6,21,21,98,121,116,101,32,115,116,114,105,
110,103,32,111,114,32,115,116,114,105,110,103,196,28,28,248,22,76,195,249,22, 110,103,32,111,114,32,115,116,114,105,110,103,196,28,28,248,22,76,195,249,22,
4,22,147,13,196,11,12,250,22,135,9,2,13,6,13,13,108,105,115,116,32, 4,22,153,13,196,11,12,250,22,141,9,2,13,6,13,13,108,105,115,116,32,
111,102,32,112,97,116,104,115,197,250,2,47,197,195,28,248,22,162,6,197,248, 111,102,32,112,97,116,104,115,197,250,2,47,197,195,28,248,22,168,6,197,248,
22,173,7,197,196,32,50,89,162,8,44,39,57,2,18,222,33,53,32,51,89, 22,179,7,197,196,32,50,89,162,8,44,39,57,2,18,222,33,53,32,51,89,
162,8,44,38,54,70,102,111,117,110,100,45,101,120,101,99,222,33,52,28,23, 162,8,44,38,54,70,102,111,117,110,100,45,101,120,101,99,222,33,52,28,23,
193,2,91,159,38,11,90,161,38,35,11,248,22,168,13,23,199,2,87,95,23, 193,2,91,159,38,11,90,161,38,35,11,248,22,174,13,23,199,2,87,95,23,
195,1,23,194,1,27,28,23,198,2,27,248,22,173,13,23,201,2,28,249,22, 195,1,23,194,1,27,28,23,198,2,27,248,22,179,13,23,201,2,28,249,22,
169,8,23,195,2,23,202,2,11,28,248,22,169,13,23,194,2,250,2,51,23, 175,8,23,195,2,23,202,2,11,28,248,22,175,13,23,194,2,250,2,51,23,
201,2,23,202,2,249,22,165,13,23,200,2,23,198,1,250,2,51,23,201,2, 201,2,23,202,2,249,22,171,13,23,200,2,23,198,1,250,2,51,23,201,2,
23,202,2,23,196,1,11,28,23,193,2,192,87,94,23,193,1,27,28,248,22, 23,202,2,23,196,1,11,28,23,193,2,192,87,94,23,193,1,27,28,248,22,
147,13,23,196,2,27,249,22,165,13,23,198,2,23,201,2,28,28,248,22,160, 153,13,23,196,2,27,249,22,171,13,23,198,2,23,201,2,28,28,248,22,166,
13,193,10,248,22,159,13,193,192,11,11,28,23,193,2,192,87,94,23,193,1, 13,193,10,248,22,165,13,193,192,11,11,28,23,193,2,192,87,94,23,193,1,
28,23,199,2,11,27,248,22,173,13,23,202,2,28,249,22,169,8,23,195,2, 28,23,199,2,11,27,248,22,179,13,23,202,2,28,249,22,175,8,23,195,2,
23,203,1,11,28,248,22,169,13,23,194,2,250,2,51,23,202,1,23,203,1, 23,203,1,11,28,248,22,175,13,23,194,2,250,2,51,23,202,1,23,203,1,
249,22,165,13,23,201,1,23,198,1,250,2,51,201,202,195,194,28,248,22,75, 249,22,171,13,23,201,1,23,198,1,250,2,51,201,202,195,194,28,248,22,75,
23,197,2,11,27,248,22,172,13,248,22,68,23,199,2,27,249,22,165,13,23, 23,197,2,11,27,248,22,178,13,248,22,68,23,199,2,27,249,22,171,13,23,
196,1,23,197,2,28,248,22,159,13,23,194,2,250,2,51,198,199,195,87,94, 196,1,23,197,2,28,248,22,165,13,23,194,2,250,2,51,198,199,195,87,94,
23,193,1,27,248,22,69,23,200,1,28,248,22,75,23,194,2,11,27,248,22, 23,193,1,27,248,22,69,23,200,1,28,248,22,75,23,194,2,11,27,248,22,
172,13,248,22,68,23,196,2,27,249,22,165,13,23,196,1,23,200,2,28,248, 178,13,248,22,68,23,196,2,27,249,22,171,13,23,196,1,23,200,2,28,248,
22,159,13,23,194,2,250,2,51,201,202,195,87,94,23,193,1,27,248,22,69, 22,165,13,23,194,2,250,2,51,201,202,195,87,94,23,193,1,27,248,22,69,
23,197,1,28,248,22,75,23,194,2,11,27,248,22,172,13,248,22,68,195,27, 23,197,1,28,248,22,75,23,194,2,11,27,248,22,178,13,248,22,68,195,27,
249,22,165,13,23,196,1,202,28,248,22,159,13,193,250,2,51,204,205,195,251, 249,22,171,13,23,196,1,202,28,248,22,165,13,193,250,2,51,204,205,195,251,
2,50,204,205,206,248,22,69,199,87,95,28,27,248,22,147,13,23,196,2,28, 2,50,204,205,206,248,22,69,199,87,95,28,27,248,22,153,13,23,196,2,28,
23,193,2,192,87,94,23,193,1,28,248,22,162,6,23,196,2,27,248,22,169, 23,193,2,192,87,94,23,193,1,28,248,22,168,6,23,196,2,27,248,22,175,
13,23,197,2,28,23,193,2,192,87,94,23,193,1,248,22,170,13,23,197,2, 13,23,197,2,28,23,193,2,192,87,94,23,193,1,248,22,176,13,23,197,2,
11,12,250,22,135,9,2,14,6,25,25,112,97,116,104,32,111,114,32,115,116, 11,12,250,22,141,9,2,14,6,25,25,112,97,116,104,32,111,114,32,115,116,
114,105,110,103,32,40,115,97,110,115,32,110,117,108,41,23,197,2,28,28,23, 114,105,110,103,32,40,115,97,110,115,32,110,117,108,41,23,197,2,28,28,23,
195,2,28,27,248,22,147,13,23,197,2,28,23,193,2,192,87,94,23,193,1, 195,2,28,27,248,22,153,13,23,197,2,28,23,193,2,192,87,94,23,193,1,
28,248,22,162,6,23,197,2,27,248,22,169,13,23,198,2,28,23,193,2,192, 28,248,22,168,6,23,197,2,27,248,22,175,13,23,198,2,28,23,193,2,192,
87,94,23,193,1,248,22,170,13,23,198,2,11,248,22,169,13,23,196,2,11, 87,94,23,193,1,248,22,176,13,23,198,2,11,248,22,175,13,23,196,2,11,
10,12,250,22,135,9,2,14,6,29,29,35,102,32,111,114,32,114,101,108,97, 10,12,250,22,141,9,2,14,6,29,29,35,102,32,111,114,32,114,101,108,97,
116,105,118,101,32,112,97,116,104,32,111,114,32,115,116,114,105,110,103,23,198, 116,105,118,101,32,112,97,116,104,32,111,114,32,115,116,114,105,110,103,23,198,
2,28,28,248,22,169,13,23,195,2,91,159,38,11,90,161,38,35,11,248,22, 2,28,28,248,22,175,13,23,195,2,91,159,38,11,90,161,38,35,11,248,22,
168,13,23,198,2,249,22,167,8,194,68,114,101,108,97,116,105,118,101,11,27, 174,13,23,198,2,249,22,173,8,194,68,114,101,108,97,116,105,118,101,11,27,
248,22,179,7,6,4,4,80,65,84,72,251,2,50,23,199,1,23,200,1,23, 248,22,185,7,6,4,4,80,65,84,72,251,2,50,23,199,1,23,200,1,23,
201,1,28,23,197,2,27,249,80,159,43,47,37,23,200,1,9,28,249,22,167, 201,1,28,23,197,2,27,249,80,159,43,47,37,23,200,1,9,28,249,22,173,
8,247,22,181,7,2,20,249,22,67,248,22,156,13,5,1,46,194,192,9,27, 8,247,22,187,7,2,20,249,22,67,248,22,162,13,5,1,46,194,192,9,27,
248,22,172,13,23,196,1,28,248,22,159,13,193,250,2,51,198,199,195,11,250, 248,22,178,13,23,196,1,28,248,22,165,13,193,250,2,51,198,199,195,11,250,
80,159,38,48,36,196,197,11,250,80,159,38,48,36,196,11,11,87,94,249,22, 80,159,38,48,36,196,197,11,250,80,159,38,48,36,196,11,11,87,94,249,22,
153,6,247,22,189,4,195,248,22,179,5,249,22,174,3,35,249,22,158,3,197, 159,6,247,22,131,5,195,248,22,185,5,249,22,180,3,35,249,22,164,3,197,
198,27,28,23,197,2,87,95,23,196,1,23,195,1,23,197,1,87,94,23,197, 198,27,28,23,197,2,87,95,23,196,1,23,195,1,23,197,1,87,94,23,197,
1,27,248,22,187,13,2,19,27,249,80,159,40,48,36,23,196,1,11,27,27, 1,27,248,22,129,14,2,19,27,249,80,159,40,48,36,23,196,1,11,27,27,
248,22,177,3,23,200,1,28,192,192,35,27,27,248,22,177,3,23,202,1,28, 248,22,183,3,23,200,1,28,192,192,35,27,27,248,22,183,3,23,202,1,28,
192,192,35,249,22,156,5,23,197,1,83,158,39,20,97,95,89,162,8,44,35, 192,192,35,249,22,162,5,23,197,1,83,158,39,20,97,95,89,162,8,44,35,
47,9,224,3,2,33,57,23,195,1,23,196,1,27,248,22,141,5,23,195,1, 47,9,224,3,2,33,57,23,195,1,23,196,1,27,248,22,147,5,23,195,1,
248,80,159,38,53,36,193,159,35,20,102,159,35,16,1,11,16,0,83,158,41, 248,80,159,38,53,36,193,159,35,20,102,159,35,16,1,11,16,0,83,158,41,
20,100,144,67,35,37,117,116,105,108,115,29,11,11,11,11,11,10,42,80,158, 20,100,144,67,35,37,117,116,105,108,115,29,11,11,11,11,11,10,42,80,158,
35,35,20,102,159,37,16,17,2,1,2,2,2,3,2,4,2,5,2,6,2, 35,35,20,102,159,37,16,17,2,1,2,2,2,3,2,4,2,5,2,6,2,
@ -316,7 +316,7 @@
83,158,35,16,2,89,162,43,36,48,2,18,223,0,33,28,80,159,35,53,36, 83,158,35,16,2,89,162,43,36,48,2,18,223,0,33,28,80,159,35,53,36,
83,158,35,16,2,89,162,8,44,36,55,2,18,223,0,33,29,80,159,35,52, 83,158,35,16,2,89,162,8,44,36,55,2,18,223,0,33,29,80,159,35,52,
36,83,158,35,16,2,32,0,89,162,43,36,44,2,1,222,33,30,80,159,35, 36,83,158,35,16,2,32,0,89,162,43,36,44,2,1,222,33,30,80,159,35,
35,36,83,158,35,16,2,249,22,164,6,7,92,7,92,80,159,35,36,36,83, 35,36,83,158,35,16,2,249,22,170,6,7,92,7,92,80,159,35,36,36,83,
158,35,16,2,89,162,43,36,53,2,3,223,0,33,31,80,159,35,37,36,83, 158,35,16,2,89,162,43,36,53,2,3,223,0,33,31,80,159,35,37,36,83,
158,35,16,2,32,0,89,162,8,44,37,49,2,4,222,33,32,80,159,35,38, 158,35,16,2,32,0,89,162,8,44,37,49,2,4,222,33,32,80,159,35,38,
36,83,158,35,16,2,32,0,89,162,8,44,38,50,2,5,222,33,34,80,159, 36,83,158,35,16,2,32,0,89,162,8,44,38,50,2,5,222,33,34,80,159,
@ -329,8 +329,8 @@
11,222,33,43,80,159,35,45,36,83,158,35,16,2,83,158,38,20,96,96,2, 11,222,33,43,80,159,35,45,36,83,158,35,16,2,83,158,38,20,96,96,2,
12,89,162,43,35,43,9,223,0,33,44,89,162,43,36,44,9,223,0,33,45, 12,89,162,43,35,43,9,223,0,33,44,89,162,43,36,44,9,223,0,33,45,
89,162,43,37,54,9,223,0,33,46,80,159,35,46,36,83,158,35,16,2,27, 89,162,43,37,54,9,223,0,33,46,80,159,35,46,36,83,158,35,16,2,27,
248,22,130,14,248,22,173,7,27,28,249,22,167,8,247,22,181,7,2,20,6, 248,22,136,14,248,22,179,7,27,28,249,22,173,8,247,22,187,7,2,20,6,
1,1,59,6,1,1,58,250,22,146,7,6,14,14,40,91,94,126,97,93,42, 1,1,59,6,1,1,58,250,22,152,7,6,14,14,40,91,94,126,97,93,42,
41,126,97,40,46,42,41,23,196,2,23,196,1,89,162,8,44,37,47,2,13, 41,126,97,40,46,42,41,23,196,2,23,196,1,89,162,8,44,37,47,2,13,
223,0,33,49,80,159,35,47,36,83,158,35,16,2,83,158,38,20,96,96,2, 223,0,33,49,80,159,35,47,36,83,158,35,16,2,83,158,38,20,96,96,2,
14,89,162,8,44,38,53,9,223,0,33,54,89,162,43,37,46,9,223,0,33, 14,89,162,8,44,38,53,9,223,0,33,54,89,162,43,37,46,9,223,0,33,
@ -341,7 +341,7 @@
EVAL_ONE_SIZED_STR((char *)expr, 5006); EVAL_ONE_SIZED_STR((char *)expr, 5006);
} }
{ {
static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,52,46,50,46,51,46,51,8,0,0,0,1,0,0,6,0,19,0, static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,52,46,50,46,51,46,52,8,0,0,0,1,0,0,6,0,19,0,
34,0,48,0,62,0,76,0,118,0,0,0,38,1,0,0,65,113,117,111,116, 34,0,48,0,62,0,76,0,118,0,0,0,38,1,0,0,65,113,117,111,116,
101,29,94,2,1,67,35,37,117,116,105,108,115,11,29,94,2,1,69,35,37, 101,29,94,2,1,67,35,37,117,116,105,108,115,11,29,94,2,1,69,35,37,
110,101,116,119,111,114,107,11,29,94,2,1,68,35,37,112,97,114,97,109,122, 110,101,116,119,111,114,107,11,29,94,2,1,68,35,37,112,97,114,97,109,122,
@ -360,7 +360,7 @@
EVAL_ONE_SIZED_STR((char *)expr, 331); EVAL_ONE_SIZED_STR((char *)expr, 331);
} }
{ {
static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,52,46,50,46,51,46,51,56,0,0,0,1,0,0,11,0,38,0, static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,52,46,50,46,51,46,52,56,0,0,0,1,0,0,11,0,38,0,
44,0,57,0,66,0,73,0,95,0,117,0,143,0,155,0,173,0,193,0,205, 44,0,57,0,66,0,73,0,95,0,117,0,143,0,155,0,173,0,193,0,205,
0,221,0,244,0,0,1,31,1,38,1,43,1,48,1,53,1,58,1,67,1, 0,221,0,244,0,0,1,31,1,38,1,43,1,48,1,53,1,58,1,67,1,
72,1,76,1,84,1,93,1,101,1,204,1,249,1,13,2,42,2,73,2,129, 72,1,76,1,84,1,93,1,101,1,204,1,249,1,13,2,42,2,73,2,129,
@ -383,48 +383,48 @@
29,94,2,3,2,5,11,64,98,111,111,116,64,115,101,97,108,64,115,97,109, 29,94,2,3,2,5,11,64,98,111,111,116,64,115,101,97,108,64,115,97,109,
101,5,3,46,122,111,6,6,6,110,97,116,105,118,101,64,108,111,111,112,63, 101,5,3,46,122,111,6,6,6,110,97,116,105,118,101,64,108,111,111,112,63,
108,105,98,67,105,103,110,111,114,101,100,249,22,14,195,80,159,37,45,37,249, 108,105,98,67,105,103,110,111,114,101,100,249,22,14,195,80,159,37,45,37,249,
80,159,37,48,36,195,10,27,28,23,195,2,28,249,22,167,8,23,197,2,80, 80,159,37,48,36,195,10,27,28,23,195,2,28,249,22,173,8,23,197,2,80,
158,38,46,87,94,23,195,1,80,158,36,47,27,248,22,176,4,23,197,2,28, 158,38,46,87,94,23,195,1,80,158,36,47,27,248,22,182,4,23,197,2,28,
248,22,147,13,23,194,2,91,159,38,11,90,161,38,35,11,248,22,168,13,23, 248,22,153,13,23,194,2,91,159,38,11,90,161,38,35,11,248,22,174,13,23,
197,1,87,95,83,160,37,11,80,158,40,46,198,83,160,37,11,80,158,40,47, 197,1,87,95,83,160,37,11,80,158,40,46,198,83,160,37,11,80,158,40,47,
192,192,11,11,28,23,193,2,192,87,94,23,193,1,27,247,22,130,5,28,192, 192,192,11,11,28,23,193,2,192,87,94,23,193,1,27,247,22,136,5,28,192,
192,247,22,188,13,20,14,159,80,158,35,39,250,80,158,38,40,249,22,27,11, 192,247,22,130,14,20,14,159,80,158,35,39,250,80,158,38,40,249,22,27,11,
80,158,40,39,22,130,5,28,248,22,147,13,23,198,2,23,197,1,87,94,23, 80,158,40,39,22,136,5,28,248,22,153,13,23,198,2,23,197,1,87,94,23,
197,1,247,22,188,13,247,194,250,22,165,13,23,197,1,23,199,1,249,80,158, 197,1,247,22,130,14,247,194,250,22,171,13,23,197,1,23,199,1,249,80,158,
42,38,23,198,1,2,22,252,22,165,13,23,199,1,23,201,1,2,23,247,22, 42,38,23,198,1,2,22,252,22,171,13,23,199,1,23,201,1,2,23,247,22,
182,7,249,80,158,44,38,23,200,1,80,159,44,35,37,87,94,23,194,1,27, 188,7,249,80,158,44,38,23,200,1,80,159,44,35,37,87,94,23,194,1,27,
250,22,182,13,196,11,32,0,89,162,8,44,35,40,9,222,11,28,192,249,22, 250,22,188,13,196,11,32,0,89,162,8,44,35,40,9,222,11,28,192,249,22,
67,195,194,11,27,252,22,165,13,23,200,1,23,202,1,2,23,247,22,182,7, 67,195,194,11,27,252,22,171,13,23,200,1,23,202,1,2,23,247,22,188,7,
249,80,158,45,38,23,201,1,80,159,45,35,37,27,250,22,182,13,196,11,32, 249,80,158,45,38,23,201,1,80,159,45,35,37,27,250,22,188,13,196,11,32,
0,89,162,8,44,35,40,9,222,11,28,192,249,22,67,195,194,11,249,247,22, 0,89,162,8,44,35,40,9,222,11,28,192,249,22,67,195,194,11,249,247,22,
129,14,248,22,68,195,195,27,250,22,165,13,23,198,1,23,200,1,249,80,158, 135,14,248,22,68,195,195,27,250,22,171,13,23,198,1,23,200,1,249,80,158,
43,38,23,199,1,2,22,27,250,22,182,13,196,11,32,0,89,162,8,44,35, 43,38,23,199,1,2,22,27,250,22,188,13,196,11,32,0,89,162,8,44,35,
40,9,222,11,28,192,249,22,67,195,194,11,249,247,22,128,5,248,22,68,195, 40,9,222,11,28,192,249,22,67,195,194,11,249,247,22,134,5,248,22,68,195,
195,249,247,22,128,5,194,195,87,94,28,248,80,158,36,37,23,195,2,12,250, 195,249,247,22,134,5,194,195,87,94,28,248,80,158,36,37,23,195,2,12,250,
22,135,9,77,108,111,97,100,47,117,115,101,45,99,111,109,112,105,108,101,100, 22,141,9,77,108,111,97,100,47,117,115,101,45,99,111,109,112,105,108,101,100,
6,25,25,112,97,116,104,32,111,114,32,118,97,108,105,100,45,112,97,116,104, 6,25,25,112,97,116,104,32,111,114,32,118,97,108,105,100,45,112,97,116,104,
32,115,116,114,105,110,103,23,197,2,91,159,41,11,90,161,36,35,11,28,248, 32,115,116,114,105,110,103,23,197,2,91,159,41,11,90,161,36,35,11,28,248,
22,171,13,23,201,2,23,200,1,27,247,22,130,5,28,23,193,2,249,22,172, 22,177,13,23,201,2,23,200,1,27,247,22,136,5,28,23,193,2,249,22,178,
13,23,203,1,23,195,1,200,90,161,38,36,11,248,22,168,13,23,194,2,87, 13,23,203,1,23,195,1,200,90,161,38,36,11,248,22,174,13,23,194,2,87,
94,23,196,1,90,161,36,39,11,28,249,22,167,8,23,196,2,68,114,101,108, 94,23,196,1,90,161,36,39,11,28,249,22,173,8,23,196,2,68,114,101,108,
97,116,105,118,101,87,94,23,194,1,2,21,23,194,1,90,161,36,40,11,247, 97,116,105,118,101,87,94,23,194,1,2,21,23,194,1,90,161,36,40,11,247,
22,190,13,27,89,162,43,36,49,62,122,111,225,7,5,3,33,31,27,89,162, 22,132,14,27,89,162,43,36,49,62,122,111,225,7,5,3,33,31,27,89,162,
43,36,51,9,225,8,6,4,33,32,27,249,22,5,89,162,8,44,36,46,9, 43,36,51,9,225,8,6,4,33,32,27,249,22,5,89,162,8,44,36,46,9,
223,5,33,33,23,203,2,27,28,23,195,1,27,249,22,5,89,162,8,44,36, 223,5,33,33,23,203,2,27,28,23,195,1,27,249,22,5,89,162,8,44,36,
52,9,225,13,11,9,33,34,23,205,2,27,28,23,196,2,11,193,28,192,192, 52,9,225,13,11,9,33,34,23,205,2,27,28,23,196,2,11,193,28,192,192,
28,193,28,23,196,2,28,249,22,170,3,248,22,69,196,248,22,69,23,199,2, 28,193,28,23,196,2,28,249,22,176,3,248,22,69,196,248,22,69,23,199,2,
193,11,11,11,11,28,23,193,2,249,80,159,47,58,36,202,89,162,43,35,45, 193,11,11,11,11,28,23,193,2,249,80,159,47,58,36,202,89,162,43,35,45,
9,224,14,2,33,35,87,94,23,193,1,27,28,23,197,1,27,249,22,5,83, 9,224,14,2,33,35,87,94,23,193,1,27,28,23,197,1,27,249,22,5,83,
158,39,20,97,94,89,162,8,44,36,50,9,225,14,12,10,33,36,23,203,1, 158,39,20,97,94,89,162,8,44,36,50,9,225,14,12,10,33,36,23,203,1,
23,206,1,27,28,196,11,193,28,192,192,28,193,28,196,28,249,22,170,3,248, 23,206,1,27,28,196,11,193,28,192,192,28,193,28,196,28,249,22,176,3,248,
22,69,196,248,22,69,199,193,11,11,11,11,28,192,249,80,159,48,58,36,203, 22,69,196,248,22,69,199,193,11,11,11,11,28,192,249,80,159,48,58,36,203,
89,162,43,35,45,9,224,15,2,33,37,249,80,159,48,58,36,203,89,162,43, 89,162,43,35,45,9,224,15,2,33,37,249,80,159,48,58,36,203,89,162,43,
35,44,9,224,15,7,33,38,32,40,89,162,8,44,36,54,2,24,222,33,42, 35,44,9,224,15,7,33,38,32,40,89,162,8,44,36,54,2,24,222,33,42,
0,17,35,114,120,34,94,40,46,42,63,41,47,40,46,42,41,36,34,27,249, 0,17,35,114,120,34,94,40,46,42,63,41,47,40,46,42,41,36,34,27,249,
22,134,14,2,41,23,196,2,28,23,193,2,87,94,23,194,1,249,22,67,248, 22,140,14,2,41,23,196,2,28,23,193,2,87,94,23,194,1,249,22,67,248,
22,92,23,196,2,27,248,22,101,23,197,1,27,249,22,134,14,2,41,23,196, 22,92,23,196,2,27,248,22,101,23,197,1,27,249,22,140,14,2,41,23,196,
2,28,23,193,2,87,94,23,194,1,249,22,67,248,22,92,23,196,2,27,248, 2,28,23,193,2,87,94,23,194,1,249,22,67,248,22,92,23,196,2,27,248,
22,101,23,197,1,27,249,22,134,14,2,41,23,196,2,28,23,193,2,87,94, 22,101,23,197,1,27,249,22,140,14,2,41,23,196,2,28,23,193,2,87,94,
23,194,1,249,22,67,248,22,92,23,196,2,248,2,40,248,22,101,23,197,1, 23,194,1,249,22,67,248,22,92,23,196,2,248,2,40,248,22,101,23,197,1,
248,22,77,194,248,22,77,194,248,22,77,194,32,43,89,162,43,36,54,2,24, 248,22,77,194,248,22,77,194,248,22,77,194,32,43,89,162,43,36,54,2,24,
222,33,44,28,248,22,75,248,22,69,23,195,2,249,22,7,9,248,22,68,195, 222,33,44,28,248,22,75,248,22,69,23,195,2,249,22,7,9,248,22,68,195,
@ -434,95 +434,95 @@
195,91,159,37,11,90,161,37,35,11,248,2,43,248,22,69,196,249,22,7,249, 195,91,159,37,11,90,161,37,35,11,248,2,43,248,22,69,196,249,22,7,249,
22,67,248,22,68,199,196,195,249,22,7,249,22,67,248,22,68,199,196,195,249, 22,67,248,22,68,199,196,195,249,22,7,249,22,67,248,22,68,199,196,195,249,
22,7,249,22,67,248,22,68,199,196,195,27,248,2,40,23,195,1,28,194,192, 22,7,249,22,67,248,22,68,199,196,195,27,248,2,40,23,195,1,28,194,192,
248,2,43,193,87,95,28,248,22,174,4,195,12,250,22,135,9,2,17,6,20, 248,2,43,193,87,95,28,248,22,180,4,195,12,250,22,141,9,2,17,6,20,
20,114,101,115,111,108,118,101,100,45,109,111,100,117,108,101,45,112,97,116,104, 20,114,101,115,111,108,118,101,100,45,109,111,100,117,108,101,45,112,97,116,104,
197,28,24,193,2,248,24,194,1,195,87,94,23,193,1,12,27,27,250,22,141, 197,28,24,193,2,248,24,194,1,195,87,94,23,193,1,12,27,27,250,22,141,
2,80,159,41,42,37,248,22,154,14,247,22,129,12,11,28,23,193,2,192,87, 2,80,159,41,42,37,248,22,160,14,247,22,135,12,11,28,23,193,2,192,87,
94,23,193,1,27,247,22,125,87,94,250,22,139,2,80,159,42,42,37,248,22, 94,23,193,1,27,247,22,125,87,94,250,22,139,2,80,159,42,42,37,248,22,
154,14,247,22,129,12,195,192,250,22,139,2,195,198,66,97,116,116,97,99,104, 160,14,247,22,135,12,195,192,250,22,139,2,195,198,66,97,116,116,97,99,104,
251,211,197,198,199,10,28,192,250,22,134,9,11,196,195,248,22,132,9,194,28, 251,211,197,198,199,10,28,192,250,22,140,9,11,196,195,248,22,138,9,194,28,
249,22,168,6,194,6,1,1,46,2,21,28,249,22,168,6,194,6,2,2,46, 249,22,174,6,194,6,1,1,46,2,21,28,249,22,174,6,194,6,2,2,46,
46,62,117,112,192,28,249,22,169,8,248,22,69,23,200,2,23,197,1,28,249, 46,62,117,112,192,28,249,22,175,8,248,22,69,23,200,2,23,197,1,28,249,
22,167,8,248,22,68,23,200,2,23,196,1,251,22,132,9,2,17,6,26,26, 22,173,8,248,22,68,23,200,2,23,196,1,251,22,138,9,2,17,6,26,26,
99,121,99,108,101,32,105,110,32,108,111,97,100,105,110,103,32,97,116,32,126, 99,121,99,108,101,32,105,110,32,108,111,97,100,105,110,103,32,97,116,32,126,
101,58,32,126,101,23,200,1,249,22,2,22,69,248,22,82,249,22,67,23,206, 101,58,32,126,101,23,200,1,249,22,2,22,69,248,22,82,249,22,67,23,206,
1,23,202,1,12,12,247,192,20,14,159,80,159,39,44,37,249,22,67,248,22, 1,23,202,1,12,12,247,192,20,14,159,80,159,39,44,37,249,22,67,248,22,
154,14,247,22,129,12,23,197,1,20,14,159,80,158,39,39,250,80,158,42,40, 160,14,247,22,135,12,23,197,1,20,14,159,80,158,39,39,250,80,158,42,40,
249,22,27,11,80,158,44,39,22,156,4,23,196,1,249,247,22,129,5,23,198, 249,22,27,11,80,158,44,39,22,162,4,23,196,1,249,247,22,135,5,23,198,
1,248,22,55,248,22,151,13,23,198,1,87,94,28,28,248,22,147,13,23,196, 1,248,22,55,248,22,157,13,23,198,1,87,94,28,28,248,22,153,13,23,196,
2,10,248,22,180,4,23,196,2,12,28,23,197,2,250,22,134,9,11,6,15, 2,10,248,22,186,4,23,196,2,12,28,23,197,2,250,22,140,9,11,6,15,
15,98,97,100,32,109,111,100,117,108,101,32,112,97,116,104,23,200,2,250,22, 15,98,97,100,32,109,111,100,117,108,101,32,112,97,116,104,23,200,2,250,22,
135,9,2,17,6,19,19,109,111,100,117,108,101,45,112,97,116,104,32,111,114, 141,9,2,17,6,19,19,109,111,100,117,108,101,45,112,97,116,104,32,111,114,
32,112,97,116,104,23,198,2,28,28,248,22,65,23,196,2,249,22,167,8,248, 32,112,97,116,104,23,198,2,28,28,248,22,65,23,196,2,249,22,173,8,248,
22,68,23,198,2,2,3,11,248,22,175,4,248,22,92,196,28,28,248,22,65, 22,68,23,198,2,2,3,11,248,22,181,4,248,22,92,196,28,28,248,22,65,
23,196,2,249,22,167,8,248,22,68,23,198,2,66,112,108,97,110,101,116,11, 23,196,2,249,22,173,8,248,22,68,23,198,2,66,112,108,97,110,101,116,11,
87,94,28,207,12,20,14,159,80,158,36,51,80,158,36,49,90,161,36,35,10, 87,94,28,207,12,20,14,159,80,158,36,51,80,158,36,49,90,161,36,35,10,
249,22,157,4,21,94,2,25,6,18,18,112,108,97,110,101,116,47,114,101,115, 249,22,163,4,21,94,2,25,6,18,18,112,108,97,110,101,116,47,114,101,115,
111,108,118,101,114,46,115,115,1,27,112,108,97,110,101,116,45,109,111,100,117, 111,108,118,101,114,46,115,115,1,27,112,108,97,110,101,116,45,109,111,100,117,
108,101,45,110,97,109,101,45,114,101,115,111,108,118,101,114,12,252,212,199,200, 108,101,45,110,97,109,101,45,114,101,115,111,108,118,101,114,12,252,212,199,200,
201,202,80,158,41,49,87,94,23,193,1,27,89,162,8,44,36,45,79,115,104, 201,202,80,158,41,49,87,94,23,193,1,27,89,162,8,44,36,45,79,115,104,
111,119,45,99,111,108,108,101,99,116,105,111,110,45,101,114,114,223,5,33,48, 111,119,45,99,111,108,108,101,99,116,105,111,110,45,101,114,114,223,5,33,48,
27,28,248,22,53,23,198,2,27,250,22,141,2,80,159,42,43,37,249,22,67, 27,28,248,22,53,23,198,2,27,250,22,141,2,80,159,42,43,37,249,22,67,
23,203,2,247,22,189,13,11,28,23,193,2,192,87,94,23,193,1,91,159,37, 23,203,2,247,22,131,14,11,28,23,193,2,192,87,94,23,193,1,91,159,37,
11,90,161,37,35,11,249,80,159,43,48,36,248,22,58,23,203,2,11,27,251, 11,90,161,37,35,11,249,80,159,43,48,36,248,22,58,23,203,2,11,27,251,
80,158,46,52,2,17,23,202,1,28,248,22,75,23,199,2,23,199,2,248,22, 80,158,46,52,2,17,23,202,1,28,248,22,75,23,199,2,23,199,2,248,22,
68,23,199,2,28,248,22,75,23,199,2,9,248,22,69,23,199,2,249,22,165, 68,23,199,2,28,248,22,75,23,199,2,9,248,22,69,23,199,2,249,22,171,
13,23,195,1,28,248,22,75,23,197,1,87,94,23,197,1,6,7,7,109,97, 13,23,195,1,28,248,22,75,23,197,1,87,94,23,197,1,6,7,7,109,97,
105,110,46,115,115,249,22,185,6,23,199,1,6,3,3,46,115,115,28,248,22, 105,110,46,115,115,249,22,191,6,23,199,1,6,3,3,46,115,115,28,248,22,
162,6,23,198,2,87,94,23,194,1,27,248,80,159,40,59,36,23,200,2,27, 168,6,23,198,2,87,94,23,194,1,27,248,80,159,40,59,36,23,200,2,27,
250,22,141,2,80,159,43,43,37,249,22,67,23,204,2,23,199,2,11,28,23, 250,22,141,2,80,159,43,43,37,249,22,67,23,204,2,23,199,2,11,28,23,
193,2,192,87,94,23,193,1,91,159,37,11,90,161,37,35,11,249,80,159,44, 193,2,192,87,94,23,193,1,91,159,37,11,90,161,37,35,11,249,80,159,44,
48,36,23,203,2,11,250,22,1,22,165,13,23,199,1,249,22,81,249,22,2, 48,36,23,203,2,11,250,22,1,22,171,13,23,199,1,249,22,81,249,22,2,
32,0,89,162,8,44,36,43,9,222,33,49,23,200,1,248,22,77,23,200,1, 32,0,89,162,8,44,36,43,9,222,33,49,23,200,1,248,22,77,23,200,1,
28,248,22,147,13,23,198,2,87,94,23,194,1,28,248,22,170,13,23,198,2, 28,248,22,153,13,23,198,2,87,94,23,194,1,28,248,22,176,13,23,198,2,
23,197,2,248,22,77,6,26,26,32,40,97,32,112,97,116,104,32,109,117,115, 23,197,2,248,22,77,6,26,26,32,40,97,32,112,97,116,104,32,109,117,115,
116,32,98,101,32,97,98,115,111,108,117,116,101,41,28,249,22,167,8,248,22, 116,32,98,101,32,97,98,115,111,108,117,116,101,41,28,249,22,173,8,248,22,
68,23,200,2,2,25,27,250,22,141,2,80,159,42,43,37,249,22,67,23,203, 68,23,200,2,2,25,27,250,22,141,2,80,159,42,43,37,249,22,67,23,203,
2,247,22,189,13,11,28,23,193,2,192,87,94,23,193,1,91,159,38,11,90, 2,247,22,131,14,11,28,23,193,2,192,87,94,23,193,1,91,159,38,11,90,
161,37,35,11,249,80,159,44,48,36,248,22,92,23,204,2,11,90,161,36,37, 161,37,35,11,249,80,159,44,48,36,248,22,92,23,204,2,11,90,161,36,37,
11,28,248,22,75,248,22,94,23,203,2,28,248,22,75,23,194,2,249,22,136, 11,28,248,22,75,248,22,94,23,203,2,28,248,22,75,23,194,2,249,22,142,
14,0,8,35,114,120,34,91,46,93,34,23,196,2,11,10,27,27,28,23,197, 14,0,8,35,114,120,34,91,46,93,34,23,196,2,11,10,27,27,28,23,197,
2,249,22,81,28,248,22,75,248,22,94,23,207,2,21,93,6,5,5,109,122, 2,249,22,81,28,248,22,75,248,22,94,23,207,2,21,93,6,5,5,109,122,
108,105,98,249,22,1,22,81,249,22,2,80,159,50,8,25,36,248,22,94,23, 108,105,98,249,22,1,22,81,249,22,2,80,159,50,8,25,36,248,22,94,23,
210,2,23,197,2,28,248,22,75,23,196,2,248,22,77,23,197,2,23,195,2, 210,2,23,197,2,28,248,22,75,23,196,2,248,22,77,23,197,2,23,195,2,
251,80,158,48,52,2,17,23,204,1,248,22,68,23,198,2,248,22,69,23,198, 251,80,158,48,52,2,17,23,204,1,248,22,68,23,198,2,248,22,69,23,198,
1,249,22,165,13,23,195,1,28,23,198,1,87,94,23,196,1,23,197,1,28, 1,249,22,171,13,23,195,1,28,23,198,1,87,94,23,196,1,23,197,1,28,
248,22,75,23,197,1,87,94,23,197,1,6,7,7,109,97,105,110,46,115,115, 248,22,75,23,197,1,87,94,23,197,1,6,7,7,109,97,105,110,46,115,115,
28,249,22,136,14,0,8,35,114,120,34,91,46,93,34,23,199,2,23,197,1, 28,249,22,142,14,0,8,35,114,120,34,91,46,93,34,23,199,2,23,197,1,
249,22,185,6,23,199,1,6,3,3,46,115,115,28,249,22,167,8,248,22,68, 249,22,191,6,23,199,1,6,3,3,46,115,115,28,249,22,173,8,248,22,68,
23,200,2,64,102,105,108,101,249,22,172,13,248,22,176,13,248,22,92,23,201, 23,200,2,64,102,105,108,101,249,22,178,13,248,22,182,13,248,22,92,23,201,
2,248,80,159,41,59,36,23,201,2,12,87,94,28,28,248,22,147,13,23,194, 2,248,80,159,41,59,36,23,201,2,12,87,94,28,28,248,22,153,13,23,194,
2,10,248,22,184,7,23,194,2,87,94,23,199,1,12,28,23,199,2,250,22, 2,10,248,22,190,7,23,194,2,87,94,23,199,1,12,28,23,199,2,250,22,
134,9,67,114,101,113,117,105,114,101,249,22,146,7,6,17,17,98,97,100,32, 140,9,67,114,101,113,117,105,114,101,249,22,152,7,6,17,17,98,97,100,32,
109,111,100,117,108,101,32,112,97,116,104,126,97,28,23,198,2,248,22,68,23, 109,111,100,117,108,101,32,112,97,116,104,126,97,28,23,198,2,248,22,68,23,
199,2,6,0,0,23,202,1,87,94,23,199,1,250,22,135,9,2,17,249,22, 199,2,6,0,0,23,202,1,87,94,23,199,1,250,22,141,9,2,17,249,22,
146,7,6,13,13,109,111,100,117,108,101,32,112,97,116,104,126,97,28,23,198, 152,7,6,13,13,109,111,100,117,108,101,32,112,97,116,104,126,97,28,23,198,
2,248,22,68,23,199,2,6,0,0,23,200,2,27,28,248,22,184,7,23,195, 2,248,22,68,23,199,2,6,0,0,23,200,2,27,28,248,22,190,7,23,195,
2,249,22,189,7,23,196,2,35,249,22,174,13,248,22,175,13,23,197,2,11, 2,249,22,131,8,23,196,2,35,249,22,180,13,248,22,181,13,23,197,2,11,
27,28,248,22,184,7,23,196,2,249,22,189,7,23,197,2,36,248,80,158,41, 27,28,248,22,190,7,23,196,2,249,22,131,8,23,197,2,36,248,80,158,41,
53,23,195,2,91,159,38,11,90,161,38,35,11,28,248,22,184,7,23,199,2, 53,23,195,2,91,159,38,11,90,161,38,35,11,28,248,22,190,7,23,199,2,
250,22,7,2,26,249,22,189,7,23,203,2,37,2,26,248,22,168,13,23,198, 250,22,7,2,26,249,22,131,8,23,203,2,37,2,26,248,22,174,13,23,198,
2,87,95,23,195,1,23,193,1,27,28,248,22,184,7,23,200,2,249,22,189, 2,87,95,23,195,1,23,193,1,27,28,248,22,190,7,23,200,2,249,22,131,
7,23,201,2,38,249,80,158,46,54,23,197,2,5,0,27,28,248,22,184,7, 8,23,201,2,38,249,80,158,46,54,23,197,2,5,0,27,28,248,22,190,7,
23,201,2,249,22,189,7,23,202,2,39,248,22,175,4,23,200,2,27,27,250, 23,201,2,249,22,131,8,23,202,2,39,248,22,181,4,23,200,2,27,27,250,
22,141,2,80,159,50,42,37,248,22,154,14,247,22,129,12,11,28,23,193,2, 22,141,2,80,159,50,42,37,248,22,160,14,247,22,135,12,11,28,23,193,2,
192,87,94,23,193,1,27,247,22,125,87,94,250,22,139,2,80,159,51,42,37, 192,87,94,23,193,1,27,247,22,125,87,94,250,22,139,2,80,159,51,42,37,
248,22,154,14,247,22,129,12,195,192,87,95,28,23,208,1,27,250,22,141,2, 248,22,160,14,247,22,135,12,195,192,87,95,28,23,208,1,27,250,22,141,2,
23,197,2,197,11,28,23,193,1,12,87,95,27,27,28,248,22,17,80,159,50, 23,197,2,197,11,28,23,193,1,12,87,95,27,27,28,248,22,17,80,159,50,
45,37,80,159,49,45,37,247,22,19,250,22,25,248,22,23,23,197,2,80,159, 45,37,80,159,49,45,37,247,22,19,250,22,25,248,22,23,23,197,2,80,159,
52,44,37,23,196,1,27,248,22,154,14,247,22,129,12,249,22,3,83,158,39, 52,44,37,23,196,1,27,248,22,160,14,247,22,135,12,249,22,3,83,158,39,
20,97,94,89,162,8,44,36,54,9,226,12,11,2,3,33,50,23,195,1,23, 20,97,94,89,162,8,44,36,54,9,226,12,11,2,3,33,50,23,195,1,23,
196,1,248,28,248,22,17,80,159,49,45,37,32,0,89,162,43,36,41,9,222, 196,1,248,28,248,22,17,80,159,49,45,37,32,0,89,162,43,36,41,9,222,
33,51,80,159,48,8,26,36,89,162,43,35,50,9,227,13,9,8,4,3,33, 33,51,80,159,48,8,26,36,89,162,43,35,50,9,227,13,9,8,4,3,33,
52,250,22,139,2,23,197,1,197,10,12,28,28,248,22,184,7,23,202,1,11, 52,250,22,139,2,23,197,1,197,10,12,28,28,248,22,190,7,23,202,1,11,
27,248,22,162,6,23,207,2,28,192,192,27,248,22,53,23,208,2,28,192,192, 27,248,22,168,6,23,207,2,28,192,192,27,248,22,53,23,208,2,28,192,192,
28,248,22,65,23,208,2,249,22,167,8,248,22,68,23,210,2,2,25,11,250, 28,248,22,65,23,208,2,249,22,173,8,248,22,68,23,210,2,2,25,11,250,
22,139,2,80,159,49,43,37,28,248,22,162,6,23,209,2,249,22,67,23,210, 22,139,2,80,159,49,43,37,28,248,22,168,6,23,209,2,249,22,67,23,210,
1,248,80,159,52,59,36,23,212,1,87,94,23,209,1,249,22,67,23,210,1, 1,248,80,159,52,59,36,23,212,1,87,94,23,209,1,249,22,67,23,210,1,
247,22,189,13,252,22,186,7,23,208,1,23,207,1,23,205,1,23,203,1,201, 247,22,131,14,252,22,128,8,23,208,1,23,207,1,23,205,1,23,203,1,201,
12,193,87,96,83,160,37,11,80,158,35,49,248,80,158,36,57,249,22,27,11, 12,193,87,96,83,160,37,11,80,158,35,49,248,80,158,36,57,249,22,27,11,
80,158,38,51,248,22,155,4,80,159,36,50,37,248,22,129,5,80,159,36,36, 80,158,38,51,248,22,161,4,80,159,36,50,37,248,22,135,5,80,159,36,36,
36,248,22,184,12,80,159,36,41,36,83,160,37,11,80,158,35,49,248,80,158, 36,248,22,190,12,80,159,36,41,36,83,160,37,11,80,158,35,49,248,80,158,
36,57,249,22,27,11,80,158,38,51,159,35,20,102,159,35,16,1,11,16,0, 36,57,249,22,27,11,80,158,38,51,159,35,20,102,159,35,16,1,11,16,0,
83,158,41,20,100,144,66,35,37,98,111,111,116,29,11,11,11,11,11,10,37, 83,158,41,20,100,144,66,35,37,98,111,111,116,29,11,11,11,11,11,10,37,
80,158,35,35,20,102,159,39,16,23,2,1,2,2,30,2,4,72,112,97,116, 80,158,35,35,20,102,159,39,16,23,2,1,2,2,30,2,4,72,112,97,116,
@ -543,7 +543,7 @@
0,33,28,80,159,35,8,25,36,83,158,35,16,2,89,162,43,36,48,67,103, 0,33,28,80,159,35,8,25,36,83,158,35,16,2,89,162,43,36,48,67,103,
101,116,45,100,105,114,223,0,33,29,80,159,35,59,36,83,158,35,16,2,89, 101,116,45,100,105,114,223,0,33,29,80,159,35,59,36,83,158,35,16,2,89,
162,43,37,48,68,119,105,116,104,45,100,105,114,223,0,33,30,80,159,35,58, 162,43,37,48,68,119,105,116,104,45,100,105,114,223,0,33,30,80,159,35,58,
36,83,158,35,16,2,248,22,181,7,69,115,111,45,115,117,102,102,105,120,80, 36,83,158,35,16,2,248,22,187,7,69,115,111,45,115,117,102,102,105,120,80,
159,35,35,36,83,158,35,16,2,89,162,43,37,59,2,2,223,0,33,39,80, 159,35,35,36,83,158,35,16,2,89,162,43,37,59,2,2,223,0,33,39,80,
159,35,36,36,83,158,35,16,2,32,0,89,162,8,44,36,41,2,8,222,192, 159,35,36,36,83,158,35,16,2,32,0,89,162,8,44,36,41,2,8,222,192,
80,159,35,41,36,83,158,35,16,2,247,22,128,2,80,159,35,42,36,83,158, 80,159,35,41,36,83,158,35,16,2,247,22,128,2,80,159,35,42,36,83,158,

View File

@ -88,6 +88,8 @@ END_XFORM_ARITH;
#define WORDS_TO_BYTES(x) ((x) << JIT_LOG_WORD_SIZE) #define WORDS_TO_BYTES(x) ((x) << JIT_LOG_WORD_SIZE)
#define MAX_TRY_SHIFT 30 #define MAX_TRY_SHIFT 30
#define JIT_LOG_DOUBLE_SIZE 3
/* a mzchar is an int: */ /* a mzchar is an int: */
#define LOG_MZCHAR_SIZE 2 #define LOG_MZCHAR_SIZE 2
@ -144,6 +146,7 @@ static void *bad_vector_length_code;
static void *vector_ref_code, *vector_ref_check_index_code, *vector_set_code, *vector_set_check_index_code; static void *vector_ref_code, *vector_ref_check_index_code, *vector_set_code, *vector_set_check_index_code;
static void *string_ref_code, *string_ref_check_index_code, *string_set_code, *string_set_check_index_code; static void *string_ref_code, *string_ref_check_index_code, *string_set_code, *string_set_check_index_code;
static void *bytes_ref_code, *bytes_ref_check_index_code, *bytes_set_code, *bytes_set_check_index_code; static void *bytes_ref_code, *bytes_ref_check_index_code, *bytes_set_code, *bytes_set_check_index_code;
static void *flvector_ref_check_index_code, *flvector_set_check_index_code;
static void *syntax_e_code; static void *syntax_e_code;
void *scheme_on_demand_jit_code; void *scheme_on_demand_jit_code;
static void *on_demand_jit_arity_code; static void *on_demand_jit_arity_code;
@ -3248,7 +3251,9 @@ static int generate_app(Scheme_App_Rec *app, Scheme_Object **alt_rands, int num_
rator = (alt_rands ? alt_rands[0] : app->args[0]); rator = (alt_rands ? alt_rands[0] : app->args[0]);
if (SCHEME_PRIMP(rator)) { if (no_call == 2) {
direct_prim = 1;
} else if (SCHEME_PRIMP(rator)) {
if ((num_rands >= ((Scheme_Primitive_Proc *)rator)->mina) if ((num_rands >= ((Scheme_Primitive_Proc *)rator)->mina)
&& ((num_rands <= ((Scheme_Primitive_Proc *)rator)->mu.maxa) && ((num_rands <= ((Scheme_Primitive_Proc *)rator)->mu.maxa)
|| (((Scheme_Primitive_Proc *)rator)->mina < 0)) || (((Scheme_Primitive_Proc *)rator)->mina < 0))
@ -3594,6 +3599,7 @@ static int is_unboxable_op(Scheme_Object *obj, int flag)
if (IS_NAMED_PRIM(obj, "unsafe-flabs")) return 1; if (IS_NAMED_PRIM(obj, "unsafe-flabs")) return 1;
if (IS_NAMED_PRIM(obj, "unsafe-fx->fl")) return 1; if (IS_NAMED_PRIM(obj, "unsafe-fx->fl")) return 1;
if (IS_NAMED_PRIM(obj, "unsafe-f64vector-ref")) return 1; if (IS_NAMED_PRIM(obj, "unsafe-f64vector-ref")) return 1;
if (IS_NAMED_PRIM(obj, "unsafe-flvector-ref")) return 1;
return 0; return 0;
} }
@ -5870,7 +5876,8 @@ static int generate_binary_char(mz_jit_state *jitter, Scheme_App3_Rec *app,
return 1; return 1;
} }
static int generate_vector_op(mz_jit_state *jitter, int set, int int_ready, int base_offset, int unsafe) static int generate_vector_op(mz_jit_state *jitter, int set, int int_ready, int base_offset,
int for_fl, int unsafe)
/* if int_ready, JIT_R1 has num index (for safe mode) and JIT_V1 has pre-computed offset, /* if int_ready, JIT_R1 has num index (for safe mode) and JIT_V1 has pre-computed offset,
otherwise JIT_R1 has fixnum index */ otherwise JIT_R1 has fixnum index */
{ {
@ -5887,9 +5894,15 @@ static int generate_vector_op(mz_jit_state *jitter, int set, int int_ready, int
jit_ori_l(JIT_R1, JIT_R1, 0x1); jit_ori_l(JIT_R1, JIT_R1, 0x1);
} }
if (set) { if (set) {
(void)jit_calli(vector_set_check_index_code); if (!for_fl)
(void)jit_calli(vector_set_check_index_code);
else
(void)jit_calli(flvector_set_check_index_code);
} else { } else {
(void)jit_calli(vector_ref_check_index_code); if (!for_fl)
(void)jit_calli(vector_ref_check_index_code);
else
(void)jit_calli(flvector_ref_check_index_code);
} }
/* doesn't return */ /* doesn't return */
CHECK_LIMIT(); CHECK_LIMIT();
@ -5899,8 +5912,13 @@ static int generate_vector_op(mz_jit_state *jitter, int set, int int_ready, int
if (!int_ready) if (!int_ready)
(void)jit_bmci_ul(reffail, JIT_R1, 0x1); (void)jit_bmci_ul(reffail, JIT_R1, 0x1);
jit_ldxi_s(JIT_R2, JIT_R0, &((Scheme_Object *)0x0)->type); jit_ldxi_s(JIT_R2, JIT_R0, &((Scheme_Object *)0x0)->type);
(void)jit_bnei_i(reffail, JIT_R2, scheme_vector_type); if (!for_fl) {
jit_ldxi_i(JIT_R2, JIT_R0, (int)&SCHEME_VEC_SIZE(0x0)); (void)jit_bnei_i(reffail, JIT_R2, scheme_vector_type);
jit_ldxi_i(JIT_R2, JIT_R0, (int)&SCHEME_VEC_SIZE(0x0));
} else {
(void)jit_bnei_i(reffail, JIT_R2, scheme_flvector_type);
jit_ldxi_l(JIT_R2, JIT_R0, (int)&SCHEME_FLVEC_SIZE(0x0));
}
if (!int_ready) { if (!int_ready) {
jit_rshi_ul(JIT_V1, JIT_R1, 1); jit_rshi_ul(JIT_V1, JIT_R1, 1);
(void)jit_bler_ul(reffail, JIT_R2, JIT_V1); (void)jit_bler_ul(reffail, JIT_R2, JIT_V1);
@ -5908,6 +5926,15 @@ static int generate_vector_op(mz_jit_state *jitter, int set, int int_ready, int
(void)jit_bler_ul(reffail, JIT_R2, JIT_R1); (void)jit_bler_ul(reffail, JIT_R2, JIT_R1);
} }
CHECK_LIMIT(); CHECK_LIMIT();
if (for_fl && set) {
jit_ldr_p(JIT_R2, JIT_RUNSTACK);
(void)jit_bmsi_ul(reffail, JIT_R2, 0x1);
jit_ldxi_s(JIT_R2, JIT_R2, &((Scheme_Object *)0x0)->type);
(void)jit_bnei_i(reffail, JIT_R2, scheme_double_type);
CHECK_LIMIT();
}
__END_TINY_JUMPS__(1); __END_TINY_JUMPS__(1);
} else { } else {
if (!int_ready) if (!int_ready)
@ -5915,15 +5942,28 @@ static int generate_vector_op(mz_jit_state *jitter, int set, int int_ready, int
} }
if (!int_ready) { if (!int_ready) {
jit_lshi_ul(JIT_V1, JIT_V1, JIT_LOG_WORD_SIZE); if (!for_fl)
jit_lshi_ul(JIT_V1, JIT_V1, JIT_LOG_WORD_SIZE);
else
jit_lshi_ul(JIT_V1, JIT_V1, JIT_LOG_DOUBLE_SIZE);
jit_addi_p(JIT_V1, JIT_V1, base_offset); jit_addi_p(JIT_V1, JIT_V1, base_offset);
} }
if (set) { if (set) {
jit_ldr_p(JIT_R2, JIT_RUNSTACK); jit_ldr_p(JIT_R2, JIT_RUNSTACK);
jit_stxr_p(JIT_V1, JIT_R0, JIT_R2); if (!for_fl) {
jit_stxr_p(JIT_V1, JIT_R0, JIT_R2);
} else {
jit_ldxi_d_fppush(JIT_FPR0, JIT_R2, &((Scheme_Double *)0x0)->double_val);
jit_stxr_d_fppop(JIT_V1, JIT_R0, JIT_FPR0);
}
(void)jit_movi_p(JIT_R0, scheme_void); (void)jit_movi_p(JIT_R0, scheme_void);
} else { } else {
jit_ldxr_p(JIT_R0, JIT_R0, JIT_V1); if (!for_fl) {
jit_ldxr_p(JIT_R0, JIT_R0, JIT_V1);
} else {
jit_ldxr_d_fppush(JIT_FPR0, JIT_R0, JIT_V1);
generate_alloc_double(jitter);
}
} }
return 1; return 1;
@ -6166,7 +6206,8 @@ static int generate_inlined_binary(mz_jit_state *jitter, Scheme_App3_Rec *app, i
|| IS_NAMED_PRIM(rator, "string-ref") || IS_NAMED_PRIM(rator, "string-ref")
|| IS_NAMED_PRIM(rator, "unsafe-string-ref") || IS_NAMED_PRIM(rator, "unsafe-string-ref")
|| IS_NAMED_PRIM(rator, "bytes-ref") || IS_NAMED_PRIM(rator, "bytes-ref")
|| IS_NAMED_PRIM(rator, "unsafe-bytes-ref")) { || IS_NAMED_PRIM(rator, "unsafe-bytes-ref")
|| IS_NAMED_PRIM(rator, "flvector-ref")) {
int simple; int simple;
int which, unsafe = 0, base_offset = ((int)&SCHEME_VEC_ELS(0x0)); int which, unsafe = 0, base_offset = ((int)&SCHEME_VEC_ELS(0x0));
@ -6175,6 +6216,9 @@ static int generate_inlined_binary(mz_jit_state *jitter, Scheme_App3_Rec *app, i
else if (IS_NAMED_PRIM(rator, "unsafe-vector-ref")) { else if (IS_NAMED_PRIM(rator, "unsafe-vector-ref")) {
which = 0; which = 0;
unsafe = 1; unsafe = 1;
} else if (IS_NAMED_PRIM(rator, "flvector-ref")) {
which = 3;
base_offset = ((int)&SCHEME_FLVEC_ELS(0x0));
} else if (IS_NAMED_PRIM(rator, "unsafe-struct-ref")) { } else if (IS_NAMED_PRIM(rator, "unsafe-struct-ref")) {
which = 0; which = 0;
unsafe = 1; unsafe = 1;
@ -6204,7 +6248,11 @@ static int generate_inlined_binary(mz_jit_state *jitter, Scheme_App3_Rec *app, i
if (!which) { if (!which) {
/* vector-ref is relatively simple and worth inlining */ /* vector-ref is relatively simple and worth inlining */
generate_vector_op(jitter, 0, 0, base_offset, unsafe); generate_vector_op(jitter, 0, 0, base_offset, 0, unsafe);
CHECK_LIMIT();
} else if (which == 3) {
/* flvector-ref is relatively simple and worth inlining */
generate_vector_op(jitter, 0, 0, base_offset, 1, unsafe);
CHECK_LIMIT(); CHECK_LIMIT();
} else if (which == 1) { } else if (which == 1) {
if (unsafe) { if (unsafe) {
@ -6247,12 +6295,18 @@ static int generate_inlined_binary(mz_jit_state *jitter, Scheme_App3_Rec *app, i
(void)jit_movi_p(JIT_R1, offset); (void)jit_movi_p(JIT_R1, offset);
if (!which) if (!which)
offset = base_offset + WORDS_TO_BYTES(offset); offset = base_offset + WORDS_TO_BYTES(offset);
else if (which == 3)
offset = base_offset + (offset * sizeof(double));
else if (which == 1) else if (which == 1)
offset = offset << LOG_MZCHAR_SIZE; offset = offset << LOG_MZCHAR_SIZE;
jit_movi_l(JIT_V1, offset); jit_movi_l(JIT_V1, offset);
if (!which) { if (!which) {
/* vector-ref is relatively simple and worth inlining */ /* vector-ref is relatively simple and worth inlining */
generate_vector_op(jitter, 0, 1, base_offset, unsafe); generate_vector_op(jitter, 0, 1, base_offset, 0, unsafe);
CHECK_LIMIT();
} else if (which == 3) {
/* flvector-ref is relatively simple and worth inlining */
generate_vector_op(jitter, 0, 1, base_offset, 1, unsafe);
CHECK_LIMIT(); CHECK_LIMIT();
} else if (which == 1) { } else if (which == 1) {
if (unsafe) { if (unsafe) {
@ -6281,18 +6335,27 @@ static int generate_inlined_binary(mz_jit_state *jitter, Scheme_App3_Rec *app, i
} }
return 1; return 1;
} else if (IS_NAMED_PRIM(rator, "unsafe-f64vector-ref")) { } else if (IS_NAMED_PRIM(rator, "unsafe-f64vector-ref")
|| IS_NAMED_PRIM(rator, "unsafe-flvector-ref")) {
int fpr0, unbox = jitter->unbox; int fpr0, unbox = jitter->unbox;
int is_f64;
is_f64 = IS_NAMED_PRIM(rator, "unsafe-f64vector-ref");
jitter->unbox = 0; /* no unboxing of vector and index arguments */ jitter->unbox = 0; /* no unboxing of vector and index arguments */
generate_two_args(app->rand1, app->rand2, jitter, 1, 2); generate_two_args(app->rand1, app->rand2, jitter, 1, 2);
jitter->unbox = unbox; jitter->unbox = unbox;
CHECK_LIMIT(); CHECK_LIMIT();
jit_ldxi_p(JIT_R0, JIT_R0, (long)&(((Scheme_Structure *)0x0)->slots[0])); if (is_f64) {
jit_ldxi_p(JIT_R0, JIT_R0, (long)&SCHEME_CPTR_VAL(0x0)); jit_ldxi_p(JIT_R0, JIT_R0, (long)&(((Scheme_Structure *)0x0)->slots[0]));
jit_ldxi_p(JIT_R0, JIT_R0, (long)&SCHEME_CPTR_VAL(0x0));
}
jit_rshi_ul(JIT_R1, JIT_R1, 1); jit_rshi_ul(JIT_R1, JIT_R1, 1);
jit_lshi_ul(JIT_R1, JIT_R1, 3); /* 3 = log(sizeof(double)) */ jit_lshi_ul(JIT_R1, JIT_R1, JIT_LOG_DOUBLE_SIZE);
if (!is_f64) {
jit_addi_ul(JIT_R1, JIT_R1, (int)(&SCHEME_FLVEC_ELS(0x0)));
}
if (jitter->unbox) if (jitter->unbox)
fpr0 = JIT_FPR(jitter->unbox_depth); fpr0 = JIT_FPR(jitter->unbox_depth);
@ -6485,6 +6548,7 @@ static int generate_inlined_nary(mz_jit_state *jitter, Scheme_App_Rec *app, int
} else if (!for_branch) { } else if (!for_branch) {
if (IS_NAMED_PRIM(rator, "vector-set!") if (IS_NAMED_PRIM(rator, "vector-set!")
|| IS_NAMED_PRIM(rator, "unsafe-vector-set!") || IS_NAMED_PRIM(rator, "unsafe-vector-set!")
|| IS_NAMED_PRIM(rator, "flvector-set!")
|| IS_NAMED_PRIM(rator, "unsafe-struct-set!") || IS_NAMED_PRIM(rator, "unsafe-struct-set!")
|| IS_NAMED_PRIM(rator, "string-set!") || IS_NAMED_PRIM(rator, "string-set!")
|| IS_NAMED_PRIM(rator, "unsafe-string-set!") || IS_NAMED_PRIM(rator, "unsafe-string-set!")
@ -6499,6 +6563,9 @@ static int generate_inlined_nary(mz_jit_state *jitter, Scheme_App_Rec *app, int
else if (IS_NAMED_PRIM(rator, "unsafe-vector-set!")) { else if (IS_NAMED_PRIM(rator, "unsafe-vector-set!")) {
which = 0; which = 0;
unsafe = 1; unsafe = 1;
} else if (IS_NAMED_PRIM(rator, "flvector-set!")) {
which = 3;
base_offset = ((int)&SCHEME_FLVEC_ELS(0x0));
} else if (IS_NAMED_PRIM(rator, "unsafe-struct-set!")) { } else if (IS_NAMED_PRIM(rator, "unsafe-struct-set!")) {
which = 0; which = 0;
unsafe = 1; unsafe = 1;
@ -6573,7 +6640,11 @@ static int generate_inlined_nary(mz_jit_state *jitter, Scheme_App_Rec *app, int
if (!simple) { if (!simple) {
if (!which) { if (!which) {
/* vector-set! is relatively simple and worth inlining */ /* vector-set! is relatively simple and worth inlining */
generate_vector_op(jitter, 1, 0, base_offset, unsafe); generate_vector_op(jitter, 1, 0, base_offset, 0, unsafe);
CHECK_LIMIT();
} else if (which == 3) {
/* flvector-set! is relatively simple and worth inlining */
generate_vector_op(jitter, 1, 0, base_offset, 1, unsafe);
CHECK_LIMIT(); CHECK_LIMIT();
} else if (which == 1) { } else if (which == 1) {
if (unsafe) { if (unsafe) {
@ -6605,12 +6676,18 @@ static int generate_inlined_nary(mz_jit_state *jitter, Scheme_App_Rec *app, int
(void)jit_movi_p(JIT_R1, offset); (void)jit_movi_p(JIT_R1, offset);
if (!which) if (!which)
offset = base_offset + WORDS_TO_BYTES(offset); offset = base_offset + WORDS_TO_BYTES(offset);
else if (which == 3)
offset = base_offset + (offset * sizeof(double));
else if (which == 1) else if (which == 1)
offset = offset << LOG_MZCHAR_SIZE; offset = offset << LOG_MZCHAR_SIZE;
jit_movi_l(JIT_V1, offset); jit_movi_l(JIT_V1, offset);
if (!which) { if (!which) {
/* vector-set! is relatively simple and worth inlining */ /* vector-set! is relatively simple and worth inlining */
generate_vector_op(jitter, 1, 1, base_offset, unsafe); generate_vector_op(jitter, 1, 1, base_offset, 0, unsafe);
CHECK_LIMIT();
} else if (which == 3) {
/* flvector-set! is relatively simple and worth inlining */
generate_vector_op(jitter, 1, 1, base_offset, 1, unsafe);
CHECK_LIMIT(); CHECK_LIMIT();
} else if (which == 1) { } else if (which == 1) {
if (unsafe) { if (unsafe) {
@ -6641,7 +6718,10 @@ static int generate_inlined_nary(mz_jit_state *jitter, Scheme_App_Rec *app, int
mz_runstack_unskipped(jitter, 3 - pushed); mz_runstack_unskipped(jitter, 3 - pushed);
return 1; return 1;
} else if (IS_NAMED_PRIM(rator, "unsafe-f64vector-set!")) { } else if (IS_NAMED_PRIM(rator, "unsafe-f64vector-set!")
|| IS_NAMED_PRIM(rator, "unsafe-flvector-set!")) {
int is_f64;
is_f64 = IS_NAMED_PRIM(rator, "unsafe-f64vector-set!");
if (can_unbox(app->args[3], 5, JIT_FPR_NUM-1)) { if (can_unbox(app->args[3], 5, JIT_FPR_NUM-1)) {
int got_two; int got_two;
if (is_constant_and_avoids_r1(app->args[1]) if (is_constant_and_avoids_r1(app->args[1])
@ -6684,10 +6764,15 @@ static int generate_inlined_nary(mz_jit_state *jitter, Scheme_App_Rec *app, int
} }
CHECK_LIMIT(); CHECK_LIMIT();
jit_ldxi_p(JIT_R0, JIT_R0, (long)&(((Scheme_Structure *)0x0)->slots[0])); if (is_f64) {
jit_ldxi_p(JIT_R0, JIT_R0, (long)&SCHEME_CPTR_VAL(0x0)); jit_ldxi_p(JIT_R0, JIT_R0, (long)&(((Scheme_Structure *)0x0)->slots[0]));
jit_ldxi_p(JIT_R0, JIT_R0, (long)&SCHEME_CPTR_VAL(0x0));
}
jit_rshi_ul(JIT_R1, JIT_R1, 1); jit_rshi_ul(JIT_R1, JIT_R1, 1);
jit_lshi_ul(JIT_R1, JIT_R1, 3); /* 3 = log(sizeof(double)) */ jit_lshi_ul(JIT_R1, JIT_R1, JIT_LOG_DOUBLE_SIZE);
if (!is_f64) {
jit_addi_ul(JIT_R1, JIT_R1, (int)(&SCHEME_FLVEC_ELS(0x0)));
}
jit_stxr_d_fppop(JIT_R1, JIT_R0, JIT_FPR0); jit_stxr_d_fppop(JIT_R1, JIT_R0, JIT_FPR0);
CHECK_LIMIT(); CHECK_LIMIT();
@ -9150,6 +9235,40 @@ static int do_generate_common(mz_jit_state *jitter, void *_data)
} }
} }
/* *** {flvector}_{ref,set}_check_index_code *** */
/* Same calling convention as for vector ops. */
for (i = 0; i < 2; i++) {
if (!i) {
flvector_ref_check_index_code = jit_get_ip().ptr;
} else {
flvector_set_check_index_code = jit_get_ip().ptr;
}
mz_prolog(JIT_R2);
jit_subi_p(JIT_RUNSTACK, JIT_RUNSTACK, WORDS_TO_BYTES(2));
CHECK_RUNSTACK_OVERFLOW();
jit_str_p(JIT_RUNSTACK, JIT_R0);
jit_stxi_p(WORDS_TO_BYTES(1), JIT_RUNSTACK, JIT_R1);
if (!i) {
jit_movi_i(JIT_R1, 2);
} else {
/* In set mode, value was already on run stack */
jit_movi_i(JIT_R1, 3);
}
JIT_UPDATE_THREAD_RSPTR();
jit_prepare(2);
jit_pusharg_p(JIT_RUNSTACK);
jit_pusharg_i(JIT_R1);
if (!i) {
(void)mz_finish(ts_scheme_checked_flvector_ref);
} else {
(void)mz_finish(ts_scheme_checked_flvector_set);
}
/* does not return */
}
/* *** syntax_ecode *** */ /* *** syntax_ecode *** */
/* R0 is (potential) syntax object */ /* R0 is (potential) syntax object */
{ {

View File

@ -70,6 +70,8 @@ define_ts_iS_s(scheme_checked_string_ref, FSRC_OTHER)
define_ts_iS_s(scheme_checked_string_set, FSRC_OTHER) define_ts_iS_s(scheme_checked_string_set, FSRC_OTHER)
define_ts_iS_s(scheme_checked_byte_string_ref, FSRC_OTHER) define_ts_iS_s(scheme_checked_byte_string_ref, FSRC_OTHER)
define_ts_iS_s(scheme_checked_byte_string_set, FSRC_OTHER) define_ts_iS_s(scheme_checked_byte_string_set, FSRC_OTHER)
define_ts_iS_s(scheme_checked_flvector_ref, FSRC_OTHER)
define_ts_iS_s(scheme_checked_flvector_set, FSRC_OTHER)
define_ts_iS_s(scheme_checked_syntax_e, FSRC_OTHER) define_ts_iS_s(scheme_checked_syntax_e, FSRC_OTHER)
define_ts_iS_s(scheme_extract_checked_procedure, FSRC_OTHER) define_ts_iS_s(scheme_extract_checked_procedure, FSRC_OTHER)
define_ts_S_s(apply_checked_fail, FSRC_OTHER) define_ts_S_s(apply_checked_fail, FSRC_OTHER)
@ -130,6 +132,8 @@ define_ts_siS_v(wrong_argument_count, FSRC_OTHER)
# define ts_scheme_checked_string_set scheme_checked_string_set # define ts_scheme_checked_string_set scheme_checked_string_set
# define ts_scheme_checked_byte_string_ref scheme_checked_byte_string_ref # define ts_scheme_checked_byte_string_ref scheme_checked_byte_string_ref
# define ts_scheme_checked_byte_string_set scheme_checked_byte_string_set # define ts_scheme_checked_byte_string_set scheme_checked_byte_string_set
# define ts_scheme_checked_flvector_ref scheme_checked_flvector_ref
# define ts_scheme_checked_flvector_set scheme_checked_flvector_set
# define ts_scheme_checked_syntax_e scheme_checked_syntax_e # define ts_scheme_checked_syntax_e scheme_checked_syntax_e
# define ts_scheme_extract_checked_procedure scheme_extract_checked_procedure # define ts_scheme_extract_checked_procedure scheme_extract_checked_procedure
# define ts_apply_checked_fail apply_checked_fail # define ts_apply_checked_fail apply_checked_fail

View File

@ -1449,6 +1449,34 @@ static int vector_obj_FIXUP(void *p) {
#define vector_obj_IS_CONST_SIZE 0 #define vector_obj_IS_CONST_SIZE 0
static int flvector_obj_SIZE(void *p) {
Scheme_Double_Vector *vec = (Scheme_Double_Vector *)p;
return
gcBYTES_TO_WORDS((sizeof(Scheme_Double_Vector)
+ ((vec->size - 1) * sizeof(double))));
}
static int flvector_obj_MARK(void *p) {
Scheme_Double_Vector *vec = (Scheme_Double_Vector *)p;
return
gcBYTES_TO_WORDS((sizeof(Scheme_Double_Vector)
+ ((vec->size - 1) * sizeof(double))));
}
static int flvector_obj_FIXUP(void *p) {
Scheme_Double_Vector *vec = (Scheme_Double_Vector *)p;
return
gcBYTES_TO_WORDS((sizeof(Scheme_Double_Vector)
+ ((vec->size - 1) * sizeof(double))));
}
#define flvector_obj_IS_ATOMIC 1
#define flvector_obj_IS_CONST_SIZE 0
static int input_port_SIZE(void *p) { static int input_port_SIZE(void *p) {
return return
gcBYTES_TO_WORDS(sizeof(Scheme_Input_Port)); gcBYTES_TO_WORDS(sizeof(Scheme_Input_Port));

View File

@ -546,6 +546,15 @@ vector_obj {
+ ((vec->size - 1) * sizeof(Scheme_Object *)))); + ((vec->size - 1) * sizeof(Scheme_Object *))));
} }
flvector_obj {
Scheme_Double_Vector *vec = (Scheme_Double_Vector *)p;
mark:
size:
gcBYTES_TO_WORDS((sizeof(Scheme_Double_Vector)
+ ((vec->size - 1) * sizeof(double))));
}
input_port { input_port {
mark: mark:
Scheme_Input_Port *ip = (Scheme_Input_Port *)p; Scheme_Input_Port *ip = (Scheme_Input_Port *)p;

View File

@ -98,6 +98,11 @@ static Scheme_Object *angle (int argc, Scheme_Object *argv[]);
static Scheme_Object *int_sqrt (int argc, Scheme_Object *argv[]); static Scheme_Object *int_sqrt (int argc, Scheme_Object *argv[]);
static Scheme_Object *int_sqrt_rem (int argc, Scheme_Object *argv[]); static Scheme_Object *int_sqrt_rem (int argc, Scheme_Object *argv[]);
static Scheme_Object *flvector (int argc, Scheme_Object *argv[]);
static Scheme_Object *flvector_p (int argc, Scheme_Object *argv[]);
static Scheme_Object *make_flvector (int argc, Scheme_Object *argv[]);
static Scheme_Object *flvector_length (int argc, Scheme_Object *argv[]);
static Scheme_Object *fx_and (int argc, Scheme_Object *argv[]); static Scheme_Object *fx_and (int argc, Scheme_Object *argv[]);
static Scheme_Object *fx_or (int argc, Scheme_Object *argv[]); static Scheme_Object *fx_or (int argc, Scheme_Object *argv[]);
static Scheme_Object *fx_xor (int argc, Scheme_Object *argv[]); static Scheme_Object *fx_xor (int argc, Scheme_Object *argv[]);
@ -108,6 +113,10 @@ static Scheme_Object *fx_to_fl (int argc, Scheme_Object *argv[]);
static Scheme_Object *fl_ref (int argc, Scheme_Object *argv[]); static Scheme_Object *fl_ref (int argc, Scheme_Object *argv[]);
static Scheme_Object *fl_set (int argc, Scheme_Object *argv[]); static Scheme_Object *fl_set (int argc, Scheme_Object *argv[]);
static Scheme_Object *unsafe_flvector_length (int argc, Scheme_Object *argv[]);
static Scheme_Object *unsafe_flvector_ref (int argc, Scheme_Object *argv[]);
static Scheme_Object *unsafe_flvector_set (int argc, Scheme_Object *argv[]);
static double not_a_number_val; static double not_a_number_val;
Scheme_Object *scheme_inf_object, *scheme_minus_inf_object, *scheme_nan_object; Scheme_Object *scheme_inf_object, *scheme_minus_inf_object, *scheme_nan_object;
@ -284,7 +293,7 @@ scheme_init_number (Scheme_Env *env)
SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED;
scheme_add_global_constant("exact-positive-integer?", p, env); scheme_add_global_constant("exact-positive-integer?", p, env);
p = scheme_make_noncm_prim(fixnum_p, "fixnum?", 1, 1); p = scheme_make_immed_prim(fixnum_p, "fixnum?", 1, 1);
SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED;
scheme_add_global_constant("fixnum?", p, env); scheme_add_global_constant("fixnum?", p, env);
@ -496,6 +505,39 @@ scheme_init_number (Scheme_Env *env)
"inexact->exact", "inexact->exact",
1, 1, 1), 1, 1, 1),
env); env);
scheme_add_global_constant("flvector",
scheme_make_prim_w_arity(flvector,
"flvector",
0, -1),
env);
scheme_add_global_constant("flvector?",
scheme_make_folding_prim(flvector_p,
"flvector?",
1, 1, 1),
env);
scheme_add_global_constant("make-flvector",
scheme_make_immed_prim(make_flvector,
"make-flvector",
1, 2),
env);
scheme_add_global_constant("flvector-length",
scheme_make_immed_prim(flvector_length,
"flvector-length",
1, 1),
env);
p = scheme_make_immed_prim(scheme_checked_flvector_ref,
"flvector-ref",
2, 2);
if (scheme_can_inline_fp_op())
SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED;
scheme_add_global_constant("flvector-ref", p, env);
p = scheme_make_immed_prim(scheme_checked_flvector_set,
"flvector-set!",
3, 3);
SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_NARY_INLINED;
scheme_add_global_constant("flvector-set!", p, env);
} }
void scheme_init_unsafe_number(Scheme_Env *env) void scheme_init_unsafe_number(Scheme_Env *env)
@ -531,19 +573,34 @@ void scheme_init_unsafe_number(Scheme_Env *env)
SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED;
scheme_add_global_constant("unsafe-fx->fl", p, env); scheme_add_global_constant("unsafe-fx->fl", p, env);
p = scheme_make_noncm_prim(fl_ref, "unsafe-f64vector-ref", p = scheme_make_immed_prim(fl_ref, "unsafe-f64vector-ref",
2, 2); 2, 2);
if (scheme_can_inline_fp_op()) if (scheme_can_inline_fp_op())
SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED; SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED;
scheme_add_global_constant("unsafe-f64vector-ref", p, env); scheme_add_global_constant("unsafe-f64vector-ref", p, env);
p = scheme_make_noncm_prim(fl_set, "unsafe-f64vector-set!", p = scheme_make_immed_prim(fl_set, "unsafe-f64vector-set!",
3, 3); 3, 3);
if (scheme_can_inline_fp_op()) if (scheme_can_inline_fp_op())
SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_NARY_INLINED; SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_NARY_INLINED;
scheme_add_global_constant("unsafe-f64vector-set!", p, env); scheme_add_global_constant("unsafe-f64vector-set!", p, env);
}
p = scheme_make_immed_prim(unsafe_flvector_length, "unsafe-flvector-length",
1, 1);
/* SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; */
scheme_add_global_constant("unsafe-flvector-length", p, env);
p = scheme_make_immed_prim(unsafe_flvector_ref, "unsafe-flvector-ref",
2, 2);
if (scheme_can_inline_fp_op())
SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED;
scheme_add_global_constant("unsafe-flvector-ref", p, env);
p = scheme_make_immed_prim(unsafe_flvector_set, "unsafe-flvector-set!",
3, 3);
SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_NARY_INLINED;
scheme_add_global_constant("unsafe-flvector-set!", p, env);
}
Scheme_Object * Scheme_Object *
@ -2787,6 +2844,151 @@ long scheme_integer_length(Scheme_Object *n)
return SCHEME_INT_VAL(r); return SCHEME_INT_VAL(r);
} }
/************************************************************************/
/* flvectors */
/************************************************************************/
static Scheme_Double_Vector *alloc_flvector(long size)
{
Scheme_Double_Vector *vec;
vec = (Scheme_Double_Vector *)scheme_malloc_fail_ok(scheme_malloc_atomic_tagged,
sizeof(Scheme_Double_Vector)
+ ((size - 1) * sizeof(double)));
vec->so.type = scheme_flvector_type;
vec->size = size;
return vec;
}
static Scheme_Object *flvector (int argc, Scheme_Object *argv[])
{
int i;
Scheme_Double_Vector *vec;
for (i = 0; i < argc; i++) {
if (!SCHEME_FLOATP(argv[i])) {
scheme_wrong_type("flvector", "inexact real", i, argc, argv);
return NULL;
}
}
vec = alloc_flvector(argc);
for (i = 0; i < argc; i++) {
vec->els[i] = SCHEME_FLOAT_VAL(argv[i]);
}
return (Scheme_Object *)vec;
}
static Scheme_Object *flvector_p (int argc, Scheme_Object *argv[])
{
if (SCHEME_FLVECTORP(argv[0]))
return scheme_true;
else
return scheme_false;
}
static Scheme_Object *make_flvector (int argc, Scheme_Object *argv[])
{
Scheme_Double_Vector *vec;
long size;
if (SCHEME_INTP(argv[0]))
size = SCHEME_INT_VAL(argv[0]);
else if (SCHEME_BIGNUMP(argv[0])) {
if (SCHEME_BIGPOS(argv[0])) {
scheme_raise_out_of_memory("make-flvector", NULL);
return NULL;
} else
size = -1;
} else
size = -1;
if (size < 0)
scheme_wrong_type("make-flvector", "exact non-negative integer", 0, argc, argv);
if (argc > 1) {
if (!SCHEME_FLOATP(argv[1]))
scheme_wrong_type("make-flvector", "inexact real", 1, argc, argv);
}
vec = alloc_flvector(size);
if (argc > 1) {
int i;
double d = SCHEME_FLOAT_VAL(argv[1]);
for (i = 0; i < size; i++) {
vec->els[i] = d;
}
}
return (Scheme_Object *)vec;
}
static Scheme_Object *flvector_length (int argc, Scheme_Object *argv[])
{
if (!SCHEME_FLVECTORP(argv[0]))
scheme_wrong_type("flvector-length", "flvector", 0, argc, argv);
return scheme_make_integer(SCHEME_FLVEC_SIZE(argv[0]));
}
Scheme_Object *scheme_checked_flvector_ref (int argc, Scheme_Object *argv[])
{
double d;
Scheme_Object *vec;
long len, pos;
vec = argv[0];
if (!SCHEME_FLVECTORP(vec))
scheme_wrong_type("flvector-ref", "flvector", 0, argc, argv);
len = SCHEME_FLVEC_SIZE(vec);
pos = scheme_extract_index("flvector-ref", 1, argc, argv, len, 0);
if (pos >= len) {
scheme_bad_vec_index("flvector-ref", argv[1],
"flvector", vec,
0, len);
return NULL;
}
d = SCHEME_FLVEC_ELS(vec)[pos];
return scheme_make_double(d);
}
Scheme_Object *scheme_checked_flvector_set (int argc, Scheme_Object *argv[])
{
Scheme_Object *vec;
long len, pos;
vec = argv[0];
if (!SCHEME_FLVECTORP(vec))
scheme_wrong_type("flvector-set!", "flvector", 0, argc, argv);
len = SCHEME_FLVEC_SIZE(vec);
pos = scheme_extract_index("flvector-set!", 1, argc, argv, len, 0);
if (!SCHEME_FLOATP(argv[2]))
scheme_wrong_type("flvector-set!", "inexact real", 2, argc, argv);
if (pos >= len) {
scheme_bad_vec_index("flvector-set!", argv[1],
"flvector", vec,
0, len);
return NULL;
}
SCHEME_FLVEC_ELS(vec)[pos] = SCHEME_FLOAT_VAL(argv[2]);
return scheme_void;
}
/************************************************************************/ /************************************************************************/
/* Unsafe */ /* Unsafe */
/************************************************************************/ /************************************************************************/
@ -2848,3 +3050,29 @@ static Scheme_Object *fl_set (int argc, Scheme_Object *argv[])
((double *)SCHEME_CPTR_VAL(p))[SCHEME_INT_VAL(argv[1])] = SCHEME_DBL_VAL(argv[2]); ((double *)SCHEME_CPTR_VAL(p))[SCHEME_INT_VAL(argv[1])] = SCHEME_DBL_VAL(argv[2]);
return scheme_void; return scheme_void;
} }
static Scheme_Object *unsafe_flvector_length (int argc, Scheme_Object *argv[])
{
return scheme_make_integer(SCHEME_FLVEC_SIZE(argv[0]));
}
static Scheme_Object *unsafe_flvector_ref (int argc, Scheme_Object *argv[])
{
long pos;
double d;
pos = SCHEME_INT_VAL(argv[1]);
d = SCHEME_FLVEC_ELS(argv[0])[pos];
return scheme_make_double(d);
}
static Scheme_Object *unsafe_flvector_set (int argc, Scheme_Object *argv[])
{
long pos;
pos = SCHEME_INT_VAL(argv[1]);
SCHEME_FLVEC_ELS(argv[0])[pos] = SCHEME_FLOAT_VAL(argv[2]);
return scheme_void;
}

View File

@ -13,8 +13,8 @@
#define USE_COMPILED_STARTUP 1 #define USE_COMPILED_STARTUP 1
#define EXPECTED_PRIM_COUNT 959 #define EXPECTED_PRIM_COUNT 965
#define EXPECTED_UNSAFE_COUNT 49 #define EXPECTED_UNSAFE_COUNT 52
#ifdef MZSCHEME_SOMETHING_OMITTED #ifdef MZSCHEME_SOMETHING_OMITTED
# undef USE_COMPILED_STARTUP # undef USE_COMPILED_STARTUP

View File

@ -3192,6 +3192,12 @@ Scheme_Object *scheme_checked_byte_string_ref(int argc, Scheme_Object *argv[]);
Scheme_Object *scheme_checked_byte_string_set(int argc, Scheme_Object *argv[]); Scheme_Object *scheme_checked_byte_string_set(int argc, Scheme_Object *argv[]);
Scheme_Object *scheme_checked_syntax_e(int argc, Scheme_Object **argv); Scheme_Object *scheme_checked_syntax_e(int argc, Scheme_Object **argv);
Scheme_Object *scheme_vector_length(Scheme_Object *v); Scheme_Object *scheme_vector_length(Scheme_Object *v);
Scheme_Object *scheme_checked_flvector_ref(int argc, Scheme_Object **argv);
Scheme_Object *scheme_checked_flvector_set(int argc, Scheme_Object **argv);
void scheme_bad_vec_index(char *name, Scheme_Object *i,
const char *what, Scheme_Object *vec,
long bottom, long len);
Scheme_Bucket_Table *scheme_make_weak_equal_table(void); Scheme_Bucket_Table *scheme_make_weak_equal_table(void);

View File

@ -13,12 +13,12 @@
consistently.) consistently.)
*/ */
#define MZSCHEME_VERSION "4.2.3.3" #define MZSCHEME_VERSION "4.2.3.4"
#define MZSCHEME_VERSION_X 4 #define MZSCHEME_VERSION_X 4
#define MZSCHEME_VERSION_Y 2 #define MZSCHEME_VERSION_Y 2
#define MZSCHEME_VERSION_Z 3 #define MZSCHEME_VERSION_Z 3
#define MZSCHEME_VERSION_W 3 #define MZSCHEME_VERSION_W 4
#define MZSCHEME_VERSION_MAJOR ((MZSCHEME_VERSION_X * 100) + MZSCHEME_VERSION_Y) #define MZSCHEME_VERSION_MAJOR ((MZSCHEME_VERSION_X * 100) + MZSCHEME_VERSION_Y)
#define MZSCHEME_VERSION_MINOR ((MZSCHEME_VERSION_Z * 1000) + MZSCHEME_VERSION_W) #define MZSCHEME_VERSION_MINOR ((MZSCHEME_VERSION_Z * 1000) + MZSCHEME_VERSION_W)

View File

@ -171,84 +171,85 @@ enum {
scheme_noninline_proc_type, /* 153 */ scheme_noninline_proc_type, /* 153 */
scheme_prune_context_type, /* 154 */ scheme_prune_context_type, /* 154 */
scheme_future_type, /* 155 */ scheme_future_type, /* 155 */
scheme_flvector_type, /* 156 */
#ifdef MZTAG_REQUIRED #ifdef MZTAG_REQUIRED
_scheme_last_normal_type_, /* 156 */ _scheme_last_normal_type_, /* 157 */
scheme_rt_weak_array, /* 157 */ scheme_rt_weak_array, /* 158 */
scheme_rt_comp_env, /* 158 */ scheme_rt_comp_env, /* 159 */
scheme_rt_constant_binding, /* 159 */ scheme_rt_constant_binding, /* 160 */
scheme_rt_resolve_info, /* 160 */ scheme_rt_resolve_info, /* 161 */
scheme_rt_optimize_info, /* 161 */ scheme_rt_optimize_info, /* 162 */
scheme_rt_compile_info, /* 162 */ scheme_rt_compile_info, /* 163 */
scheme_rt_cont_mark, /* 163 */ scheme_rt_cont_mark, /* 164 */
scheme_rt_saved_stack, /* 164 */ scheme_rt_saved_stack, /* 165 */
scheme_rt_reply_item, /* 165 */ scheme_rt_reply_item, /* 166 */
scheme_rt_closure_info, /* 166 */ scheme_rt_closure_info, /* 167 */
scheme_rt_overflow, /* 167 */ scheme_rt_overflow, /* 168 */
scheme_rt_overflow_jmp, /* 168 */ scheme_rt_overflow_jmp, /* 169 */
scheme_rt_meta_cont, /* 169 */ scheme_rt_meta_cont, /* 170 */
scheme_rt_dyn_wind_cell, /* 170 */ scheme_rt_dyn_wind_cell, /* 171 */
scheme_rt_dyn_wind_info, /* 171 */ scheme_rt_dyn_wind_info, /* 172 */
scheme_rt_dyn_wind, /* 172 */ scheme_rt_dyn_wind, /* 173 */
scheme_rt_dup_check, /* 173 */ scheme_rt_dup_check, /* 174 */
scheme_rt_thread_memory, /* 174 */ scheme_rt_thread_memory, /* 175 */
scheme_rt_input_file, /* 175 */ scheme_rt_input_file, /* 176 */
scheme_rt_input_fd, /* 176 */ scheme_rt_input_fd, /* 177 */
scheme_rt_oskit_console_input, /* 177 */ scheme_rt_oskit_console_input, /* 178 */
scheme_rt_tested_input_file, /* 178 */ scheme_rt_tested_input_file, /* 179 */
scheme_rt_tested_output_file, /* 179 */ scheme_rt_tested_output_file, /* 180 */
scheme_rt_indexed_string, /* 180 */ scheme_rt_indexed_string, /* 181 */
scheme_rt_output_file, /* 181 */ scheme_rt_output_file, /* 182 */
scheme_rt_load_handler_data, /* 182 */ scheme_rt_load_handler_data, /* 183 */
scheme_rt_pipe, /* 183 */ scheme_rt_pipe, /* 184 */
scheme_rt_beos_process, /* 184 */ scheme_rt_beos_process, /* 185 */
scheme_rt_system_child, /* 185 */ scheme_rt_system_child, /* 186 */
scheme_rt_tcp, /* 186 */ scheme_rt_tcp, /* 187 */
scheme_rt_write_data, /* 187 */ scheme_rt_write_data, /* 188 */
scheme_rt_tcp_select_info, /* 188 */ scheme_rt_tcp_select_info, /* 189 */
scheme_rt_namespace_option, /* 189 */ scheme_rt_namespace_option, /* 190 */
scheme_rt_param_data, /* 190 */ scheme_rt_param_data, /* 191 */
scheme_rt_will, /* 191 */ scheme_rt_will, /* 192 */
scheme_rt_struct_proc_info, /* 192 */ scheme_rt_struct_proc_info, /* 193 */
scheme_rt_linker_name, /* 193 */ scheme_rt_linker_name, /* 194 */
scheme_rt_param_map, /* 194 */ scheme_rt_param_map, /* 195 */
scheme_rt_finalization, /* 195 */ scheme_rt_finalization, /* 196 */
scheme_rt_finalizations, /* 196 */ scheme_rt_finalizations, /* 197 */
scheme_rt_cpp_object, /* 197 */ scheme_rt_cpp_object, /* 198 */
scheme_rt_cpp_array_object, /* 198 */ scheme_rt_cpp_array_object, /* 199 */
scheme_rt_stack_object, /* 199 */ scheme_rt_stack_object, /* 200 */
scheme_rt_preallocated_object, /* 200 */ scheme_rt_preallocated_object, /* 201 */
scheme_thread_hop_type, /* 201 */ scheme_thread_hop_type, /* 202 */
scheme_rt_srcloc, /* 202 */ scheme_rt_srcloc, /* 203 */
scheme_rt_evt, /* 203 */ scheme_rt_evt, /* 204 */
scheme_rt_syncing, /* 204 */ scheme_rt_syncing, /* 205 */
scheme_rt_comp_prefix, /* 205 */ scheme_rt_comp_prefix, /* 206 */
scheme_rt_user_input, /* 206 */ scheme_rt_user_input, /* 207 */
scheme_rt_user_output, /* 207 */ scheme_rt_user_output, /* 208 */
scheme_rt_compact_port, /* 208 */ scheme_rt_compact_port, /* 209 */
scheme_rt_read_special_dw, /* 209 */ scheme_rt_read_special_dw, /* 210 */
scheme_rt_regwork, /* 210 */ scheme_rt_regwork, /* 211 */
scheme_rt_buf_holder, /* 211 */ scheme_rt_buf_holder, /* 212 */
scheme_rt_parameterization, /* 212 */ scheme_rt_parameterization, /* 213 */
scheme_rt_print_params, /* 213 */ scheme_rt_print_params, /* 214 */
scheme_rt_read_params, /* 214 */ scheme_rt_read_params, /* 215 */
scheme_rt_native_code, /* 215 */ scheme_rt_native_code, /* 216 */
scheme_rt_native_code_plus_case, /* 216 */ scheme_rt_native_code_plus_case, /* 217 */
scheme_rt_jitter_data, /* 217 */ scheme_rt_jitter_data, /* 218 */
scheme_rt_module_exports, /* 218 */ scheme_rt_module_exports, /* 219 */
scheme_rt_delay_load_info, /* 219 */ scheme_rt_delay_load_info, /* 220 */
scheme_rt_marshal_info, /* 220 */ scheme_rt_marshal_info, /* 221 */
scheme_rt_unmarshal_info, /* 221 */ scheme_rt_unmarshal_info, /* 222 */
scheme_rt_runstack, /* 222 */ scheme_rt_runstack, /* 223 */
scheme_rt_sfs_info, /* 223 */ scheme_rt_sfs_info, /* 224 */
scheme_rt_validate_clearing, /* 224 */ scheme_rt_validate_clearing, /* 225 */
scheme_rt_rb_node, /* 225 */ scheme_rt_rb_node, /* 226 */
#endif #endif
scheme_place_type, /* 226 */ scheme_place_type, /* 227 */
scheme_engine_type, /* 227 */ scheme_engine_type, /* 228 */
_scheme_last_type_ _scheme_last_type_
}; };

View File

@ -161,6 +161,7 @@ scheme_init_type ()
set_name(scheme_syntax_compiler_type, "<syntax-compiler>"); set_name(scheme_syntax_compiler_type, "<syntax-compiler>");
set_name(scheme_macro_type, "<macro>"); set_name(scheme_macro_type, "<macro>");
set_name(scheme_vector_type, "<vector>"); set_name(scheme_vector_type, "<vector>");
set_name(scheme_flvector_type, "<flvector>");
set_name(scheme_bignum_type, "<bignum-integer>"); set_name(scheme_bignum_type, "<bignum-integer>");
set_name(scheme_escaping_cont_type, "<escape-continuation>"); set_name(scheme_escaping_cont_type, "<escape-continuation>");
set_name(scheme_sema_type, "<semaphore>"); set_name(scheme_sema_type, "<semaphore>");
@ -540,6 +541,7 @@ void scheme_register_traversers(void)
GC_REG_TRAV(scheme_mutable_pair_type, cons_cell); GC_REG_TRAV(scheme_mutable_pair_type, cons_cell);
GC_REG_TRAV(scheme_raw_pair_type, cons_cell); GC_REG_TRAV(scheme_raw_pair_type, cons_cell);
GC_REG_TRAV(scheme_vector_type, vector_obj); GC_REG_TRAV(scheme_vector_type, vector_obj);
GC_REG_TRAV(scheme_flvector_type, flvector_obj);
GC_REG_TRAV(scheme_cpointer_type, cpointer_obj); GC_REG_TRAV(scheme_cpointer_type, cpointer_obj);
GC_REG_TRAV(scheme_offset_cpointer_type, offset_cpointer_obj); GC_REG_TRAV(scheme_offset_cpointer_type, offset_cpointer_obj);

View File

@ -321,27 +321,33 @@ Scheme_Object *scheme_vector_length(Scheme_Object *v)
return vector_length(1, a); return vector_length(1, a);
} }
static Scheme_Object * void scheme_bad_vec_index(char *name, Scheme_Object *i, const char *what, Scheme_Object *vec,
bad_index(char *name, Scheme_Object *i, Scheme_Object *vec, int bottom) long bottom, long len)
{ {
int n = SCHEME_VEC_SIZE(vec) - 1; if (len) {
long n = len - 1;
if (SCHEME_VEC_SIZE(vec)) {
char *vstr; char *vstr;
int vlen; int vlen;
vstr = scheme_make_provided_string(vec, 2, &vlen); vstr = scheme_make_provided_string(vec, 2, &vlen);
scheme_raise_exn(MZEXN_FAIL_CONTRACT, scheme_raise_exn(MZEXN_FAIL_CONTRACT,
"%s: index %s out of range [%d, %d] for vector: %t", "%s: index %s out of range [%ld, %ld] for %s: %t",
name, name,
scheme_make_provided_string(i, 2, NULL), scheme_make_provided_string(i, 2, NULL),
bottom, n, bottom, n,
what,
vstr, vlen); vstr, vlen);
} else } else
scheme_raise_exn(MZEXN_FAIL_CONTRACT, scheme_raise_exn(MZEXN_FAIL_CONTRACT,
"%s: bad index %s for empty vector", "%s: bad index %s for empty %s",
name, name,
scheme_make_provided_string(i, 0, NULL)); scheme_make_provided_string(i, 0, NULL),
what);
}
static Scheme_Object *
bad_index(char *name, Scheme_Object *i, Scheme_Object *vec, int bottom)
{
scheme_bad_vec_index(name, i, "vector", vec, bottom, SCHEME_VEC_SIZE(vec));
return NULL; return NULL;
} }