diff --git a/collects/compiler/decompile.rkt b/collects/compiler/decompile.rkt index ca9b60c7a5..903e6843ef 100644 --- a/collects/compiler/decompile.rkt +++ b/collects/compiler/decompile.rkt @@ -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?)) diff --git a/collects/compiler/zo-marshal.rkt b/collects/compiler/zo-marshal.rkt index 124b01c48c..e435a97080 100644 --- a/collects/compiler/zo-marshal.rkt +++ b/collects/compiler/zo-marshal.rkt @@ -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)) diff --git a/collects/compiler/zo-parse.rkt b/collects/compiler/zo-parse.rkt index d1aaf68478..3c559ec62b 100644 --- a/collects/compiler/zo-parse.rkt +++ b/collects/compiler/zo-parse.rkt @@ -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)))] diff --git a/collects/scribblings/raco/zo-struct.scrbl b/collects/scribblings/raco/zo-struct.scrbl index 23236a9a02..1840367273 100644 --- a/collects/scribblings/raco/zo-struct.scrbl +++ b/collects/scribblings/raco/zo-struct.scrbl @@ -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?] diff --git a/src/racket/src/compenv.c b/src/racket/src/compenv.c index d5a12b9fc7..8ca9d63e17 100644 --- a/src/racket/src/compenv.c +++ b/src/racket/src/compenv.c @@ -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); diff --git a/src/racket/src/cstartup.inc b/src/racket/src/cstartup.inc index 8fd155c375..3fce116853 100644 --- a/src/racket/src/cstartup.inc +++ b/src/racket/src/cstartup.inc @@ -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, diff --git a/src/racket/src/eval.c b/src/racket/src/eval.c index 14363fc5fd..aa59ea2e20 100644 --- a/src/racket/src/eval.c +++ b/src/racket/src/eval.c @@ -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) diff --git a/src/racket/src/jit.c b/src/racket/src/jit.c index c6221c3518..77ae9e551c 100644 --- a/src/racket/src/jit.c +++ b/src/racket/src/jit.c @@ -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 { diff --git a/src/racket/src/jit.h b/src/racket/src/jit.h index a0c8162898..32579f9084 100644 --- a/src/racket/src/jit.h +++ b/src/racket/src/jit.h @@ -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); diff --git a/src/racket/src/jitcall.c b/src/racket/src/jitcall.c index 42f84d8748..d2321f1756 100644 --- a/src/racket/src/jitcall.c +++ b/src/racket/src/jitcall.c @@ -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); diff --git a/src/racket/src/jitinline.c b/src/racket/src/jitinline.c index eee5d6201e..6e2730bc7f 100644 --- a/src/racket/src/jitinline.c +++ b/src/racket/src/jitinline.c @@ -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; diff --git a/src/racket/src/module.c b/src/racket/src/module.c index d600718535..363d0d9e9f 100644 --- a/src/racket/src/module.c +++ b/src/racket/src/module.c @@ -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); } diff --git a/src/racket/src/optimize.c b/src/racket/src/optimize.c index 2e3e698588..511df50a46 100644 --- a/src/racket/src/optimize.c +++ b/src/racket/src/optimize.c @@ -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) diff --git a/src/racket/src/resolve.c b/src/racket/src/resolve.c index b26d96e62f..644912cc5d 100644 --- a/src/racket/src/resolve.c +++ b/src/racket/src/resolve.c @@ -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) diff --git a/src/racket/src/schpriv.h b/src/racket/src/schpriv.h index b8c7af9c0e..b6bd7b94fd 100644 --- a/src/racket/src/schpriv.h +++ b/src/racket/src/schpriv.h @@ -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) diff --git a/src/racket/src/schvers.h b/src/racket/src/schvers.h index f66e9d5d80..b5cfd8cdc5 100644 --- a/src/racket/src/schvers.h +++ b/src/racket/src/schvers.h @@ -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)