diff --git a/pkgs/base/info.rkt b/pkgs/base/info.rkt index 2f61c6306d..3aa51238e1 100644 --- a/pkgs/base/info.rkt +++ b/pkgs/base/info.rkt @@ -12,7 +12,7 @@ (define collection 'multi) -(define version "6.2.900.14") +(define version "6.2.900.15") (define deps `("racket-lib" ["racket" #:version ,version])) diff --git a/pkgs/racket-doc/scribblings/raco/zo-struct.scrbl b/pkgs/racket-doc/scribblings/raco/zo-struct.scrbl index 7cd3875368..bc92d31f64 100644 --- a/pkgs/racket-doc/scribblings/raco/zo-struct.scrbl +++ b/pkgs/racket-doc/scribblings/raco/zo-struct.scrbl @@ -36,15 +36,28 @@ structures that are produced by @racket[zo-parse] and consumed by @defstruct+[(compilation-top zo) ([max-let-depth exact-nonnegative-integer?] + [binding-namess (hash/c exact-nonnegative-integer? + (hash/c symbol? identifier?))] [prefix prefix?] [code (or/c form? any/c)])]{ - Wraps compiled code. The @racket[max-let-depth] field indicates the + Wraps compiled code. + + The @racket[max-let-depth] field indicates the maximum stack depth that @racket[code] creates (not counting the - @racket[prefix] array). The @racket[prefix] field describes top-level - variables, module-level variables, and quoted syntax-objects accessed - by @racket[code]. The @racket[code] field contains executable code; - it is normally a @racket[form], but a literal value is represented as - itself.} + @racket[prefix] array). + + The @racket[binding-namess] field provides a per-phase mapping from + symbols that appear in @racket[prefix] for top-level + @racket[def-values] forms and in top-level @racket[def-syntaxes] + forms. Each symbol is mapped to an identifier that will be bound + (after introduction into the namespace) by the definition. + + The @racket[prefix] field describes top-level variables, + module-level variables, and quoted syntax-objects accessed by + @racket[code]. + + The @racket[code] field contains executable code; it is normally a + @racket[form], but a literal value is represented as itself.} @defstruct+[(prefix zo) ([num-lifts exact-nonnegative-integer?] diff --git a/pkgs/racket-test-core/tests/racket/modprot.rktl b/pkgs/racket-test-core/tests/racket/modprot.rktl index 1a132cba8b..fa5cfe5655 100644 --- a/pkgs/racket-test-core/tests/racket/modprot.rktl +++ b/pkgs/racket-test-core/tests/racket/modprot.rktl @@ -220,6 +220,7 @@ (zo-marshal (compilation-top 10 + #hash() (prefix 0 (list 'dummy) null diff --git a/pkgs/racket-test-core/tests/racket/namespac.rktl b/pkgs/racket-test-core/tests/racket/namespac.rktl index ce61775ebe..7852725e31 100644 --- a/pkgs/racket-test-core/tests/racket/namespac.rktl +++ b/pkgs/racket-test-core/tests/racket/namespac.rktl @@ -326,47 +326,82 @@ ;; be transferred to another namespace (let () - ;; transfer a `require` - (define c - (parameterize ([current-namespace (make-base-namespace)]) - (compile '(require racket/base)))) - (parameterize ([current-namespace (make-base-empty-namespace)]) - (test (void) 'eval (eval c)) - (test add1 eval 'add1))) + (define (check-namespace-transfer compile-wrap) + (let () + ;; transfer a `require` + (define c + (parameterize ([current-namespace (make-base-namespace)]) + (compile-wrap (compile '(require racket/base))))) + (parameterize ([current-namespace (make-base-empty-namespace)]) + (test (void) 'eval (eval c)) + (test add1 eval 'add1))) -(let () - ;; transfer a definition, reference is visible, original - ;; namespace is unchanged - (define-values (c get) - (parameterize ([current-namespace (make-base-namespace)]) - (define c (compile '(define one 1))) - (values - c - (eval '(lambda () one))))) - (parameterize ([current-namespace (make-base-empty-namespace)]) - (test (void) 'eval (eval c)) - (test 1 eval 'one) - (err/rt-test (get) exn:fail:contract:variable?))) + (let () + ;; transfer a definition, reference is visible, original + ;; namespace is unchanged + (define-values (c get) + (parameterize ([current-namespace (make-base-namespace)]) + (define c (compile-wrap (compile '(define one 1)))) + (values + c + (eval '(lambda () one))))) + (parameterize ([current-namespace (make-base-empty-namespace)]) + (test (void) 'eval (eval c)) + (test 1 eval 'one) + (err/rt-test (get) exn:fail:contract:variable?))) -(let () - ;; transfer a definition of a macro-introduced variable, and - ;; check access via a syntax object that is compiled at the same time: - (define-values (c get) - (parameterize ([current-namespace (make-base-namespace)]) - (eval '(define-syntax-rule (m id) - (begin - (define one 1) - (define id (quote-syntax one)) - one))) - (define c (compile '(m id))) - (values - c - (eval '(lambda () one))))) - (parameterize ([current-namespace (make-base-empty-namespace)]) - (test 1 'eval (eval c)) - (err/rt-test (eval 'one) exn:fail:syntax?) - (test 1 eval (eval 'id)) - (err/rt-test (get) exn:fail:contract:variable?))) + (let () + ;; transfer a definition of a macro-introduced variable, and + ;; check access via a syntax object that is compiled at the same time: + (define-values (c get) + (parameterize ([current-namespace (make-base-namespace)]) + (eval '(define-syntax-rule (m id) + (begin + (define one 1) + (define id (quote-syntax one)) + one))) + (define c (compile-wrap (compile '(m id)))) + (values + c + (eval '(lambda () one))))) + (parameterize ([current-namespace (make-base-empty-namespace)]) + (test 1 'eval (eval c)) + (err/rt-test (eval 'one) exn:fail:syntax?) + (test #t identifier? (eval 'id)) + (test 1 eval (eval 'id)) + (err/rt-test (get) exn:fail:contract:variable?)))) + (check-namespace-transfer values) + (check-namespace-transfer (lambda (c) + (define o (open-output-bytes)) + (write c o) + (parameterize ([read-accept-compiled #t]) + (read (open-input-bytes (get-output-bytes o))))))) + +;; ---------------------------------------- +;; Make sure compilation doesn't bind in the current namespace + +(parameterize ([current-namespace (make-base-namespace)]) + (eval '(define-syntax-rule (m2 c-id r-id) + (begin + (require (rename-in racket/base [+ plus])) + (define (c-id) (compile #'(define plus 1))) + (define (r-id) (eval #'plus))))) + (eval '(m2 def ref)) + (test + eval '(ref)) + (eval '(def)) + (test + eval '(ref)) + (eval (eval '(def))) + (test 1 eval '(ref))) + +#| +(define-syntax-rule (m3 c-id) + (begin + (define-syntax plus #f) + (define (c-id) (compile #'(define plus plus))))) + +(m3 cdef) +(cdef) +|# ;; ---------------------------------------- diff --git a/pkgs/racket-test-core/tests/racket/optimize.rktl b/pkgs/racket-test-core/tests/racket/optimize.rktl index 7c930886e5..765556b6c2 100644 --- a/pkgs/racket-test-core/tests/racket/optimize.rktl +++ b/pkgs/racket-test-core/tests/racket/optimize.rktl @@ -4234,8 +4234,8 @@ (write-bytes (zo-marshal (match m - [(compilation-top max-let-depth prefix code) - (compilation-top max-let-depth prefix + [(compilation-top max-let-depth binding-namess prefix code) + (compilation-top max-let-depth binding-namess prefix (let ([body (mod-body code)]) (struct-copy mod code [body (match body diff --git a/pkgs/racket-test-core/tests/racket/stx.rktl b/pkgs/racket-test-core/tests/racket/stx.rktl index 474c6d4faf..7a5abe1e3c 100644 --- a/pkgs/racket-test-core/tests/racket/stx.rktl +++ b/pkgs/racket-test-core/tests/racket/stx.rktl @@ -1282,7 +1282,7 @@ (let-syntax ([z (lambda (stx) #`#,(@@foo 3))]) z)) -(test (void) eval (expand #'(begin-for-syntax (define @@zoo (@@foo 2))))) +(test (void) eval-syntax (expand #'(begin-for-syntax (define @@zoo (@@foo 2))))) (define-syntax (@@x stx) #`#, @@zoo) (test 2 '@@x/@@zoo @@x) (begin-for-syntax (define @@zoo2 (@@foo 2))) @@ -1290,7 +1290,7 @@ (test 2 '@@x/@@zoo @@x) (begin-for-syntax (@@foo 1)) -(test (void) eval (expand #'(begin-for-syntax (@@foo 1)))) +(test (void) eval-syntax (expand #'(begin-for-syntax (@@foo 1)))) (module @@p racket/base (require (for-syntax racket/base diff --git a/racket/src/racket/src/compenv.c b/racket/src/racket/src/compenv.c index d9e1ce51fe..e20cfc60f9 100644 --- a/racket/src/racket/src/compenv.c +++ b/racket/src/racket/src/compenv.c @@ -1706,7 +1706,7 @@ Scheme_Object *scheme_get_shadower(Scheme_Object *sym, Scheme_Comp_Env *env, int return sym; } -static Scheme_Hash_Table *get_binding_names_table(Scheme_Env *env) +Scheme_Hash_Table *scheme_get_binding_names_table(Scheme_Env *env) { Scheme_Hash_Table *binding_names; @@ -1753,22 +1753,23 @@ static int binding_name_available(Scheme_Hash_Table *binding_names, Scheme_Objec return 0; } -static Scheme_Object *select_binding_name(Scheme_Object *sym, Scheme_Env *env, Scheme_Object *id) +static Scheme_Object *select_binding_name(Scheme_Object *sym, Scheme_Env *env, + Scheme_Object *id, Scheme_Object *orig_id) { int i; char onstack[50], *buf; intptr_t len; Scheme_Hash_Table *binding_names; - binding_names = get_binding_names_table(env); + binding_names = scheme_get_binding_names_table(env); /* Use a plain symbol only if the binding has no extra scopes: */ if (SCHEME_SYM_WEIRDP(sym) - || scheme_stx_equal_module_context(id, ((env->module && env->module->ii_src) - ? env->module->ii_src - : env->stx_context))) { - if (binding_name_available(binding_names, sym, id, scheme_env_phase(env))) { - scheme_hash_set(binding_names, sym, id); + || scheme_stx_equal_module_context(orig_id, ((env->module && env->module->ii_src) + ? env->module->ii_src + : env->stx_context))) { + if (binding_name_available(binding_names, sym, orig_id, scheme_env_phase(env))) { + scheme_hash_set(binding_names, sym, orig_id); return sym; } } @@ -1786,7 +1787,7 @@ static Scheme_Object *select_binding_name(Scheme_Object *sym, Scheme_Env *env, S sym = scheme_intern_exact_parallel_symbol(buf, strlen(buf)); if (binding_name_available(binding_names, sym, id, scheme_env_phase(env))) { - scheme_hash_set(binding_names, sym, id); + scheme_hash_set(binding_names, sym, orig_id); return sym; } @@ -1794,26 +1795,42 @@ static Scheme_Object *select_binding_name(Scheme_Object *sym, Scheme_Env *env, S } } -Scheme_Object *scheme_global_binding(Scheme_Object *id, Scheme_Env *env) +static int binding_matches_env(Scheme_Object *binding, Scheme_Env *env, Scheme_Object *phase) { - Scheme_Object *sym, *binding, *phase; + return (SCHEME_VECTORP(binding) + && SAME_OBJ(SCHEME_VEC_ELS(binding)[0], + (env->module + ? env->module->self_modidx + : scheme_false)) + && SAME_OBJ(SCHEME_VEC_ELS(binding)[2], phase)); +} + +Scheme_Object *scheme_global_binding(Scheme_Object *id, Scheme_Env *env, int for_top_level) +{ + Scheme_Object *sym, *binding, *phase, *orig_id = id; int exact_match; phase = scheme_env_phase(env); + if (for_top_level) { + /* While compiling, we want to avoid binding in the top-level namespace. + Adding an extra scope avoids that while still letting us have some binding + to generate names for top-level definitions. */ + if (!env->tmp_bind_scope) { + sym = scheme_new_scope(SCHEME_STX_MODULE_SCOPE); + env->tmp_bind_scope = sym; + } + id = scheme_stx_add_scope(id, env->tmp_bind_scope, phase); + } + binding = scheme_stx_lookup_stop_at_free_eq(id, phase, &exact_match); if (!SCHEME_FALSEP(binding)) { if (exact_match) { - if (SCHEME_VECTORP(binding) - && SAME_OBJ(SCHEME_VEC_ELS(binding)[0], - (env->module - ? env->module->self_modidx - : scheme_false)) - && SAME_OBJ(SCHEME_VEC_ELS(binding)[2], phase)) { + if (binding_matches_env(binding, env, phase)) { sym = SCHEME_VEC_ELS(binding)[1]; /* Make sure name is in binding_names and with a specific `id`: */ - scheme_hash_set(get_binding_names_table(env), sym, id); + scheme_hash_set(scheme_get_binding_names_table(env), sym, orig_id); return sym; } /* Since the binding didn't match, we'll "shadow" the binding @@ -1821,7 +1838,7 @@ Scheme_Object *scheme_global_binding(Scheme_Object *id, Scheme_Env *env) } } - sym = select_binding_name(SCHEME_STX_VAL(id), env, id); + sym = select_binding_name(SCHEME_STX_VAL(id), env, id, orig_id); scheme_add_module_binding(id, phase, (env->module ? env->module->self_modidx : scheme_false), @@ -1840,8 +1857,24 @@ Scheme_Object *scheme_future_global_binding(Scheme_Object *id, Scheme_Env *env) /* The identifier id is being referenced before it has a binding. We want to allow it, anyway, perhaps because it's outside of a module context or because it's phase-1 code. So, we assume that it's going to - have no extra scopes and get the base name. */ + have no extra scopes and get the base name. + + Then again, if `id` has a binding after adding the environment's temporary + binding scope, then map the identifier to that temporary binding's name. + That special case allows compiling a `define` to create a binding that + can be referenced in the same compilation. */ { + if (env->tmp_bind_scope) { + Scheme_Object *binding, *phase; + + phase = scheme_env_phase(env); + id = scheme_stx_add_scope(id, env->tmp_bind_scope, phase); + binding = scheme_stx_lookup_stop_at_free_eq(id, phase, NULL); + + if (binding_matches_env(binding, env, phase)) + return SCHEME_VEC_ELS(binding)[1]; + } + return SCHEME_STX_VAL(id); } diff --git a/racket/src/racket/src/compile.c b/racket/src/racket/src/compile.c index 3cf212b65d..5d8105ff1d 100644 --- a/racket/src/racket/src/compile.c +++ b/racket/src/racket/src/compile.c @@ -803,7 +803,7 @@ void scheme_define_parse(Scheme_Object *form, vars = scheme_revert_use_site_scopes(vars, env); - *var = vars; + *var = vars; scheme_begin_dup_symbol_check(&r, env); @@ -822,6 +822,25 @@ void scheme_define_parse(Scheme_Object *form, scheme_wrong_syntax(NULL, *var, form, "bad variable list"); } +static Scheme_Object *global_binding(Scheme_Object *id, Scheme_Comp_Env *env) +{ + Scheme_Object *sym; + + sym = scheme_global_binding(id, env->genv, env->flags & SCHEME_TMP_TL_BIND_FRAME); + + if (env->binding_namess && !SAME_OBJ(sym, SCHEME_STX_VAL(id))) { + /* Record the new binding */ + Scheme_Hash_Tree *binds; + binds = (Scheme_Hash_Tree *)scheme_hash_get(env->binding_namess, scheme_env_phase(env->genv)); + if (!binds) + binds = scheme_make_hash_tree(0); + binds = scheme_hash_tree_set(binds, sym, id); + scheme_hash_set(env->binding_namess, scheme_env_phase(env->genv), (Scheme_Object *)binds); + } + + return sym; +} + static Scheme_Object * defn_targets_syntax (Scheme_Object *var, Scheme_Comp_Env *env, Scheme_Compile_Info *rec, int drec) { @@ -831,7 +850,7 @@ defn_targets_syntax (Scheme_Object *var, Scheme_Comp_Env *env, Scheme_Compile_In Scheme_Object *name, *pr, *bucket; name = SCHEME_STX_CAR(var); - name = scheme_global_binding(name, env->genv); + name = global_binding(name, env); if (rec[drec].resolve_module_ids || !env->genv->module) { bucket = (Scheme_Object *)scheme_global_bucket(name, env->genv); @@ -3410,9 +3429,7 @@ static void prep_exp_env_compile_rec(Scheme_Compile_Info *rec, int drec) static Scheme_Object *stx_val(Scheme_Object *name, Scheme_Object *_env) { - Scheme_Env *env = (Scheme_Env *)_env; - - return scheme_global_binding(name, env); + return global_binding(name, (Scheme_Comp_Env *)_env); } static Scheme_Object * @@ -3434,7 +3451,7 @@ do_define_syntaxes_syntax(Scheme_Object *form, Scheme_Comp_Env *env, scheme_prepare_exp_env(env->genv); scheme_prepare_compile_env(env->genv->exp_env); - names = scheme_named_map_1(NULL, stx_val, names, (Scheme_Object *)env->genv); + names = scheme_named_map_1(NULL, stx_val, names, (Scheme_Object *)env); exp_env = scheme_new_comp_env(env->genv->exp_env, env->insp, NULL, 0); @@ -3517,9 +3534,11 @@ begin_for_syntax_expand(Scheme_Object *orig_form, Scheme_Comp_Env *in_env, Schem scheme_prepare_exp_env(in_env->genv); scheme_prepare_compile_env(in_env->genv->exp_env); - if (rec[drec].comp) - env = scheme_new_comp_env(in_env->genv->exp_env, in_env->insp, NULL, 0); - else + if (rec[drec].comp) { + env = scheme_new_comp_env(in_env->genv->exp_env, in_env->insp, NULL, + (in_env->flags & SCHEME_TMP_TL_BIND_FRAME)); + env->bindings = in_env->bindings; + } else env = scheme_new_expand_env(in_env->genv->exp_env, in_env->insp, NULL, 0); if (rec[drec].comp) diff --git a/racket/src/racket/src/cstartup.inc b/racket/src/racket/src/cstartup.inc index 8e06f64f38..116af35bcd 100644 --- a/racket/src/racket/src/cstartup.inc +++ b/racket/src/racket/src/cstartup.inc @@ -1,12 +1,12 @@ { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,10,54,46,50,46,57,48,48,46,49,51,84,0,0,0,0,0,0,0, + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,10,54,46,50,46,57,48,48,46,49,53,84,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,54,0,0,0,1,0,0,8, 0,18,0,22,0,26,0,31,0,38,0,42,0,47,0,59,0,66,0,69,0, 82,0,89,0,94,0,103,0,109,0,123,0,137,0,140,0,146,0,157,0,159, 0,173,0,180,0,202,0,204,0,218,0,246,0,251,0,255,0,72,1,79,1, 90,1,128,1,135,1,144,1,177,1,210,1,16,2,21,2,102,2,107,2,112, 2,133,2,30,3,51,3,104,3,173,3,242,3,132,4,24,5,35,5,118,5, -0,0,147,7,0,0,3,1,5,105,110,115,112,48,71,35,37,109,105,110,45, +0,0,148,7,0,0,3,1,5,105,110,115,112,48,71,35,37,109,105,110,45, 115,116,120,29,11,11,11,65,97,110,100,66,99,111,110,100,68,100,101,102,105, 110,101,65,108,101,116,66,108,101,116,42,73,108,101,116,42,45,118,97,108,117, 101,115,68,108,101,116,114,101,99,64,111,114,74,112,97,114,97,109,101,116,101, @@ -72,37 +72,37 @@ 22,82,248,22,164,4,196,249,22,157,4,80,143,42,39,28,248,22,64,248,22, 158,4,248,22,81,197,250,22,90,2,27,248,22,90,248,22,164,20,199,248,22, 102,198,27,248,22,158,4,248,22,164,20,197,250,22,90,2,27,248,22,90,248, -22,81,197,250,22,91,2,24,248,22,165,20,199,248,22,165,20,202,144,39,20, -121,145,2,1,39,16,1,11,16,0,20,27,15,61,9,2,2,2,2,2,3, -11,11,11,11,9,9,11,11,11,10,39,80,143,39,39,20,121,145,2,1,39, -16,0,16,0,41,42,39,16,0,39,16,0,39,11,11,11,16,11,2,4,2, -5,2,6,2,7,2,8,2,9,2,10,2,11,2,12,2,13,2,14,16,11, -11,11,11,11,11,11,11,11,11,11,11,16,11,2,4,2,5,2,6,2,7, -2,8,2,9,2,10,2,11,2,12,2,13,2,14,39,50,40,16,0,39,16, -1,2,15,40,11,11,11,16,0,16,0,16,0,39,39,11,12,11,11,16,0, -16,0,16,0,39,39,16,12,16,5,11,20,15,16,2,20,14,144,39,39,40, -80,143,39,39,39,20,121,145,2,1,39,16,1,2,15,16,1,33,36,10,16, -5,2,13,88,148,8,36,40,56,40,9,223,0,33,37,39,20,121,145,2,1, -39,16,1,2,15,16,0,11,16,5,2,14,88,148,8,36,40,56,40,9,223, -0,33,38,39,20,121,145,2,1,39,16,1,2,15,16,0,11,16,5,2,4, -88,148,8,36,40,56,42,9,223,0,33,39,39,20,121,145,2,1,39,16,1, -2,15,16,1,33,40,11,16,5,2,11,88,148,8,36,40,59,42,9,223,0, -33,41,39,20,121,145,2,1,39,16,1,2,15,16,1,33,42,11,16,5,2, -7,88,148,8,36,40,61,40,9,223,0,33,45,39,20,121,145,2,1,39,16, -1,2,15,16,0,11,16,5,2,10,88,148,8,36,40,56,40,9,223,0,33, -47,39,20,121,145,2,1,39,16,1,2,15,16,0,11,16,5,2,8,88,148, -8,36,40,57,40,9,223,0,33,48,39,20,121,145,2,1,39,16,1,2,15, -16,0,11,16,5,2,9,88,148,8,36,40,57,40,9,223,0,33,49,39,20, -121,145,2,1,39,16,1,2,15,16,0,11,16,5,2,12,88,148,8,36,40, -59,40,9,223,0,33,50,39,20,121,145,2,1,39,16,1,2,15,16,0,11, -16,5,2,5,88,148,8,36,40,61,42,9,223,0,33,51,39,20,121,145,2, -1,39,16,1,2,15,16,1,33,52,11,16,5,2,6,88,148,8,36,40,57, -40,9,223,0,33,53,39,20,121,145,2,1,39,16,1,2,15,16,0,11,16, -0,94,2,17,2,18,93,2,17,9,9,39,9,0}; - EVAL_ONE_SIZED_STR((char *)expr, 2092); +22,81,197,250,22,91,2,24,248,22,165,20,199,248,22,165,20,202,145,39,9, +20,121,145,2,1,39,16,1,11,16,0,20,27,15,61,9,2,2,2,2,2, +3,11,11,11,11,9,9,11,11,11,10,39,80,143,39,39,20,121,145,2,1, +39,16,0,16,0,41,42,39,16,0,39,16,0,39,11,11,11,16,11,2,4, +2,5,2,6,2,7,2,8,2,9,2,10,2,11,2,12,2,13,2,14,16, +11,11,11,11,11,11,11,11,11,11,11,11,16,11,2,4,2,5,2,6,2, +7,2,8,2,9,2,10,2,11,2,12,2,13,2,14,39,50,40,16,0,39, +16,1,2,15,40,11,11,11,16,0,16,0,16,0,39,39,11,12,11,11,16, +0,16,0,16,0,39,39,16,12,16,5,11,20,15,16,2,20,14,144,39,39, +40,80,143,39,39,39,20,121,145,2,1,39,16,1,2,15,16,1,33,36,10, +16,5,2,13,88,148,8,36,40,56,40,9,223,0,33,37,39,20,121,145,2, +1,39,16,1,2,15,16,0,11,16,5,2,14,88,148,8,36,40,56,40,9, +223,0,33,38,39,20,121,145,2,1,39,16,1,2,15,16,0,11,16,5,2, +4,88,148,8,36,40,56,42,9,223,0,33,39,39,20,121,145,2,1,39,16, +1,2,15,16,1,33,40,11,16,5,2,11,88,148,8,36,40,59,42,9,223, +0,33,41,39,20,121,145,2,1,39,16,1,2,15,16,1,33,42,11,16,5, +2,7,88,148,8,36,40,61,40,9,223,0,33,45,39,20,121,145,2,1,39, +16,1,2,15,16,0,11,16,5,2,10,88,148,8,36,40,56,40,9,223,0, +33,47,39,20,121,145,2,1,39,16,1,2,15,16,0,11,16,5,2,8,88, +148,8,36,40,57,40,9,223,0,33,48,39,20,121,145,2,1,39,16,1,2, +15,16,0,11,16,5,2,9,88,148,8,36,40,57,40,9,223,0,33,49,39, +20,121,145,2,1,39,16,1,2,15,16,0,11,16,5,2,12,88,148,8,36, +40,59,40,9,223,0,33,50,39,20,121,145,2,1,39,16,1,2,15,16,0, +11,16,5,2,5,88,148,8,36,40,61,42,9,223,0,33,51,39,20,121,145, +2,1,39,16,1,2,15,16,1,33,52,11,16,5,2,6,88,148,8,36,40, +57,40,9,223,0,33,53,39,20,121,145,2,1,39,16,1,2,15,16,0,11, +16,0,94,2,17,2,18,93,2,17,9,9,39,9,0}; + EVAL_ONE_SIZED_STR((char *)expr, 2093); } { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,10,54,46,50,46,57,48,48,46,49,51,84,0,0,0,0,0,0,0, + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,10,54,46,50,46,57,48,48,46,49,53,84,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,192,0,0,0,1,0,0,8, 0,16,0,29,0,34,0,51,0,63,0,85,0,114,0,158,0,164,0,178,0, 193,0,211,0,223,0,239,0,253,0,19,1,39,1,73,1,90,1,107,1,130, @@ -122,7 +122,7 @@ 109,45,167,45,200,45,76,46,235,46,251,46,92,47,109,47,187,49,238,51,254, 51,228,53,160,54,162,54,189,54,205,54,221,54,62,55,129,56,61,57,77,57, 86,57,93,57,159,58,225,59,87,60,133,63,7,64,139,64,84,66,34,67,76, -67,184,67,0,0,131,75,0,0,3,1,5,105,110,115,112,48,69,35,37,117, +67,184,67,0,0,132,75,0,0,3,1,5,105,110,115,112,48,69,35,37,117, 116,105,108,115,74,112,97,116,104,45,115,116,114,105,110,103,63,66,98,115,98, 115,78,110,111,114,109,97,108,45,99,97,115,101,45,112,97,116,104,73,114,101, 114,111,111,116,45,112,97,116,104,1,20,102,105,110,100,45,101,120,101,99,117, @@ -947,109 +947,110 @@ 27,250,80,144,45,43,42,248,22,152,16,2,56,11,11,27,248,22,139,4,23, 199,1,27,28,23,194,2,23,194,1,86,94,23,194,1,39,27,248,22,139,4, 23,202,1,249,22,140,6,23,198,1,20,20,95,88,148,8,36,39,51,11,9, -224,3,2,33,190,2,23,195,1,23,196,1,248,80,144,41,8,54,42,193,144, -39,20,121,145,2,1,39,16,1,11,16,0,20,27,15,56,9,2,2,2,2, -29,11,11,11,11,11,11,11,9,9,11,11,11,10,46,80,143,39,39,20,121, -145,2,1,54,16,40,2,3,2,4,2,5,2,6,2,7,2,8,2,9,30, -2,11,1,20,112,97,114,97,109,101,116,101,114,105,122,97,116,105,111,110,45, -107,101,121,11,6,30,2,11,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,11,4,2,12,2,13,2,14,2, -15,2,16,2,17,2,18,30,2,11,1,19,99,97,99,104,101,45,99,111,110, -102,105,103,117,114,97,116,105,111,110,11,1,2,19,2,20,2,21,2,22,2, -23,2,24,2,25,2,26,2,27,2,28,2,29,30,2,11,1,21,101,120,99, -101,112,116,105,111,110,45,104,97,110,100,108,101,114,45,107,101,121,11,3,2, -30,2,31,2,32,2,33,2,34,2,35,2,36,2,37,2,38,2,39,2,40, -16,0,40,42,39,16,0,39,16,19,2,13,2,14,2,12,2,25,2,4,2, -35,2,23,2,24,2,19,2,29,2,33,2,21,2,22,2,31,2,27,2,30, -2,32,2,36,2,28,58,11,11,11,16,17,2,9,2,17,2,15,2,40,2, -16,2,7,2,26,2,39,2,18,2,20,2,38,2,5,2,34,2,8,2,37, -2,3,2,6,16,17,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, -11,11,16,17,2,9,2,17,2,15,2,40,2,16,2,7,2,26,2,39,2, -18,2,20,2,38,2,5,2,34,2,8,2,37,2,3,2,6,56,56,40,12, -11,11,16,0,16,0,16,0,39,39,11,12,11,11,16,0,16,0,16,0,39, -39,16,51,20,15,16,2,32,0,88,148,8,36,40,48,11,2,3,222,33,78, -80,144,39,39,40,20,15,16,2,249,22,155,7,7,92,7,92,80,144,39,40, -40,20,15,16,2,88,148,8,36,40,57,41,2,5,223,0,33,83,80,144,39, -41,40,20,15,16,2,88,148,8,36,41,61,41,2,6,223,0,33,85,80,144, -39,42,40,20,15,16,2,20,26,96,2,7,88,148,8,36,42,8,24,8,32, -9,223,0,33,92,88,148,8,36,41,50,55,9,223,0,33,93,88,148,8,36, -40,49,55,9,223,0,33,94,80,144,39,43,40,20,15,16,2,27,248,22,164, -16,248,22,167,8,27,28,249,22,169,9,247,22,180,8,2,43,6,1,1,59, -6,1,1,58,250,22,137,8,6,14,14,40,91,94,126,97,93,42,41,126,97, -40,46,42,41,23,196,2,23,196,1,88,148,8,36,41,51,11,2,8,223,0, -33,98,80,144,39,44,40,20,15,16,2,88,148,39,40,8,38,8,128,6,2, -9,223,0,33,99,80,144,39,45,40,20,15,16,2,32,0,88,148,8,36,41, -50,11,2,12,222,33,100,80,144,39,48,40,20,15,16,2,32,0,88,148,8, -36,42,51,11,2,13,222,33,102,80,144,39,49,40,20,15,16,2,32,0,88, -148,8,36,41,49,11,2,14,222,33,103,80,144,39,50,40,20,15,16,2,88, -148,39,42,53,8,128,128,2,15,223,0,33,105,80,144,39,51,40,20,15,16, -2,88,148,39,44,55,8,128,128,2,17,223,0,33,107,80,144,39,53,40,20, -15,16,2,88,148,39,39,56,55,9,223,0,33,108,80,144,39,8,40,42,20, -15,16,2,88,148,39,39,47,16,4,39,40,8,128,4,39,2,18,223,0,33, -109,80,144,39,54,40,20,15,16,2,88,148,39,39,56,55,9,223,0,33,110, -80,144,39,8,41,42,20,15,16,2,88,148,39,39,47,16,4,39,40,8,128, -8,39,2,20,223,0,33,111,80,144,39,57,40,20,15,16,2,88,148,8,36, -39,8,38,8,128,6,9,223,0,33,112,80,144,39,8,42,42,20,15,16,2, -88,148,8,36,40,50,16,4,39,39,8,128,16,39,2,21,223,0,33,113,80, -144,39,58,40,20,15,16,2,20,28,143,32,0,88,148,39,40,48,11,2,22, -222,33,114,32,0,88,148,39,40,48,11,2,22,222,33,115,80,144,39,59,40, -20,15,16,2,88,148,8,36,40,50,8,240,0,128,0,0,2,23,223,0,33, -116,80,144,39,60,40,20,15,16,2,88,148,39,39,56,55,9,223,0,33,117, -80,144,39,8,43,42,20,15,16,2,88,148,8,36,40,51,16,4,39,40,8, -128,32,39,2,24,223,0,33,118,80,144,39,61,40,20,15,16,2,88,148,39, -40,56,55,2,19,223,0,33,119,80,144,39,56,40,20,15,16,2,88,148,8, -36,41,58,16,4,8,240,0,128,0,0,8,32,8,128,64,39,2,50,223,0, -33,120,80,144,39,8,44,42,20,15,16,2,88,148,8,36,42,52,16,4,39, -39,8,128,64,39,2,25,223,0,33,121,80,144,39,8,23,40,20,15,16,2, -88,148,39,39,56,55,9,223,0,33,122,80,144,39,8,45,42,20,15,16,2, -88,148,8,36,39,57,16,4,8,240,0,128,0,0,8,137,2,8,128,128,39, -2,26,223,0,33,123,80,144,39,8,24,40,20,15,16,2,247,22,140,2,80, -144,39,8,25,40,20,15,16,2,248,22,16,67,115,116,97,109,112,80,144,39, -8,26,40,20,15,16,2,88,148,39,40,49,8,240,0,0,0,4,9,223,0, -33,125,80,144,39,8,46,42,20,15,16,2,88,148,39,41,51,16,4,39,8, -128,80,8,240,0,64,0,0,39,2,29,223,0,33,133,2,80,144,39,8,27, -40,20,15,16,2,32,0,88,148,8,36,40,48,11,2,30,222,33,134,2,80, -144,39,8,29,40,20,15,16,2,88,148,8,36,42,48,8,240,0,0,0,2, -74,109,97,107,101,45,104,97,110,100,108,101,114,223,0,33,136,2,80,144,39, -8,47,42,20,15,16,2,88,148,39,40,47,16,4,8,128,6,8,128,104,8, -240,0,128,0,0,39,2,31,223,0,33,146,2,80,144,39,8,30,40,20,15, -16,2,88,148,39,41,59,16,2,39,8,240,0,128,0,0,2,32,223,0,33, -148,2,80,144,39,8,31,40,20,15,16,2,88,148,8,36,41,61,16,4,39, -8,240,0,64,0,0,39,40,2,50,223,0,33,149,2,80,144,39,8,48,42, -20,15,16,2,88,148,39,47,8,33,16,4,39,39,40,41,67,99,108,111,111, -112,223,0,33,156,2,80,144,39,8,49,42,20,15,16,2,88,148,39,44,8, -25,16,4,39,8,240,0,192,0,0,39,42,2,16,223,0,33,157,2,80,144, -39,52,40,20,15,16,2,88,148,39,42,58,16,4,47,39,43,39,2,33,223, -0,33,162,2,80,144,39,8,32,40,20,15,16,2,32,0,88,148,39,42,53, -11,2,35,222,33,163,2,80,144,39,8,34,40,20,15,16,2,32,0,88,148, -8,36,44,8,27,11,2,36,222,33,168,2,80,144,39,8,35,40,20,15,16, -2,20,28,143,32,0,88,148,8,36,41,55,11,2,37,222,33,171,2,88,148, -8,100,41,52,16,4,39,39,47,39,2,37,223,0,33,173,2,80,144,39,8, -36,40,20,15,16,2,20,28,143,32,0,88,148,8,36,41,55,11,2,34,222, -33,178,2,88,148,8,100,41,52,16,4,39,39,47,39,2,34,223,0,33,179, -2,80,144,39,8,33,40,20,15,16,2,20,28,143,32,0,88,148,39,40,47, -11,2,38,222,33,180,2,32,0,88,148,39,40,47,11,2,38,222,33,181,2, -80,144,39,8,37,40,20,15,16,2,88,148,8,36,40,58,16,4,55,41,39, -43,2,50,223,0,33,182,2,80,144,39,8,50,42,20,15,16,2,88,148,8, -36,40,58,16,4,55,41,39,47,2,50,223,0,33,183,2,80,144,39,8,51, -42,20,15,16,2,88,148,39,39,56,55,9,223,0,33,184,2,80,144,39,8, -52,42,20,15,16,2,88,148,8,36,40,8,23,16,4,55,41,39,8,32,2, -50,223,0,33,185,2,80,144,39,8,53,42,20,15,16,2,20,26,96,2,39, -88,148,39,39,60,16,4,8,32,8,140,2,39,43,9,223,0,33,186,2,88, -148,39,40,61,16,4,8,32,8,140,2,39,47,9,223,0,33,187,2,88,148, -39,41,8,30,16,4,8,48,8,139,2,39,8,48,9,223,0,33,188,2,80, -144,39,8,38,40,20,15,16,2,88,148,8,36,40,60,16,4,8,128,6,39, -39,8,64,2,50,223,0,33,189,2,80,144,39,8,54,42,20,15,16,2,88, -148,8,36,42,56,16,4,55,39,39,8,64,2,40,223,0,33,191,2,80,144, -39,8,39,40,95,29,94,2,10,70,35,37,107,101,114,110,101,108,11,29,94, -2,10,71,35,37,109,105,110,45,115,116,120,11,2,11,9,9,9,39,9,0}; - EVAL_ONE_SIZED_STR((char *)expr, 19760); +224,3,2,33,190,2,23,195,1,23,196,1,248,80,144,41,8,54,42,193,145, +39,9,20,121,145,2,1,39,16,1,11,16,0,20,27,15,56,9,2,2,2, +2,29,11,11,11,11,11,11,11,9,9,11,11,11,10,46,80,143,39,39,20, +121,145,2,1,54,16,40,2,3,2,4,2,5,2,6,2,7,2,8,2,9, +30,2,11,1,20,112,97,114,97,109,101,116,101,114,105,122,97,116,105,111,110, +45,107,101,121,11,6,30,2,11,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,11,4,2,12,2,13,2,14, +2,15,2,16,2,17,2,18,30,2,11,1,19,99,97,99,104,101,45,99,111, +110,102,105,103,117,114,97,116,105,111,110,11,1,2,19,2,20,2,21,2,22, +2,23,2,24,2,25,2,26,2,27,2,28,2,29,30,2,11,1,21,101,120, +99,101,112,116,105,111,110,45,104,97,110,100,108,101,114,45,107,101,121,11,3, +2,30,2,31,2,32,2,33,2,34,2,35,2,36,2,37,2,38,2,39,2, +40,16,0,40,42,39,16,0,39,16,19,2,13,2,14,2,12,2,25,2,4, +2,35,2,23,2,24,2,19,2,29,2,33,2,21,2,22,2,31,2,27,2, +30,2,32,2,36,2,28,58,11,11,11,16,17,2,9,2,17,2,15,2,40, +2,16,2,7,2,26,2,39,2,18,2,20,2,38,2,5,2,34,2,8,2, +37,2,3,2,6,16,17,11,11,11,11,11,11,11,11,11,11,11,11,11,11, +11,11,11,16,17,2,9,2,17,2,15,2,40,2,16,2,7,2,26,2,39, +2,18,2,20,2,38,2,5,2,34,2,8,2,37,2,3,2,6,56,56,40, +12,11,11,16,0,16,0,16,0,39,39,11,12,11,11,16,0,16,0,16,0, +39,39,16,51,20,15,16,2,32,0,88,148,8,36,40,48,11,2,3,222,33, +78,80,144,39,39,40,20,15,16,2,249,22,155,7,7,92,7,92,80,144,39, +40,40,20,15,16,2,88,148,8,36,40,57,41,2,5,223,0,33,83,80,144, +39,41,40,20,15,16,2,88,148,8,36,41,61,41,2,6,223,0,33,85,80, +144,39,42,40,20,15,16,2,20,26,96,2,7,88,148,8,36,42,8,24,8, +32,9,223,0,33,92,88,148,8,36,41,50,55,9,223,0,33,93,88,148,8, +36,40,49,55,9,223,0,33,94,80,144,39,43,40,20,15,16,2,27,248,22, +164,16,248,22,167,8,27,28,249,22,169,9,247,22,180,8,2,43,6,1,1, +59,6,1,1,58,250,22,137,8,6,14,14,40,91,94,126,97,93,42,41,126, +97,40,46,42,41,23,196,2,23,196,1,88,148,8,36,41,51,11,2,8,223, +0,33,98,80,144,39,44,40,20,15,16,2,88,148,39,40,8,38,8,128,6, +2,9,223,0,33,99,80,144,39,45,40,20,15,16,2,32,0,88,148,8,36, +41,50,11,2,12,222,33,100,80,144,39,48,40,20,15,16,2,32,0,88,148, +8,36,42,51,11,2,13,222,33,102,80,144,39,49,40,20,15,16,2,32,0, +88,148,8,36,41,49,11,2,14,222,33,103,80,144,39,50,40,20,15,16,2, +88,148,39,42,53,8,128,128,2,15,223,0,33,105,80,144,39,51,40,20,15, +16,2,88,148,39,44,55,8,128,128,2,17,223,0,33,107,80,144,39,53,40, +20,15,16,2,88,148,39,39,56,55,9,223,0,33,108,80,144,39,8,40,42, +20,15,16,2,88,148,39,39,47,16,4,39,40,8,128,4,39,2,18,223,0, +33,109,80,144,39,54,40,20,15,16,2,88,148,39,39,56,55,9,223,0,33, +110,80,144,39,8,41,42,20,15,16,2,88,148,39,39,47,16,4,39,40,8, +128,8,39,2,20,223,0,33,111,80,144,39,57,40,20,15,16,2,88,148,8, +36,39,8,38,8,128,6,9,223,0,33,112,80,144,39,8,42,42,20,15,16, +2,88,148,8,36,40,50,16,4,39,39,8,128,16,39,2,21,223,0,33,113, +80,144,39,58,40,20,15,16,2,20,28,143,32,0,88,148,39,40,48,11,2, +22,222,33,114,32,0,88,148,39,40,48,11,2,22,222,33,115,80,144,39,59, +40,20,15,16,2,88,148,8,36,40,50,8,240,0,128,0,0,2,23,223,0, +33,116,80,144,39,60,40,20,15,16,2,88,148,39,39,56,55,9,223,0,33, +117,80,144,39,8,43,42,20,15,16,2,88,148,8,36,40,51,16,4,39,40, +8,128,32,39,2,24,223,0,33,118,80,144,39,61,40,20,15,16,2,88,148, +39,40,56,55,2,19,223,0,33,119,80,144,39,56,40,20,15,16,2,88,148, +8,36,41,58,16,4,8,240,0,128,0,0,8,32,8,128,64,39,2,50,223, +0,33,120,80,144,39,8,44,42,20,15,16,2,88,148,8,36,42,52,16,4, +39,39,8,128,64,39,2,25,223,0,33,121,80,144,39,8,23,40,20,15,16, +2,88,148,39,39,56,55,9,223,0,33,122,80,144,39,8,45,42,20,15,16, +2,88,148,8,36,39,57,16,4,8,240,0,128,0,0,8,137,2,8,128,128, +39,2,26,223,0,33,123,80,144,39,8,24,40,20,15,16,2,247,22,140,2, +80,144,39,8,25,40,20,15,16,2,248,22,16,67,115,116,97,109,112,80,144, +39,8,26,40,20,15,16,2,88,148,39,40,49,8,240,0,0,0,4,9,223, +0,33,125,80,144,39,8,46,42,20,15,16,2,88,148,39,41,51,16,4,39, +8,128,80,8,240,0,64,0,0,39,2,29,223,0,33,133,2,80,144,39,8, +27,40,20,15,16,2,32,0,88,148,8,36,40,48,11,2,30,222,33,134,2, +80,144,39,8,29,40,20,15,16,2,88,148,8,36,42,48,8,240,0,0,0, +2,74,109,97,107,101,45,104,97,110,100,108,101,114,223,0,33,136,2,80,144, +39,8,47,42,20,15,16,2,88,148,39,40,47,16,4,8,128,6,8,128,104, +8,240,0,128,0,0,39,2,31,223,0,33,146,2,80,144,39,8,30,40,20, +15,16,2,88,148,39,41,59,16,2,39,8,240,0,128,0,0,2,32,223,0, +33,148,2,80,144,39,8,31,40,20,15,16,2,88,148,8,36,41,61,16,4, +39,8,240,0,64,0,0,39,40,2,50,223,0,33,149,2,80,144,39,8,48, +42,20,15,16,2,88,148,39,47,8,33,16,4,39,39,40,41,67,99,108,111, +111,112,223,0,33,156,2,80,144,39,8,49,42,20,15,16,2,88,148,39,44, +8,25,16,4,39,8,240,0,192,0,0,39,42,2,16,223,0,33,157,2,80, +144,39,52,40,20,15,16,2,88,148,39,42,58,16,4,47,39,43,39,2,33, +223,0,33,162,2,80,144,39,8,32,40,20,15,16,2,32,0,88,148,39,42, +53,11,2,35,222,33,163,2,80,144,39,8,34,40,20,15,16,2,32,0,88, +148,8,36,44,8,27,11,2,36,222,33,168,2,80,144,39,8,35,40,20,15, +16,2,20,28,143,32,0,88,148,8,36,41,55,11,2,37,222,33,171,2,88, +148,8,100,41,52,16,4,39,39,47,39,2,37,223,0,33,173,2,80,144,39, +8,36,40,20,15,16,2,20,28,143,32,0,88,148,8,36,41,55,11,2,34, +222,33,178,2,88,148,8,100,41,52,16,4,39,39,47,39,2,34,223,0,33, +179,2,80,144,39,8,33,40,20,15,16,2,20,28,143,32,0,88,148,39,40, +47,11,2,38,222,33,180,2,32,0,88,148,39,40,47,11,2,38,222,33,181, +2,80,144,39,8,37,40,20,15,16,2,88,148,8,36,40,58,16,4,55,41, +39,43,2,50,223,0,33,182,2,80,144,39,8,50,42,20,15,16,2,88,148, +8,36,40,58,16,4,55,41,39,47,2,50,223,0,33,183,2,80,144,39,8, +51,42,20,15,16,2,88,148,39,39,56,55,9,223,0,33,184,2,80,144,39, +8,52,42,20,15,16,2,88,148,8,36,40,8,23,16,4,55,41,39,8,32, +2,50,223,0,33,185,2,80,144,39,8,53,42,20,15,16,2,20,26,96,2, +39,88,148,39,39,60,16,4,8,32,8,140,2,39,43,9,223,0,33,186,2, +88,148,39,40,61,16,4,8,32,8,140,2,39,47,9,223,0,33,187,2,88, +148,39,41,8,30,16,4,8,48,8,139,2,39,8,48,9,223,0,33,188,2, +80,144,39,8,38,40,20,15,16,2,88,148,8,36,40,60,16,4,8,128,6, +39,39,8,64,2,50,223,0,33,189,2,80,144,39,8,54,42,20,15,16,2, +88,148,8,36,42,56,16,4,55,39,39,8,64,2,40,223,0,33,191,2,80, +144,39,8,39,40,95,29,94,2,10,70,35,37,107,101,114,110,101,108,11,29, +94,2,10,71,35,37,109,105,110,45,115,116,120,11,2,11,9,9,9,39,9, +0}; + EVAL_ONE_SIZED_STR((char *)expr, 19761); } { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,10,54,46,50,46,57,48,48,46,49,51,84,0,0,0,0,0,0,0, + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,10,54,46,50,46,57,48,48,46,49,53,84,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,15,0,0,0,1,0,0,8, 0,23,0,48,0,65,0,83,0,105,0,128,0,149,0,171,0,180,0,189,0, -196,0,205,0,212,0,0,0,247,1,0,0,3,1,5,105,110,115,112,48,76, +196,0,205,0,212,0,0,0,248,1,0,0,3,1,5,105,110,115,112,48,76, 35,37,112,108,97,99,101,45,115,116,114,117,99,116,1,23,115,116,114,117,99, 116,58,84,72,45,112,108,97,99,101,45,99,104,97,110,110,101,108,78,84,72, 45,112,108,97,99,101,45,99,104,97,110,110,101,108,79,84,72,45,112,108,97, @@ -1059,25 +1060,25 @@ 97,99,101,45,99,104,97,110,110,101,108,45,105,110,1,20,84,72,45,112,108, 97,99,101,45,99,104,97,110,110,101,108,45,111,117,116,249,80,143,41,42,23, 196,1,39,249,80,143,41,42,23,196,1,39,249,80,143,41,42,195,39,249,80, -143,41,42,23,196,1,40,249,80,143,41,42,195,40,144,39,20,121,145,2,1, -39,16,1,11,16,0,20,27,15,56,9,2,2,2,2,29,11,11,11,11,11, -11,11,9,9,11,11,11,10,48,80,143,39,39,20,121,145,2,1,39,16,7, -2,3,2,4,2,5,2,6,2,7,2,8,2,9,16,0,40,42,39,16,0, -39,16,2,2,6,2,7,41,11,11,11,16,5,2,4,2,8,2,9,2,5, -2,3,16,5,11,11,11,11,11,16,5,2,4,2,8,2,9,2,5,2,3, -44,44,40,12,11,11,16,0,16,0,16,0,39,39,11,12,11,11,16,0,16, -0,16,0,39,39,16,3,20,15,16,6,253,22,190,10,2,4,11,41,39,11, -248,22,90,249,22,80,22,175,10,88,148,39,40,48,47,9,223,9,33,10,80, -144,39,39,40,80,144,39,40,40,80,144,39,41,40,80,144,39,42,40,80,144, -39,43,40,20,15,16,2,20,28,143,88,148,39,40,48,47,9,223,0,33,11, -88,148,39,40,48,47,9,223,0,33,12,80,144,39,44,40,20,15,16,2,20, -28,143,88,148,39,40,48,47,9,223,0,33,13,88,148,39,40,48,47,9,223, -0,33,14,80,144,39,45,40,93,29,94,67,113,117,111,116,101,70,35,37,107, -101,114,110,101,108,11,9,9,9,39,9,0}; - EVAL_ONE_SIZED_STR((char *)expr, 578); +143,41,42,23,196,1,40,249,80,143,41,42,195,40,145,39,9,20,121,145,2, +1,39,16,1,11,16,0,20,27,15,56,9,2,2,2,2,29,11,11,11,11, +11,11,11,9,9,11,11,11,10,48,80,143,39,39,20,121,145,2,1,39,16, +7,2,3,2,4,2,5,2,6,2,7,2,8,2,9,16,0,40,42,39,16, +0,39,16,2,2,6,2,7,41,11,11,11,16,5,2,4,2,8,2,9,2, +5,2,3,16,5,11,11,11,11,11,16,5,2,4,2,8,2,9,2,5,2, +3,44,44,40,12,11,11,16,0,16,0,16,0,39,39,11,12,11,11,16,0, +16,0,16,0,39,39,16,3,20,15,16,6,253,22,190,10,2,4,11,41,39, +11,248,22,90,249,22,80,22,175,10,88,148,39,40,48,47,9,223,9,33,10, +80,144,39,39,40,80,144,39,40,40,80,144,39,41,40,80,144,39,42,40,80, +144,39,43,40,20,15,16,2,20,28,143,88,148,39,40,48,47,9,223,0,33, +11,88,148,39,40,48,47,9,223,0,33,12,80,144,39,44,40,20,15,16,2, +20,28,143,88,148,39,40,48,47,9,223,0,33,13,88,148,39,40,48,47,9, +223,0,33,14,80,144,39,45,40,93,29,94,67,113,117,111,116,101,70,35,37, +107,101,114,110,101,108,11,9,9,9,39,9,0}; + EVAL_ONE_SIZED_STR((char *)expr, 579); } { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,10,54,46,50,46,57,48,48,46,49,51,84,0,0,0,0,0,0,0, + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,10,54,46,50,46,57,48,48,46,49,53,84,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,100,0,0,0,1,0,0,8, 0,15,0,26,0,53,0,59,0,73,0,86,0,112,0,129,0,151,0,159,0, 171,0,186,0,202,0,220,0,241,0,253,0,13,1,36,1,60,1,72,1,103, @@ -1088,7 +1089,7 @@ 13,165,13,160,14,40,15,115,15,22,16,35,16,188,16,116,17,159,17,241,17, 113,18,174,18,182,18,193,18,227,19,74,20,102,20,115,20,36,21,43,21,203, 21,223,21,67,22,89,22,99,22,113,22,151,22,250,22,254,22,5,23,211,23, -104,32,157,32,181,32,205,32,0,0,253,36,0,0,3,1,5,105,110,115,112, +104,32,157,32,181,32,205,32,0,0,254,36,0,0,3,1,5,105,110,115,112, 48,68,35,37,98,111,111,116,72,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,67,113,117,111,116,101,29,94,2,5,70,35,37,112,97,114,97, @@ -1488,65 +1489,65 @@ 22,190,4,80,144,40,60,41,248,22,176,5,80,144,40,40,42,248,22,144,15, 80,144,40,48,42,20,18,144,11,80,143,39,59,248,80,144,40,8,27,40,249, 22,31,11,80,144,42,41,40,20,18,144,11,80,143,39,59,248,80,144,40,8, -27,40,249,22,31,11,80,144,42,41,40,144,39,20,121,145,2,1,39,16,1, -11,16,0,20,27,15,56,9,2,2,2,2,29,11,11,11,11,11,11,11,9, -9,11,11,11,10,41,80,143,39,39,20,121,145,2,1,44,16,28,2,3,2, -4,30,2,6,1,20,112,97,114,97,109,101,116,101,114,105,122,97,116,105,111, -110,45,107,101,121,11,6,30,2,6,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,11,4,30,2,7,74,112, -97,116,104,45,115,116,114,105,110,103,63,42,196,15,2,8,30,2,7,73,114, -101,114,111,111,116,45,112,97,116,104,44,196,16,30,2,7,77,112,97,116,104, -45,97,100,100,45,115,117,102,102,105,120,44,196,12,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,2,22, -30,2,7,1,19,112,97,116,104,45,114,101,112,108,97,99,101,45,115,117,102, -102,105,120,44,196,14,30,2,7,75,102,105,110,100,45,99,111,108,45,102,105, -108,101,49,196,4,30,2,7,78,110,111,114,109,97,108,45,99,97,115,101,45, -112,97,116,104,42,196,11,2,23,2,24,30,2,6,76,114,101,112,97,114,97, -109,101,116,101,114,105,122,101,11,7,16,0,40,42,39,16,0,39,16,16,2, -15,2,16,2,8,2,12,2,17,2,18,2,11,2,4,2,10,2,3,2,20, -2,13,2,14,2,9,2,19,2,22,55,11,11,11,16,3,2,23,2,21,2, -24,16,3,11,11,11,16,3,2,23,2,21,2,24,42,42,40,12,11,11,16, -0,16,0,16,0,39,39,11,12,11,11,16,0,16,0,16,0,39,39,16,24, -20,15,16,2,248,22,180,8,71,115,111,45,115,117,102,102,105,120,80,144,39, -39,40,20,15,16,2,88,148,39,41,8,39,8,189,3,2,4,223,0,33,50, -80,144,39,40,40,20,15,16,2,32,0,88,148,8,36,44,55,11,2,9,222, -33,51,80,144,39,47,40,20,15,16,2,20,28,143,32,0,88,148,8,36,40, -45,11,2,10,222,192,32,0,88,148,8,36,40,45,11,2,10,222,192,80,144, -39,48,40,20,15,16,2,247,22,141,2,80,144,39,44,40,20,15,16,2,8, -128,8,80,144,39,49,40,20,15,16,2,249,22,185,8,8,128,8,11,80,144, -39,50,40,20,15,16,2,88,148,8,36,40,53,8,128,32,2,13,223,0,33, -52,80,144,39,51,40,20,15,16,2,88,148,8,36,41,57,8,128,32,2,14, -223,0,33,53,80,144,39,52,40,20,15,16,2,247,22,76,80,144,39,53,40, -20,15,16,2,248,22,16,76,109,111,100,117,108,101,45,108,111,97,100,105,110, -103,80,144,39,54,40,20,15,16,2,11,80,143,39,55,20,15,16,2,11,80, -143,39,56,20,15,16,2,32,0,88,148,39,41,60,11,2,19,222,33,72,80, -144,39,57,40,20,15,16,2,32,0,88,148,8,36,40,52,11,2,20,222,33, -73,80,144,39,58,40,20,15,16,2,11,80,143,39,59,20,15,16,2,88,149, -8,34,40,48,8,240,4,0,16,0,1,21,112,114,101,112,45,112,108,97,110, -101,116,45,114,101,115,111,108,118,101,114,33,40,224,1,0,33,74,80,144,39, -8,28,42,20,15,16,2,88,148,39,40,53,8,240,0,0,3,0,69,103,101, -116,45,100,105,114,223,0,33,75,80,144,39,8,29,42,20,15,16,2,88,148, -39,40,52,8,240,0,0,64,0,74,112,97,116,104,45,115,115,45,62,114,107, -116,223,0,33,76,80,144,39,8,30,42,20,15,16,2,88,148,8,36,40,48, -8,240,0,0,4,0,9,223,0,33,77,80,144,39,8,31,42,20,15,16,2, -88,148,39,40,48,8,240,0,128,0,0,9,223,0,33,78,80,144,39,8,32, -42,20,15,16,2,27,11,20,19,143,39,90,144,40,10,89,146,40,39,10,20, -26,96,2,22,88,148,8,36,41,57,8,32,9,224,2,1,33,79,88,148,39, -42,52,11,9,223,0,33,80,88,148,39,43,8,32,16,4,8,240,44,240,0, -0,8,240,220,241,0,0,40,39,9,224,2,1,33,96,207,80,144,39,60,40, -20,15,16,2,88,148,39,39,48,16,2,8,134,8,8,176,32,2,23,223,0, -33,97,80,144,39,8,25,40,20,15,16,2,20,28,143,88,148,8,36,39,48, -16,2,43,8,144,32,2,24,223,0,33,98,88,148,8,36,39,48,16,2,43, -8,144,32,2,24,223,0,33,99,80,144,39,8,26,40,96,29,94,2,5,70, -35,37,107,101,114,110,101,108,11,29,94,2,5,71,35,37,109,105,110,45,115, -116,120,11,2,7,2,6,9,9,9,39,9,0}; - EVAL_ONE_SIZED_STR((char *)expr, 9714); +27,40,249,22,31,11,80,144,42,41,40,145,39,9,20,121,145,2,1,39,16, +1,11,16,0,20,27,15,56,9,2,2,2,2,29,11,11,11,11,11,11,11, +9,9,11,11,11,10,41,80,143,39,39,20,121,145,2,1,44,16,28,2,3, +2,4,30,2,6,1,20,112,97,114,97,109,101,116,101,114,105,122,97,116,105, +111,110,45,107,101,121,11,6,30,2,6,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,11,4,30,2,7,74, +112,97,116,104,45,115,116,114,105,110,103,63,42,196,15,2,8,30,2,7,73, +114,101,114,111,111,116,45,112,97,116,104,44,196,16,30,2,7,77,112,97,116, +104,45,97,100,100,45,115,117,102,102,105,120,44,196,12,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,2, +22,30,2,7,1,19,112,97,116,104,45,114,101,112,108,97,99,101,45,115,117, +102,102,105,120,44,196,14,30,2,7,75,102,105,110,100,45,99,111,108,45,102, +105,108,101,49,196,4,30,2,7,78,110,111,114,109,97,108,45,99,97,115,101, +45,112,97,116,104,42,196,11,2,23,2,24,30,2,6,76,114,101,112,97,114, +97,109,101,116,101,114,105,122,101,11,7,16,0,40,42,39,16,0,39,16,16, +2,15,2,16,2,8,2,12,2,17,2,18,2,11,2,4,2,10,2,3,2, +20,2,13,2,14,2,9,2,19,2,22,55,11,11,11,16,3,2,23,2,21, +2,24,16,3,11,11,11,16,3,2,23,2,21,2,24,42,42,40,12,11,11, +16,0,16,0,16,0,39,39,11,12,11,11,16,0,16,0,16,0,39,39,16, +24,20,15,16,2,248,22,180,8,71,115,111,45,115,117,102,102,105,120,80,144, +39,39,40,20,15,16,2,88,148,39,41,8,39,8,189,3,2,4,223,0,33, +50,80,144,39,40,40,20,15,16,2,32,0,88,148,8,36,44,55,11,2,9, +222,33,51,80,144,39,47,40,20,15,16,2,20,28,143,32,0,88,148,8,36, +40,45,11,2,10,222,192,32,0,88,148,8,36,40,45,11,2,10,222,192,80, +144,39,48,40,20,15,16,2,247,22,141,2,80,144,39,44,40,20,15,16,2, +8,128,8,80,144,39,49,40,20,15,16,2,249,22,185,8,8,128,8,11,80, +144,39,50,40,20,15,16,2,88,148,8,36,40,53,8,128,32,2,13,223,0, +33,52,80,144,39,51,40,20,15,16,2,88,148,8,36,41,57,8,128,32,2, +14,223,0,33,53,80,144,39,52,40,20,15,16,2,247,22,76,80,144,39,53, +40,20,15,16,2,248,22,16,76,109,111,100,117,108,101,45,108,111,97,100,105, +110,103,80,144,39,54,40,20,15,16,2,11,80,143,39,55,20,15,16,2,11, +80,143,39,56,20,15,16,2,32,0,88,148,39,41,60,11,2,19,222,33,72, +80,144,39,57,40,20,15,16,2,32,0,88,148,8,36,40,52,11,2,20,222, +33,73,80,144,39,58,40,20,15,16,2,11,80,143,39,59,20,15,16,2,88, +149,8,34,40,48,8,240,4,0,16,0,1,21,112,114,101,112,45,112,108,97, +110,101,116,45,114,101,115,111,108,118,101,114,33,40,224,1,0,33,74,80,144, +39,8,28,42,20,15,16,2,88,148,39,40,53,8,240,0,0,3,0,69,103, +101,116,45,100,105,114,223,0,33,75,80,144,39,8,29,42,20,15,16,2,88, +148,39,40,52,8,240,0,0,64,0,74,112,97,116,104,45,115,115,45,62,114, +107,116,223,0,33,76,80,144,39,8,30,42,20,15,16,2,88,148,8,36,40, +48,8,240,0,0,4,0,9,223,0,33,77,80,144,39,8,31,42,20,15,16, +2,88,148,39,40,48,8,240,0,128,0,0,9,223,0,33,78,80,144,39,8, +32,42,20,15,16,2,27,11,20,19,143,39,90,144,40,10,89,146,40,39,10, +20,26,96,2,22,88,148,8,36,41,57,8,32,9,224,2,1,33,79,88,148, +39,42,52,11,9,223,0,33,80,88,148,39,43,8,32,16,4,8,240,44,240, +0,0,8,240,220,241,0,0,40,39,9,224,2,1,33,96,207,80,144,39,60, +40,20,15,16,2,88,148,39,39,48,16,2,8,134,8,8,176,32,2,23,223, +0,33,97,80,144,39,8,25,40,20,15,16,2,20,28,143,88,148,8,36,39, +48,16,2,43,8,144,32,2,24,223,0,33,98,88,148,8,36,39,48,16,2, +43,8,144,32,2,24,223,0,33,99,80,144,39,8,26,40,96,29,94,2,5, +70,35,37,107,101,114,110,101,108,11,29,94,2,5,71,35,37,109,105,110,45, +115,116,120,11,2,7,2,6,9,9,9,39,9,0}; + EVAL_ONE_SIZED_STR((char *)expr, 9715); } { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,10,54,46,50,46,57,48,48,46,49,51,84,0,0,0,0,0,0,0, + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,10,54,46,50,46,57,48,48,46,49,53,84,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,17,0,0,0,1,0,0,8, 0,18,0,24,0,38,0,52,0,64,0,84,0,98,0,113,0,126,0,131,0, -135,0,147,0,231,0,238,0,8,1,0,0,198,1,0,0,3,1,5,105,110, +135,0,147,0,231,0,238,0,8,1,0,0,199,1,0,0,3,1,5,105,110, 115,112,48,71,35,37,98,117,105,108,116,105,110,67,113,117,111,116,101,29,94, 2,3,70,35,37,107,101,114,110,101,108,11,29,94,2,3,70,35,37,101,120, 112,111,98,115,11,29,94,2,3,68,35,37,98,111,111,116,11,29,94,2,3, @@ -1559,15 +1560,15 @@ 2,1,143,2,15,16,4,2,8,39,39,2,1,143,2,15,16,4,2,9,39, 39,2,1,143,2,15,16,4,2,10,39,39,2,1,16,0,38,15,143,2,14, 2,11,18,143,16,2,143,10,16,3,9,2,11,2,13,143,11,16,3,9,9, -2,13,16,3,9,9,9,144,39,20,121,145,2,1,39,16,1,11,16,0,20, -27,15,56,9,2,2,2,2,29,11,11,11,11,11,11,11,9,9,11,11,11, -33,16,39,80,143,39,39,20,121,145,2,1,39,16,0,16,0,40,42,39,16, -0,39,16,0,39,11,11,11,16,0,16,0,16,0,39,39,40,12,11,11,16, -0,16,0,16,0,39,39,11,12,11,11,16,0,16,0,16,0,39,39,16,0, -104,2,4,2,5,29,94,2,3,71,35,37,102,111,114,101,105,103,110,11,29, -94,2,3,70,35,37,117,110,115,97,102,101,11,29,94,2,3,71,35,37,102, -108,102,120,110,117,109,11,2,6,2,7,2,8,2,9,2,10,29,94,2,3, -69,35,37,112,108,97,99,101,11,29,94,2,3,71,35,37,102,117,116,117,114, -101,115,11,9,9,9,39,9,0}; - EVAL_ONE_SIZED_STR((char *)expr, 533); +2,13,16,3,9,9,9,145,39,9,20,121,145,2,1,39,16,1,11,16,0, +20,27,15,56,9,2,2,2,2,29,11,11,11,11,11,11,11,9,9,11,11, +11,33,16,39,80,143,39,39,20,121,145,2,1,39,16,0,16,0,40,42,39, +16,0,39,16,0,39,11,11,11,16,0,16,0,16,0,39,39,40,12,11,11, +16,0,16,0,16,0,39,39,11,12,11,11,16,0,16,0,16,0,39,39,16, +0,104,2,4,2,5,29,94,2,3,71,35,37,102,111,114,101,105,103,110,11, +29,94,2,3,70,35,37,117,110,115,97,102,101,11,29,94,2,3,71,35,37, +102,108,102,120,110,117,109,11,2,6,2,7,2,8,2,9,2,10,29,94,2, +3,69,35,37,112,108,97,99,101,11,29,94,2,3,71,35,37,102,117,116,117, +114,101,115,11,9,9,9,39,9,0}; + EVAL_ONE_SIZED_STR((char *)expr, 534); } diff --git a/racket/src/racket/src/env.c b/racket/src/racket/src/env.c index 3f8ee2b2b5..e3299d8674 100644 --- a/racket/src/racket/src/env.c +++ b/racket/src/racket/src/env.c @@ -1613,6 +1613,65 @@ void scheme_shadow(Scheme_Env *env, Scheme_Object *n, Scheme_Object *val, int as scheme_add_binding_copy(id, scheme_rename_transformer_id(val), scheme_env_phase(env)); } +static void install_one_binding_name(Scheme_Hash_Table *bt, Scheme_Object *name, Scheme_Object *id, Scheme_Env *benv) +{ + if (SCHEME_SYMBOLP(name) && SCHEME_STX_SYMBOLP(id)) { + if (benv->stx_context) + id = scheme_stx_push_introduce_module_context(id, benv->stx_context); + scheme_hash_set(bt, name, id); + } +} + +void scheme_install_binding_names(Scheme_Object *binding_namess, Scheme_Env *env) +/* binding_namess has a per-phase mapping of symbosl to identifier, recorded + when `define` and `define-syntaxes` forms were compiled at the top level; + install the symbol-to-identifier mapping that was recorded during compilation + into the current namespace */ +{ + Scheme_Env *benv; + Scheme_Object *sym, *id, *table; + Scheme_Hash_Tree *ht; + Scheme_Hash_Table *bt; + intptr_t i, phase; + + if (!binding_namess) return; + + while (SCHEME_PAIRP(binding_namess)) { + table = SCHEME_CAR(binding_namess); + if (!SCHEME_PAIRP(table)) + return; + phase = SCHEME_INT_VAL(SCHEME_CAR(table)); + table = SCHEME_CDR(table); + + if (phase < 0) + return; + + benv = env; + while (phase > 0) { + scheme_prepare_exp_env(benv); + benv = benv->exp_env; + phase--; + } + + bt = scheme_get_binding_names_table(benv); + + if (SCHEME_HASHTRP(table)) { + ht = (Scheme_Hash_Tree *)table; + i = -1; + while ((i = scheme_hash_tree_next(ht, i)) != -1) { + scheme_hash_tree_index(ht, i, &sym, &id); + install_one_binding_name(bt, sym, id, benv); + } + } else if (SCHEME_VECTORP(table)) { + for (i = SCHEME_VEC_SIZE(table) >> 1; i--; ) { + install_one_binding_name(bt, SCHEME_VEC_ELS(table)[2*i], SCHEME_VEC_ELS(table)[2*i+1], benv); + } + } + + binding_namess = SCHEME_CDR(binding_namess); + } +} + /********** Auxilliary tables **********/ Scheme_Object **scheme_make_builtin_references_table(int *_unsafe_start) @@ -1917,7 +1976,7 @@ namespace_set_variable_value(int argc, Scheme_Object *argv[]) id = scheme_datum_to_syntax(argv[0], scheme_false, scheme_false, 0, 0); scheme_prepare_env_stx_context(env); id = scheme_stx_add_module_context(id, env->stx_context); - (void)scheme_global_binding(id, env); + (void)scheme_global_binding(id, env, 0); } scheme_shadow(env, argv[0], argv[1], 1); } diff --git a/racket/src/racket/src/eval.c b/racket/src/racket/src/eval.c index 89cd6c49ca..879e6745ed 100644 --- a/racket/src/racket/src/eval.c +++ b/racket/src/racket/src/eval.c @@ -2093,11 +2093,16 @@ define_execute_with_dynamic_state(Scheme_Object *vec, int delta, int defmacro, g = 1; /* Special handling of 0 values for define-syntaxes: - do nothing. This makes (define-values (a b c) (values)) + just create binding. This makes (define-values (a b c) (values)) a kind of declaration form, which is useful is a, b, or c is introduced by a macro. */ - if (dm_env && !g) + if (dm_env && !g) { + for (i = SCHEME_VEC_SIZE(vec) - delta; i--; ) { + b = scheme_global_keyword_bucket(SCHEME_VEC_ELS(vec)[i+delta], dm_env); + scheme_shadow(dm_env, (Scheme_Object *)b->key, scheme_false, 1); + } return scheme_void; + } i = SCHEME_VEC_SIZE(vec) - delta; @@ -4015,7 +4020,36 @@ static int get_comp_flags(Scheme_Config *config) return comp_flags; } -static Scheme_Object *optimize_resolve_expr(Scheme_Object* o, Comp_Prefix *cp, Scheme_Object *src_insp_desc) +static void create_binding_namess(Scheme_Comp_Env *cenv) +{ + Scheme_Hash_Table *binding_namess; + binding_namess= scheme_make_hash_table(SCHEME_hash_ptr); + cenv->binding_namess = binding_namess; +} + + +static Scheme_Object *binding_namess_as_list(Scheme_Hash_Table *binding_namess) +{ + int i; + Scheme_Object *l = scheme_null, **sorted_keys; + + if (!binding_namess->count) + return scheme_null; + + sorted_keys = scheme_extract_sorted_keys((Scheme_Object *)binding_namess); + + for (i = binding_namess->count; i--; ) { + l = scheme_make_pair(scheme_make_pair(sorted_keys[i], + scheme_hash_get(binding_namess, sorted_keys[i])), + l); + } + + return l; +} + +static Scheme_Object *optimize_resolve_expr(Scheme_Object* o, Comp_Prefix *cp, + Scheme_Object *src_insp_desc, + Scheme_Object *binding_namess) { Optimize_Info *oi; Resolve_Prefix *rp; @@ -4054,6 +4088,7 @@ static Scheme_Object *optimize_resolve_expr(Scheme_Object* o, Comp_Prefix *cp, S top->max_let_depth = max_let_depth; top->code = o; top->prefix = rp; + top->binding_namess = binding_namess; return (Scheme_Object *)top; } @@ -4135,7 +4170,9 @@ static void *compile_k(void) cenv = scheme_new_comp_env(genv, insp, frame_scopes, SCHEME_TOPLEVEL_FRAME - | SCHEME_KEEP_SCOPES_FRAME); + | SCHEME_KEEP_SCOPES_FRAME + | SCHEME_TMP_TL_BIND_FRAME); + create_binding_namess(cenv); if (rib) { cenv->expand_result_adjust = scheme_stx_push_introduce_module_context; @@ -4192,7 +4229,7 @@ static void *compile_k(void) } else { /* We want to simply compile `form', but we have to loop in case an expression is lifted in the process of compiling: */ - Scheme_Object *l, *prev_o = NULL; + Scheme_Object *l, *prev_o = NULL, *binding_namess; int max_let_depth; while (1) { @@ -4253,11 +4290,14 @@ static void *compile_k(void) rp = scheme_remap_prefix(rp, ri); + binding_namess = binding_namess_as_list(cenv->binding_namess); + top = MALLOC_ONE_TAGGED(Scheme_Compilation_Top); top->iso.so.type = scheme_compilation_top_type; top->max_let_depth = max_let_depth; top->code = o; top->prefix = rp; + top->binding_namess = binding_namess; if (recompile_every_compile) { int i; @@ -4418,6 +4458,8 @@ static void *eval_k(void) v = scheme_eval_clone(v); rp = scheme_prefix_eval_clone(top->prefix); + scheme_install_binding_names(top->binding_namess, env); + save_runstack = scheme_push_prefix(env, rp, NULL, NULL, 0, env->phase, NULL, scheme_false); if (as_tail) { @@ -4913,7 +4955,8 @@ static Scheme_Object *recompile_top(Scheme_Object *top) printf("%s\n\n", scheme_print_to_string(code, NULL)); #endif - top = optimize_resolve_expr(code, cp, ((Scheme_Compilation_Top*)top)->prefix->src_insp_desc); + top = optimize_resolve_expr(code, cp, ((Scheme_Compilation_Top*)top)->prefix->src_insp_desc, + ((Scheme_Compilation_Top*)top)->binding_namess); return top; } @@ -5003,7 +5046,7 @@ scheme_make_lifted_defn(Scheme_Object *sys_wraps, Scheme_Object **_ids, Scheme_O /* Registers scoped ids: */ for (ids = *_ids; !SCHEME_NULLP(ids); ids = SCHEME_CDR(ids)) { id = SCHEME_CAR(ids); - (void)scheme_global_binding(id, env->genv); + (void)scheme_global_binding(id, env->genv, 0); } l = icons(scheme_datum_to_syntax(define_values_symbol, scheme_false, sys_wraps, 0, 0), diff --git a/racket/src/racket/src/marshal.c b/racket/src/racket/src/marshal.c index 9f17ebb3c3..dd3ae0e21b 100644 --- a/racket/src/racket/src/marshal.c +++ b/racket/src/racket/src/marshal.c @@ -93,6 +93,8 @@ static Scheme_Object *read_module(Scheme_Object *obj); static Scheme_Object *read_top_level_require(Scheme_Object *obj); static Scheme_Object *write_top_level_require(Scheme_Object *obj); +static Scheme_Object *ht_to_vector(Scheme_Object *ht, int delay); + void scheme_init_marshal(Scheme_Env *env) { scheme_install_type_writer(scheme_application_type, write_application); @@ -296,6 +298,22 @@ static Scheme_Object *read_letrec(Scheme_Object *obj) return (Scheme_Object *)lr; } +static Scheme_Object *binding_namess_to_vectors(Scheme_Object *l) +{ + Scheme_Object *r = scheme_null; + + if (!l) return scheme_null; + + while (!SCHEME_NULLP(l)) { + r = cons(cons(SCHEME_CAR(SCHEME_CAR(l)), + ht_to_vector(SCHEME_CDR(SCHEME_CAR(l)), 0)), + r); + l = SCHEME_CDR(l); + } + + return r; +} + static Scheme_Object *write_top(Scheme_Object *obj) { Scheme_Compilation_Top *top = (Scheme_Compilation_Top *)obj; @@ -307,8 +325,9 @@ static Scheme_Object *write_top(Scheme_Object *obj) NULL); return cons(scheme_make_integer(top->max_let_depth), - cons((Scheme_Object *)top->prefix, - scheme_protect_quote(top->code))); + cons(binding_namess_to_vectors(top->binding_namess), + cons((Scheme_Object *)top->prefix, + scheme_protect_quote(top->code)))); } static Scheme_Object *read_top(Scheme_Object *obj) @@ -321,6 +340,9 @@ static Scheme_Object *read_top(Scheme_Object *obj) top->max_let_depth = SCHEME_INT_VAL(SCHEME_CAR(obj)); obj = SCHEME_CDR(obj); if (!SCHEME_PAIRP(obj)) return NULL; + top->binding_namess = SCHEME_CAR(obj); /* checking is in scheme_install_binding_names() */ + obj = SCHEME_CDR(obj); + if (!SCHEME_PAIRP(obj)) return NULL; top->prefix = (Resolve_Prefix *)SCHEME_CAR(obj); top->code = SCHEME_CDR(obj); if (!SAME_TYPE(SCHEME_TYPE(top->prefix), scheme_resolve_prefix_type)) @@ -1253,7 +1275,7 @@ static Scheme_Object *read_resolve_prefix(Scheme_Object *obj) return (Scheme_Object *)rp; } -static Scheme_Object *ht_to_vector(Scheme_Object *ht) +static Scheme_Object *ht_to_vector(Scheme_Object *ht, int delay) /* recurs for values in hash table; we assume that such nesting is shallow */ { intptr_t i, j, c; @@ -1292,8 +1314,8 @@ static Scheme_Object *ht_to_vector(Scheme_Object *ht) k = sorted_keys[i]; val = scheme_hash_tree_get(t, k); if (SCHEME_HASHTRP(val) || SCHEME_HASHTP(val)) - val = ht_to_vector(val); - else if (!SAME_OBJ(val, scheme_true)) + val = ht_to_vector(val, delay); + else if (delay && !SAME_OBJ(val, scheme_true)) val = make_delayed_syntax(val); SCHEME_VEC_ELS(vec)[j++] = k; SCHEME_VEC_ELS(vec)[j++] = val; @@ -1304,8 +1326,8 @@ static Scheme_Object *ht_to_vector(Scheme_Object *ht) k = sorted_keys[i]; val = scheme_hash_get(t, k); if (SCHEME_HASHTRP(val) || SCHEME_HASHTP(val)) - val = ht_to_vector(val); - else if (!SAME_OBJ(val, scheme_true)) + val = ht_to_vector(val, delay); + else if (delay && !SAME_OBJ(val, scheme_true)) val = make_delayed_syntax(val); SCHEME_VEC_ELS(vec)[j++] = k; SCHEME_VEC_ELS(vec)[j++] = val; @@ -1501,9 +1523,9 @@ static Scheme_Object *write_module(Scheme_Object *obj) l = cons((m->phaseless ? scheme_true : scheme_false), l); - l = cons(ht_to_vector(m->other_binding_names), l); - l = cons(ht_to_vector(m->et_binding_names), l); - l = cons(ht_to_vector(m->binding_names), l); + l = cons(ht_to_vector(m->other_binding_names, 1), l); + l = cons(ht_to_vector(m->et_binding_names, 1), l); + l = cons(ht_to_vector(m->binding_names, 1), l); l = cons(m->me->src_modidx, l); l = cons(scheme_resolved_module_path_value(m->modsrc), l); diff --git a/racket/src/racket/src/module.c b/racket/src/racket/src/module.c index e16754cbcf..b1081f425c 100644 --- a/racket/src/racket/src/module.c +++ b/racket/src/racket/src/module.c @@ -7939,7 +7939,7 @@ static Scheme_Object *add_lifted_defn(Scheme_Object *data, Scheme_Object **_ids, id = introduce_to_module_context(id, rn); - name = scheme_global_binding(id, env->genv); + name = scheme_global_binding(id, env->genv, 0); /* Create the bucket, indicating that the name will be defined: */ scheme_add_global_symbol(name, scheme_undefined, env->genv); @@ -8979,7 +8979,7 @@ static Scheme_Object *do_module_begin_at_phase(Scheme_Object *form, Scheme_Comp_ } /* Generate symbol for this binding: */ - name = scheme_global_binding(name, env->genv); + name = scheme_global_binding(name, env->genv, 0); /* Create the bucket, indicating that the name will be defined: */ scheme_add_global_symbol(name, scheme_undefined, env->genv); @@ -9086,7 +9086,7 @@ static Scheme_Object *do_module_begin_at_phase(Scheme_Object *form, Scheme_Comp_ } /* Generate symbol for this binding: */ - name = scheme_global_binding(name, env->genv); + name = scheme_global_binding(name, env->genv, 0); if (!SAME_OBJ(SCHEME_STX_VAL(orig_name), name) || !scheme_stx_equal_module_context(orig_name, env->genv->module->rn_stx)) @@ -11864,7 +11864,7 @@ void add_single_require(Scheme_Module_Exports *me, /* from module */ modname = scheme_module_resolve(modidx, 1); menv = scheme_module_access(modname, orig_env, 0); val = scheme_lookup_in_table(menv->toplevel, (char *)exsns[j]); - b = scheme_global_bucket(scheme_global_binding(iname, orig_env), orig_env); + b = scheme_global_bucket(scheme_global_binding(iname, orig_env, 0), orig_env); scheme_set_global_bucket(((copy_vars == 2) ? "namespace-require/constant" : "namespace-require/copy"), diff --git a/racket/src/racket/src/mzmark_compenv.inc b/racket/src/racket/src/mzmark_compenv.inc index 6d8bed0805..b62c6324bf 100644 --- a/racket/src/racket/src/mzmark_compenv.inc +++ b/racket/src/racket/src/mzmark_compenv.inc @@ -24,6 +24,9 @@ static int mark_comp_env_MARK(void *p, struct NewGC *gc) { gcMARK2(e->use, gc); gcMARK2(e->lifts, gc); + gcMARK2(e->bindings, gc); + + gcMARK2(e->binding_namess, gc); gcMARK2(e->expand_result_adjust_arg, gc); @@ -50,6 +53,9 @@ static int mark_comp_env_FIXUP(void *p, struct NewGC *gc) { gcFIXUP2(e->use, gc); gcFIXUP2(e->lifts, gc); + gcFIXUP2(e->bindings, gc); + + gcFIXUP2(e->binding_namess, gc); gcFIXUP2(e->expand_result_adjust_arg, gc); diff --git a/racket/src/racket/src/mzmark_type.inc b/racket/src/racket/src/mzmark_type.inc index 605e38e480..a91c8c8d03 100644 --- a/racket/src/racket/src/mzmark_type.inc +++ b/racket/src/racket/src/mzmark_type.inc @@ -2311,6 +2311,7 @@ static int namespace_val_MARK(void *p, struct NewGC *gc) { gcMARK2(e->access_insp, gc); gcMARK2(e->stx_context, gc); + gcMARK2(e->tmp_bind_scope, gc); gcMARK2(e->syntax, gc); gcMARK2(e->exp_env, gc); @@ -2357,6 +2358,7 @@ static int namespace_val_FIXUP(void *p, struct NewGC *gc) { gcFIXUP2(e->access_insp, gc); gcFIXUP2(e->stx_context, gc); + gcFIXUP2(e->tmp_bind_scope, gc); gcFIXUP2(e->syntax, gc); gcFIXUP2(e->exp_env, gc); @@ -2450,6 +2452,7 @@ static int compilation_top_val_MARK(void *p, struct NewGC *gc) { Scheme_Compilation_Top *t = (Scheme_Compilation_Top *)p; gcMARK2(t->code, gc); gcMARK2(t->prefix, gc); + gcMARK2(t->binding_namess, gc); return gcBYTES_TO_WORDS(sizeof(Scheme_Compilation_Top)); @@ -2459,6 +2462,7 @@ static int compilation_top_val_FIXUP(void *p, struct NewGC *gc) { Scheme_Compilation_Top *t = (Scheme_Compilation_Top *)p; gcFIXUP2(t->code, gc); gcFIXUP2(t->prefix, gc); + gcFIXUP2(t->binding_namess, gc); return gcBYTES_TO_WORDS(sizeof(Scheme_Compilation_Top)); diff --git a/racket/src/racket/src/mzmarksrc.c b/racket/src/racket/src/mzmarksrc.c index 6127359044..96eed8c542 100644 --- a/racket/src/racket/src/mzmarksrc.c +++ b/racket/src/racket/src/mzmarksrc.c @@ -932,6 +932,7 @@ namespace_val { gcMARK2(e->access_insp, gc); gcMARK2(e->stx_context, gc); + gcMARK2(e->tmp_bind_scope, gc); gcMARK2(e->syntax, gc); gcMARK2(e->exp_env, gc); @@ -988,6 +989,7 @@ compilation_top_val { Scheme_Compilation_Top *t = (Scheme_Compilation_Top *)p; gcMARK2(t->code, gc); gcMARK2(t->prefix, gc); + gcMARK2(t->binding_namess, gc); size: gcBYTES_TO_WORDS(sizeof(Scheme_Compilation_Top)); @@ -1279,6 +1281,9 @@ mark_comp_env { gcMARK2(e->use, gc); gcMARK2(e->lifts, gc); + gcMARK2(e->bindings, gc); + + gcMARK2(e->binding_namess, gc); gcMARK2(e->expand_result_adjust_arg, gc); diff --git a/racket/src/racket/src/schpriv.h b/racket/src/racket/src/schpriv.h index 12580e462d..4bb6a034c7 100644 --- a/racket/src/racket/src/schpriv.h +++ b/racket/src/racket/src/schpriv.h @@ -1413,6 +1413,8 @@ typedef struct { mzshort max_let_depth; Scheme_Object *code; struct Resolve_Prefix *prefix; /* NULL => a wrapper for a JITted module in `code' */ + Scheme_Object *binding_namess; /* list of to hash of to ; + additions to the top-level bindings table */ } Scheme_Compilation_Top; /* A `let', `let*', or `letrec' form is compiled to the intermediate @@ -2582,6 +2584,9 @@ typedef struct Scheme_Comp_Env Scheme_Object *lifts; + Scheme_Hash_Table *binding_namess; /* -> ( -> ); additions to the environment's + bindings table made during a particular compilation */ + mzshort rename_var_count; /* number of non-NULL `values' when `renames' was computed */ mzshort rename_rstart; /* leftover rstart from previous round; see env.c */ Scheme_Hash_Table *dup_check; /* table for finding colliding symbols in `values' */ @@ -3168,6 +3173,7 @@ void scheme_mark_all_use(Scheme_Comp_Env *frame); #define SCHEME_POST_BIND_FRAME (1 << 11) #define SCHEME_NESTED_MODULE_FRAME (1 << 12) #define SCHEME_KEEP_SCOPES_FRAME (1 << 13) +#define SCHEME_TMP_TL_BIND_FRAME (1 << 14) #define SCHEME_REC_BINDING_FRAME (SCHEME_TOPLEVEL_FRAME | SCHEME_MODULE_BEGIN_FRAME \ | SCHEME_INTDEF_FRAME | SCHEME_FOR_INTDEF) @@ -3285,6 +3291,8 @@ void scheme_define_parse(Scheme_Object *form, void scheme_shadow(Scheme_Env *env, Scheme_Object *n, Scheme_Object *val, int as_var); void scheme_binding_names_from_module(Scheme_Env *menv); +void scheme_install_binding_names(Scheme_Object *binding_namess, Scheme_Env *env); +Scheme_Hash_Table *scheme_get_binding_names_table(Scheme_Env *env); int scheme_prefix_depth(Resolve_Prefix *rp); Scheme_Object **scheme_push_prefix(Scheme_Env *genv, Resolve_Prefix *rp, @@ -3421,6 +3429,7 @@ struct Scheme_Env { Scheme_Object *access_insp; /* for gaining protected access */ Scheme_Object *stx_context; /* encapsulates scopes, shifts, etc. */ + Scheme_Object *tmp_bind_scope; /* for compiling top-level definitions */ Scheme_Bucket_Table *syntax; struct Scheme_Env *exp_env; @@ -3633,7 +3642,7 @@ void scheme_add_global_constant_symbol(Scheme_Object *name, Scheme_Object *v, Sc } while(0) -Scheme_Object *scheme_global_binding(Scheme_Object *id, Scheme_Env *env); +Scheme_Object *scheme_global_binding(Scheme_Object *id, Scheme_Env *env, int for_top_level); Scheme_Object *scheme_future_global_binding(Scheme_Object *id, Scheme_Env *env); Scheme_Object *scheme_sys_wraps(Scheme_Comp_Env *env); diff --git a/racket/src/racket/src/schvers.h b/racket/src/racket/src/schvers.h index 06e21322b8..7cd63bcc70 100644 --- a/racket/src/racket/src/schvers.h +++ b/racket/src/racket/src/schvers.h @@ -13,12 +13,12 @@ consistently.) */ -#define MZSCHEME_VERSION "6.2.900.14" +#define MZSCHEME_VERSION "6.2.900.15" #define MZSCHEME_VERSION_X 6 #define MZSCHEME_VERSION_Y 2 #define MZSCHEME_VERSION_Z 900 -#define MZSCHEME_VERSION_W 14 +#define MZSCHEME_VERSION_W 15 #define MZSCHEME_VERSION_MAJOR ((MZSCHEME_VERSION_X * 100) + MZSCHEME_VERSION_Y) #define MZSCHEME_VERSION_MINOR ((MZSCHEME_VERSION_Z * 1000) + MZSCHEME_VERSION_W)