fix compiler handling of top-/module-level constants

The JIT and bytecode compiler disagreed on the definition of
"constant". Now there are two levels: "constant" means constant across
all instantiations, and "fixed" means constant for a given instantation.
The JIT uses this distinction to generate direct-primitive calls
or not. (Without the distinction, a direct jump to `reverse' could
be wrong, because `racket/base' might get instantiated with the
JIT disabled or not.)

Also, fixed a bug in the JIT's `vector-set!' code in the case that
the target vector is a top-/module-level reference that is ready,
fixed, or constant.
This commit is contained in:
Matthew Flatt 2011-08-19 03:34:56 -06:00
parent e01e72a7ed
commit 7eb2042bd9
16 changed files with 513 additions and 560 deletions

View File

@ -186,7 +186,7 @@
[(struct def-values (ids rhs))
`(define-values ,(map (lambda (tl)
(match tl
[(struct toplevel (depth pos const? mutated?))
[(struct toplevel (depth pos const? set-const?))
(list-ref/protect (glob-desc-vars globs) pos 'def-vals)]))
ids)
,(decompile-expr rhs globs stack closed))]
@ -250,10 +250,14 @@
(match expr
[(struct toplevel (depth pos const? ready?))
(let ([id (list-ref/protect (glob-desc-vars globs) pos 'toplevel)])
(if (or no-check? const? ready?)
id
`(#%checked ,id)))]))
(cond
[no-check? id]
[(and (not const?) (not ready?))
`(#%checked ,id)]
#;[(and const? ready?) `(#%const ,id)]
#;[const? `(#%iconst ,id)]
[else id]))]))
(define (decompile-expr expr globs stack closed)
(match expr
[(struct toplevel (depth pos const? ready?))

View File

@ -554,8 +554,8 @@
(if (or const? ready?)
(cons pos
(bitwise-ior
(if const? #x1 0)
(if ready? #x2 0)))
(if const? #x2 0)
(if ready? #x1 0)))
pos))
out)]
[(struct topsyntax (depth pos midpt))

View File

@ -33,10 +33,13 @@
;; Bytecode unmarshalers for various forms
(define (read-toplevel v)
(define SCHEME_TOPLEVEL_CONST #x01)
(define SCHEME_TOPLEVEL_READY #x02)
(define SCHEME_TOPLEVEL_CONST #x02)
(define SCHEME_TOPLEVEL_READY #x01)
(match v
[(cons depth (cons pos flags))
;; In the VM, the two flag bits are actually interpreted
;; as a number when the toplevel is a reference, but we
;; interpret the bits as flags here for backward compatibility.
(make-toplevel depth pos
(positive? (bitwise-and flags SCHEME_TOPLEVEL_CONST))
(positive? (bitwise-and flags SCHEME_TOPLEVEL_READY)))]

View File

@ -375,12 +375,21 @@ structures that are produced by @racket[zo-parse] and consumed by
of stack slots to skip to reach the prefix array, and @racket[pos] is
the offset into the array.
If @racket[const?] is @racket[#t], then the variable definitely will
be defined, and its value stays constant. If @racket[ready?] is
@racket[#t], then the variable definitely will be defined (but its
value might change in the future). If @racket[const?] and
@racket[ready?] are both @racket[#f], then a check is needed to
determine whether the variable is defined.}
When the @racket[toplevel] is an expression, if both @racket[const?]
and @racket[ready?] are @racket[#t], then the variable definitely
will be defined, its value stays constant, and the constant is
effectively the same for every module instantiation. If only
@racket[const?] is @racket[#t], then the value is constant, but it
may vary across instantiations. If only @racket[ready?] is
@racket[#t], then the variable definitely will be defined, but its
value may change. If @racket[const?] and @racket[ready?] are both
@racket[#f], then a check is needed to determine whether the
variable is defined.
When the @racket[toplevel] is the right-hand side for
@racket[def-values], then @racket[const?] is @racket[#f]. If
@racket[ready?] is @racket[#t], the variable is marked as immutable
after it is defined.}
@defstruct+[(topsyntax expr)
([depth exact-nonnegative-integer?]

View File

@ -624,10 +624,11 @@ Scheme_Object *scheme_register_toplevel_in_prefix(Scheme_Object *var, Scheme_Com
o = scheme_make_toplevel(0, cp->num_toplevels, 0,
(imported
? (SCHEME_TOPLEVEL_READY
| ((SCHEME_MODVAR_FLAGS(var) & 0x1)
? SCHEME_TOPLEVEL_CONST
: 0))
? ((SCHEME_MODVAR_FLAGS(var) & SCHEME_MODVAR_CONST)
? SCHEME_TOPLEVEL_CONST
: ((SCHEME_MODVAR_FLAGS(var) & SCHEME_MODVAR_FIXED)
? SCHEME_TOPLEVEL_FIXED
: SCHEME_TOPLEVEL_READY))
: 0));
cp->num_toplevels++;
@ -884,6 +885,7 @@ static Scheme_Local *get_frame_loc(Scheme_Comp_Env *frame,
Scheme_Object *scheme_hash_module_variable(Scheme_Env *env, Scheme_Object *modidx,
Scheme_Object *stxsym, Scheme_Object *insp,
int pos, intptr_t mod_phase, int is_constant)
/* is_constant == 2 => constant over all instantiations and phases */
{
Scheme_Object *val;
Scheme_Hash_Table *ht;
@ -919,8 +921,10 @@ Scheme_Object *scheme_hash_module_variable(Scheme_Env *env, Scheme_Object *modid
mv->pos = pos;
mv->mod_phase = (int)mod_phase;
if (is_constant)
SCHEME_MODVAR_FLAGS(mv) |= 0x1;
if (is_constant > 1)
SCHEME_MODVAR_FLAGS(mv) |= SCHEME_MODVAR_CONST;
else if (is_constant)
SCHEME_MODVAR_FLAGS(mv) |= SCHEME_MODVAR_FIXED;
val = (Scheme_Object *)mv;
@ -1636,7 +1640,7 @@ scheme_lookup_binding(Scheme_Object *find_id, Scheme_Comp_Env *env, int flags,
Scheme_Object **_lexical_binding_id)
{
Scheme_Comp_Env *frame;
int j = 0, p = 0, modpos, skip_stops = 0, module_self_reference = 0;
int j = 0, p = 0, modpos, skip_stops = 0, module_self_reference = 0, is_constant;
Scheme_Bucket *b;
Scheme_Object *val, *modidx, *modname, *src_find_id, *find_global_id, *mod_defn_phase;
Scheme_Object *find_id_sym = NULL, *rename_insp = NULL, *mod_constant = NULL;
@ -1932,10 +1936,18 @@ scheme_lookup_binding(Scheme_Object *find_id, Scheme_Comp_Env *env, int flags,
check_taint(src_find_id);
if ((flags & SCHEME_ELIM_CONST)
&& mod_constant
&& !SAME_OBJ(mod_constant, scheme_void_proc))
return mod_constant;
if (mod_constant) {
if (SAME_OBJ(mod_constant, scheme_constant_key))
is_constant = 2;
else if (SAME_OBJ(mod_constant, scheme_fixed_key))
is_constant = 1;
else {
if (flags & SCHEME_ELIM_CONST)
return mod_constant;
is_constant = 2;
}
} else
is_constant = 0;
/* Used to have `&& !SAME_OBJ(modidx, modname)' below, but that was a bad
idea, because it causes module instances to be preserved. */
@ -1949,7 +1961,7 @@ scheme_lookup_binding(Scheme_Object *find_id, Scheme_Comp_Env *env, int flags,
return scheme_hash_module_variable(env->genv, modidx, find_id,
(rename_insp ? rename_insp : genv->module->insp),
modpos, SCHEME_INT_VAL(mod_defn_phase),
!!mod_constant);
is_constant);
}
if (!modname
@ -1960,7 +1972,7 @@ scheme_lookup_binding(Scheme_Object *find_id, Scheme_Comp_Env *env, int flags,
return scheme_hash_module_variable(env->genv, genv->module->self_modidx, find_global_id,
genv->module->insp,
modpos, genv->mod_phase,
!!mod_constant);
is_constant);
}
b = scheme_bucket_from_table(genv->toplevel, (char *)find_global_id);

View File

@ -1,5 +1,5 @@
{
SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,53,46,49,46,50,46,52,0,0,0,0,0,0,0,0,0,0,0,
SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,53,46,49,46,51,46,50,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,51,0,0,0,1,0,0,10,0,13,0,22,
0,26,0,31,0,38,0,51,0,58,0,63,0,68,0,72,0,79,0,82,0,
85,0,91,0,105,0,119,0,122,0,128,0,132,0,134,0,145,0,147,0,161,
@ -15,13 +15,13 @@
116,120,61,115,70,108,101,116,45,118,97,108,117,101,115,61,120,73,108,101,116,
114,101,99,45,118,97,108,117,101,115,66,108,97,109,98,100,97,1,20,112,97,
114,97,109,101,116,101,114,105,122,97,116,105,111,110,45,107,101,121,61,118,73,
100,101,102,105,110,101,45,118,97,108,117,101,115,97,36,11,8,240,124,75,0,
100,101,102,105,110,101,45,118,97,108,117,101,115,97,36,11,8,240,72,76,0,
0,95,159,2,17,36,36,159,2,16,36,36,159,2,16,36,36,16,20,2,4,
2,2,2,6,2,2,2,7,2,2,2,8,2,2,2,9,2,2,2,10,2,
2,2,11,2,2,2,5,2,2,2,12,2,2,2,13,2,2,97,37,11,8,
240,124,75,0,0,93,159,2,16,36,37,16,2,2,3,161,2,2,37,2,3,
2,2,2,3,96,38,11,8,240,124,75,0,0,16,0,96,11,11,8,240,124,
75,0,0,16,0,18,98,64,104,101,114,101,13,16,5,36,2,14,2,2,11,
240,72,76,0,0,93,159,2,16,36,37,16,2,2,3,161,2,2,37,2,3,
2,2,2,3,96,38,11,8,240,72,76,0,0,16,0,96,11,11,8,240,72,
76,0,0,16,0,18,98,64,104,101,114,101,13,16,5,36,2,14,2,2,11,
11,8,32,8,31,8,30,8,29,27,248,22,155,4,195,249,22,148,4,80,158,
39,36,251,22,83,2,18,248,22,98,199,12,249,22,73,2,19,248,22,100,201,
27,248,22,155,4,195,249,22,148,4,80,158,39,36,251,22,83,2,18,248,22,
@ -30,14 +30,14 @@
74,193,249,22,148,4,80,158,39,36,251,22,83,2,18,248,22,74,199,249,22,
73,2,11,248,22,75,201,11,18,100,10,13,16,5,36,2,14,2,2,11,11,
8,32,8,31,8,30,8,29,16,4,11,11,2,20,3,1,8,101,110,118,49,
52,53,53,50,16,4,11,11,2,21,3,1,8,101,110,118,49,52,53,53,51,
52,55,51,57,16,4,11,11,2,21,3,1,8,101,110,118,49,52,55,52,48,
27,248,22,75,248,22,155,4,196,28,248,22,81,193,20,14,159,37,36,37,28,
248,22,81,248,22,75,194,248,22,74,193,249,22,148,4,80,158,39,36,250,22,
83,2,22,248,22,83,249,22,83,248,22,83,2,23,248,22,74,201,251,22,83,
2,18,2,23,2,23,249,22,73,2,13,248,22,75,204,18,100,11,13,16,5,
36,2,14,2,2,11,11,8,32,8,31,8,30,8,29,16,4,11,11,2,20,
3,1,8,101,110,118,49,52,53,53,53,16,4,11,11,2,21,3,1,8,101,
110,118,49,52,53,53,54,248,22,155,4,193,27,248,22,155,4,194,249,22,73,
3,1,8,101,110,118,49,52,55,52,50,16,4,11,11,2,21,3,1,8,101,
110,118,49,52,55,52,51,248,22,155,4,193,27,248,22,155,4,194,249,22,73,
248,22,83,248,22,74,196,248,22,75,195,27,248,22,75,248,22,155,4,23,197,
1,249,22,148,4,80,158,39,36,28,248,22,58,248,22,149,4,248,22,74,23,
198,2,27,249,22,2,32,0,88,163,8,36,37,43,11,9,222,33,40,248,22,
@ -67,8 +67,8 @@
140,9,248,22,149,4,248,22,74,200,64,101,108,115,101,10,248,22,74,197,250,
22,84,2,22,9,248,22,75,200,249,22,73,2,5,248,22,75,202,99,13,16,
5,36,2,14,2,2,11,11,8,32,8,31,8,30,8,29,16,4,11,11,2,
20,3,1,8,101,110,118,49,52,53,55,56,16,4,11,11,2,21,3,1,8,
101,110,118,49,52,53,55,57,18,158,94,10,64,118,111,105,100,8,48,27,248,
20,3,1,8,101,110,118,49,52,55,54,53,16,4,11,11,2,21,3,1,8,
101,110,118,49,52,55,54,54,18,158,94,10,64,118,111,105,100,8,48,27,248,
22,75,248,22,155,4,196,249,22,148,4,80,158,39,36,28,248,22,58,248,22,
149,4,248,22,74,197,250,22,83,2,28,248,22,83,248,22,74,199,248,22,98,
198,27,248,22,149,4,248,22,74,197,250,22,83,2,28,248,22,83,248,22,74,
@ -98,16 +98,16 @@
EVAL_ONE_SIZED_STR((char *)expr, 2004);
}
{
SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,53,46,49,46,50,46,52,0,0,0,0,0,0,0,0,0,0,0,
SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,53,46,49,46,51,46,50,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,82,0,0,0,1,0,0,8,0,21,0,26,
0,43,0,58,0,76,0,92,0,106,0,128,0,146,0,166,0,182,0,200,0,
231,0,4,1,26,1,40,1,46,1,60,1,65,1,75,1,83,1,111,1,143,
1,188,1,194,1,201,1,207,1,252,1,20,2,59,2,73,2,76,2,79,2,
89,2,100,2,113,2,115,2,117,2,27,3,117,4,231,4,89,5,130,5,203,
6,33,7,119,7,219,7,47,8,61,8,194,8,168,9,252,9,10,10,31,11,
235,11,249,11,141,16,156,17,45,18,30,19,12,20,19,20,98,20,179,20,6,
21,21,21,31,21,164,25,161,30,184,30,201,30,149,32,252,32,10,33,170,33,
107,35,116,35,125,35,151,35,23,36,0,0,131,39,0,0,67,35,37,117,116,
235,11,249,11,141,16,156,17,45,18,30,19,12,20,19,20,98,20,179,20,122,
21,136,21,146,21,187,22,33,23,56,23,73,23,21,25,124,25,138,25,42,26,
235,27,244,27,253,27,23,28,151,28,0,0,2,32,0,0,67,35,37,117,116,
105,108,115,72,112,97,116,104,45,115,116,114,105,110,103,63,64,98,115,98,115,
76,110,111,114,109,97,108,45,99,97,115,101,45,112,97,116,104,74,45,99,104,
101,99,107,45,114,101,108,112,97,116,104,77,45,99,104,101,99,107,45,99,111,
@ -138,14 +138,14 @@
11,11,80,76,84,67,79,76,76,69,67,84,83,6,0,0,6,0,0,69,97,
100,100,111,110,45,100,105,114,6,8,8,99,111,108,108,101,99,116,115,72,99,
111,108,108,101,99,116,115,45,100,105,114,5,0,5,0,27,20,13,159,80,159,
37,52,38,250,80,159,40,53,38,249,22,27,11,80,159,42,52,38,22,186,13,
37,52,37,250,80,159,40,53,37,249,22,27,11,80,159,42,52,37,22,186,13,
10,248,22,190,5,23,196,2,28,248,22,189,6,23,194,2,12,86,94,248,22,
148,9,23,194,1,27,20,13,159,80,159,38,52,38,250,80,159,41,53,38,249,
22,27,11,80,159,43,52,38,22,186,13,10,248,22,190,5,23,197,2,28,248,
148,9,23,194,1,27,20,13,159,80,159,38,52,37,250,80,159,41,53,37,249,
22,27,11,80,159,43,52,37,22,186,13,10,248,22,190,5,23,197,2,28,248,
22,189,6,23,194,2,12,86,94,248,22,148,9,23,194,1,27,20,13,159,80,
159,39,52,38,250,80,159,42,53,38,249,22,27,11,80,159,44,52,38,22,186,
159,39,52,37,250,80,159,42,53,37,249,22,27,11,80,159,44,52,37,22,186,
13,10,248,22,190,5,23,198,2,28,248,22,189,6,23,194,2,12,86,94,248,
22,148,9,23,194,1,248,80,159,40,57,37,197,28,248,22,81,23,195,2,9,
22,148,9,23,194,1,248,80,159,40,57,39,197,28,248,22,81,23,195,2,9,
27,248,22,74,23,196,2,27,28,248,22,172,14,23,195,2,23,194,1,28,248,
22,171,14,23,195,2,249,22,173,14,23,196,1,250,80,158,43,50,248,22,188,
14,2,21,11,10,250,80,158,41,50,248,22,188,14,2,21,23,197,1,10,28,
@ -154,25 +154,25 @@
2,27,28,248,22,172,14,23,195,2,23,194,1,28,248,22,171,14,23,195,2,
249,22,173,14,23,196,1,250,80,158,48,50,248,22,188,14,2,21,11,10,250,
80,158,46,50,248,22,188,14,2,21,23,197,1,10,28,23,193,2,249,22,73,
248,22,175,14,249,22,173,14,23,198,1,247,22,189,14,248,80,159,46,56,37,
248,22,75,23,199,1,86,94,23,193,1,248,80,159,44,56,37,248,22,75,23,
248,22,175,14,249,22,173,14,23,198,1,247,22,189,14,248,80,159,46,56,39,
248,22,75,23,199,1,86,94,23,193,1,248,80,159,44,56,39,248,22,75,23,
197,1,86,94,23,193,1,27,248,22,75,23,198,1,28,248,22,81,23,194,2,
9,27,248,22,74,23,195,2,27,28,248,22,172,14,23,195,2,23,194,1,28,
248,22,171,14,23,195,2,249,22,173,14,23,196,1,250,80,158,46,50,248,22,
188,14,2,21,11,10,250,80,158,44,50,248,22,188,14,2,21,23,197,1,10,
28,23,193,2,249,22,73,248,22,175,14,249,22,173,14,23,198,1,247,22,189,
14,248,80,159,44,56,37,248,22,75,23,199,1,248,80,159,42,56,37,248,22,
14,248,80,159,44,56,39,248,22,75,23,199,1,248,80,159,42,56,39,248,22,
75,196,28,248,22,81,23,195,2,9,27,248,22,74,23,196,2,27,28,248,22,
172,14,23,195,2,23,194,1,28,248,22,171,14,23,195,2,249,22,173,14,23,
196,1,250,80,158,43,50,248,22,188,14,2,21,11,10,250,80,158,41,50,248,
22,188,14,2,21,23,197,1,10,28,23,193,2,249,22,73,248,22,175,14,249,
22,173,14,23,198,1,247,22,189,14,248,80,159,41,55,37,248,22,75,23,200,
1,248,80,159,39,55,37,248,22,75,197,28,248,22,81,23,195,2,9,27,248,
22,173,14,23,198,1,247,22,189,14,248,80,159,41,55,39,248,22,75,23,200,
1,248,80,159,39,55,39,248,22,75,197,28,248,22,81,23,195,2,9,27,248,
22,74,23,196,2,27,28,248,22,172,14,23,195,2,23,194,1,28,248,22,171,
14,23,195,2,249,22,173,14,23,196,1,250,80,158,43,50,248,22,188,14,2,
21,11,10,250,80,158,41,50,248,22,188,14,2,21,23,197,1,10,28,23,193,
2,249,22,73,248,22,175,14,249,22,173,14,23,198,1,247,22,189,14,248,80,
159,41,54,37,248,22,75,23,200,1,248,80,159,39,54,37,248,22,75,197,27,
159,41,54,39,248,22,75,23,200,1,248,80,159,39,54,39,248,22,75,197,27,
248,22,148,14,23,195,2,28,23,193,2,192,86,94,23,193,1,28,248,22,130,
7,23,195,2,27,248,22,170,14,195,28,192,192,248,22,171,14,195,11,86,94,
28,28,248,22,149,14,23,195,2,10,28,248,22,148,14,23,195,2,10,28,248,
@ -355,245 +355,153 @@
195,194,192,249,247,22,158,5,194,11,27,247,22,128,15,249,80,158,39,49,28,
23,195,2,27,248,22,150,8,2,32,28,192,192,2,33,2,34,27,28,23,196,
1,250,22,166,14,248,22,188,14,2,35,247,22,148,8,2,36,11,27,248,80,
159,42,54,37,250,22,87,9,248,22,83,248,22,188,14,2,37,9,28,193,249,
159,42,54,39,250,22,87,9,248,22,83,248,22,188,14,2,37,9,28,193,249,
22,73,195,194,192,27,247,22,128,15,249,80,158,39,49,28,23,195,2,27,248,
22,150,8,2,32,28,192,192,2,33,2,34,27,28,23,196,1,250,22,166,14,
248,22,188,14,2,35,247,22,148,8,2,36,11,27,248,80,159,42,55,37,250,
248,22,188,14,2,35,247,22,148,8,2,36,11,27,248,80,159,42,55,39,250,
22,87,23,203,1,248,22,83,248,22,188,14,2,37,9,28,193,249,22,73,195,
194,192,27,247,22,128,15,249,80,158,39,49,28,23,195,2,27,248,22,150,8,
2,32,28,192,192,2,33,2,34,27,28,23,196,1,250,22,166,14,248,22,188,
14,2,35,247,22,148,8,2,36,11,27,248,80,159,42,56,37,250,22,87,23,
203,1,248,22,83,248,22,188,14,2,37,23,204,1,28,193,249,22,73,195,194,
192,32,67,88,163,8,36,39,8,45,11,2,20,222,33,69,0,8,35,114,120,
35,34,92,34,34,27,249,22,135,15,23,197,2,23,198,2,28,23,193,2,86,
94,23,196,1,27,248,22,98,23,195,2,27,27,248,22,107,23,197,1,27,249,
22,135,15,23,201,2,23,196,2,28,23,193,2,86,94,23,194,1,27,248,22,
98,23,195,2,27,27,248,22,107,23,197,1,27,249,22,135,15,23,205,2,23,
196,2,28,23,193,2,86,94,23,194,1,27,248,22,98,23,195,2,27,27,248,
22,107,23,197,1,27,249,22,135,15,23,209,2,23,196,2,28,23,193,2,86,
94,23,194,1,27,248,22,98,23,195,2,27,27,248,22,107,23,197,1,27,249,
22,135,15,23,213,2,23,196,2,28,23,193,2,86,94,23,194,1,27,248,22,
98,23,195,2,27,27,248,22,107,23,197,1,27,249,22,135,15,23,217,2,23,
196,2,28,23,193,2,86,94,23,194,1,27,248,22,98,23,195,2,27,27,248,
22,107,23,197,1,27,249,22,135,15,23,221,2,23,196,2,28,23,193,2,86,
94,23,194,1,27,248,22,98,23,195,2,27,27,248,22,107,23,197,1,27,249,
22,135,15,23,224,33,0,0,0,2,23,196,2,28,23,193,2,86,94,23,194,
1,27,248,22,98,23,195,2,27,250,2,67,23,224,35,0,0,0,2,23,224,
36,0,0,0,1,248,22,107,23,199,1,28,249,22,191,7,23,196,2,2,38,
249,22,87,23,224,34,0,0,0,2,194,249,22,73,248,22,157,14,28,249,22,
140,9,247,22,152,8,2,22,250,22,147,15,2,68,23,200,1,2,39,23,197,
1,194,86,95,23,223,1,23,193,1,28,249,22,191,7,23,196,2,2,38,249,
22,87,23,224,32,0,0,0,2,9,249,22,73,248,22,157,14,28,249,22,140,
9,247,22,152,8,2,22,250,22,147,15,2,68,23,200,1,2,39,23,197,1,
9,28,249,22,191,7,23,196,2,2,38,249,22,87,23,222,2,194,249,22,73,
248,22,157,14,28,249,22,140,9,247,22,152,8,2,22,250,22,147,15,2,68,
23,200,1,2,39,23,197,1,194,86,94,23,193,1,28,249,22,191,7,23,196,
2,2,38,249,22,87,23,220,2,9,249,22,73,248,22,157,14,28,249,22,140,
9,247,22,152,8,2,22,250,22,147,15,2,68,23,200,1,2,39,23,197,1,
9,28,249,22,191,7,23,196,2,2,38,249,22,87,23,218,2,194,249,22,73,
248,22,157,14,28,249,22,140,9,247,22,152,8,2,22,250,22,147,15,2,68,
23,200,1,2,39,23,197,1,194,86,94,23,193,1,28,249,22,191,7,23,196,
2,2,38,249,22,87,23,216,2,9,249,22,73,248,22,157,14,28,249,22,140,
9,247,22,152,8,2,22,250,22,147,15,2,68,23,200,1,2,39,23,197,1,
9,28,249,22,191,7,23,196,2,2,38,249,22,87,23,214,2,194,249,22,73,
248,22,157,14,28,249,22,140,9,247,22,152,8,2,22,250,22,147,15,2,68,
23,200,1,2,39,23,197,1,194,86,94,23,193,1,28,249,22,191,7,23,196,
2,2,38,249,22,87,23,212,2,9,249,22,73,248,22,157,14,28,249,22,140,
9,247,22,152,8,2,22,250,22,147,15,2,68,23,200,1,2,39,23,197,1,
9,28,249,22,191,7,23,196,2,2,38,249,22,87,23,210,2,194,249,22,73,
248,22,157,14,28,249,22,140,9,247,22,152,8,2,22,250,22,147,15,2,68,
23,200,1,2,39,23,197,1,194,86,94,23,193,1,28,249,22,191,7,23,196,
2,2,38,249,22,87,23,208,2,9,249,22,73,248,22,157,14,28,249,22,140,
9,247,22,152,8,2,22,250,22,147,15,2,68,23,200,1,2,39,23,197,1,
9,28,249,22,191,7,23,196,2,2,38,249,22,87,23,206,2,194,249,22,73,
248,22,157,14,28,249,22,140,9,247,22,152,8,2,22,250,22,147,15,2,68,
23,200,1,2,39,23,197,1,194,86,94,23,193,1,28,249,22,191,7,23,196,
2,2,38,249,22,87,23,204,2,9,249,22,73,248,22,157,14,28,249,22,140,
9,247,22,152,8,2,22,250,22,147,15,2,68,23,200,1,2,39,23,197,1,
9,28,249,22,191,7,23,196,2,2,38,249,22,87,23,202,2,194,249,22,73,
248,22,157,14,28,249,22,140,9,247,22,152,8,2,22,250,22,147,15,2,68,
23,200,1,2,39,23,197,1,194,86,94,23,193,1,28,249,22,191,7,23,196,
2,2,38,249,22,87,23,200,2,9,249,22,73,248,22,157,14,28,249,22,140,
9,247,22,152,8,2,22,250,22,147,15,2,68,23,200,1,2,39,23,197,1,
9,28,249,22,191,7,23,196,2,2,38,249,22,87,197,194,86,94,23,196,1,
14,2,35,247,22,148,8,2,36,11,27,27,250,22,87,23,203,1,248,22,83,
248,22,188,14,2,37,23,204,1,28,248,22,81,23,194,2,9,27,248,22,74,
23,195,2,27,28,248,22,172,14,23,195,2,23,194,1,28,248,22,171,14,23,
195,2,249,22,173,14,23,196,1,250,80,158,49,50,248,22,188,14,2,21,11,
10,250,80,158,47,50,248,22,188,14,2,21,23,197,1,10,28,23,193,2,249,
22,73,248,22,175,14,249,22,173,14,23,198,1,247,22,189,14,248,80,159,47,
56,39,248,22,75,23,199,1,86,94,23,193,1,248,80,159,45,56,39,248,22,
75,23,197,1,28,193,249,22,73,195,194,192,32,67,88,163,8,36,39,57,11,
2,20,222,33,69,0,8,35,114,120,35,34,92,34,34,27,249,22,135,15,23,
197,2,23,198,2,28,23,193,2,86,94,23,196,1,27,248,22,98,23,195,2,
27,27,248,22,107,23,197,1,27,249,22,135,15,23,201,2,23,196,2,28,23,
193,2,86,94,23,194,1,27,248,22,98,23,195,2,27,250,2,67,23,203,2,
23,204,1,248,22,107,23,199,1,28,249,22,191,7,23,196,2,2,38,249,22,
87,23,202,2,194,249,22,73,248,22,157,14,28,249,22,140,9,247,22,152,8,
2,22,250,22,147,15,2,68,23,200,1,2,39,23,197,1,194,86,95,23,199,
1,23,193,1,28,249,22,191,7,23,196,2,2,38,249,22,87,23,200,2,9,
249,22,73,248,22,157,14,28,249,22,140,9,247,22,152,8,2,22,250,22,147,
15,2,68,23,200,1,2,39,23,197,1,194,86,94,23,193,1,28,249,22,191,
7,23,198,2,2,38,249,22,87,195,9,86,94,23,194,1,249,22,73,248,22,
157,14,28,249,22,140,9,247,22,152,8,2,22,250,22,147,15,2,68,23,202,
1,2,39,23,199,1,9,86,95,28,28,248,22,183,7,23,195,2,10,248,22,
130,7,23,195,2,12,250,22,176,9,2,15,6,21,21,98,121,116,101,32,115,
116,114,105,110,103,32,111,114,32,115,116,114,105,110,103,23,197,2,28,28,248,
22,82,23,196,2,249,22,4,22,148,14,23,197,2,11,12,250,22,176,9,2,
15,6,13,13,108,105,115,116,32,111,102,32,112,97,116,104,115,23,198,2,27,
28,248,22,130,7,23,196,2,248,22,144,8,23,196,1,23,195,1,27,249,22,
135,15,23,197,2,23,196,2,28,23,193,2,86,94,23,194,1,27,248,22,98,
23,195,2,27,27,248,22,107,23,197,1,27,249,22,135,15,23,201,2,23,196,
2,28,23,193,2,86,94,23,194,1,27,248,22,98,23,195,2,27,27,248,22,
107,23,197,1,27,249,22,135,15,23,205,2,23,196,2,28,23,193,2,86,94,
23,194,1,27,248,22,98,23,195,2,27,27,248,22,107,23,197,1,27,249,22,
135,15,23,209,2,23,196,2,28,23,193,2,86,94,23,194,1,27,248,22,98,
23,195,2,27,27,248,22,107,23,197,1,27,249,22,135,15,23,213,2,23,196,
2,28,23,193,2,86,94,23,194,1,27,248,22,98,23,195,2,27,27,248,22,
107,23,197,1,27,249,22,135,15,23,217,2,23,196,2,28,23,193,2,86,94,
23,194,1,27,248,22,98,23,195,2,27,27,248,22,107,23,197,1,27,249,22,
135,15,23,221,2,23,196,2,28,23,193,2,86,94,23,194,1,27,248,22,98,
23,195,2,27,27,248,22,107,23,197,1,27,249,22,135,15,23,224,33,0,0,
0,2,23,196,2,28,23,193,2,86,94,23,194,1,27,248,22,98,23,195,2,
27,250,2,67,23,224,38,0,0,0,2,23,224,36,0,0,0,1,248,22,107,
23,199,1,28,249,22,191,7,23,196,2,2,38,249,22,87,23,224,37,0,0,
0,2,194,249,22,73,248,22,157,14,28,249,22,140,9,247,22,152,8,2,22,
250,22,147,15,2,68,23,200,1,2,39,23,197,1,194,86,95,23,223,1,23,
193,1,28,249,22,191,7,23,196,2,2,38,249,22,87,23,224,35,0,0,0,
2,9,249,22,73,248,22,157,14,28,249,22,140,9,247,22,152,8,2,22,250,
22,147,15,2,68,23,200,1,2,39,23,197,1,9,28,249,22,191,7,23,196,
2,2,38,249,22,87,23,224,33,0,0,0,2,194,249,22,73,248,22,157,14,
28,249,22,140,9,247,22,152,8,2,22,250,22,147,15,2,68,23,200,1,2,
39,23,197,1,194,86,94,23,193,1,28,249,22,191,7,23,196,2,2,38,249,
22,87,23,223,2,9,249,22,73,248,22,157,14,28,249,22,140,9,247,22,152,
8,2,22,250,22,147,15,2,68,23,200,1,2,39,23,197,1,9,28,249,22,
191,7,23,196,2,2,38,249,22,87,23,221,2,194,249,22,73,248,22,157,14,
28,249,22,140,9,247,22,152,8,2,22,250,22,147,15,2,68,23,200,1,2,
39,23,197,1,194,86,94,23,193,1,28,249,22,191,7,23,196,2,2,38,249,
22,87,23,219,2,9,249,22,73,248,22,157,14,28,249,22,140,9,247,22,152,
8,2,22,250,22,147,15,2,68,23,200,1,2,39,23,197,1,9,28,249,22,
191,7,23,196,2,2,38,249,22,87,23,217,2,194,249,22,73,248,22,157,14,
28,249,22,140,9,247,22,152,8,2,22,250,22,147,15,2,68,23,200,1,2,
39,23,197,1,194,86,94,23,193,1,28,249,22,191,7,23,196,2,2,38,249,
22,87,23,215,2,9,249,22,73,248,22,157,14,28,249,22,140,9,247,22,152,
8,2,22,250,22,147,15,2,68,23,200,1,2,39,23,197,1,9,28,249,22,
191,7,23,196,2,2,38,249,22,87,23,213,2,194,249,22,73,248,22,157,14,
28,249,22,140,9,247,22,152,8,2,22,250,22,147,15,2,68,23,200,1,2,
39,23,197,1,194,86,94,23,193,1,28,249,22,191,7,23,196,2,2,38,249,
22,87,23,211,2,9,249,22,73,248,22,157,14,28,249,22,140,9,247,22,152,
8,2,22,250,22,147,15,2,68,23,200,1,2,39,23,197,1,9,28,249,22,
191,7,23,196,2,2,38,249,22,87,23,209,2,194,249,22,73,248,22,157,14,
28,249,22,140,9,247,22,152,8,2,22,250,22,147,15,2,68,23,200,1,2,
39,23,197,1,194,86,94,23,193,1,28,249,22,191,7,23,196,2,2,38,249,
22,87,23,207,2,9,249,22,73,248,22,157,14,28,249,22,140,9,247,22,152,
8,2,22,250,22,147,15,2,68,23,200,1,2,39,23,197,1,9,28,249,22,
191,7,23,196,2,2,38,249,22,87,23,205,2,194,249,22,73,248,22,157,14,
28,249,22,140,9,247,22,152,8,2,22,250,22,147,15,2,68,23,200,1,2,
39,23,197,1,194,86,94,23,193,1,28,249,22,191,7,23,196,2,2,38,249,
22,87,23,203,2,9,249,22,73,248,22,157,14,28,249,22,140,9,247,22,152,
8,2,22,250,22,147,15,2,68,23,200,1,2,39,23,197,1,9,28,249,22,
191,7,23,196,2,2,38,249,22,87,200,194,86,94,23,199,1,249,22,73,248,
22,157,14,28,249,22,140,9,247,22,152,8,2,22,250,22,147,15,2,68,23,
200,1,2,39,23,197,1,194,86,94,23,193,1,28,249,22,191,7,23,196,2,
2,38,249,22,87,198,9,86,94,23,197,1,249,22,73,248,22,157,14,28,249,
22,140,9,247,22,152,8,2,22,250,22,147,15,2,68,23,200,1,2,39,23,
197,1,9,32,71,88,163,8,36,39,53,11,70,102,111,117,110,100,45,101,120,
101,99,222,33,74,32,72,88,163,8,36,40,58,11,64,110,101,120,116,222,33,
73,27,248,22,174,14,23,196,2,28,249,22,142,9,23,195,2,23,197,1,11,
28,248,22,170,14,23,194,2,27,249,22,166,14,23,197,1,23,196,1,28,23,
197,2,90,159,39,11,89,161,39,36,11,248,22,169,14,23,197,2,86,95,23,
195,1,23,194,1,27,28,23,202,2,27,248,22,174,14,23,199,2,28,249,22,
142,9,23,195,2,23,200,2,11,28,248,22,170,14,23,194,2,250,2,71,23,
205,2,23,206,2,249,22,166,14,23,200,2,23,198,1,250,2,71,23,205,2,
23,206,2,23,196,1,11,28,23,193,2,192,86,94,23,193,1,27,28,248,22,
148,14,23,196,2,27,249,22,166,14,23,198,2,23,205,2,28,28,248,22,161,
14,193,10,248,22,160,14,193,192,11,11,28,23,193,2,192,86,94,23,193,1,
28,23,203,2,11,27,248,22,174,14,23,200,2,28,249,22,142,9,23,195,2,
23,201,1,11,28,248,22,170,14,23,194,2,250,2,71,23,206,1,23,207,1,
249,22,166,14,23,201,1,23,198,1,250,2,71,205,206,195,192,86,94,23,194,
1,28,23,196,2,90,159,39,11,89,161,39,36,11,248,22,169,14,23,197,2,
86,95,23,195,1,23,194,1,27,28,23,201,2,27,248,22,174,14,23,199,2,
28,249,22,142,9,23,195,2,23,200,2,11,28,248,22,170,14,23,194,2,250,
2,71,23,204,2,23,205,2,249,22,166,14,23,200,2,23,198,1,250,2,71,
23,204,2,23,205,2,23,196,1,11,28,23,193,2,192,86,94,23,193,1,27,
28,248,22,148,14,23,196,2,27,249,22,166,14,23,198,2,23,204,2,28,28,
248,22,161,14,193,10,248,22,160,14,193,192,11,11,28,23,193,2,192,86,94,
23,193,1,28,23,202,2,11,27,248,22,174,14,23,200,2,28,249,22,142,9,
23,195,2,23,201,1,11,28,248,22,170,14,23,194,2,250,2,71,23,205,1,
23,206,1,249,22,166,14,23,201,1,23,198,1,250,2,71,204,205,195,192,28,
23,193,2,90,159,39,11,89,161,39,36,11,248,22,169,14,23,199,2,86,95,
23,195,1,23,194,1,27,28,23,198,2,251,2,72,23,198,2,23,203,2,23,
201,2,23,202,2,11,28,23,193,2,192,86,94,23,193,1,27,28,248,22,148,
14,195,27,249,22,166,14,197,200,28,28,248,22,161,14,193,10,248,22,160,14,
193,192,11,11,28,192,192,28,198,11,251,2,72,198,203,201,202,194,32,75,88,
163,8,36,40,58,11,2,20,222,33,76,28,248,22,81,23,197,2,11,27,248,
22,173,14,248,22,74,23,199,2,27,249,22,166,14,23,196,1,23,197,2,28,
248,22,160,14,23,194,2,250,2,71,198,199,195,86,94,23,193,1,27,248,22,
75,23,200,1,28,248,22,81,23,194,2,11,27,248,22,173,14,248,22,74,23,
196,2,27,249,22,166,14,23,196,1,23,200,2,28,248,22,160,14,23,194,2,
250,2,71,201,202,195,86,94,23,193,1,27,248,22,75,23,197,1,28,248,22,
81,23,194,2,11,27,248,22,173,14,248,22,74,195,27,249,22,166,14,23,196,
1,202,28,248,22,160,14,193,250,2,71,204,205,195,251,2,75,204,205,206,248,
22,75,199,86,95,28,28,248,22,148,14,23,195,2,10,28,248,22,130,7,23,
195,2,28,248,22,170,14,23,195,2,10,248,22,171,14,23,195,2,11,12,250,
22,176,9,2,16,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,195,2,28,
28,248,22,148,14,23,196,2,10,28,248,22,130,7,23,196,2,28,248,22,170,
14,23,196,2,10,248,22,171,14,23,196,2,11,248,22,170,14,23,196,2,11,
10,12,250,22,176,9,2,16,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,
2,28,28,248,22,170,14,23,195,2,90,159,39,11,89,161,39,36,11,248,22,
169,14,23,198,2,249,22,140,9,194,68,114,101,108,97,116,105,118,101,11,27,
248,22,150,8,6,4,4,80,65,84,72,27,28,23,194,2,27,249,80,159,41,
49,38,23,197,1,9,28,249,22,140,9,247,22,152,8,2,22,249,22,73,248,
22,157,14,5,1,46,194,192,86,94,23,194,1,9,28,248,22,81,23,194,2,
11,27,248,22,173,14,248,22,74,23,196,2,27,249,22,166,14,23,196,1,23,
200,2,28,248,22,160,14,23,194,2,250,2,71,201,202,195,86,94,23,193,1,
27,248,22,75,23,197,1,28,248,22,81,23,194,2,11,27,248,22,173,14,248,
22,74,23,196,2,27,249,22,166,14,23,196,1,23,203,2,28,248,22,160,14,
23,194,2,250,2,71,204,205,195,86,94,23,193,1,27,248,22,75,23,197,1,
28,248,22,81,23,194,2,11,27,248,22,173,14,248,22,74,195,27,249,22,166,
14,23,196,1,205,28,248,22,160,14,193,250,2,71,23,15,23,16,195,251,2,
75,23,15,23,16,23,17,248,22,75,199,27,248,22,173,14,23,196,1,28,248,
22,160,14,193,250,2,71,198,199,195,11,250,80,159,39,50,37,196,197,11,250,
80,159,39,50,37,196,11,11,86,94,249,22,183,6,247,22,154,5,195,248,22,
145,6,249,22,128,4,36,249,22,176,3,197,198,27,28,23,197,2,86,95,23,
196,1,23,195,1,23,197,1,86,94,23,197,1,27,248,22,188,14,2,21,27,
250,80,159,42,50,37,23,197,1,11,11,27,248,22,131,4,23,199,1,27,28,
23,194,2,23,194,1,86,94,23,194,1,36,27,248,22,131,4,23,202,1,27,
28,23,194,2,23,194,1,86,94,23,194,1,36,249,22,185,5,23,199,1,20,
20,95,88,163,8,36,36,48,11,9,224,4,2,33,80,23,195,1,23,197,1,
27,248,22,170,5,23,195,1,248,80,159,39,57,37,193,159,36,20,112,159,36,
16,1,11,16,0,20,26,142,2,1,2,1,29,11,11,11,11,11,10,43,80,
158,36,36,20,112,159,40,16,18,2,2,2,3,2,4,2,5,2,6,2,7,
2,8,2,9,2,10,2,11,2,12,2,13,2,14,2,15,2,16,2,17,30,
2,19,1,20,112,97,114,97,109,101,116,101,114,105,122,97,116,105,111,110,45,
107,101,121,5,30,2,19,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,3,16,0,16,0,36,16,0,36,16,
4,2,6,2,5,2,3,2,10,40,11,11,39,36,11,11,16,12,2,9,2,
7,2,17,2,8,2,16,2,14,2,13,2,4,2,12,2,15,2,11,2,2,
16,12,11,11,11,11,11,11,11,11,11,11,11,11,16,12,2,9,2,7,2,
17,2,8,2,16,2,14,2,13,2,4,2,12,2,15,2,11,2,2,48,48,
37,11,11,16,0,16,0,16,0,36,36,11,11,11,16,0,16,0,16,0,36,
36,16,0,16,20,20,15,16,2,88,163,8,36,37,51,8,240,0,0,35,0,
2,20,223,0,33,40,80,159,36,57,37,20,15,16,2,88,163,8,36,37,56,
8,240,0,64,16,0,2,20,223,0,33,41,80,159,36,56,37,20,15,16,2,
88,163,8,36,37,51,8,240,0,64,8,0,2,20,223,0,33,42,80,159,36,
55,37,20,15,16,2,88,163,8,36,37,51,8,240,0,64,4,0,2,20,223,
0,33,43,80,159,36,54,37,20,15,16,2,32,0,88,163,36,37,45,11,2,
2,222,33,44,80,159,36,36,37,20,15,16,2,249,22,132,7,7,92,7,92,
80,159,36,37,37,20,15,16,2,88,163,36,37,54,38,2,4,223,0,33,45,
80,159,36,38,37,20,15,16,2,32,0,88,163,8,36,38,50,11,2,5,222,
33,46,80,159,36,39,37,20,15,16,2,32,0,88,163,8,36,39,51,11,2,
6,222,33,48,80,159,36,40,37,20,15,16,2,32,0,88,163,8,45,38,54,
11,2,7,222,33,52,80,159,36,41,37,20,15,16,2,32,0,88,163,45,39,
53,11,2,9,222,33,56,80,159,36,43,37,20,15,16,2,32,0,88,163,36,
41,59,11,2,8,222,33,59,80,159,36,42,37,20,15,16,2,32,0,88,163,
36,39,50,11,2,10,222,33,60,80,159,36,44,37,20,15,16,2,32,0,88,
163,36,38,53,11,2,11,222,33,61,80,159,36,45,37,20,15,16,2,32,0,
88,163,36,38,54,11,2,12,222,33,62,80,159,36,46,37,20,15,16,2,32,
0,88,163,36,37,44,11,2,13,222,33,63,80,159,36,47,37,20,15,16,2,
20,25,96,2,14,88,163,36,36,53,8,240,0,32,4,0,9,223,0,33,64,
88,163,36,37,54,8,240,0,32,8,0,9,223,0,33,65,88,163,36,38,55,
8,240,0,32,16,0,9,223,0,33,66,80,159,36,48,37,20,15,16,2,27,
248,22,131,15,248,22,144,8,27,28,249,22,140,9,247,22,152,8,2,22,6,
1,1,59,6,1,1,58,250,22,178,7,6,14,14,40,91,94,126,97,93,42,
41,126,97,40,46,42,41,23,196,2,23,196,1,88,163,8,36,38,8,46,11,
2,15,223,0,33,70,80,159,36,49,37,20,15,16,2,20,25,96,2,16,88,
163,8,36,39,8,24,8,128,128,9,223,0,33,77,88,163,8,36,38,47,8,
240,0,64,0,0,9,223,0,33,78,88,163,8,36,37,46,8,240,0,64,0,
0,9,223,0,33,79,80,159,36,50,37,20,15,16,2,88,163,8,36,39,54,
8,240,0,64,32,0,2,17,223,0,33,81,80,159,36,51,37,94,29,94,2,
18,68,35,37,107,101,114,110,101,108,11,29,94,2,18,69,35,37,109,105,110,
45,115,116,120,11,9,9,9,36,0};
EVAL_ONE_SIZED_STR((char *)expr, 10320);
15,2,68,23,200,1,2,39,23,197,1,9,28,249,22,191,7,23,196,2,2,
38,249,22,87,197,194,86,94,23,196,1,249,22,73,248,22,157,14,28,249,22,
140,9,247,22,152,8,2,22,250,22,147,15,2,68,23,200,1,2,39,23,197,
1,194,86,94,23,193,1,28,249,22,191,7,23,198,2,2,38,249,22,87,195,
9,86,94,23,194,1,249,22,73,248,22,157,14,28,249,22,140,9,247,22,152,
8,2,22,250,22,147,15,2,68,23,202,1,2,39,23,199,1,9,86,95,28,
28,248,22,183,7,194,10,248,22,130,7,194,12,250,22,176,9,2,15,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,82,195,249,22,4,22,148,14,196,11,12,250,22,176,9,
2,15,6,13,13,108,105,115,116,32,111,102,32,112,97,116,104,115,197,250,2,
67,197,195,28,248,22,130,7,197,248,22,144,8,197,196,32,71,88,163,8,36,
39,53,11,70,102,111,117,110,100,45,101,120,101,99,222,33,74,32,72,88,163,
8,36,40,58,11,64,110,101,120,116,222,33,73,27,248,22,174,14,23,196,2,
28,249,22,142,9,23,195,2,23,197,1,11,28,248,22,170,14,23,194,2,27,
249,22,166,14,23,197,1,23,196,1,28,23,197,2,90,159,39,11,89,161,39,
36,11,248,22,169,14,23,197,2,86,95,23,195,1,23,194,1,27,28,23,202,
2,27,248,22,174,14,23,199,2,28,249,22,142,9,23,195,2,23,200,2,11,
28,248,22,170,14,23,194,2,250,2,71,23,205,2,23,206,2,249,22,166,14,
23,200,2,23,198,1,250,2,71,23,205,2,23,206,2,23,196,1,11,28,23,
193,2,192,86,94,23,193,1,27,28,248,22,148,14,23,196,2,27,249,22,166,
14,23,198,2,23,205,2,28,28,248,22,161,14,193,10,248,22,160,14,193,192,
11,11,28,23,193,2,192,86,94,23,193,1,28,23,203,2,11,27,248,22,174,
14,23,200,2,28,249,22,142,9,23,195,2,23,201,1,11,28,248,22,170,14,
23,194,2,250,2,71,23,206,1,23,207,1,249,22,166,14,23,201,1,23,198,
1,250,2,71,205,206,195,192,86,94,23,194,1,28,23,196,2,90,159,39,11,
89,161,39,36,11,248,22,169,14,23,197,2,86,95,23,195,1,23,194,1,27,
28,23,201,2,27,248,22,174,14,23,199,2,28,249,22,142,9,23,195,2,23,
200,2,11,28,248,22,170,14,23,194,2,250,2,71,23,204,2,23,205,2,249,
22,166,14,23,200,2,23,198,1,250,2,71,23,204,2,23,205,2,23,196,1,
11,28,23,193,2,192,86,94,23,193,1,27,28,248,22,148,14,23,196,2,27,
249,22,166,14,23,198,2,23,204,2,28,28,248,22,161,14,193,10,248,22,160,
14,193,192,11,11,28,23,193,2,192,86,94,23,193,1,28,23,202,2,11,27,
248,22,174,14,23,200,2,28,249,22,142,9,23,195,2,23,201,1,11,28,248,
22,170,14,23,194,2,250,2,71,23,205,1,23,206,1,249,22,166,14,23,201,
1,23,198,1,250,2,71,204,205,195,192,28,23,193,2,90,159,39,11,89,161,
39,36,11,248,22,169,14,23,199,2,86,95,23,195,1,23,194,1,27,28,23,
198,2,251,2,72,23,198,2,23,203,2,23,201,2,23,202,2,11,28,23,193,
2,192,86,94,23,193,1,27,28,248,22,148,14,195,27,249,22,166,14,197,200,
28,28,248,22,161,14,193,10,248,22,160,14,193,192,11,11,28,192,192,28,198,
11,251,2,72,198,203,201,202,194,32,75,88,163,8,36,40,58,11,2,20,222,
33,76,28,248,22,81,23,197,2,11,27,248,22,173,14,248,22,74,23,199,2,
27,249,22,166,14,23,196,1,23,197,2,28,248,22,160,14,23,194,2,250,2,
71,198,199,195,86,94,23,193,1,27,248,22,75,23,200,1,28,248,22,81,23,
194,2,11,27,248,22,173,14,248,22,74,23,196,2,27,249,22,166,14,23,196,
1,23,200,2,28,248,22,160,14,23,194,2,250,2,71,201,202,195,86,94,23,
193,1,27,248,22,75,23,197,1,28,248,22,81,23,194,2,11,27,248,22,173,
14,248,22,74,195,27,249,22,166,14,23,196,1,202,28,248,22,160,14,193,250,
2,71,204,205,195,251,2,75,204,205,206,248,22,75,199,86,95,28,28,248,22,
148,14,23,195,2,10,28,248,22,130,7,23,195,2,28,248,22,170,14,23,195,
2,10,248,22,171,14,23,195,2,11,12,250,22,176,9,2,16,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,195,2,28,28,248,22,148,14,23,196,2,10,
28,248,22,130,7,23,196,2,28,248,22,170,14,23,196,2,10,248,22,171,14,
23,196,2,11,248,22,170,14,23,196,2,11,10,12,250,22,176,9,2,16,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,2,28,28,248,22,170,14,23,195,
2,90,159,39,11,89,161,39,36,11,248,22,169,14,23,198,2,249,22,140,9,
194,68,114,101,108,97,116,105,118,101,11,27,248,22,150,8,6,4,4,80,65,
84,72,27,28,23,194,2,27,249,80,159,41,49,38,23,197,1,9,28,249,22,
140,9,247,22,152,8,2,22,249,22,73,248,22,157,14,5,1,46,194,192,86,
94,23,194,1,9,28,248,22,81,23,194,2,11,27,248,22,173,14,248,22,74,
23,196,2,27,249,22,166,14,23,196,1,23,200,2,28,248,22,160,14,23,194,
2,250,2,71,201,202,195,86,94,23,193,1,27,248,22,75,23,197,1,28,248,
22,81,23,194,2,11,27,248,22,173,14,248,22,74,23,196,2,27,249,22,166,
14,23,196,1,23,203,2,28,248,22,160,14,23,194,2,250,2,71,204,205,195,
86,94,23,193,1,27,248,22,75,23,197,1,28,248,22,81,23,194,2,11,27,
248,22,173,14,248,22,74,195,27,249,22,166,14,23,196,1,205,28,248,22,160,
14,193,250,2,71,23,15,23,16,195,251,2,75,23,15,23,16,23,17,248,22,
75,199,27,248,22,173,14,23,196,1,28,248,22,160,14,193,250,2,71,198,199,
195,11,250,80,159,39,50,39,196,197,11,250,80,159,39,50,39,196,11,11,86,
94,249,22,183,6,247,22,154,5,195,248,22,145,6,249,22,128,4,36,249,22,
176,3,197,198,27,28,23,197,2,86,95,23,196,1,23,195,1,23,197,1,86,
94,23,197,1,27,248,22,188,14,2,21,27,250,80,159,42,50,39,23,197,1,
11,11,27,248,22,131,4,23,199,1,27,28,23,194,2,23,194,1,86,94,23,
194,1,36,27,248,22,131,4,23,202,1,27,28,23,194,2,23,194,1,86,94,
23,194,1,36,249,22,185,5,23,199,1,20,20,95,88,163,8,36,36,48,11,
9,224,4,2,33,80,23,195,1,23,197,1,27,248,22,170,5,23,195,1,248,
80,159,39,57,39,193,159,36,20,112,159,36,16,1,11,16,0,20,26,142,2,
1,2,1,29,11,11,11,11,11,10,43,80,158,36,36,20,112,159,40,16,18,
2,2,2,3,2,4,2,5,2,6,2,7,2,8,2,9,2,10,2,11,2,
12,2,13,2,14,2,15,2,16,2,17,30,2,19,1,20,112,97,114,97,109,
101,116,101,114,105,122,97,116,105,111,110,45,107,101,121,5,30,2,19,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,3,16,0,16,0,36,16,0,36,16,4,2,6,2,5,2,3,2,10,
40,11,11,39,36,11,11,16,12,2,9,2,7,2,17,2,8,2,16,2,14,
2,13,2,4,2,12,2,15,2,11,2,2,16,12,11,11,11,11,11,11,11,
11,11,11,11,11,16,12,2,9,2,7,2,17,2,8,2,16,2,14,2,13,
2,4,2,12,2,15,2,11,2,2,48,48,37,11,11,16,0,16,0,16,0,
36,36,11,11,11,16,0,16,0,16,0,36,36,16,0,16,20,20,15,16,2,
88,163,8,36,37,51,8,240,0,0,35,0,2,20,223,0,33,40,80,159,36,
57,39,20,15,16,2,88,163,8,36,37,56,8,240,0,64,16,0,2,20,223,
0,33,41,80,159,36,56,39,20,15,16,2,88,163,8,36,37,51,8,240,0,
64,8,0,2,20,223,0,33,42,80,159,36,55,39,20,15,16,2,88,163,8,
36,37,51,8,240,0,64,4,0,2,20,223,0,33,43,80,159,36,54,39,20,
15,16,2,32,0,88,163,36,37,45,11,2,2,222,33,44,80,159,36,36,37,
20,15,16,2,249,22,132,7,7,92,7,92,80,159,36,37,37,20,15,16,2,
88,163,36,37,54,38,2,4,223,0,33,45,80,159,36,38,37,20,15,16,2,
32,0,88,163,8,36,38,50,11,2,5,222,33,46,80,159,36,39,37,20,15,
16,2,32,0,88,163,8,36,39,51,11,2,6,222,33,48,80,159,36,40,37,
20,15,16,2,32,0,88,163,8,45,38,54,11,2,7,222,33,52,80,159,36,
41,37,20,15,16,2,32,0,88,163,45,39,53,11,2,9,222,33,56,80,159,
36,43,37,20,15,16,2,32,0,88,163,36,41,59,11,2,8,222,33,59,80,
159,36,42,37,20,15,16,2,32,0,88,163,36,39,50,11,2,10,222,33,60,
80,159,36,44,37,20,15,16,2,32,0,88,163,36,38,53,11,2,11,222,33,
61,80,159,36,45,37,20,15,16,2,32,0,88,163,36,38,54,11,2,12,222,
33,62,80,159,36,46,37,20,15,16,2,32,0,88,163,36,37,44,11,2,13,
222,33,63,80,159,36,47,37,20,15,16,2,20,25,96,2,14,88,163,36,36,
53,8,240,0,32,4,0,9,223,0,33,64,88,163,36,37,54,8,240,0,32,
8,0,9,223,0,33,65,88,163,36,38,58,8,240,0,96,16,0,9,223,0,
33,66,80,159,36,48,37,20,15,16,2,27,248,22,131,15,248,22,144,8,27,
28,249,22,140,9,247,22,152,8,2,22,6,1,1,59,6,1,1,58,250,22,
178,7,6,14,14,40,91,94,126,97,93,42,41,126,97,40,46,42,41,23,196,
2,23,196,1,88,163,8,36,38,48,11,2,15,223,0,33,70,80,159,36,49,
37,20,15,16,2,20,25,96,2,16,88,163,8,36,39,8,24,8,128,128,9,
223,0,33,77,88,163,8,36,38,47,8,240,0,64,0,0,9,223,0,33,78,
88,163,8,36,37,46,8,240,0,64,0,0,9,223,0,33,79,80,159,36,50,
37,20,15,16,2,88,163,8,36,39,54,8,240,0,64,32,0,2,17,223,0,
33,81,80,159,36,51,37,94,29,94,2,18,68,35,37,107,101,114,110,101,108,
11,29,94,2,18,69,35,37,109,105,110,45,115,116,120,11,9,9,9,36,0};
EVAL_ONE_SIZED_STR((char *)expr, 8399);
}
{
SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,53,46,49,46,50,46,52,0,0,0,0,0,0,0,0,0,0,0,
SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,53,46,49,46,51,46,50,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,12,0,0,0,1,0,0,15,0,40,0,57,
0,75,0,97,0,120,0,140,0,162,0,169,0,176,0,183,0,0,0,178,1,
0,0,74,35,37,112,108,97,99,101,45,115,116,114,117,99,116,1,23,115,116,
@ -620,15 +528,15 @@
EVAL_ONE_SIZED_STR((char *)expr, 499);
}
{
SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,53,46,49,46,50,46,52,0,0,0,0,0,0,0,0,0,0,0,
SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,53,46,49,46,51,46,50,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,65,0,0,0,1,0,0,7,0,18,0,45,
0,51,0,64,0,73,0,80,0,102,0,124,0,150,0,158,0,170,0,185,0,
201,0,219,0,239,0,251,0,11,1,34,1,46,1,77,1,84,1,89,1,94,
1,99,1,104,1,109,1,118,1,123,1,127,1,135,1,144,1,152,1,213,1,
60,2,81,2,102,2,132,2,162,2,220,2,22,3,71,3,120,3,54,9,105,
9,168,9,187,9,201,9,103,10,117,10,47,12,141,14,8,15,14,15,28,15,
55,15,75,15,135,15,222,15,224,15,37,16,121,22,174,22,198,22,0,0,34,
26,0,0,66,35,37,98,111,111,116,70,100,108,108,45,115,117,102,102,105,120,
9,168,9,187,9,201,9,103,10,116,10,250,10,36,12,159,12,165,12,179,12,
206,12,226,12,30,13,117,13,119,13,188,13,16,20,69,20,93,20,0,0,185,
23,0,0,66,35,37,98,111,111,116,70,100,108,108,45,115,117,102,102,105,120,
1,25,100,101,102,97,117,108,116,45,108,111,97,100,47,117,115,101,45,99,111,
109,112,105,108,101,100,65,113,117,111,116,101,29,94,2,4,67,35,37,117,116,
105,108,115,11,68,35,37,112,97,114,97,109,122,29,94,2,4,2,6,11,1,
@ -647,30 +555,30 @@
29,94,2,4,2,6,11,64,98,111,111,116,64,115,101,97,108,64,115,97,109,
101,5,3,46,122,111,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,38,49,38,249,80,159,38,52,37,195,10,90,159,39,11,89,161,39,36,11,
159,38,49,38,249,80,159,38,52,39,195,10,90,159,39,11,89,161,39,36,11,
248,22,169,14,197,86,95,23,195,1,23,193,1,28,249,22,135,15,0,11,35,
114,120,34,91,46,93,115,115,36,34,248,22,153,14,23,197,1,249,80,159,41,
56,38,198,5,4,46,114,107,116,196,27,28,23,195,2,28,249,22,140,9,23,
56,39,198,5,4,46,114,107,116,196,27,28,23,195,2,28,249,22,140,9,23,
197,2,80,158,39,50,86,94,23,195,1,80,158,37,51,27,248,22,137,5,23,
197,2,28,248,22,148,14,23,194,2,90,159,39,11,89,161,39,36,11,248,22,
169,14,23,197,1,86,95,20,18,159,11,80,158,41,50,198,20,18,159,11,80,
158,41,51,192,192,11,11,28,23,193,2,192,86,94,23,193,1,27,247,22,159,
5,28,192,192,247,22,189,14,250,22,166,14,23,197,1,23,199,1,249,80,159,
43,39,38,23,198,1,2,26,250,22,166,14,23,197,1,23,199,1,249,80,159,
43,39,38,23,198,1,2,27,252,22,166,14,23,199,1,23,201,1,2,28,247,
22,153,8,249,80,159,45,39,38,23,200,1,80,159,45,36,38,252,22,166,14,
23,199,1,23,201,1,2,28,247,22,153,8,249,80,159,45,39,38,23,200,1,
43,39,39,23,198,1,2,26,250,22,166,14,23,197,1,23,199,1,249,80,159,
43,39,39,23,198,1,2,27,252,22,166,14,23,199,1,23,201,1,2,28,247,
22,153,8,249,80,159,45,39,39,23,200,1,80,159,45,36,38,252,22,166,14,
23,199,1,23,201,1,2,28,247,22,153,8,249,80,159,45,39,39,23,200,1,
80,159,45,36,38,27,252,22,166,14,23,200,1,23,202,1,2,28,247,22,153,
8,249,80,159,46,39,38,23,201,1,80,159,46,36,38,27,250,22,183,14,196,
8,249,80,159,46,39,39,23,201,1,80,159,46,36,38,27,250,22,183,14,196,
11,32,0,88,163,8,36,36,41,11,9,222,11,28,192,249,22,73,195,194,11,
27,252,22,166,14,23,200,1,23,202,1,2,28,247,22,153,8,249,80,159,46,
39,38,23,201,1,80,159,46,36,38,27,250,22,183,14,196,11,32,0,88,163,
39,39,23,201,1,80,159,46,36,38,27,250,22,183,14,196,11,32,0,88,163,
8,36,36,41,11,9,222,11,28,192,249,22,73,195,194,11,27,250,22,166,14,
23,198,1,23,200,1,249,80,159,44,39,38,23,199,1,2,26,27,250,22,183,
23,198,1,23,200,1,249,80,159,44,39,39,23,199,1,2,26,27,250,22,183,
14,196,11,32,0,88,163,8,36,36,41,11,9,222,11,28,192,249,22,73,195,
194,11,27,250,22,166,14,23,198,1,23,200,1,249,80,159,44,39,38,23,199,
194,11,27,250,22,166,14,23,198,1,23,200,1,249,80,159,44,39,39,23,199,
1,2,27,27,250,22,183,14,196,11,32,0,88,163,8,36,36,41,11,9,222,
11,28,192,249,22,73,195,194,11,86,94,28,248,80,159,37,38,38,23,195,2,
11,28,192,249,22,73,195,194,11,86,94,28,248,80,159,37,38,39,23,195,2,
12,250,22,176,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,32,115,116,114,105,110,103,23,197,2,90,159,46,11,89,161,37,36,11,
@ -702,18 +610,18 @@
75,196,248,22,75,23,205,2,193,11,11,11,11,86,94,23,197,1,11,28,23,
193,2,86,105,23,213,1,23,211,1,23,210,1,23,209,1,23,208,1,23,201,
1,23,200,1,23,199,1,23,198,1,23,196,1,23,195,1,23,194,1,20,13,
159,80,159,57,40,38,250,80,159,8,24,41,38,249,22,27,11,80,159,8,26,
40,38,22,180,4,11,20,13,159,80,159,57,40,38,250,80,159,8,24,41,38,
249,22,27,11,80,159,8,26,40,38,22,159,5,28,248,22,148,14,23,216,2,
159,80,159,57,40,37,250,80,159,8,24,41,37,249,22,27,11,80,159,8,26,
40,37,22,180,4,11,20,13,159,80,159,57,40,37,250,80,159,8,24,41,37,
249,22,27,11,80,159,8,26,40,37,22,159,5,28,248,22,148,14,23,216,2,
23,215,1,86,94,23,215,1,247,22,189,14,249,247,22,130,15,248,22,74,195,
23,25,86,94,23,193,1,27,28,23,195,2,28,23,197,1,27,249,22,5,88,
163,8,36,37,53,45,9,225,25,23,20,33,41,23,217,2,27,28,23,204,2,
11,193,28,192,192,28,193,28,203,28,249,22,188,3,248,22,75,196,248,22,75,
206,193,11,11,11,11,86,94,23,197,1,11,28,23,193,2,86,102,23,214,1,
23,211,1,23,210,1,23,209,1,23,201,1,23,200,1,23,199,1,23,196,1,
23,195,1,20,13,159,80,159,58,40,38,250,80,159,8,25,41,38,249,22,27,
11,80,159,8,27,40,38,22,180,4,23,215,1,20,13,159,80,159,58,40,38,
250,80,159,8,25,41,38,249,22,27,11,80,159,8,27,40,38,22,159,5,28,
23,195,1,20,13,159,80,159,58,40,37,250,80,159,8,25,41,37,249,22,27,
11,80,159,8,27,40,37,22,180,4,23,215,1,20,13,159,80,159,58,40,37,
250,80,159,8,25,41,37,249,22,27,11,80,159,8,27,40,37,22,159,5,28,
248,22,148,14,23,217,2,23,216,1,86,94,23,216,1,247,22,189,14,249,247,
22,130,15,248,22,74,195,23,26,86,94,23,193,1,27,28,23,197,2,28,23,
201,1,27,249,22,5,20,20,94,88,163,8,36,37,51,44,9,225,26,24,20,
@ -721,24 +629,24 @@
23,204,2,28,249,22,188,3,248,22,75,196,248,22,75,23,207,2,193,11,11,
11,86,94,23,210,1,11,86,94,23,201,1,11,28,23,193,2,86,101,23,215,
1,23,213,1,23,212,1,23,211,1,23,202,1,23,200,1,23,197,1,23,196,
1,20,13,159,80,159,59,40,38,250,80,159,8,26,41,38,249,22,27,11,80,
159,8,28,40,38,22,180,4,11,20,13,159,80,159,59,40,38,250,80,159,8,
26,41,38,249,22,27,11,80,159,8,28,40,38,22,159,5,28,248,22,148,14,
1,20,13,159,80,159,59,40,37,250,80,159,8,26,41,37,249,22,27,11,80,
159,8,28,40,37,22,180,4,11,20,13,159,80,159,59,40,37,250,80,159,8,
26,41,37,249,22,27,11,80,159,8,28,40,37,22,159,5,28,248,22,148,14,
23,218,2,23,217,1,86,94,23,217,1,247,22,189,14,249,247,22,157,5,248,
22,74,195,23,27,86,94,23,193,1,27,28,23,197,1,28,23,201,1,27,249,
22,5,20,20,94,88,163,8,36,37,51,44,9,225,27,25,22,33,43,23,215,
1,23,219,1,27,28,23,205,2,11,193,28,192,192,28,193,28,204,28,249,22,
188,3,248,22,75,196,248,22,75,23,15,193,11,11,11,86,95,23,216,1,23,
212,1,11,86,94,23,201,1,11,28,23,193,2,86,95,23,213,1,23,198,1,
20,13,159,80,159,8,24,40,38,250,80,159,8,27,41,38,249,22,27,11,80,
159,8,29,40,38,22,180,4,23,217,1,20,13,159,80,159,8,24,40,38,250,
80,159,8,27,41,38,249,22,27,11,80,159,8,29,40,38,22,159,5,28,248,
20,13,159,80,159,8,24,40,37,250,80,159,8,27,41,37,249,22,27,11,80,
159,8,29,40,37,22,180,4,23,217,1,20,13,159,80,159,8,24,40,37,250,
80,159,8,27,41,37,249,22,27,11,80,159,8,29,40,37,22,159,5,28,248,
22,148,14,23,219,2,23,218,1,86,94,23,218,1,247,22,189,14,249,247,22,
157,5,248,22,74,195,23,28,86,94,23,193,1,27,28,23,199,2,86,94,23,
215,1,23,214,1,86,94,23,214,1,23,215,1,20,13,159,80,159,8,25,40,
38,250,80,159,8,28,41,38,249,22,27,11,80,159,8,30,40,38,22,180,4,
37,250,80,159,8,28,41,37,249,22,27,11,80,159,8,30,40,37,22,180,4,
28,23,30,28,23,202,1,11,195,86,94,23,202,1,11,20,13,159,80,159,8,
25,40,38,250,80,159,8,28,41,38,249,22,27,11,80,159,8,30,40,38,22,
25,40,37,250,80,159,8,28,41,37,249,22,27,11,80,159,8,30,40,37,22,
159,5,28,248,22,148,14,23,220,2,23,219,1,86,94,23,219,1,247,22,189,
14,249,247,22,157,5,194,23,29,27,249,22,160,8,80,159,39,45,38,249,22,
183,3,248,22,179,3,248,22,166,2,200,8,128,8,27,28,193,248,22,169,2,
@ -755,202 +663,173 @@
196,2,27,248,22,107,23,197,1,27,249,22,135,15,2,47,23,196,2,28,23,
193,2,86,94,23,194,1,249,22,73,248,22,98,23,196,2,248,2,48,248,22,
107,23,197,1,248,22,83,194,248,22,83,194,248,22,83,194,248,22,83,194,32,
50,88,163,36,37,8,40,11,2,29,222,33,51,28,248,22,81,248,22,75,23,
195,2,249,22,7,9,248,22,74,195,27,248,22,75,194,90,159,38,11,89,161,
38,36,11,28,248,22,81,248,22,75,23,197,2,249,22,7,9,248,22,74,197,
90,159,38,11,89,161,38,36,11,27,248,22,75,198,28,248,22,81,248,22,75,
23,195,2,249,22,7,9,248,22,74,195,27,248,22,75,194,90,159,38,11,89,
161,38,36,11,28,248,22,81,248,22,75,23,197,2,249,22,7,9,248,22,74,
197,90,159,38,11,89,161,38,36,11,27,248,22,75,198,28,248,22,81,248,22,
75,23,195,2,249,22,7,9,248,22,74,195,27,248,22,75,194,90,159,38,11,
89,161,38,36,11,28,248,22,81,248,22,75,23,197,2,249,22,7,9,248,22,
74,197,90,159,38,11,89,161,38,36,11,27,248,22,75,198,28,248,22,81,248,
50,88,163,36,37,55,11,2,29,222,33,51,28,248,22,81,248,22,75,23,195,
2,249,22,7,9,248,22,74,195,90,159,38,11,89,161,38,36,11,27,248,22,
75,196,28,248,22,81,248,22,75,23,195,2,249,22,7,9,248,22,74,195,90,
159,38,11,89,161,38,36,11,27,248,22,75,196,28,248,22,81,248,22,75,23,
195,2,249,22,7,9,248,22,74,195,90,159,38,11,89,161,38,36,11,248,2,
50,248,22,75,196,249,22,7,249,22,73,248,22,74,199,196,195,249,22,7,249,
22,73,248,22,74,199,196,195,249,22,7,249,22,73,248,22,74,199,196,195,27,
27,249,22,135,15,2,47,23,197,2,28,23,193,2,86,94,23,195,1,249,22,
73,248,22,98,23,196,2,27,248,22,107,23,197,1,27,249,22,135,15,2,47,
23,196,2,28,23,193,2,86,94,23,194,1,249,22,73,248,22,98,23,196,2,
27,248,22,107,23,197,1,27,249,22,135,15,2,47,23,196,2,28,23,193,2,
86,94,23,194,1,249,22,73,248,22,98,23,196,2,27,248,22,107,23,197,1,
27,249,22,135,15,2,47,23,196,2,28,23,193,2,86,94,23,194,1,249,22,
73,248,22,98,23,196,2,248,2,48,248,22,107,23,197,1,248,22,83,194,248,
22,83,194,248,22,83,194,248,22,83,195,28,23,195,1,192,28,248,22,81,248,
22,75,23,195,2,249,22,7,9,248,22,74,195,27,248,22,75,194,90,159,38,
11,89,161,38,36,11,28,248,22,81,248,22,75,23,197,2,249,22,7,9,248,
22,74,197,90,159,38,11,89,161,38,36,11,27,248,22,75,198,28,248,22,81,
248,22,75,23,195,2,249,22,7,9,248,22,74,195,27,248,22,75,194,90,159,
38,11,89,161,38,36,11,28,248,22,81,248,22,75,23,197,2,249,22,7,9,
248,22,74,197,90,159,38,11,89,161,38,36,11,248,2,50,248,22,75,198,249,
22,7,249,22,73,248,22,74,201,196,195,249,22,7,249,22,73,248,22,74,200,
196,195,249,22,7,249,22,73,248,22,74,201,196,195,249,22,7,249,22,73,248,
22,74,200,196,195,249,22,7,249,22,73,248,22,74,201,196,195,249,22,7,249,
22,73,248,22,74,200,196,195,249,22,7,249,22,73,248,22,74,201,196,195,249,
22,7,249,22,73,248,22,74,200,196,195,249,22,7,249,22,73,248,22,74,201,
196,195,249,22,7,249,22,73,248,22,74,200,196,195,27,27,249,22,135,15,2,
47,23,197,2,28,23,193,2,86,94,23,195,1,249,22,73,248,22,98,23,196,
2,27,248,22,107,23,197,1,27,249,22,135,15,2,47,23,196,2,28,23,193,
2,86,94,23,194,1,249,22,73,248,22,98,23,196,2,27,248,22,107,23,197,
1,27,249,22,135,15,2,47,23,196,2,28,23,193,2,86,94,23,194,1,249,
22,73,248,22,98,23,196,2,27,248,22,107,23,197,1,27,249,22,135,15,2,
47,23,196,2,28,23,193,2,86,94,23,194,1,249,22,73,248,22,98,23,196,
2,248,2,48,248,22,107,23,197,1,248,22,83,194,248,22,83,194,248,22,83,
194,248,22,83,195,28,23,195,1,192,28,248,22,81,248,22,75,23,195,2,249,
22,7,9,248,22,74,195,27,248,22,75,194,90,159,38,11,89,161,38,36,11,
28,248,22,81,248,22,75,23,197,2,249,22,7,9,248,22,74,197,27,248,22,
75,196,90,159,38,11,89,161,38,36,11,28,248,22,81,248,22,75,23,197,2,
249,22,7,9,248,22,74,197,27,248,22,75,196,90,159,38,11,89,161,38,36,
11,28,248,22,81,248,22,75,23,197,2,249,22,7,9,248,22,74,197,27,248,
22,75,196,90,159,38,11,89,161,38,36,11,28,248,22,81,248,22,75,23,197,
2,249,22,7,9,248,22,74,197,27,248,22,75,196,90,159,38,11,89,161,38,
36,11,28,248,22,81,248,22,75,23,197,2,249,22,7,9,248,22,74,197,27,
248,22,75,196,90,159,38,11,89,161,38,36,11,28,248,22,81,248,22,75,23,
197,2,249,22,7,9,248,22,74,197,27,248,22,75,196,90,159,38,11,89,161,
38,36,11,28,248,22,81,248,22,75,23,197,2,249,22,7,9,248,22,74,197,
27,248,22,75,196,90,159,38,11,89,161,38,36,11,28,248,22,81,248,22,75,
23,197,2,249,22,7,9,248,22,74,197,27,248,22,75,196,90,159,38,11,89,
161,38,36,11,28,248,22,81,248,22,75,23,197,2,249,22,7,9,248,22,74,
197,90,159,38,11,89,161,38,36,11,248,2,50,248,22,75,198,249,22,7,249,
22,73,248,22,74,201,196,195,249,22,7,249,22,73,248,22,74,202,196,195,249,
22,7,249,22,73,248,22,74,202,196,195,249,22,7,249,22,73,248,22,74,202,
196,195,249,22,7,249,22,73,248,22,74,202,196,195,249,22,7,249,22,73,248,
22,74,202,196,195,249,22,7,249,22,73,248,22,74,202,196,195,249,22,7,249,
22,73,248,22,74,202,196,195,249,22,7,249,22,73,248,22,74,202,196,195,249,
22,7,249,22,73,248,22,74,200,196,195,86,95,28,248,22,135,5,195,12,250,
22,176,9,2,21,6,20,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,86,94,23,193,
1,12,27,250,22,153,2,80,159,41,43,38,248,22,160,15,247,22,190,12,11,
27,28,23,194,2,193,86,94,23,194,1,27,247,22,133,2,86,94,250,22,151,
2,80,159,43,43,38,248,22,160,15,247,22,190,12,195,192,250,22,151,2,195,
199,66,97,116,116,97,99,104,251,211,197,198,199,10,28,192,250,22,175,9,11,
196,195,248,22,173,9,194,28,249,22,136,7,194,6,1,1,46,2,25,28,249,
22,136,7,194,6,2,2,46,46,62,117,112,192,32,57,88,163,8,36,37,50,
11,67,115,115,45,62,114,107,116,222,33,58,27,248,22,133,7,194,28,249,22,
188,3,194,39,28,249,22,136,7,6,3,3,46,115,115,249,22,152,7,197,249,
22,176,3,198,39,249,22,153,7,250,22,152,7,198,36,249,22,176,3,199,39,
6,4,4,46,114,107,116,193,193,28,249,22,142,9,248,22,75,23,200,2,23,
197,1,28,249,22,140,9,248,22,74,23,200,2,23,196,1,251,22,173,9,2,
21,6,28,28,99,121,99,108,101,32,105,110,32,108,111,97,100,105,110,103,32,
97,116,32,126,46,115,58,32,126,46,115,23,200,1,249,22,2,22,75,248,22,
88,249,22,73,23,206,1,23,202,1,12,12,247,192,20,13,159,80,159,40,48,
38,249,22,73,248,22,160,15,247,22,190,12,23,197,1,20,13,159,80,159,40,
40,38,250,80,159,43,41,38,249,22,27,11,80,159,45,40,38,22,179,4,23,
196,1,249,247,22,158,5,23,198,1,248,22,61,248,22,152,14,23,198,1,86,
94,28,28,248,22,148,14,23,196,2,10,248,22,143,5,23,196,2,12,28,23,
197,2,250,22,175,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,176,9,2,21,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,
71,23,196,2,249,22,140,9,248,22,74,23,198,2,2,4,11,248,22,136,5,
248,22,98,196,28,28,248,22,71,23,196,2,249,22,140,9,248,22,74,23,198,
2,66,112,108,97,110,101,116,11,86,94,28,207,12,20,13,159,80,159,37,55,
38,80,158,37,53,89,161,37,36,10,249,22,181,4,21,94,2,30,6,19,19,
112,108,97,110,101,116,47,114,101,115,111,108,118,101,114,46,114,107,116,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,201,202,80,158,42,53,86,94,23,193,
1,27,88,163,8,36,37,46,11,79,115,104,111,119,45,99,111,108,108,101,99,
116,105,111,110,45,101,114,114,223,5,33,55,27,28,248,22,58,23,198,2,27,
248,80,159,41,46,37,249,22,73,23,201,2,247,22,190,14,28,23,193,2,192,
86,94,23,193,1,90,159,38,11,89,161,38,36,11,249,80,159,44,52,37,248,
22,64,23,203,2,11,27,28,248,22,81,23,195,2,6,8,8,109,97,105,110,
46,114,107,116,249,22,153,7,23,197,2,6,4,4,46,114,107,116,27,252,80,
159,49,57,38,2,21,23,204,1,28,248,22,81,23,201,2,23,201,1,86,94,
23,201,1,248,22,74,23,201,2,28,248,22,81,23,201,2,86,94,23,200,1,
9,248,22,75,23,201,1,23,199,2,249,22,166,14,23,195,1,23,196,1,28,
248,22,130,7,23,198,2,86,94,23,194,1,27,248,80,159,41,8,26,37,23,
200,2,27,248,80,159,42,46,37,249,22,73,23,202,2,23,197,2,28,23,193,
2,192,86,94,23,193,1,90,159,38,11,89,161,38,36,11,249,80,159,45,52,
37,23,203,2,11,250,22,1,22,166,14,23,199,1,249,22,87,249,22,2,32,
0,88,163,8,36,37,44,11,9,222,33,56,23,200,1,248,22,83,248,2,57,
23,201,1,28,248,22,148,14,23,198,2,86,94,23,194,1,28,248,22,171,14,
23,198,2,248,80,159,40,8,27,37,248,22,175,14,23,199,2,248,22,83,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,140,9,248,22,74,23,200,2,2,30,27,
248,80,159,41,46,37,249,22,73,23,201,2,247,22,190,14,28,23,193,2,192,
86,94,23,193,1,90,159,39,11,89,161,38,36,11,249,80,159,45,52,37,248,
22,98,23,204,2,11,89,161,37,38,11,28,248,22,81,248,22,100,23,203,2,
28,248,22,81,23,194,2,249,22,139,15,0,8,35,114,120,34,91,46,93,34,
23,196,2,11,10,27,28,23,196,2,248,2,57,23,196,2,28,248,22,81,23,
195,2,6,8,8,109,97,105,110,46,114,107,116,28,249,22,139,15,0,8,35,
114,120,34,91,46,93,34,23,197,2,248,2,57,23,196,2,249,22,153,7,23,
197,2,6,4,4,46,114,107,116,27,28,23,197,1,86,94,23,196,1,249,22,
87,28,248,22,81,248,22,100,23,207,2,21,93,6,5,5,109,122,108,105,98,
249,22,1,22,87,249,22,2,80,159,51,8,28,37,248,22,100,23,210,2,23,
197,1,28,248,22,81,23,196,2,86,94,23,195,1,248,22,83,23,197,1,86,
94,23,196,1,23,195,1,27,252,80,159,51,57,38,2,21,23,206,1,248,22,
74,23,200,2,248,22,75,23,200,1,23,200,2,249,22,166,14,23,195,1,23,
197,1,28,249,22,140,9,248,22,74,23,200,2,64,102,105,108,101,248,80,159,
40,8,27,37,248,22,175,14,249,22,173,14,248,22,177,14,248,22,98,23,203,
2,248,80,159,44,8,26,37,23,203,2,12,86,94,28,28,248,22,148,14,23,
194,2,10,248,22,155,8,23,194,2,86,94,23,199,1,12,28,23,199,2,250,
22,175,9,67,114,101,113,117,105,114,101,249,22,178,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,74,
23,199,2,6,0,0,23,202,1,86,94,23,199,1,250,22,176,9,2,21,249,
22,178,7,6,13,13,109,111,100,117,108,101,32,112,97,116,104,126,97,28,23,
198,2,248,22,74,23,199,2,6,0,0,23,200,2,27,28,248,22,155,8,23,
195,2,249,22,160,8,23,196,2,36,249,22,175,14,248,22,176,14,23,197,2,
11,27,28,248,22,155,8,23,196,2,249,22,160,8,23,197,2,37,248,80,159,
42,58,38,23,195,2,90,159,39,11,89,161,39,36,11,28,248,22,155,8,23,
199,2,250,22,7,2,31,249,22,160,8,23,203,2,38,2,31,248,22,169,14,
23,198,2,86,95,23,195,1,23,193,1,27,28,248,22,155,8,23,200,2,249,
22,160,8,23,201,2,39,249,80,159,47,56,38,23,197,2,5,0,27,28,248,
22,155,8,23,201,2,249,22,160,8,23,202,2,40,248,22,136,5,23,200,2,
27,27,250,22,153,2,80,159,51,43,38,248,22,160,15,247,22,190,12,11,28,
23,193,2,192,86,94,23,193,1,27,247,22,133,2,86,94,250,22,151,2,80,
159,52,43,38,248,22,160,15,247,22,190,12,195,192,86,95,28,23,208,1,27,
250,22,153,2,23,197,2,197,11,28,23,193,1,12,86,95,27,27,28,248,22,
17,80,159,51,49,38,80,159,50,49,38,247,22,19,250,22,25,248,22,23,23,
197,2,80,159,53,48,38,23,196,1,27,248,22,160,15,247,22,190,12,249,22,
3,20,20,94,88,163,8,36,37,55,11,9,226,12,11,2,3,33,59,23,195,
1,23,196,1,248,28,248,22,17,80,159,50,49,38,32,0,88,163,36,37,42,
11,9,222,33,60,80,159,49,8,29,37,88,163,36,36,51,8,176,64,9,227,
13,9,8,4,3,33,61,250,22,151,2,23,197,1,197,10,12,28,28,248,22,
155,8,23,202,1,11,28,248,22,130,7,23,206,2,10,28,248,22,58,23,206,
2,10,28,248,22,71,23,206,2,249,22,140,9,248,22,74,23,208,2,2,30,
11,27,28,248,22,130,7,23,207,2,249,22,73,23,208,1,248,80,159,51,8,
26,37,23,210,1,86,94,23,207,1,249,22,73,23,208,1,247,22,190,14,27,
249,22,183,3,248,22,179,3,248,22,166,2,23,198,2,8,128,8,27,249,22,
160,8,80,159,52,45,38,23,196,2,27,28,23,194,2,248,22,169,2,23,195,
1,86,94,23,194,1,11,250,22,161,8,80,159,54,45,38,23,198,1,248,22,
168,2,249,22,73,249,22,73,23,204,1,252,22,157,8,23,217,1,23,216,1,
23,214,1,23,212,1,23,18,28,23,199,2,23,199,1,86,94,23,199,1,9,
12,193,86,96,20,18,159,11,80,158,36,53,248,80,159,37,8,25,38,249,22,
27,11,80,159,39,55,38,248,22,178,4,80,159,37,54,38,248,22,158,5,80,
159,37,37,37,248,22,181,13,80,159,37,42,37,20,18,159,11,80,158,36,53,
248,80,159,37,8,25,38,249,22,27,11,80,159,39,55,38,159,36,20,112,159,
36,16,1,11,16,0,20,26,142,2,1,2,1,29,11,11,11,11,11,10,38,
80,158,36,36,20,112,159,40,16,26,2,2,2,3,30,2,5,72,112,97,116,
104,45,115,116,114,105,110,103,63,11,30,2,5,75,112,97,116,104,45,97,100,
100,45,115,117,102,102,105,120,8,30,2,7,2,8,5,30,2,7,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,3,2,9,2,10,2,11,2,12,2,13,2,14,2,15,2,16,2,17,2,
18,2,19,2,20,2,21,30,2,22,2,8,5,30,2,5,79,112,97,116,104,
45,114,101,112,108,97,99,101,45,115,117,102,102,105,120,10,30,2,5,73,102,
105,110,100,45,99,111,108,45,102,105,108,101,3,30,2,5,76,110,111,114,109,
97,108,45,99,97,115,101,45,112,97,116,104,7,2,23,2,24,30,2,22,74,
114,101,112,97,114,97,109,101,116,101,114,105,122,101,6,16,0,16,0,36,16,
0,36,16,14,2,15,2,16,2,10,2,12,2,17,2,18,2,11,2,3,2,
9,2,2,2,13,2,14,2,19,2,21,50,11,11,39,36,11,11,16,3,2,
23,2,20,2,24,16,3,11,11,11,16,3,2,23,2,20,2,24,39,39,37,
11,11,16,0,16,0,16,0,36,36,11,11,11,16,0,16,0,16,0,36,36,
16,0,16,21,20,15,16,2,88,163,36,37,45,8,128,128,9,223,0,33,32,
80,159,36,8,29,37,20,15,16,2,88,163,8,36,37,45,8,240,0,0,1,
0,9,223,0,33,33,80,159,36,8,28,37,20,15,16,2,88,163,36,37,49,
8,240,0,0,16,0,72,112,97,116,104,45,115,115,45,62,114,107,116,223,0,
33,34,80,159,36,8,27,37,20,15,16,2,88,163,36,37,49,8,240,0,192,
0,0,67,103,101,116,45,100,105,114,223,0,33,35,80,159,36,8,26,37,20,
15,16,2,248,22,152,8,69,115,111,45,115,117,102,102,105,120,80,159,36,36,
37,20,15,16,2,88,163,36,38,8,38,8,61,2,3,223,0,33,44,80,159,
36,37,37,20,15,16,2,32,0,88,163,8,36,37,42,11,2,9,222,192,80,
159,36,42,37,20,15,16,2,247,22,136,2,80,159,36,43,37,20,15,16,2,
8,128,8,80,159,36,44,37,20,15,16,2,249,22,156,8,8,128,8,11,80,
159,36,45,37,20,15,16,2,88,163,8,36,37,50,8,128,8,2,13,223,0,
33,45,80,159,36,46,37,20,15,16,2,88,163,8,36,38,55,8,128,8,2,
14,223,0,33,46,80,159,36,47,37,20,15,16,2,247,22,69,80,159,36,48,
37,20,15,16,2,248,22,18,74,109,111,100,117,108,101,45,108,111,97,100,105,
110,103,80,159,36,49,37,20,15,16,2,11,80,158,36,50,20,15,16,2,11,
80,158,36,51,20,15,16,2,32,0,88,163,36,38,8,42,11,2,19,222,33,
52,80,159,36,52,37,20,15,16,2,11,80,158,36,53,20,15,16,2,27,11,
20,19,158,36,90,159,37,10,89,161,37,36,10,20,25,96,2,21,88,163,8,
36,37,51,8,128,2,9,224,2,1,33,53,88,163,36,39,49,11,9,223,0,
33,54,88,163,36,40,8,38,16,2,8,176,218,8,187,241,9,224,2,1,33,
62,207,80,159,36,54,37,20,15,16,2,88,163,36,36,45,8,240,66,0,14,
2,2,23,223,0,33,63,80,159,36,59,37,20,15,16,2,88,163,8,36,36,
45,8,240,0,0,10,2,2,24,223,0,33,64,80,159,36,8,24,37,96,29,
94,2,4,68,35,37,107,101,114,110,101,108,11,29,94,2,4,69,35,37,109,
105,110,45,115,116,120,11,2,5,2,22,9,9,9,36,0};
EVAL_ONE_SIZED_STR((char *)expr, 6861);
22,74,197,27,248,22,75,196,90,159,38,11,89,161,38,36,11,28,248,22,81,
248,22,75,23,197,2,249,22,7,9,248,22,74,197,90,159,38,11,89,161,38,
36,11,248,2,50,248,22,75,198,249,22,7,249,22,73,248,22,74,201,196,195,
249,22,7,249,22,73,248,22,74,202,196,195,249,22,7,249,22,73,248,22,74,
200,196,195,86,95,28,248,22,135,5,195,12,250,22,176,9,2,21,6,20,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,86,94,23,193,1,12,27,250,22,153,2,80,
159,41,43,38,248,22,160,15,247,22,190,12,11,27,28,23,194,2,193,86,94,
23,194,1,27,247,22,133,2,86,94,250,22,151,2,80,159,43,43,38,248,22,
160,15,247,22,190,12,195,192,250,22,151,2,195,199,66,97,116,116,97,99,104,
251,211,197,198,199,10,28,192,250,22,175,9,11,196,195,248,22,173,9,194,28,
249,22,136,7,194,6,1,1,46,2,25,28,249,22,136,7,194,6,2,2,46,
46,62,117,112,192,32,57,88,163,8,36,37,50,11,67,115,115,45,62,114,107,
116,222,33,58,27,248,22,133,7,194,28,249,22,188,3,194,39,28,249,22,136,
7,6,3,3,46,115,115,249,22,152,7,197,249,22,176,3,198,39,249,22,153,
7,250,22,152,7,198,36,249,22,176,3,199,39,6,4,4,46,114,107,116,193,
193,28,249,22,142,9,248,22,75,23,200,2,23,197,1,28,249,22,140,9,248,
22,74,23,200,2,23,196,1,251,22,173,9,2,21,6,28,28,99,121,99,108,
101,32,105,110,32,108,111,97,100,105,110,103,32,97,116,32,126,46,115,58,32,
126,46,115,23,200,1,249,22,2,22,75,248,22,88,249,22,73,23,206,1,23,
202,1,12,12,247,192,20,13,159,80,159,40,48,38,249,22,73,248,22,160,15,
247,22,190,12,23,197,1,20,13,159,80,159,40,40,37,250,80,159,43,41,37,
249,22,27,11,80,159,45,40,37,22,179,4,23,196,1,249,247,22,158,5,23,
198,1,248,22,61,248,22,152,14,23,198,1,86,94,28,28,248,22,148,14,23,
196,2,10,248,22,143,5,23,196,2,12,28,23,197,2,250,22,175,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,176,9,2,21,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,71,23,196,2,249,22,140,9,
248,22,74,23,198,2,2,4,11,248,22,136,5,248,22,98,196,28,28,248,22,
71,23,196,2,249,22,140,9,248,22,74,23,198,2,66,112,108,97,110,101,116,
11,86,94,28,207,12,20,13,159,80,159,37,55,37,80,158,37,53,89,161,37,
36,10,249,22,181,4,21,94,2,30,6,19,19,112,108,97,110,101,116,47,114,
101,115,111,108,118,101,114,46,114,107,116,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,201,202,80,158,42,53,86,94,23,193,1,27,88,163,8,36,37,46,
11,79,115,104,111,119,45,99,111,108,108,101,99,116,105,111,110,45,101,114,114,
223,5,33,55,27,28,248,22,58,23,198,2,27,248,80,159,41,46,39,249,22,
73,23,201,2,247,22,190,14,28,23,193,2,192,86,94,23,193,1,90,159,38,
11,89,161,38,36,11,249,80,159,44,52,39,248,22,64,23,203,2,11,27,28,
248,22,81,23,195,2,6,8,8,109,97,105,110,46,114,107,116,249,22,153,7,
23,197,2,6,4,4,46,114,107,116,27,252,80,159,49,57,39,2,21,23,204,
1,28,248,22,81,23,201,2,23,201,1,86,94,23,201,1,248,22,74,23,201,
2,28,248,22,81,23,201,2,86,94,23,200,1,9,248,22,75,23,201,1,23,
199,2,249,22,166,14,23,195,1,23,196,1,28,248,22,130,7,23,198,2,86,
94,23,194,1,27,248,80,159,41,8,26,39,23,200,2,27,248,80,159,42,46,
39,249,22,73,23,202,2,23,197,2,28,23,193,2,192,86,94,23,193,1,90,
159,38,11,89,161,38,36,11,249,80,159,45,52,39,23,203,2,11,250,22,1,
22,166,14,23,199,1,249,22,87,249,22,2,32,0,88,163,8,36,37,44,11,
9,222,33,56,23,200,1,248,22,83,248,2,57,23,201,1,28,248,22,148,14,
23,198,2,86,94,23,194,1,28,248,22,171,14,23,198,2,248,80,159,40,8,
27,39,248,22,175,14,23,199,2,248,22,83,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,140,9,248,22,74,23,200,2,2,30,27,248,80,159,41,46,39,249,22,
73,23,201,2,247,22,190,14,28,23,193,2,192,86,94,23,193,1,90,159,39,
11,89,161,38,36,11,249,80,159,45,52,39,248,22,98,23,204,2,11,89,161,
37,38,11,28,248,22,81,248,22,100,23,203,2,28,248,22,81,23,194,2,249,
22,139,15,0,8,35,114,120,34,91,46,93,34,23,196,2,11,10,27,28,23,
196,2,248,2,57,23,196,2,28,248,22,81,23,195,2,6,8,8,109,97,105,
110,46,114,107,116,28,249,22,139,15,0,8,35,114,120,34,91,46,93,34,23,
197,2,248,2,57,23,196,2,249,22,153,7,23,197,2,6,4,4,46,114,107,
116,27,28,23,197,1,86,94,23,196,1,249,22,87,28,248,22,81,248,22,100,
23,207,2,21,93,6,5,5,109,122,108,105,98,249,22,1,22,87,249,22,2,
80,159,51,8,28,39,248,22,100,23,210,2,23,197,1,28,248,22,81,23,196,
2,86,94,23,195,1,248,22,83,23,197,1,86,94,23,196,1,23,195,1,27,
252,80,159,51,57,39,2,21,23,206,1,248,22,74,23,200,2,248,22,75,23,
200,1,23,200,2,249,22,166,14,23,195,1,23,197,1,28,249,22,140,9,248,
22,74,23,200,2,64,102,105,108,101,248,80,159,40,8,27,39,248,22,175,14,
249,22,173,14,248,22,177,14,248,22,98,23,203,2,248,80,159,44,8,26,39,
23,203,2,12,86,94,28,28,248,22,148,14,23,194,2,10,248,22,155,8,23,
194,2,86,94,23,199,1,12,28,23,199,2,250,22,175,9,67,114,101,113,117,
105,114,101,249,22,178,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,74,23,199,2,6,0,0,23,202,
1,86,94,23,199,1,250,22,176,9,2,21,249,22,178,7,6,13,13,109,111,
100,117,108,101,32,112,97,116,104,126,97,28,23,198,2,248,22,74,23,199,2,
6,0,0,23,200,2,27,28,248,22,155,8,23,195,2,249,22,160,8,23,196,
2,36,249,22,175,14,248,22,176,14,23,197,2,11,27,28,248,22,155,8,23,
196,2,249,22,160,8,23,197,2,37,248,80,159,42,58,39,23,195,2,90,159,
39,11,89,161,39,36,11,28,248,22,155,8,23,199,2,250,22,7,2,31,249,
22,160,8,23,203,2,38,2,31,248,22,169,14,23,198,2,86,95,23,195,1,
23,193,1,27,28,248,22,155,8,23,200,2,249,22,160,8,23,201,2,39,249,
80,159,47,56,39,23,197,2,5,0,27,28,248,22,155,8,23,201,2,249,22,
160,8,23,202,2,40,248,22,136,5,23,200,2,27,27,250,22,153,2,80,159,
51,43,38,248,22,160,15,247,22,190,12,11,28,23,193,2,192,86,94,23,193,
1,27,247,22,133,2,86,94,250,22,151,2,80,159,52,43,38,248,22,160,15,
247,22,190,12,195,192,86,95,28,23,208,1,27,250,22,153,2,23,197,2,197,
11,28,23,193,1,12,86,95,27,27,28,248,22,17,80,159,51,49,38,80,159,
50,49,38,247,22,19,250,22,25,248,22,23,23,197,2,80,159,53,48,38,23,
196,1,27,248,22,160,15,247,22,190,12,249,22,3,20,20,94,88,163,8,36,
37,55,11,9,226,12,11,2,3,33,59,23,195,1,23,196,1,248,28,248,22,
17,80,159,50,49,38,32,0,88,163,36,37,42,11,9,222,33,60,80,159,49,
8,29,39,88,163,36,36,51,8,176,64,9,227,13,9,8,4,3,33,61,250,
22,151,2,23,197,1,197,10,12,28,28,248,22,155,8,23,202,1,11,28,248,
22,130,7,23,206,2,10,28,248,22,58,23,206,2,10,28,248,22,71,23,206,
2,249,22,140,9,248,22,74,23,208,2,2,30,11,27,28,248,22,130,7,23,
207,2,249,22,73,23,208,1,248,80,159,51,8,26,39,23,210,1,86,94,23,
207,1,249,22,73,23,208,1,247,22,190,14,27,249,22,183,3,248,22,179,3,
248,22,166,2,23,198,2,8,128,8,27,249,22,160,8,80,159,52,45,38,23,
196,2,27,28,23,194,2,248,22,169,2,23,195,1,86,94,23,194,1,11,250,
22,161,8,80,159,54,45,38,23,198,1,248,22,168,2,249,22,73,249,22,73,
23,204,1,252,22,157,8,23,217,1,23,216,1,23,214,1,23,212,1,23,18,
28,23,199,2,23,199,1,86,94,23,199,1,9,12,193,86,96,20,18,159,11,
80,158,36,53,248,80,159,37,8,25,37,249,22,27,11,80,159,39,55,37,248,
22,178,4,80,159,37,54,38,248,22,158,5,80,159,37,37,39,248,22,181,13,
80,159,37,42,39,20,18,159,11,80,158,36,53,248,80,159,37,8,25,37,249,
22,27,11,80,159,39,55,37,159,36,20,112,159,36,16,1,11,16,0,20,26,
142,2,1,2,1,29,11,11,11,11,11,10,38,80,158,36,36,20,112,159,40,
16,26,2,2,2,3,30,2,5,72,112,97,116,104,45,115,116,114,105,110,103,
63,11,30,2,5,75,112,97,116,104,45,97,100,100,45,115,117,102,102,105,120,
8,30,2,7,2,8,5,30,2,7,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,3,2,9,2,10,2,11,
2,12,2,13,2,14,2,15,2,16,2,17,2,18,2,19,2,20,2,21,30,
2,22,2,8,5,30,2,5,79,112,97,116,104,45,114,101,112,108,97,99,101,
45,115,117,102,102,105,120,10,30,2,5,73,102,105,110,100,45,99,111,108,45,
102,105,108,101,3,30,2,5,76,110,111,114,109,97,108,45,99,97,115,101,45,
112,97,116,104,7,2,23,2,24,30,2,22,74,114,101,112,97,114,97,109,101,
116,101,114,105,122,101,6,16,0,16,0,36,16,0,36,16,14,2,15,2,16,
2,10,2,12,2,17,2,18,2,11,2,3,2,9,2,2,2,13,2,14,2,
19,2,21,50,11,11,39,36,11,11,16,3,2,23,2,20,2,24,16,3,11,
11,11,16,3,2,23,2,20,2,24,39,39,37,11,11,16,0,16,0,16,0,
36,36,11,11,11,16,0,16,0,16,0,36,36,16,0,16,21,20,15,16,2,
88,163,36,37,45,8,128,128,9,223,0,33,32,80,159,36,8,29,39,20,15,
16,2,88,163,8,36,37,45,8,240,0,0,1,0,9,223,0,33,33,80,159,
36,8,28,39,20,15,16,2,88,163,36,37,49,8,240,0,0,16,0,72,112,
97,116,104,45,115,115,45,62,114,107,116,223,0,33,34,80,159,36,8,27,39,
20,15,16,2,88,163,36,37,49,8,240,0,192,0,0,67,103,101,116,45,100,
105,114,223,0,33,35,80,159,36,8,26,39,20,15,16,2,248,22,152,8,69,
115,111,45,115,117,102,102,105,120,80,159,36,36,37,20,15,16,2,88,163,36,
38,8,38,8,61,2,3,223,0,33,44,80,159,36,37,37,20,15,16,2,32,
0,88,163,8,36,37,42,11,2,9,222,192,80,159,36,42,37,20,15,16,2,
247,22,136,2,80,159,36,43,37,20,15,16,2,8,128,8,80,159,36,44,37,
20,15,16,2,249,22,156,8,8,128,8,11,80,159,36,45,37,20,15,16,2,
88,163,8,36,37,50,8,128,8,2,13,223,0,33,45,80,159,36,46,37,20,
15,16,2,88,163,8,36,38,55,8,128,8,2,14,223,0,33,46,80,159,36,
47,37,20,15,16,2,247,22,69,80,159,36,48,37,20,15,16,2,248,22,18,
74,109,111,100,117,108,101,45,108,111,97,100,105,110,103,80,159,36,49,37,20,
15,16,2,11,80,158,36,50,20,15,16,2,11,80,158,36,51,20,15,16,2,
32,0,88,163,36,38,8,25,11,2,19,222,33,52,80,159,36,52,37,20,15,
16,2,11,80,158,36,53,20,15,16,2,27,11,20,19,158,36,90,159,37,10,
89,161,37,36,10,20,25,96,2,21,88,163,8,36,37,51,8,128,2,9,224,
2,1,33,53,88,163,36,39,49,11,9,223,0,33,54,88,163,36,40,8,38,
16,2,8,176,218,8,187,241,9,224,2,1,33,62,207,80,159,36,54,37,20,
15,16,2,88,163,36,36,45,8,240,66,0,14,2,2,23,223,0,33,63,80,
159,36,59,37,20,15,16,2,88,163,8,36,36,45,8,240,0,0,10,2,2,
24,223,0,33,64,80,159,36,8,24,37,96,29,94,2,4,68,35,37,107,101,
114,110,101,108,11,29,94,2,4,69,35,37,109,105,110,45,115,116,120,11,2,
5,2,22,9,9,9,36,0};
EVAL_ONE_SIZED_STR((char *)expr, 6244);
}
{
SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,53,46,49,46,50,46,52,0,0,0,0,0,0,0,0,0,0,0,
SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,53,46,49,46,51,46,50,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,11,0,0,0,1,0,0,10,0,16,0,29,
0,44,0,58,0,78,0,90,0,104,0,118,0,170,0,0,0,97,1,0,0,
69,35,37,98,117,105,108,116,105,110,65,113,117,111,116,101,29,94,2,2,67,
@ -958,7 +837,7 @@
107,11,29,94,2,2,68,35,37,112,97,114,97,109,122,11,29,94,2,2,74,
35,37,112,108,97,99,101,45,115,116,114,117,99,116,11,29,94,2,2,66,35,
37,98,111,111,116,11,29,94,2,2,68,35,37,101,120,112,111,98,115,11,29,
94,2,2,68,35,37,107,101,114,110,101,108,11,97,36,11,8,240,0,77,0,
94,2,2,68,35,37,107,101,114,110,101,108,11,97,36,11,8,240,204,77,0,
0,100,159,2,3,36,36,159,2,4,36,36,159,2,5,36,36,159,2,6,36,
36,159,2,7,36,36,159,2,8,36,36,159,2,9,36,36,159,2,9,36,36,
16,0,159,36,20,112,159,36,16,1,11,16,0,20,26,142,2,1,2,1,29,

View File

@ -1708,7 +1708,7 @@ define_execute_with_dynamic_state(Scheme_Object *vec, int delta, int defmacro,
scheme_set_global_bucket("define-values", b, values[i], 1);
scheme_shadow(scheme_get_bucket_home(b), (Scheme_Object *)b->key, 1);
if (SCHEME_TOPLEVEL_FLAGS(var) & SCHEME_TOPLEVEL_CONST) {
if (SCHEME_TOPLEVEL_FLAGS(var) & SCHEME_TOPLEVEL_SEAL) {
((Scheme_Bucket_With_Flags *)b)->flags |= GLOB_IS_IMMUTATED;
}
}
@ -1740,7 +1740,7 @@ define_execute_with_dynamic_state(Scheme_Object *vec, int delta, int defmacro,
scheme_set_global_bucket("define-values", b, vals, 1);
scheme_shadow(scheme_get_bucket_home(b), (Scheme_Object *)b->key, 1);
if (SCHEME_TOPLEVEL_FLAGS(var) & SCHEME_TOPLEVEL_CONST) {
if (SCHEME_TOPLEVEL_FLAGS(var) & SCHEME_TOPLEVEL_SEAL) {
int flags = GLOB_IS_IMMUTATED;
if (SCHEME_PROCP(vals_expr)
|| SAME_TYPE(SCHEME_TYPE(vals_expr), scheme_unclosed_procedure_type)

View File

@ -504,7 +504,7 @@ int scheme_is_noncm(Scheme_Object *a, mz_jit_state *jitter, int depth, int stack
if (depth
&& jitter->nc
&& SAME_TYPE(SCHEME_TYPE(a), scheme_toplevel_type)
&& (SCHEME_TOPLEVEL_FLAGS(a) & SCHEME_TOPLEVEL_CONST)) {
&& ((SCHEME_TOPLEVEL_FLAGS(a) & SCHEME_TOPLEVEL_FLAGS_MASK) >= SCHEME_TOPLEVEL_CONST)) {
Scheme_Object *p;
p = scheme_extract_global(a, jitter->nc);
p = ((Scheme_Bucket *)p)->val;
@ -722,7 +722,7 @@ static int is_a_procedure(Scheme_Object *v, mz_jit_state *jitter)
int flags;
return scheme_mz_is_closure(jitter, SCHEME_LOCAL_POS(v), -1, &flags);
} else if (t == scheme_toplevel_type) {
if (SCHEME_TOPLEVEL_FLAGS(v) & SCHEME_TOPLEVEL_CONST) {
if ((SCHEME_TOPLEVEL_FLAGS(v) & SCHEME_TOPLEVEL_FLAGS_MASK) >= SCHEME_TOPLEVEL_CONST) {
if (jitter->nc) {
Scheme_Object *p;
@ -755,18 +755,26 @@ int scheme_ok_to_delay_local(Scheme_Object *obj)
return 0;
}
int scheme_can_delay_and_avoids_r1_r2(Scheme_Object *obj)
{
Scheme_Type t = SCHEME_TYPE(obj);
if (SAME_TYPE(t, scheme_local_type) && scheme_ok_to_delay_local(obj)) {
return 1;
} else
return (t >= _scheme_compiled_values_types_);
}
int scheme_can_delay_and_avoids_r1(Scheme_Object *obj)
{
Scheme_Type t = SCHEME_TYPE(obj);
if (SAME_TYPE(t, scheme_toplevel_type)) {
return ((SCHEME_TOPLEVEL_FLAGS(obj) & SCHEME_TOPLEVEL_CONST)
return (((SCHEME_TOPLEVEL_FLAGS(obj) & SCHEME_TOPLEVEL_FLAGS_MASK) >= SCHEME_TOPLEVEL_FIXED)
? 1
: 0);
} else if (SAME_TYPE(t, scheme_local_type) && scheme_ok_to_delay_local(obj)) {
return 1;
} else
return (t >= _scheme_compiled_values_types_);
return scheme_can_delay_and_avoids_r1_r2(obj);
}
int scheme_is_constant_and_avoids_r1(Scheme_Object *obj)
@ -774,7 +782,7 @@ int scheme_is_constant_and_avoids_r1(Scheme_Object *obj)
Scheme_Type t = SCHEME_TYPE(obj);
if (SAME_TYPE(t, scheme_toplevel_type)) {
return ((SCHEME_TOPLEVEL_FLAGS(obj) & SCHEME_TOPLEVEL_CONST)
return (((SCHEME_TOPLEVEL_FLAGS(obj) & SCHEME_TOPLEVEL_FLAGS_MASK) >= SCHEME_TOPLEVEL_FIXED)
? 1
: 0);
} else if (SAME_TYPE(t, scheme_local_type) && scheme_ok_to_move_local(obj)) {
@ -1813,8 +1821,7 @@ int scheme_generate(Scheme_Object *obj, mz_jit_state *jitter, int is_tail, int w
{
int can_fail;
/* Other parts of the JIT rely on this code not modifying R1 */
can_fail = !(SCHEME_TOPLEVEL_FLAGS(obj)
& (SCHEME_TOPLEVEL_CONST | SCHEME_TOPLEVEL_READY));
can_fail = ((SCHEME_TOPLEVEL_FLAGS(obj) & SCHEME_TOPLEVEL_FLAGS_MASK) < SCHEME_TOPLEVEL_READY);
if (!can_fail && result_ignored) {
/* skip */
} else {

View File

@ -1243,6 +1243,7 @@ void scheme_add_branch_false_movi(Branch_Info *for_branch, jit_insn *ref);
int scheme_ok_to_move_local(Scheme_Object *obj);
int scheme_ok_to_delay_local(Scheme_Object *obj);
int scheme_can_delay_and_avoids_r1(Scheme_Object *obj);
int scheme_can_delay_and_avoids_r1_r2(Scheme_Object *obj);
int scheme_is_constant_and_avoids_r1(Scheme_Object *obj);
int scheme_is_relatively_constant_and_avoids_r1_maybe_fp(Scheme_Object *obj, Scheme_Object *wrt,
int fp_ok);

View File

@ -1399,11 +1399,12 @@ int scheme_generate_app(Scheme_App_Rec *app, Scheme_Object **alt_rands, int num_
}
}
} else if (t == scheme_toplevel_type) {
if (SCHEME_TOPLEVEL_FLAGS(rator) & SCHEME_TOPLEVEL_CONST) {
if (0 && (SCHEME_TOPLEVEL_FLAGS(rator) & SCHEME_TOPLEVEL_FLAGS_MASK) >= SCHEME_TOPLEVEL_FIXED) {
/* We can re-order evaluation of the rator. */
reorder_ok = 1;
if (jitter->nc) {
if (jitter->nc && 0
&& ((SCHEME_TOPLEVEL_FLAGS(rator) & SCHEME_TOPLEVEL_FLAGS_MASK) >= SCHEME_TOPLEVEL_CONST)) {
Scheme_Object *p;
p = scheme_extract_global(rator, jitter->nc);

View File

@ -2891,7 +2891,7 @@ int scheme_generate_inlined_nary(mz_jit_state *jitter, Scheme_App_Rec *app, int
LOG_IT(("inlined vector-set!\n"));
if (scheme_can_delay_and_avoids_r1(app->args[1]))
if (scheme_can_delay_and_avoids_r1_r2(app->args[1]))
can_delay_vec = 1;
else
can_delay_vec = 0;

View File

@ -3430,6 +3430,19 @@ static Scheme_Module *module_load(Scheme_Object *name, Scheme_Env *env, const ch
return m;
}
static int is_procedure_expression(Scheme_Object *e)
{
Scheme_Type t;
if (SCHEME_PROCP(e))
return 1;
t = SCHEME_TYPE(e);
return ((t == scheme_unclosed_procedure_type)
|| (t == scheme_case_lambda_sequence_type));
}
static void setup_accessible_table(Scheme_Module *m)
{
if (!m->accessible) {
@ -3484,7 +3497,7 @@ static void setup_accessible_table(Scheme_Module *m)
if (SAME_TYPE(SCHEME_TYPE(form), scheme_define_values_type)) {
for (k = SCHEME_VEC_SIZE(form); k-- > 1; ) {
tl = SCHEME_VEC_ELS(form)[k];
if (SCHEME_TOPLEVEL_FLAGS(tl) & SCHEME_TOPLEVEL_CONST) {
if (SCHEME_TOPLEVEL_FLAGS(tl) & SCHEME_TOPLEVEL_SEAL) {
int pos = SCHEME_TOPLEVEL_POS(tl);
if (pos < m->prefix->num_toplevels) {
tl = m->prefix->toplevels[pos];
@ -3496,9 +3509,12 @@ static void setup_accessible_table(Scheme_Module *m)
&& scheme_compiled_duplicate_ok(SCHEME_VEC_ELS(form)[0], 1)) {
/* record simple constant from cross-module propagation: */
v = scheme_make_pair(v, SCHEME_VEC_ELS(form)[0]);
} else if (is_procedure_expression(SCHEME_VEC_ELS(form)[0])) {
/* record that it's constant across all instantiations: */
v = scheme_make_pair(v, scheme_constant_key);
} else {
/* record simply that it's constant: */
v = scheme_box(v);
/* record that it's fixed for any given instantiations: */
v = scheme_make_pair(v, scheme_fixed_key);
}
scheme_hash_set(ht, tl, v);
} else
@ -3715,10 +3731,7 @@ Scheme_Object *scheme_check_accessible_in_module(Scheme_Env *env, Scheme_Object
pos = NULL;
if (pos) {
if (SCHEME_BOXP(pos)) {
if (_is_constant) *_is_constant = scheme_void_proc; /* a hack to indicated "unknown constant" */
pos = SCHEME_BOX_VAL(pos);
} else if (SCHEME_PAIRP(pos)) {
if (SCHEME_PAIRP(pos)) {
if (_is_constant) *_is_constant = SCHEME_CDR(pos);
pos = SCHEME_CAR(pos);
}

View File

@ -231,8 +231,7 @@ int scheme_omittable_expr(Scheme_Object *o, int vals, int fuel, int resolved,
if (vtype == scheme_toplevel_type) {
note_match(1, vals, warn_info);
if (resolved && ((vals == 1) || (vals < 0))) {
if (SCHEME_TOPLEVEL_FLAGS(o)
& (SCHEME_TOPLEVEL_CONST | SCHEME_TOPLEVEL_READY))
if (SCHEME_TOPLEVEL_FLAGS(o) & SCHEME_TOPLEVEL_FLAGS_MASK)
return 1;
else
return 0;
@ -242,8 +241,7 @@ int scheme_omittable_expr(Scheme_Object *o, int vals, int fuel, int resolved,
if (vtype == scheme_compiled_toplevel_type) {
note_match(1, vals, warn_info);
if ((vals == 1) || (vals < 0)) {
if (SCHEME_TOPLEVEL_FLAGS(o)
& (SCHEME_TOPLEVEL_CONST | SCHEME_TOPLEVEL_READY))
if ((SCHEME_TOPLEVEL_FLAGS(o) & SCHEME_TOPLEVEL_FLAGS_MASK) >= SCHEME_TOPLEVEL_READY)
return 1;
else
return 0;
@ -3158,7 +3156,7 @@ int scheme_compiled_propagate_ok(Scheme_Object *value, Optimize_Info *info)
if (SAME_TYPE(SCHEME_TYPE(value), scheme_compiled_toplevel_type)) {
if (SCHEME_TOPLEVEL_FLAGS(value) & SCHEME_TOPLEVEL_CONST)
if (SCHEME_TOPLEVEL_FLAGS(value) >= SCHEME_TOPLEVEL_FIXED)
return 1;
if (info->top_level_consts) {
int pos;
@ -4513,7 +4511,7 @@ module_optimize(Scheme_Object *data, Optimize_Info *info, int context)
Scheme_Object *e, *vars, *old_context;
int start_simltaneous = 0, i_m, cnt;
Scheme_Object *cl_first = NULL, *cl_last = NULL;
Scheme_Hash_Table *consts = NULL, *ready_table = NULL, *re_consts = NULL;
Scheme_Hash_Table *consts = NULL, *fixed_table = NULL, *re_consts = NULL;
int cont, next_pos_ready = -1, inline_fuel, is_proc_def;
old_context = info->context;
@ -4650,14 +4648,15 @@ module_optimize(Scheme_Object *data, Optimize_Info *info, int context)
scheme_hash_set(re_consts, scheme_make_integer(i_m),
scheme_make_integer(pos));
} else {
/* At least mark it as ready */
if (!ready_table) {
ready_table = scheme_make_hash_table(SCHEME_hash_ptr);
/* At least mark it as fixed */
if (!fixed_table) {
fixed_table = scheme_make_hash_table(SCHEME_hash_ptr);
if (!consts)
consts = scheme_make_hash_table(SCHEME_hash_ptr);
scheme_hash_set(consts, scheme_false, (Scheme_Object *)ready_table);
scheme_hash_set(consts, scheme_false, (Scheme_Object *)fixed_table);
}
scheme_hash_set(ready_table, scheme_make_integer(tl->position), scheme_true);
scheme_hash_set(fixed_table, scheme_make_integer(tl->position), scheme_true);
}
}
} else {
@ -4670,7 +4669,7 @@ module_optimize(Scheme_Object *data, Optimize_Info *info, int context)
for (l = vars; !SCHEME_NULLP(l); l = SCHEME_CDR(l)) {
a = SCHEME_CAR(l);
/* Test for ISCONST to indicate no set!: */
/* Test for set!: */
if (!(SCHEME_TOPLEVEL_FLAGS(a) & SCHEME_TOPLEVEL_MUTATED)) {
pos = SCHEME_TOPLEVEL_POS(a);
@ -4794,13 +4793,13 @@ module_optimize(Scheme_Object *data, Optimize_Info *info, int context)
}
if (next_pos_ready > -1) {
if (!ready_table) {
ready_table = scheme_make_hash_table(SCHEME_hash_ptr);
if (!fixed_table) {
fixed_table = scheme_make_hash_table(SCHEME_hash_ptr);
if (!consts)
consts = scheme_make_hash_table(SCHEME_hash_ptr);
scheme_hash_set(consts, scheme_false, (Scheme_Object *)ready_table);
scheme_hash_set(consts, scheme_false, (Scheme_Object *)fixed_table);
}
scheme_hash_set(ready_table, scheme_make_integer(next_pos_ready), scheme_true);
scheme_hash_set(fixed_table, scheme_make_integer(next_pos_ready), scheme_true);
next_pos_ready = -1;
}
}
@ -4979,9 +4978,9 @@ Scheme_Object *scheme_optimize_expr(Scheme_Object *expr, Optimize_Info *info, in
c = scheme_hash_get((Scheme_Hash_Table *)c, scheme_make_integer(pos));
if (c) {
/* We can't inline, but mark the top level as ready,
so we can avoid null checks in JITed code: */
expr = scheme_toplevel_to_flagged_toplevel(expr, SCHEME_TOPLEVEL_READY);
/* We can't inline, but mark the top level as ready and fixed,
so we can avoid null checks in JITed code, etc: */
expr = scheme_toplevel_to_flagged_toplevel(expr, SCHEME_TOPLEVEL_FIXED);
}
}
if (!c)

View File

@ -578,14 +578,14 @@ define_values_resolve(Scheme_Object *data, Resolve_Info *rslv)
/* If this is a module-level definition: for each variable, if the
defined variable doesn't have SCHEME_TOPLEVEL_MUTATED, then
resolve to a top-level reference with SCHEME_TOPLEVEL_CONST, so
resolve to a top-level reference with SCHEME_TOPLEVEL_SEAL, so
that we know to set GLOS_IS_IMMUTATED at run time. */
for (l = vars; !SCHEME_NULLP(l); l = SCHEME_CDR(l)) {
a = SCHEME_CAR(l);
if (rslv->in_module
&& rslv->enforce_const
&& (!(SCHEME_TOPLEVEL_FLAGS(a) & SCHEME_TOPLEVEL_MUTATED))) {
a = scheme_toplevel_to_flagged_toplevel(a, SCHEME_TOPLEVEL_CONST);
a = scheme_toplevel_to_flagged_toplevel(a, SCHEME_TOPLEVEL_SEAL);
}
a = resolve_toplevel(rslv, a, 0);
SCHEME_CAR(l) = a;
@ -795,7 +795,8 @@ static int is_lifted_reference(Scheme_Object *v)
return 1;
return (SAME_TYPE(SCHEME_TYPE(v), scheme_toplevel_type)
&& (SCHEME_TOPLEVEL_FLAGS(v) & SCHEME_TOPLEVEL_CONST));
&& ((SCHEME_TOPLEVEL_FLAGS(v) & SCHEME_TOPLEVEL_FLAGS_MASK)
>= SCHEME_TOPLEVEL_CONST));
}
static int is_closed_reference(Scheme_Object *v)
@ -2877,7 +2878,7 @@ static int resolve_quote_syntax_pos(Resolve_Info *info)
return info->prefix->num_toplevels;
}
static Scheme_Object *resolve_toplevel(Resolve_Info *info, Scheme_Object *expr, int keep_ready)
static Scheme_Object *resolve_toplevel(Resolve_Info *info, Scheme_Object *expr, int as_reference)
{
int skip, pos;
@ -2890,10 +2891,7 @@ static Scheme_Object *resolve_toplevel(Resolve_Info *info, Scheme_Object *expr,
return scheme_make_toplevel(skip + SCHEME_TOPLEVEL_DEPTH(expr), /* depth is 0 (normal) or 1 (exp-time) */
pos,
1,
SCHEME_TOPLEVEL_FLAGS(expr) & (SCHEME_TOPLEVEL_CONST
| (keep_ready
? SCHEME_TOPLEVEL_READY
: 0)));
SCHEME_TOPLEVEL_FLAGS(expr) & SCHEME_TOPLEVEL_FLAGS_MASK);
}
static Scheme_Object *shift_toplevel(Scheme_Object *expr, int delta)

View File

@ -420,6 +420,10 @@ extern Scheme_Object *scheme_no_arity_property;
extern Scheme_Object *scheme_reduced_procedure_struct;
/* recycle some constants that can't appear in code: */
#define scheme_constant_key scheme_stack_dump_key
#define scheme_fixed_key scheme_default_prompt_tag
/*========================================================================*/
/* thread state and maintenance */
/*========================================================================*/
@ -1222,8 +1226,28 @@ typedef struct Scheme_Toplevel {
#define SCHEME_TOPLEVEL_POS(obj) (((Scheme_Toplevel *)(obj))->position)
#define SCHEME_TOPLEVEL_FLAGS(obj) MZ_OPT_HASH_KEY(&((Scheme_Toplevel *)(obj))->iso)
#define SCHEME_TOPLEVEL_CONST 0x1
#define SCHEME_TOPLEVEL_READY 0x2
/* The MASK pull out one of the levels for reference (CONST,
FIXED, READY, or UNKNOWN) or one of the two levels for a
reference (SEAL or not) */
#define SCHEME_TOPLEVEL_FLAGS_MASK 0x3
/* CONST means that a toplevel is READY and always has the same value,
even for different instantiations or phases. */
#define SCHEME_TOPLEVEL_CONST 3
/* FIXED is READY plus a promise of no mutation, but the value is
not necessarily constant across different instantations or phases. */
#define SCHEME_TOPLEVEL_FIXED 2
/* READY means that the toplevel will have a value (i.e., the variable
is defined), though it might be mutated later */
#define SCHEME_TOPLEVEL_READY 1
/* UNKNOWN means that the variable might not even be defined by the time the
toplevel reference is executed */
#define SCHEME_TOPLEVEL_UNKNOWN 0
#define SCHEME_TOPLEVEL_SEAL 0x1
/* MUTATED is used on the toplevel for a definition, and only until
after resolving; it records whether a toplevel is `set!'ed */
#define SCHEME_TOPLEVEL_MUTATED 0x4
typedef struct Scheme_Quote_Syntax {
@ -2374,7 +2398,6 @@ Scheme_Object *scheme_make_toplevel(mzshort depth, int position, int resolved, i
#define MAX_CONST_TOPLEVEL_DEPTH 16
#define MAX_CONST_TOPLEVEL_POS 16
#define SCHEME_TOPLEVEL_FLAGS_MASK 0x3
#define ASSERT_IS_VARIABLE_BUCKET(b) /* if (((Scheme_Object *)b)->type != scheme_variable_type) abort() */
@ -3046,13 +3069,17 @@ typedef struct Scheme_Modidx {
} Scheme_Modidx;
typedef struct Module_Variable {
Scheme_Inclhash_Object iso; /* 0x1 flag => constant */
Scheme_Inclhash_Object iso; /* see SCHEME_MODVAR_... flags */
Scheme_Object *modidx;
Scheme_Object *sym;
Scheme_Object *insp; /* for checking protected/unexported access */
int pos, mod_phase;
} Module_Variable;
/* See SCHEME_TOPLEVEL_...: */
#define SCHEME_MODVAR_CONST 0x1
#define SCHEME_MODVAR_FIXED 0x2
#define SCHEME_MODVAR_FLAGS(pr) MZ_OPT_HASH_KEY(&((Module_Variable *)pr)->iso)
#define SCHEME_VARREF_FLAGS(pr) MZ_OPT_HASH_KEY(&((Scheme_Simple_Object *)pr)->iso)

View File

@ -13,12 +13,12 @@
consistently.)
*/
#define MZSCHEME_VERSION "5.1.3.1"
#define MZSCHEME_VERSION "5.1.3.2"
#define MZSCHEME_VERSION_X 5
#define MZSCHEME_VERSION_Y 1
#define MZSCHEME_VERSION_Z 3
#define MZSCHEME_VERSION_W 1
#define MZSCHEME_VERSION_W 2
#define MZSCHEME_VERSION_MAJOR ((MZSCHEME_VERSION_X * 100) + MZSCHEME_VERSION_Y)
#define MZSCHEME_VERSION_MINOR ((MZSCHEME_VERSION_Z * 1000) + MZSCHEME_VERSION_W)