From da82fe2a2db6a92f3beab85ec5960a6095b6364d Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Wed, 25 Jun 2008 18:54:38 +0000 Subject: [PATCH] eval and phases (4.0.1.2) svn: r10452 --- collects/scheme/match/runtime.ss | 1 - collects/scheme/private/namespace.ss | 23 +- collects/scheme/private/serialize.ss | 3 +- .../scribblings/reference/custodians.scrbl | 2 +- .../scribblings/reference/eval-model.scrbl | 35 +- collects/scribblings/reference/eval.scrbl | 12 +- .../scribblings/reference/namespaces.scrbl | 160 ++- .../scribblings/reference/syntax-model.scrbl | 74 +- collects/scribblings/reference/syntax.scrbl | 22 +- collects/syntax/modcode.ss | 3 - collects/syntax/modread.ss | 3 +- collects/tests/mzscheme/namespac.ss | 27 + collects/tests/mzscheme/stx.ss | 59 +- collects/tests/r6rs/eval.ss | 20 + src/mzscheme/src/cstartup.inc | 1106 ++++++++--------- src/mzscheme/src/env.c | 54 +- src/mzscheme/src/eval.c | 31 +- src/mzscheme/src/fun.c | 12 + src/mzscheme/src/module.c | 171 ++- src/mzscheme/src/portfun.c | 11 +- src/mzscheme/src/print.c | 28 + src/mzscheme/src/schminc.h | 2 +- src/mzscheme/src/schpriv.h | 1 + src/mzscheme/src/schvers.h | 4 +- src/mzscheme/src/stxobj.c | 18 +- src/mzscheme/src/syntax.c | 40 +- src/mzscheme/src/thread.c | 13 +- 27 files changed, 1099 insertions(+), 836 deletions(-) diff --git a/collects/scheme/match/runtime.ss b/collects/scheme/match/runtime.ss index dc121ee2a2..8bd598543f 100644 --- a/collects/scheme/match/runtime.ss +++ b/collects/scheme/match/runtime.ss @@ -26,4 +26,3 @@ ;; can we pass this value to regexp-match? (define (matchable? e) (or (string? e) (bytes? e))) - diff --git a/collects/scheme/private/namespace.ss b/collects/scheme/private/namespace.ss index de48348725..c3d137e56d 100644 --- a/collects/scheme/private/namespace.ss +++ b/collects/scheme/private/namespace.ss @@ -15,8 +15,10 @@ (define orig-varref (#%variable-reference orig-varref)) (define (make-base-empty-namespace) - (let ([ns (make-empty-namespace)]) - (namespace-attach-module (variable-reference->empty-namespace orig-varref) + (let* ([this-ns (variable-reference->empty-namespace orig-varref)] + [ns (parameterize ([current-namespace this-ns]) ; ensures correct phase + (make-empty-namespace))]) + (namespace-attach-module this-ns 'scheme/base ns) ns)) @@ -43,7 +45,10 @@ stx id-stx)) (syntax/loc stx - (define id (make-namespace-anchor (#%variable-reference id)))))])) + ;; two-step definition allows this to work in for-syntax contexts: + (begin + (define tmp #f) + (define id (make-namespace-anchor (#%variable-reference tmp))))))])) (define-struct namespace-anchor (var)) @@ -59,14 +64,4 @@ (raise-type-error 'anchor->namespace "namespace anchor" ra)) - (let ([mp (variable-reference->resolved-module-path - (namespace-anchor-var ra))]) - (if mp - (let ([ns (namespace-anchor->empty-namespace ra)]) - (parameterize ([current-namespace ns]) - (module->namespace (let ([name (resolved-module-path-name mp)]) - (if (path? name) - name - (list 'quote name)))))) - (variable-reference->top-level-namespace - (namespace-anchor-var ra)))))) + (variable-reference->namespace (namespace-anchor-var ra)))) diff --git a/collects/scheme/private/serialize.ss b/collects/scheme/private/serialize.ss index d2424867b4..938575d95a 100644 --- a/collects/scheme/private/serialize.ss +++ b/collects/scheme/private/serialize.ss @@ -62,6 +62,7 @@ (define deserialize-module-guard (make-parameter (lambda (mod-path sym) (void)))) + (define varref (#%variable-reference varref)) (define (mod-to-id info mod-map cache) (let ([deserialize-id (serialize-info-deserialize-id info)]) @@ -72,7 +73,7 @@ (let ([path+name (cond [(identifier? deserialize-id) - (let ([b (identifier-binding deserialize-id)]) + (let ([b (identifier-binding deserialize-id (variable-reference->phase varref))]) (cons (and (list? b) (if (symbol? (caddr b)) diff --git a/collects/scribblings/reference/custodians.scrbl b/collects/scribblings/reference/custodians.scrbl index eeb90a3ac8..a5e784c5dd 100644 --- a/collects/scribblings/reference/custodians.scrbl +++ b/collects/scribblings/reference/custodians.scrbl @@ -48,7 +48,7 @@ subordinate to @scheme[super] (directly or indirectly). If @defproc[(custodian-memory-accounting-available?) boolean?]{ -Returns @scheme[#t] if MzScheme is compiled with support for +Returns @scheme[#t] if PLT Scheme is compiled with support for per-custodian memory accounting, @scheme[#f] otherwise. @margin-note{Memory accounting is normally available in PLT Scheme 3m, diff --git a/collects/scribblings/reference/eval-model.scrbl b/collects/scribblings/reference/eval-model.scrbl index 0ff681c796..cc0dc136ac 100644 --- a/collects/scribblings/reference/eval-model.scrbl +++ b/collects/scribblings/reference/eval-model.scrbl @@ -516,7 +516,7 @@ definitions. For example, given the module declaration @schemeblock[ -(module m mzscheme +(module m scheme (define x 10)) ] @@ -525,16 +525,16 @@ and installs @scheme[10] as its value. This @scheme[x] is unrelated to any top-level definition of @scheme[x]. @;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -@subsection[#:tag "module-phase"]{Module Phases} +@subsection[#:tag "module-phase"]{Phases} A module can be @tech{instantiate}d in multiple @deftech{phases}. A phase is an integer that, again, is effectively a prefix on the names of module-level definitions. A top-level @scheme[require] @tech{instantiates} a module at @tech{phase} 0, if the module is not already @tech{instantiate}d at phase 0. A top-level -@scheme[require-for-syntax] @tech{instantiates} a module at +@scheme[(require (for-syntax ....))] @tech{instantiates} a module at @tech{phase} 1 (if it is not already @tech{instantiate}d at that -level); a @scheme[require-for-syntax] also has a different binding +level); @scheme[for-syntax] also has a different binding effect on further program parsing, as described in @secref["intro-binding"]. @@ -553,19 +553,28 @@ If a module @tech{instantiate}d at @tech{phase} @math{n} @scheme[require]s another module, then the @scheme[require]d module is first @tech{instantiate}d at phase @math{n}, and so on transitively. (Module @scheme[require]s cannot form cycles.) If a -module @tech{instantiate}d at phase @math{n} -@scheme[require-for-syntax]es another module, the other module is -first @tech{instantiate}d at @tech{phase} @math{n+1}, and so on. If a +module @tech{instantiate}d at phase @math{n} @scheme[require]s +@scheme[for-syntax] another module, the other module is first +@tech{instantiate}d at @tech{phase} @math{n+1}, and so on. If a module @tech{instantiate}d at phase @math{n} for non-zero @math{n} -@scheme[require-for-template]s another module, the other module is -first @tech{instantiate}d at @tech{phase} @math{n-1}, and so on. +@scheme[require]s @scheme[for-template] another module, the other +module is first @tech{instantiate}d at @tech{phase} @math{n-1}, and so +on. A final distinction among module @tech{instantiations} is that -multiple @tech{instantiations} may exist at phase 1 and higher. These +multiple @tech{instantiations} may exist at @tech{phase} 1 and higher. These @tech{instantiations} are created by the parsing of module forms (see @secref["mod-parse"]), and are, again, conceptually distinguished by prefixes. +Top-level variables can exist in multiple phases in the same way as +within modules. For example, @scheme[define-for-syntax] creates a +@tech{phase} 1 variable. Furthermore, reflective operations like +@scheme[make-base-namespace] and @scheme[eval] provide access to +top-level variables in higher @tech{phases}, while module +@tech{instantiations} (triggered by with @scheme[require]) relative to such +top-levels are in corresponding higher @tech{phase}s. + @;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @subsection[#:tag "module-redeclare"]{Module Re-declarations} @@ -682,8 +691,8 @@ thread yields the parameter's value. A parameter procedure sets or accesses the relevant thread cell for its parameter. Various operations, such as @scheme[parameterize] or -@scheme[with-parameterization], install a parameterization into the -current continuation's frame. +@scheme[call-with-parameterization], install a parameterization into +the current continuation's frame. @;------------------------------------------------------------------------ @section[#:tag "exn-model"]{Exceptions} @@ -757,7 +766,7 @@ custodian is shut down. The custodian only weakly retains the box itself, however (so the box and its content can be collected if there are no other references to them). -When MzScheme is compiled with support for per-custodian memory +When PLT Scheme is compiled with support for per-custodian memory accounting (see @scheme[custodian-memory-accounting-available?]), the @scheme[current-memory-use] procedure can report a custodian-specific result. This result determines how much memory is occupied by objects diff --git a/collects/scribblings/reference/eval.scrbl b/collects/scribblings/reference/eval.scrbl index 116683d030..284c743487 100644 --- a/collects/scribblings/reference/eval.scrbl +++ b/collects/scribblings/reference/eval.scrbl @@ -45,11 +45,13 @@ it is sent to the @tech{evaluation handler}: @itemize{ - @item{If @scheme[top-level-form] is a pair whose @scheme[car] is a symbol or - identifier, and if applying @scheme[namespace-syntax-introduce] - to the (@scheme[datum->syntax]-converted) identifier produces - an identifier bound to @scheme[module], then only that - identifier is enriched.} + @item{If @scheme[top-level-form] is a pair whose @scheme[car] is a + symbol or identifier, and if applying + @scheme[namespace-syntax-introduce] to the + (@scheme[datum->syntax]-converted) identifier produces an + identifier bound to @scheme[module] in a @tech{phase level} + that corresponds to @scheme[namespace]'s @tech{base phase}, + then only that identifier is enriched.} @item{For any other @scheme[top-level-form], @scheme[namespace-syntax-introduce] is applied to the entire diff --git a/collects/scribblings/reference/namespaces.scrbl b/collects/scribblings/reference/namespaces.scrbl index c8e0d7399a..3a3bf7b966 100644 --- a/collects/scribblings/reference/namespaces.scrbl +++ b/collects/scribblings/reference/namespaces.scrbl @@ -4,9 +4,9 @@ @title{Namespaces} See @secref["namespace-model"] for basic information on the -namespace model. +@tech{namespace} model. -A new namespace is created with procedures like +A new @tech{namespace} is created with procedures like @scheme[make-empty-namespace], and @scheme[make-base-namespace], which return a first-class namespace value. A namespace is used by setting the @scheme[current-namespace] parameter value, or by providing the @@ -21,21 +21,27 @@ otherwise.} @defproc[(make-empty-namespace) namespace?]{ -Creates a new namespace that is empty, and whose @tech{module registry} -contains no mappings. Attach modules from an existing namespace to the -new one with @scheme[namespace-attach-module].} +Creates a new namespace that is empty, and whose @tech{module +registry} contains no mappings. The namespace's @tech{base phase} is +the same as the @tech{base phase} of the @tech{current +namespace}. Attach modules from an existing namespace to the new one +with @scheme[namespace-attach-module].} @defproc[(make-base-empty-namespace) namespace?]{ Creates a new empty namespace, but with @schememodname[scheme/base] -attached.} +attached. The namespace's @tech{base phase} is the same as the +@tech{phase} in which the @scheme[make-base-empty-namespace] +function was created.} @defproc[(make-base-namespace) namespace?]{ Creates a new namespace with @schememodname[scheme/base] attached and -@scheme[require]d into the top-level environment.} +@scheme[require]d into the top-level environment. The namespace's +@tech{base phase} is the same as the @tech{phase} in which the +@scheme[make-base-namespace] function was created.} @defform[(define-namespace-anchor id)]{ @@ -56,16 +62,15 @@ Returns @scheme[#t] if @scheme[v] is a namespace-anchor value, @defproc[(namespace-anchor->empty-namespace [a namespace-anchor?]) namespace?]{ -Returns an empty namespace that shares a @tech{module registry} with the -source of the anchor. +Returns an empty namespace that shares a @tech{module registry} with +the source of the anchor, and whose @tech{base phase} the the +@tech{phase} in which the anchor was created. If the anchor is from a @scheme[define-namespace-anchor] form in a module context, then the source is the namespace in which the containing module is instantiated. If the anchor is from a @scheme[define-namespace-anchor] form in a top-level content, then the -source is the namespace in which the anchor definition was evaluated. -The resulting namespace corresponds to @tech{phase} 0, independent of -the phase of @scheme[a]'s definition.} +source is the namespace in which the anchor definition was evaluated.} @defproc[(namespace-anchor->namespace [a namespace-anchor?]) namespace?]{ @@ -73,10 +78,9 @@ the phase of @scheme[a]'s definition.} Returns a namespace corresponding to the source of the anchor. If the anchor is from a @scheme[define-namespace-anchor] form in a -module context, then the result is a namespace obtained via -@scheme[module->namespace] using the resolved name of the enclosing -module and the @tech{module registry} of the module instance at -@tech{phase} 0. +module context, then the result is a namespace for the module's body +in the anchor's phase. The result is the same as a namespace obtained +via @scheme[module->namespace]. If the anchor is from a @scheme[define-namespace-anchor] form in a top-level content, then the result is the namespace in which the @@ -95,14 +99,22 @@ lexical context of the resulting identifier corresponds to the top-level environment of the current namespace; the identifier has no source location or properties.} + +@defproc[(namespace-module-identifier [namespace namespace? (current-namespace)]) identifier?]{ + +Returns an identifier whose binding is @scheme[module] in the +@tech{base phase} of @scheme[namespace].} + + @defproc[(namespace-variable-value [sym symbol?] [use-mapping? any/c #t] [failure-thunk (or/c (-> any) false/c) #f] [namespace namespace? (current-namespace)]) any]{ -Returns a value for @scheme[sym] in @scheme[namespace]. The returned value -depends on @scheme[use-mapping?]: +Returns a value for @scheme[sym] in @scheme[namespace], using +@scheme[namespace]'s @tech{base phase}. The returned value depends on +@scheme[use-mapping?]: @itemize{ @@ -138,12 +150,13 @@ exception.} void?]{ Sets the value of @scheme[sym] in the top-level environment of -@scheme[namespace] for @tech{phase level} 0, defining @scheme[sym] if +@scheme[namespace] in the @tech{base phase}, defining @scheme[sym] if it is not already defined. -If @scheme[map?] is supplied as true, then the namespace's identifier -mapping is also adjusted (see @secref["namespace-model"]) so that -@scheme[sym] maps to the variable.} +If @scheme[map?] is supplied as true, then the namespace's +@tech{identifier} mapping is also adjusted (see +@secref["namespace-model"]) in the @tech{phase level} corresponding to +the @tech{base phase}, so that @scheme[sym] maps to the variable.} @defproc[(namespace-undefine-variable! [sym symbol?] @@ -151,27 +164,29 @@ mapping is also adjusted (see @secref["namespace-model"]) so that void?]{ Removes the @scheme[sym] variable, if any, in the top-level -environment of @scheme[namespace] at @tech{phase level} 0. The -namespace's identifier mapping (see @secref["namespace-model"]) is -unaffected.} +environment of @scheme[namespace] in its @tech{base phase}. The +namespace's @tech{identifier} mapping (see @secref["namespace-model"]) +is unaffected.} @defproc[(namespace-mapped-symbols [namespace namespace? (current-namespace)]) (listof symbol?)]{ Returns a list of all symbols that are mapped to variables, syntax, -and imports in @scheme[namespace] for @tech{phase level} 0.} +and imports in @scheme[namespace] for the @tech{phase level} +corresponding to the @tech{namespace}'s @tech{base phase}.} @defproc[(namespace-require [quoted-raw-require-spec any/c]) void?]{ -Performs the import corresponding to @scheme[quoted-raw-require-spec] in -the top-level environment of the current namespace, like a top-level -@scheme[#%require]. The @scheme[quoted-raw-require-spec] argument must be a -datum that corresponds to a quoted @scheme[_raw-require-spec] for -@scheme[#%require], which includes module paths. +Performs the import corresponding to @scheme[quoted-raw-require-spec] +in the top-level environment of the current namespace, like a +top-level @scheme[#%require]. The @scheme[quoted-raw-require-spec] +argument must be a datum that corresponds to a quoted +@scheme[_raw-require-spec] for @scheme[#%require], which includes +module paths. Module paths in @scheme[quoted-raw-require-spec] are resolved with respect to @scheme[current-load-relative-directory] or @@ -183,28 +198,29 @@ current namespace corresponds to a module body.} void?]{ Like @scheme[namespace-require] for syntax exported from the module, -but exported variables at @tech{phase level} 0 are treated differently: the -export's current value is copied to a top-level variable in the -current namespace.} +but exported variables at the namespace's @tech{base phase} are +treated differently: the export's current value is copied to a +top-level variable in the current namespace.} @defproc[(namespace-require/constant [quoted-raw-require-spec any/c]) void?]{ -Like @scheme[namespace-require], but for each exported variable at -@tech{phase level} 0, the export's value is copied to a corresponding -top-level variable that is made immutable. Despite setting the -top-level variable, the corresponding identifier is bound as -imported.} +Like @scheme[namespace-require], but for each exported variable at the +@tech{namespace}'s @tech{base phase}, the export's value is copied to +a corresponding top-level variable that is made immutable. Despite +setting the top-level variable, the corresponding identifier is bound +as imported.} @defproc[(namespace-require/expansion-time [quoted-raw-require-spec any/c]) void?]{ Like @scheme[namespace-require], but only the transformer part of the -module is executed; that is, the module is merely @tech{visit}ed, and -not @tech{instantiate}d (see @secref["mod-parse"]). If the required -module has not been instantiated before, the module's variables remain +module is executed relative to the @tech{namespace}'s @tech{base +phase}; that is, the module is merely @tech{visit}ed, and not +@tech{instantiate}d (see @secref["mod-parse"]). If the required module +has not been instantiated before, the module's variables remain undefined.} @@ -214,19 +230,24 @@ undefined.} any]{ Attaches the instantiated module named by @scheme[modname] in -@scheme[src-namespace] to the @tech{module registry} of -@scheme[dest-namespace]. If @scheme[modname] is not a symbol, the -current module name resolver is called to resolve the path, but no -module is loaded; the resolved form of @scheme[modname] is used as the -module name in @scheme[dest-namespace]. In addition to +@scheme[src-namespace] (at its @tech{base phase}) to the @tech{module +registry} of @scheme[dest-namespace]. If @scheme[modname] is not a +symbol, the current module name resolver is called to resolve the +path, but no module is loaded; the resolved form of @scheme[modname] +is used as the module name in @scheme[dest-namespace]. In addition to @scheme[modname], every module that it imports (directly or indirectly) is also recorded in the current namespace's @tech{module -registry}. If @scheme[modname] does not refer to an instantiated -module in @scheme[src-namespace], or if the name of any module to be -attached already has a different declaration or instance in -@scheme[dest-namespace], then the @exnraise[exn:fail:contract]. The -inspector of the module invocation in @scheme[dest-namespace] is the -same as inspector of the invocation in @scheme[src-namespace].} +registry}. The inspector of the module invocation in +@scheme[dest-namespace] is the same as inspector of the invocation in +@scheme[src-namespace]. + +If @scheme[modname] does not refer to an instantiated module in +@scheme[src-namespace], or if the name of any module to be attached +already has a different declaration or instance in +@scheme[dest-namespace], then the @exnraise[exn:fail:contract]. + +If @scheme[src-namespace] and @scheme[dest-namespace] do not have the +same @tech{base phase}, then the @exnraise[exn:fail:contract].} @defproc[(namespace-unprotect-module [inspector inspector?] @@ -252,10 +273,11 @@ is useful only for identification via @scheme[eq?].} @defproc[(module->namespace [modname module-path?]) namespace?]{ Returns a namespace that corresponds to the body of an instantiated -module in the current namespace's @tech{module registry}. The returned -namespace has the same @tech{module registry} as the current -namespace. Modifying a binding in the namespace changes the binding -seen in modules that require the namespace's module. +module in the current namespace's @tech{module registry} and in the +current namespace's @tech{base phase}. The returned namespace has the +same @tech{module registry} as the current namespace. Modifying a +binding in the namespace changes the binding seen in modules that +require the namespace's module. Module paths in a top-level @scheme[require] expression are resolved with respect to the namespace's module. New @scheme[provide] @@ -305,21 +327,20 @@ correspond to the first two elements of a list produced by namespace?]{ Returns an empty namespace that shares module declarations and -instances with the namespace in which @scheme[varref] is -instantiated. The namespace corresponds to @tech{phase} 0, independent -of the phase of @scheme[varref]'s binding.} +instances with the namespace in which @scheme[varref] is instantiated, +and with the same phase as @scheme[varref].} -@defproc[(variable-reference->top-level-namespace [varref variable-reference?]) +@defproc[(variable-reference->namespace [varref variable-reference?]) namespace?]{ -If @scheme[varref] refers to a top-level binding, the result is -@scheme[varref]'s namespace if it corresponds to a @tech{phase} 0 -binding, otherwise it is the @tech{phase} 0 namespace associated with -@scheme[varref]'s namespace. +If @scheme[varref] refers to a module binding, then the result is a +namespace for the module's body in the referenced binding's +@tech{phase}; the result is the same as a namespace obtained via +@scheme[module->namespace]. -If @scheme[varref] refers to a module binding, then the -@exnraise[exn:fail:contract].} +If @scheme[varref] refers to a top-level binding, then the result is +the namespace in which the referenced binding is defined.} @defproc[(variable-reference->resolved-module-path [varref variable-reference?]) @@ -330,3 +351,8 @@ If @scheme[varref] refers to a module binding, the result is a If @scheme[varref] refers to a top-level binding, then the @exnraise[exn:fail:contract].} + +@defproc[(variable-reference->phase [varref variable-reference?]) + exact-nonnegative-integer?]{ + +Returns the @tech{phase} of the binding referenced by @scheme[varref].} diff --git a/collects/scribblings/reference/syntax-model.scrbl b/collects/scribblings/reference/syntax-model.scrbl index 10f2eafa7f..9a5dbbb5e3 100644 --- a/collects/scribblings/reference/syntax-model.scrbl +++ b/collects/scribblings/reference/syntax-model.scrbl @@ -73,7 +73,7 @@ reference to a specific @tech{top-level variable}. Every binding has a @deftech{phase level} in which it can be referenced, where a @tech{phase level} normally corresponds to an -integer (but the special @deftech{label phase level} does not +integer (but the special @tech{label phase level} does not correspond to an integer). @tech{Phase level} 0 corresponds to the run time of the enclosing module (or the run time of top-level expressions). Bindings in @tech{phase level} 0 constitute the @@ -84,7 +84,7 @@ expanded; bindings in @tech{phase level} 1 constitute the run time of a different module for which the enclosing module is imported for use at @tech{phase level} 1 (relative to the importing module); bindings in @tech{phase level} -1 constitute the -@deftech{template environment}. The @tech{label phase level} does not +@deftech{template environment}. The @deftech{label phase level} does not correspond to any execution time; it is used to track bindings (e.g., to identifiers within documentation) without implying an execution dependency. @@ -313,7 +313,12 @@ things: is called as a @tech{syntax transformer} (described below), and parsing starts again with the @tech{syntax-object} result. If the @tech{transformer binding} is to any other kind of value, - parsing fails with an @scheme[exn:fail:syntax] exception.} + parsing fails with an @scheme[exn:fail:syntax] exception. The + call to the @tech{syntax transformer} is @scheme[parameterize]d + to set @scheme[current-namespace] to a @tech{namespace} that + shares @tech{bindings} and @tech{variables} with the namespace + being used to expand, except that its @tech{base phase} is one + greater.} @item{A @tech{variable} @tech{binding}, such as introduced by a module-level @scheme[define] or by @scheme[let]. In this case, @@ -621,7 +626,7 @@ If the last expression form turns out to be a @scheme[define-values] or @scheme[define-syntaxes] form, expansion fails with a syntax error. @;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -@subsection[#:tag "mod-parse"]{Module Phases} +@subsection[#:tag "mod-parse"]{Module Phases and Visits} A @scheme[require] form not only introduces @tech{bindings} at expansion time, but also @deftech{visits} the referenced module when @@ -632,23 +637,23 @@ in the module, and also evaluates all expressions for Module @tech{visits} propagate through @scheme[require]s in the same way as module @tech{instantiation}. Moreover, when a module is -@tech{visit}ed, any module that it @scheme[require-for-syntax]es is -@tech{instantiate}d at @tech{phase} 1, which the adjustment that -@scheme[require-for-template] leading back to @tech{phase} 0 causes -the required module to be merely visited at @tech{phase} 0, not -@tech{instantiate}d. +@tech{visit}ed, any module that it @scheme[require]s +@scheme[for-syntax] is @tech{instantiate}d at @tech{phase} 1, with the +adjustment that @scheme[require] @scheme[for-template]s leading back +to @tech{phase} 0 causes the required module to be merely visited at +@tech{phase} 0, not @tech{instantiate}d. -When the expander encounters @scheme[require-for-syntax], it +When the expander encounters @scheme[(require (for-syntax ....))], it immediately instantiates the required module at @tech{phase} 1, in addition to adding bindings scheme @tech{phase level} 1 (i.e., the @tech{transformer environment}). -When the expander encounters @scheme[require] and -@scheme[require-for-syntax] within a @tech{module context}, the -resulting @tech{visits} and @tech{instantiations} are specific to the -expansion of the enclosing module, and are kept separate from -@tech{visits} and @tech{instantiations} triggered from a -@tech{top-level context} or from the expansion of a different module. +When the expander encounters @scheme[require] and @scheme[(require +(for-syntax ....))] within a @tech{module context}, the resulting +@tech{visits} and @tech{instantiations} are specific to the expansion +of the enclosing module, and are kept separate from @tech{visits} and +@tech{instantiations} triggered from a @tech{top-level context} or +from the expansion of a different module. @;------------------------------------------------------------------------ @section[#:tag "compilation-model"]{Compilation} @@ -705,10 +710,15 @@ names to module declarations (see @secref["module-eval-model"]). This registry is shared by all @tech{phase level}s. For evaluation, each namespace encapsulates a distinct set of -top-level variables, as well as a potentially distinct set of module -instances in each @tech{phase}. That is, even though module -declarations are shared for all @tech{phase levels}, module instances -are distinct for each @tech{phase}. +top-level variables at various @tech{phases}, as well as a potentially +distinct set of module instances in each @tech{phase}. That is, even +though module declarations are shared for all @tech{phase levels}, +module instances are distinct for each @tech{phase}. Each namespace +has a @deftech{base phase}, which corresponds to the phase used by +reflective operations such as @scheme[eval] and +@scheme[dynamic-require]. In particular, using @scheme[eval] on a +@scheme[require] form @tech{instantiates} a module in the namespace's +@tech{base phase}. After a namespace is created, module instances from existing namespaces can be attached to the new namespace. In terms of the @@ -725,8 +735,8 @@ code that is executing, or with the namespace that was used to link the compiled form of the currently evaluating code. In particular, changing the current namespace during evaluation does not change the variables to which executing expressions refer. The current namespace -only determines the behavior of (essentially reflective) operations to -expand code and to start evaluating expanded/compiled code. +only determines the behavior of reflective operations to expand code +and to start evaluating expanded/compiled code. @examples[ (code:line @@ -741,16 +751,18 @@ expand code and to start evaluating expanded/compiled code. (display (eval 'x)))) (code:comment #, @t{displays @scheme['new]})) ] -A namespace is purely a top-level entity, not to be confused with an -environment. In particular, a namespace does not encapsulate the full -environment of an expression inside local-binding forms. +A @tech{namespace} is purely a top-level entity, not to be confused +with an @tech{environment}. In particular, a @tech{namespace} does not +encapsulate the full @tech{environment} of an expression inside +local-binding forms. -If an identifier is bound to syntax or to an import, then defining the -identifier as a variable shadows the syntax or import in future uses -of the environment. Similarly, if an identifier is bound to a -top-level variable, then binding the identifier to syntax or an import -shadows the variable; the variable's value remains unchanged, however, -and may be accessible through previously evaluated expressions. +If an @tech{identifier} is bound to syntax or to an import, then +defining the @tech{identifier} as a @tech{variable} shadows the syntax +or import in future uses of the environment. Similarly, if an +@tech{identifier} is bound to a @tech{top-level variable}, then +binding the identifier to syntax or an import shadows the variable; +the variable's value remains unchanged, however, and may be accessible +through previously evaluated expressions. @examples[ (define x 5) diff --git a/collects/scribblings/reference/syntax.scrbl b/collects/scribblings/reference/syntax.scrbl index f8ba8bd6fb..af0a6bac28 100644 --- a/collects/scribblings/reference/syntax.scrbl +++ b/collects/scribblings/reference/syntax.scrbl @@ -112,7 +112,9 @@ action depends on the shape of the form: @item{If it is a @scheme[define-syntaxes] or @scheme[define-values-for-syntax] form, then the right-hand side is evaluated (in @tech{phase} 1), and the binding is immediately - installed for further partial expansion within the module.} + installed for further partial expansion within the + module. Evaluation of the right-hand side is @scheme[parameterize]d + to set @scheme[current-namespace] as in @scheme[let-syntax].} @item{If the form is a @scheme[require] form, bindings are introduced immediately, and the imported modules are @tech{instantiate}d or @@ -1179,6 +1181,12 @@ Creates a @tech{transformer binding} (see relative to the surrounding context. (See @secref["id-model"] for information on @tech{phase levels}.) +The evaluation of each @scheme[trans-expr] is @scheme[parameterize]d +to set @scheme[current-namespace] to a @tech{namespace} that shares +@tech{bindings} and @tech{variables} with the namespace being used to +expand the @scheme[let-syntax] form, except that its @tech{base phase} +is one greater. + Each @scheme[id] is bound in the @scheme[body]s, and not in other @scheme[trans-expr]s.} @@ -1486,8 +1494,10 @@ z The first form creates a @tech{transformer binding} (see @secref["transformer-model"]) of @scheme[id] with the value of @scheme[expr], which is an expression at @tech{phase level} 1 relative -to the surrounding context. (See @secref["id-model"] for -information on @tech{phase levels}.) +to the surrounding context. (See @secref["id-model"] for information +on @tech{phase levels}.) Evaluation of @scheme[expr] side is +@scheme[parameterize]d to set @scheme[current-namespace] as in +@scheme[let-syntax]. The second form is a shorthand the same as for @scheme[define]; it expands to a definition of the first form where the @scheme[expr] is a @@ -1499,7 +1509,7 @@ expands to a definition of the first form where the @scheme[expr] is a Like @scheme[define-syntax], but creates a @tech{transformer binding} for each @scheme[id]. The @scheme[expr] should produce as many values as @scheme[id]s, and each value is bound to the corresponding -@scheme[id].} +@scheme[id]. } @defform*[[(define-for-syntax id expr) @@ -1508,7 +1518,9 @@ as @scheme[id]s, and each value is bound to the corresponding Like @scheme[define], except that the binding is at @tech{phase level} 1 instead of @tech{phase level} 0 relative to its context. The expression for the binding is also at @tech{phase level} 1. (See -@secref["id-model"] for information on @tech{phase levels}.)} +@secref["id-model"] for information on @tech{phase levels}.) +Evaluation of @scheme[expr] side is @scheme[parameterize]d to set +@scheme[current-namespace] as in @scheme[let-syntax].} @defform[(define-values-for-syntax (id ...) expr)]{ diff --git a/collects/syntax/modcode.ss b/collects/syntax/modcode.ss index 34cd896d3b..74832df19c 100644 --- a/collects/syntax/modcode.ss +++ b/collects/syntax/modcode.ss @@ -1,4 +1,3 @@ - (module modcode scheme/base (require mzlib/port mzlib/contract @@ -21,8 +20,6 @@ . opt-> . any)]) - - (define moddep-current-open-input-file (make-parameter open-input-file)) diff --git a/collects/syntax/modread.ss b/collects/syntax/modread.ss index 6aea8577f7..b03e539861 100644 --- a/collects/syntax/modread.ss +++ b/collects/syntax/modread.ss @@ -51,7 +51,8 @@ (raise-wrong-module-name filename expected-module (syntax-e #'nm))) (datum->syntax-object exp - (cons #'module (cdr (syntax-e exp))) + (cons (namespace-module-identifier) + (cdr (syntax-e exp))) exp exp))] [else diff --git a/collects/tests/mzscheme/namespac.ss b/collects/tests/mzscheme/namespac.ss index 943d58ebac..595773621c 100644 --- a/collects/tests/mzscheme/namespac.ss +++ b/collects/tests/mzscheme/namespac.ss @@ -110,4 +110,31 @@ (test (void) namespace-undefine-variable! 'bar) (test 28 namespace-variable-value 'bar #t (lambda () 28))) +;; ---------------------------------------- + +(module phaser scheme/base + (define x (variable-reference->phase + (#%variable-reference x))) + (provide x)) + +(test 0 dynamic-require ''phaser 'x) + +(let ([s (open-output-string)]) + (parameterize ([current-output-port s]) + (eval '(begin-for-syntax (display (dynamic-require ''phaser 'x))))) + (test "1" get-output-string s)) + +(test 0 dynamic-require ''phaser 'x) + +(let ([s (open-output-string)]) + (parameterize ([current-output-port s]) + (eval '(begin-for-syntax + (let ([ns (make-base-namespace)]) + (namespace-attach-module (current-namespace) ''phaser ns) + (eval '(require 'phaser) ns) + (display (eval 'x ns)))))) + (test "1" get-output-string s)) + +;; ---------------------------------------- + (report-errs) diff --git a/collects/tests/mzscheme/stx.ss b/collects/tests/mzscheme/stx.ss index ff297e1630..b47aa35337 100644 --- a/collects/tests/mzscheme/stx.ss +++ b/collects/tests/mzscheme/stx.ss @@ -938,16 +938,14 @@ ;; lifting expressions ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -(define prev-ctx #f) - (define-syntax (@@foo stx) (syntax-case stx () [(_ n) (if (zero? (syntax-e #'n)) - #'0 + #'(list #f 0) (with-syntax ([m (sub1 (syntax-e #'n))]) - (eval `(set! prev-ctx ',(syntax-local-lift-context))) - (syntax-local-lift-expression #'(add1 (@@foo m)))))])) + #`(list '#,(syntax-local-lift-context) + #,(syntax-local-lift-expression #'(add1 (cadr (@@foo m)))))))])) (define lifted-output #f) @@ -957,11 +955,14 @@ (with-syntax ([id (syntax-local-lift-expression #'(set! lifted-output "lifted!"))]) #'(list lifted-output id))])) -(test 2 '@@foo (@@foo 2)) -(test #f values prev-ctx) -(test 2 eval (expand-once #'(@@foo 2))) -(test 2 eval (expand #'(@@foo 2))) -(test 2 eval (expand-to-top-form #'(@@foo 2))) +(test (list #f 2) '@@foo (@@foo 2)) +(test (list #f 2) eval-syntax #'(@@foo 2)) +(test (list #f 2) eval (expand-once #'(@@foo 2))) +(test (list #f 2) eval (expand-syntax-once #'(@@foo 2))) +(test (list #f 2) eval (expand #'(@@foo 2))) +(test (list #f 2) eval (expand-syntax #'(@@foo 2))) +(test (list #f 2) eval (expand-to-top-form #'(@@foo 2))) +(test (list #f 2) eval (expand-syntax-to-top-form #'(@@foo 2))) (test (list "lifted!" (void)) '@@goo (@@goo)) (set! lifted-output #f) (test (list "lifted!" (void)) eval (expand-once #'(@@goo))) @@ -1020,22 +1021,25 @@ (require '@@p) (test 10 '@@goo (@@goo)) -(set! prev-ctx #f) - (module @@m scheme/base (require (for-syntax scheme/base)) + (define-for-syntax prev-ctx #f) (define-syntax (@@foo stx) (syntax-case stx () [(_ n) (if (zero? (syntax-e #'n)) - #'0 + #'(list #f 0) (with-syntax ([m (sub1 (syntax-e #'n))]) - (let ([prev (eval 'prev-ctx)]) + (let ([prev prev-ctx]) (if prev (unless (eq? prev (syntax-local-lift-context)) - (error "context mismatch!")) - (eval `(set! prev-ctx ',(syntax-local-lift-context))))) - (syntax-local-lift-expression #'(add1 (@@foo m)))))])) + (error 'context + "mismatch: ~s vs.: ~s" + prev + (syntax-local-lift-context))) + (set! prev-ctx (syntax-local-lift-context)))) + #`(list '#,(syntax-local-lift-context) + #,(syntax-local-lift-expression #'(add1 (cadr (@@foo m)))))))])) (define @@local #f) (define (set-local v) (set! @@local v)) @@ -1043,10 +1047,9 @@ (provide @@local)) (require '@@m) -(test 2 '@@local @@local) -(test #t symbol? prev-ctx) +(test 2 '@@local (cadr @@local)) +(test #t '@@local (symbol? (car @@local))) -(set! prev-ctx #f) (define-syntaxes (@@local-top @@local-top2 @@local-top3) (let ([mk (lambda (stops) @@ -1066,15 +1069,13 @@ (mk null) (mk #f)))) -(test 1 'let-foo (let ([x 5]) (@@foo 1))) -(test 1 eval (expand #'(let ([x 5]) (@@foo 1)))) -(test 1 'local-foo (let ([x 5]) (@@local-top (@@foo 1)))) -(test 'the-key values prev-ctx) -(test 1 eval (expand #'(let ([x 5]) (@@local-top (@@foo 1))))) -(test 1 eval (expand #'(@@local-top (@@foo 1)))) -(test 1 eval (expand #'(@@local-top2 (@@foo 1)))) -(test 1 eval (expand #'(@@local-top3 (@@foo 1)))) -(test 'the-key values prev-ctx) +(test '(#f 1) 'let-foo (let ([x 5]) (@@foo 1))) +(test '(#f 1) eval (expand #'(let ([x 5]) (@@foo 1)))) +(test '(the-key 1) 'local-foo (let ([x 5]) (@@local-top (@@foo 1)))) +(test '(the-key 1) eval (expand #'(let ([x 5]) (@@local-top (@@foo 1))))) +(test '(the-key 1) eval (expand #'(@@local-top (@@foo 1)))) +(test '(the-key 1) eval (expand #'(@@local-top2 (@@foo 1)))) +(test '(the-key 1) eval (expand #'(@@local-top3 (@@foo 1)))) ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Check interaction of macro-introduced/lifted names and diff --git a/collects/tests/r6rs/eval.ss b/collects/tests/r6rs/eval.ss index 976ac8d614..dc395f117b 100644 --- a/collects/tests/r6rs/eval.ss +++ b/collects/tests/r6rs/eval.ss @@ -19,6 +19,26 @@ eval:))) 2) + ;; Check that `eval' at compile-time produces values (such as conditions) + ;; that make sense at compile time (i.e., no phase crossing): + (test (eval + '(let-syntax ([x (lambda (stx) + (datum->syntax + #'here + (condition-message + (call/cc + (lambda (esc) + (with-exception-handler + (lambda (exn) (esc exn)) + (lambda () + (eval '(assertion-violation 'exptime "ok") + (environment + '(rnrs) + '(rnrs eval))))))))))]) + x) + (environment '(rnrs) '(for (rnrs eval) expand))) + "ok") + ;; )) diff --git a/src/mzscheme/src/cstartup.inc b/src/mzscheme/src/cstartup.inc index 07bef3eeed..39a8026381 100644 --- a/src/mzscheme/src/cstartup.inc +++ b/src/mzscheme/src/cstartup.inc @@ -1,561 +1,561 @@ { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,9,51,46,57,57,46,48,46,50,53,50,0,0,0,1,0,0,6,0, -9,0,16,0,20,0,25,0,38,0,41,0,46,0,53,0,60,0,64,0,69, -0,78,0,84,0,98,0,112,0,115,0,119,0,121,0,132,0,134,0,148,0, -155,0,177,0,179,0,193,0,253,0,23,1,32,1,41,1,51,1,68,1,107, -1,146,1,215,1,4,2,92,2,137,2,142,2,162,2,53,3,73,3,124,3, -190,3,75,4,233,4,20,5,31,5,110,5,0,0,120,7,0,0,65,98,101, -103,105,110,29,11,11,66,100,101,102,105,110,101,63,97,110,100,64,108,101,116, -42,72,112,97,114,97,109,101,116,101,114,105,122,101,62,111,114,64,99,111,110, -100,66,108,101,116,114,101,99,66,117,110,108,101,115,115,63,108,101,116,64,119, -104,101,110,68,104,101,114,101,45,115,116,120,65,113,117,111,116,101,29,94,2, -14,68,35,37,107,101,114,110,101,108,11,29,94,2,14,68,35,37,112,97,114, -97,109,122,11,62,105,102,63,115,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,98,10,35,11,8,181,216,94,159,2,16,35,35,159,2,15,35,35,16,20, -2,3,2,2,2,7,2,2,2,4,2,2,2,5,2,2,2,6,2,2,2, -9,2,2,2,8,2,2,2,10,2,2,2,11,2,2,2,12,2,2,97,36, -11,8,181,216,93,159,2,15,35,36,16,2,2,13,161,2,2,36,2,13,2, -2,2,13,97,10,11,11,8,181,216,16,0,97,10,37,11,8,181,216,16,0, -13,16,4,35,29,11,11,2,2,11,18,98,64,104,101,114,101,8,31,8,30, -8,29,8,28,8,27,27,248,22,189,3,23,196,1,249,22,182,3,80,158,38, -35,251,22,73,2,17,248,22,88,23,200,2,12,249,22,63,2,1,248,22,90, -23,202,1,27,248,22,189,3,23,196,1,249,22,182,3,80,158,38,35,251,22, -73,2,17,248,22,88,23,200,2,249,22,63,2,1,248,22,90,23,202,1,12, -27,248,22,65,248,22,189,3,23,197,1,28,248,22,71,23,194,2,20,15,159, -36,35,36,28,248,22,71,248,22,65,23,195,2,248,22,64,193,249,22,182,3, -80,158,38,35,251,22,73,2,17,248,22,64,23,200,2,249,22,63,2,4,248, -22,65,23,202,1,11,18,100,10,8,31,8,30,8,29,8,28,8,27,16,4, -11,11,2,18,3,1,7,101,110,118,55,57,54,53,16,4,11,11,2,19,3, -1,7,101,110,118,55,57,54,54,27,248,22,65,248,22,189,3,23,197,1,28, -248,22,71,23,194,2,20,15,159,36,35,36,28,248,22,71,248,22,65,23,195, -2,248,22,64,193,249,22,182,3,80,158,38,35,250,22,73,2,20,248,22,73, -249,22,73,248,22,73,2,21,248,22,64,23,202,2,251,22,73,2,17,2,21, -2,21,249,22,63,2,7,248,22,65,23,205,1,18,100,11,8,31,8,30,8, -29,8,28,8,27,16,4,11,11,2,18,3,1,7,101,110,118,55,57,54,56, -16,4,11,11,2,19,3,1,7,101,110,118,55,57,54,57,248,22,189,3,193, -27,248,22,189,3,194,249,22,63,248,22,73,248,22,64,196,248,22,65,195,27, -248,22,65,248,22,189,3,23,197,1,249,22,182,3,80,158,38,35,28,248,22, -51,248,22,183,3,248,22,64,23,198,2,27,249,22,2,32,0,89,162,8,44, -36,42,9,222,33,39,248,22,189,3,248,22,88,23,200,2,250,22,73,2,22, -248,22,73,249,22,73,248,22,73,248,22,64,23,204,2,250,22,74,2,23,249, -22,2,22,64,23,204,2,248,22,90,23,206,2,249,22,63,248,22,64,23,202, -1,249,22,2,22,88,23,200,1,250,22,74,2,20,249,22,2,32,0,89,162, -8,44,36,46,9,222,33,40,248,22,189,3,248,22,64,201,248,22,65,198,27, -248,22,189,3,194,249,22,63,248,22,73,248,22,64,196,248,22,65,195,27,248, -22,65,248,22,189,3,23,197,1,249,22,182,3,80,158,38,35,250,22,74,2, -22,249,22,2,32,0,89,162,8,44,36,46,9,222,33,42,248,22,189,3,248, -22,64,201,248,22,65,198,27,248,22,65,248,22,189,3,196,27,248,22,189,3, -248,22,64,195,249,22,182,3,80,158,39,35,28,248,22,71,195,250,22,74,2, -20,9,248,22,65,199,250,22,73,2,11,248,22,73,248,22,64,199,250,22,74, -2,5,248,22,65,201,248,22,65,202,27,248,22,65,248,22,189,3,23,197,1, -27,249,22,1,22,77,249,22,2,22,189,3,248,22,189,3,248,22,64,199,249, -22,182,3,80,158,39,35,251,22,73,1,22,119,105,116,104,45,99,111,110,116, -105,110,117,97,116,105,111,110,45,109,97,114,107,2,24,250,22,74,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,21,95,1,27,99,111,110,116,105,110,117,97,116,105,111,110,45,109,97,114, -107,45,115,101,116,45,102,105,114,115,116,11,2,24,201,250,22,74,2,20,9, -248,22,65,203,27,248,22,65,248,22,189,3,23,197,1,28,248,22,71,23,194, -2,20,15,159,36,35,36,249,22,182,3,80,158,38,35,27,248,22,189,3,248, -22,64,23,198,2,28,249,22,150,8,62,61,62,248,22,183,3,248,22,88,23, -197,2,250,22,73,2,20,248,22,73,249,22,73,21,93,2,25,248,22,64,199, -250,22,74,2,8,249,22,73,2,25,249,22,73,248,22,97,203,2,25,248,22, -65,202,251,22,73,2,17,28,249,22,150,8,248,22,183,3,248,22,64,23,201, -2,64,101,108,115,101,10,248,22,64,23,198,2,250,22,74,2,20,9,248,22, -65,23,201,1,249,22,63,2,8,248,22,65,23,203,1,99,8,31,8,30,8, -29,8,28,8,27,16,4,11,11,2,18,3,1,7,101,110,118,55,57,57,49, -16,4,11,11,2,19,3,1,7,101,110,118,55,57,57,50,18,158,94,10,64, -118,111,105,100,8,47,27,248,22,65,248,22,189,3,196,249,22,182,3,80,158, -38,35,28,248,22,51,248,22,183,3,248,22,64,197,250,22,73,2,26,248,22, -73,248,22,64,199,248,22,88,198,27,248,22,183,3,248,22,64,197,250,22,73, -2,26,248,22,73,248,22,64,197,250,22,74,2,23,248,22,65,199,248,22,65, -202,159,35,20,103,159,35,16,1,20,24,2,1,16,0,83,158,41,20,100,137, -69,35,37,109,105,110,45,115,116,120,2,2,10,11,10,35,80,158,35,35,20, -103,159,35,16,0,16,0,11,11,16,0,35,11,38,35,11,11,16,10,2,3, -2,4,2,5,2,6,2,7,2,8,2,9,2,10,2,11,2,12,16,10,11, -11,11,11,11,11,11,11,11,11,16,10,2,3,2,4,2,5,2,6,2,7, -2,8,2,9,2,10,2,11,2,12,35,45,36,11,11,16,0,16,0,16,0, -35,35,11,11,11,16,0,16,0,16,0,35,35,16,11,16,5,93,2,13,20, -15,159,35,35,35,35,20,103,159,35,16,0,16,1,33,32,10,16,5,93,2, -10,89,162,8,44,36,52,9,223,0,33,33,35,20,103,159,35,16,1,20,25, -159,36,2,2,2,13,16,0,11,16,5,93,2,12,89,162,8,44,36,52,9, -223,0,33,34,35,20,103,159,35,16,1,20,25,159,36,2,2,2,13,16,0, -11,16,5,93,2,4,89,162,8,44,36,52,9,223,0,33,35,35,20,103,159, -35,16,1,20,25,159,36,2,2,2,13,16,1,33,36,11,16,5,93,2,7, -89,162,8,44,36,55,9,223,0,33,37,35,20,103,159,35,16,1,20,25,159, -36,2,2,2,13,16,1,33,38,11,16,5,93,2,11,89,162,8,44,36,57, -9,223,0,33,41,35,20,103,159,35,16,1,20,25,159,36,2,2,2,13,16, -0,11,16,5,93,2,9,89,162,8,44,36,52,9,223,0,33,43,35,20,103, -159,35,16,1,20,25,159,36,2,2,2,13,16,0,11,16,5,93,2,5,89, -162,8,44,36,53,9,223,0,33,44,35,20,103,159,35,16,1,20,25,159,36, -2,2,2,13,16,0,11,16,5,93,2,6,89,162,8,44,36,54,9,223,0, -33,45,35,20,103,159,35,16,1,20,25,159,36,2,2,2,13,16,0,11,16, -5,93,2,8,89,162,8,44,36,57,9,223,0,33,46,35,20,103,159,35,16, -1,20,25,159,36,2,2,2,13,16,1,33,48,11,16,5,93,2,3,89,162, -8,44,36,53,9,223,0,33,49,35,20,103,159,35,16,1,20,25,159,36,2, -2,2,13,16,0,11,16,0,94,2,15,2,16,93,2,15,9,9,35,0}; - EVAL_ONE_SIZED_STR((char *)expr, 2035); + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,52,46,48,46,49,46,50,50,0,0,0,1,0,0,6,0,9,0, +16,0,20,0,25,0,38,0,41,0,46,0,53,0,60,0,64,0,69,0,78, +0,84,0,98,0,112,0,115,0,119,0,121,0,132,0,134,0,148,0,155,0, +177,0,179,0,193,0,253,0,23,1,32,1,41,1,51,1,68,1,107,1,146, +1,215,1,4,2,92,2,137,2,142,2,162,2,53,3,73,3,124,3,190,3, +75,4,233,4,20,5,31,5,110,5,0,0,118,7,0,0,65,98,101,103,105, +110,29,11,11,66,100,101,102,105,110,101,63,97,110,100,64,108,101,116,42,72, +112,97,114,97,109,101,116,101,114,105,122,101,62,111,114,64,99,111,110,100,66, +108,101,116,114,101,99,66,117,110,108,101,115,115,63,108,101,116,64,119,104,101, +110,68,104,101,114,101,45,115,116,120,65,113,117,111,116,101,29,94,2,14,68, +35,37,107,101,114,110,101,108,11,29,94,2,14,68,35,37,112,97,114,97,109, +122,11,62,105,102,63,115,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,98, +10,35,11,8,183,216,94,159,2,16,35,35,159,2,15,35,35,16,20,2,3, +2,2,2,7,2,2,2,4,2,2,2,5,2,2,2,6,2,2,2,9,2, +2,2,8,2,2,2,10,2,2,2,11,2,2,2,12,2,2,97,36,11,8, +183,216,93,159,2,15,35,36,16,2,2,13,161,2,2,36,2,13,2,2,2, +13,97,10,11,11,8,183,216,16,0,97,10,37,11,8,183,216,16,0,13,16, +4,35,29,11,11,2,2,11,18,98,64,104,101,114,101,8,31,8,30,8,29, +8,28,8,27,27,248,22,189,3,23,196,1,249,22,182,3,80,158,38,35,251, +22,73,2,17,248,22,88,23,200,2,12,249,22,63,2,1,248,22,90,23,202, +1,27,248,22,189,3,23,196,1,249,22,182,3,80,158,38,35,251,22,73,2, +17,248,22,88,23,200,2,249,22,63,2,1,248,22,90,23,202,1,12,27,248, +22,65,248,22,189,3,23,197,1,28,248,22,71,23,194,2,20,15,159,36,35, +36,28,248,22,71,248,22,65,23,195,2,248,22,64,193,249,22,182,3,80,158, +38,35,251,22,73,2,17,248,22,64,23,200,2,249,22,63,2,4,248,22,65, +23,202,1,11,18,100,10,8,31,8,30,8,29,8,28,8,27,16,4,11,11, +2,18,3,1,7,101,110,118,55,57,55,55,16,4,11,11,2,19,3,1,7, +101,110,118,55,57,55,56,27,248,22,65,248,22,189,3,23,197,1,28,248,22, +71,23,194,2,20,15,159,36,35,36,28,248,22,71,248,22,65,23,195,2,248, +22,64,193,249,22,182,3,80,158,38,35,250,22,73,2,20,248,22,73,249,22, +73,248,22,73,2,21,248,22,64,23,202,2,251,22,73,2,17,2,21,2,21, +249,22,63,2,7,248,22,65,23,205,1,18,100,11,8,31,8,30,8,29,8, +28,8,27,16,4,11,11,2,18,3,1,7,101,110,118,55,57,56,48,16,4, +11,11,2,19,3,1,7,101,110,118,55,57,56,49,248,22,189,3,193,27,248, +22,189,3,194,249,22,63,248,22,73,248,22,64,196,248,22,65,195,27,248,22, +65,248,22,189,3,23,197,1,249,22,182,3,80,158,38,35,28,248,22,51,248, +22,183,3,248,22,64,23,198,2,27,249,22,2,32,0,89,162,8,44,36,42, +9,222,33,39,248,22,189,3,248,22,88,23,200,2,250,22,73,2,22,248,22, +73,249,22,73,248,22,73,248,22,64,23,204,2,250,22,74,2,23,249,22,2, +22,64,23,204,2,248,22,90,23,206,2,249,22,63,248,22,64,23,202,1,249, +22,2,22,88,23,200,1,250,22,74,2,20,249,22,2,32,0,89,162,8,44, +36,46,9,222,33,40,248,22,189,3,248,22,64,201,248,22,65,198,27,248,22, +189,3,194,249,22,63,248,22,73,248,22,64,196,248,22,65,195,27,248,22,65, +248,22,189,3,23,197,1,249,22,182,3,80,158,38,35,250,22,74,2,22,249, +22,2,32,0,89,162,8,44,36,46,9,222,33,42,248,22,189,3,248,22,64, +201,248,22,65,198,27,248,22,65,248,22,189,3,196,27,248,22,189,3,248,22, +64,195,249,22,182,3,80,158,39,35,28,248,22,71,195,250,22,74,2,20,9, +248,22,65,199,250,22,73,2,11,248,22,73,248,22,64,199,250,22,74,2,5, +248,22,65,201,248,22,65,202,27,248,22,65,248,22,189,3,23,197,1,27,249, +22,1,22,77,249,22,2,22,189,3,248,22,189,3,248,22,64,199,249,22,182, +3,80,158,39,35,251,22,73,1,22,119,105,116,104,45,99,111,110,116,105,110, +117,97,116,105,111,110,45,109,97,114,107,2,24,250,22,74,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,21, +95,1,27,99,111,110,116,105,110,117,97,116,105,111,110,45,109,97,114,107,45, +115,101,116,45,102,105,114,115,116,11,2,24,201,250,22,74,2,20,9,248,22, +65,203,27,248,22,65,248,22,189,3,23,197,1,28,248,22,71,23,194,2,20, +15,159,36,35,36,249,22,182,3,80,158,38,35,27,248,22,189,3,248,22,64, +23,198,2,28,249,22,150,8,62,61,62,248,22,183,3,248,22,88,23,197,2, +250,22,73,2,20,248,22,73,249,22,73,21,93,2,25,248,22,64,199,250,22, +74,2,8,249,22,73,2,25,249,22,73,248,22,97,203,2,25,248,22,65,202, +251,22,73,2,17,28,249,22,150,8,248,22,183,3,248,22,64,23,201,2,64, +101,108,115,101,10,248,22,64,23,198,2,250,22,74,2,20,9,248,22,65,23, +201,1,249,22,63,2,8,248,22,65,23,203,1,99,8,31,8,30,8,29,8, +28,8,27,16,4,11,11,2,18,3,1,7,101,110,118,56,48,48,51,16,4, +11,11,2,19,3,1,7,101,110,118,56,48,48,52,18,158,94,10,64,118,111, +105,100,8,47,27,248,22,65,248,22,189,3,196,249,22,182,3,80,158,38,35, +28,248,22,51,248,22,183,3,248,22,64,197,250,22,73,2,26,248,22,73,248, +22,64,199,248,22,88,198,27,248,22,183,3,248,22,64,197,250,22,73,2,26, +248,22,73,248,22,64,197,250,22,74,2,23,248,22,65,199,248,22,65,202,159, +35,20,103,159,35,16,1,2,1,16,0,83,158,41,20,100,137,69,35,37,109, +105,110,45,115,116,120,2,2,10,11,10,35,80,158,35,35,20,103,159,35,16, +0,16,0,11,11,16,0,35,11,38,35,11,11,16,10,2,3,2,4,2,5, +2,6,2,7,2,8,2,9,2,10,2,11,2,12,16,10,11,11,11,11,11, +11,11,11,11,11,16,10,2,3,2,4,2,5,2,6,2,7,2,8,2,9, +2,10,2,11,2,12,35,45,36,11,11,16,0,16,0,16,0,35,35,11,11, +11,16,0,16,0,16,0,35,35,16,11,16,5,93,2,13,20,15,159,35,35, +35,35,20,103,159,35,16,0,16,1,33,32,10,16,5,93,2,10,89,162,8, +44,36,52,9,223,0,33,33,35,20,103,159,35,16,1,20,25,159,36,2,2, +2,13,16,0,11,16,5,93,2,12,89,162,8,44,36,52,9,223,0,33,34, +35,20,103,159,35,16,1,20,25,159,36,2,2,2,13,16,0,11,16,5,93, +2,4,89,162,8,44,36,52,9,223,0,33,35,35,20,103,159,35,16,1,20, +25,159,36,2,2,2,13,16,1,33,36,11,16,5,93,2,7,89,162,8,44, +36,55,9,223,0,33,37,35,20,103,159,35,16,1,20,25,159,36,2,2,2, +13,16,1,33,38,11,16,5,93,2,11,89,162,8,44,36,57,9,223,0,33, +41,35,20,103,159,35,16,1,20,25,159,36,2,2,2,13,16,0,11,16,5, +93,2,9,89,162,8,44,36,52,9,223,0,33,43,35,20,103,159,35,16,1, +20,25,159,36,2,2,2,13,16,0,11,16,5,93,2,5,89,162,8,44,36, +53,9,223,0,33,44,35,20,103,159,35,16,1,20,25,159,36,2,2,2,13, +16,0,11,16,5,93,2,6,89,162,8,44,36,54,9,223,0,33,45,35,20, +103,159,35,16,1,20,25,159,36,2,2,2,13,16,0,11,16,5,93,2,8, +89,162,8,44,36,57,9,223,0,33,46,35,20,103,159,35,16,1,20,25,159, +36,2,2,2,13,16,1,33,48,11,16,5,93,2,3,89,162,8,44,36,53, +9,223,0,33,49,35,20,103,159,35,16,1,20,25,159,36,2,2,2,13,16, +0,11,16,0,94,2,15,2,16,93,2,15,9,9,35,0}; + EVAL_ONE_SIZED_STR((char *)expr, 2031); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,9,51,46,57,57,46,48,46,50,53,59,0,0,0,1,0,0,3,0, -16,0,21,0,38,0,53,0,71,0,87,0,97,0,115,0,135,0,151,0,169, -0,200,0,229,0,251,0,9,1,15,1,29,1,34,1,44,1,52,1,80,1, -112,1,157,1,202,1,226,1,9,2,11,2,68,2,158,3,199,3,33,5,137, -5,241,5,102,6,116,6,150,6,166,6,16,8,30,8,193,8,200,9,206,10, -213,10,219,10,91,11,104,11,59,12,161,12,174,12,196,12,148,13,52,14,123, -15,131,15,139,15,165,15,19,16,0,0,55,19,0,0,29,11,11,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,108,108,101,99,116,105, -111,110,75,99,111,108,108,101,99,116,105,111,110,45,112,97,116,104,69,45,102, -105,110,100,45,99,111,108,77,99,104,101,99,107,45,115,117,102,102,105,120,45, -99,97,108,108,79,112,97,116,104,45,114,101,112,108,97,99,101,45,115,117,102, -102,105,120,75,112,97,116,104,45,97,100,100,45,115,117,102,102,105,120,77,108, -111,97,100,47,117,115,101,45,99,111,109,112,105,108,101,100,1,29,102,105,110, -100,45,108,105,98,114,97,114,121,45,99,111,108,108,101,99,116,105,111,110,45, -112,97,116,104,115,1,27,112,97,116,104,45,108,105,115,116,45,115,116,114,105, -110,103,45,62,112,97,116,104,45,108,105,115,116,1,20,102,105,110,100,45,101, -120,101,99,117,116,97,98,108,101,45,112,97,116,104,73,101,109,98,101,100,100, -101,100,45,108,111,97,100,65,113,117,111,116,101,29,94,2,17,68,35,37,112, -97,114,97,109,122,11,64,108,111,111,112,69,101,120,101,99,45,102,105,108,101, -67,119,105,110,100,111,119,115,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,6,29,29,126,97,58, -32,105,110,118,97,108,105,100,32,114,101,108,97,116,105,118,101,32,112,97,116, -104,58,32,126,115,6,42,42,126,97,58,32,99,111,108,108,101,99,116,105,111, -110,32,110,111,116,32,102,111,117,110,100,58,32,126,115,32,105,110,32,97,110, -121,32,111,102,58,32,126,115,6,42,42,112,97,116,104,32,40,102,111,114,32, -97,110,121,32,115,121,115,116,101,109,41,32,111,114,32,118,97,108,105,100,45, -112,97,116,104,32,115,116,114,105,110,103,6,21,21,115,116,114,105,110,103,32, -111,114,32,98,121,116,101,32,115,116,114,105,110,103,6,36,36,99,97,110,110, -111,116,32,97,100,100,32,97,32,115,117,102,102,105,120,32,116,111,32,97,32, -114,111,111,116,32,112,97,116,104,58,32,5,0,27,20,14,159,80,158,36,50, -250,80,158,39,51,249,22,27,11,80,158,41,50,22,158,12,10,248,22,134,5, -23,196,2,28,248,22,176,5,23,194,2,12,87,94,248,22,153,8,23,194,1, -248,80,159,37,53,36,195,28,248,22,71,23,195,2,9,27,248,22,64,23,196, -2,27,28,248,22,139,13,23,195,2,23,194,1,28,248,22,138,13,23,195,2, -249,22,140,13,23,196,1,250,80,158,42,48,248,22,154,13,2,20,11,10,250, -80,158,40,48,248,22,154,13,2,20,23,197,1,10,28,23,193,2,249,22,63, -248,22,142,13,249,22,140,13,23,198,1,247,22,155,13,27,248,22,65,23,200, -1,28,248,22,71,23,194,2,9,27,248,22,64,23,195,2,27,28,248,22,139, -13,23,195,2,23,194,1,28,248,22,138,13,23,195,2,249,22,140,13,23,196, -1,250,80,158,47,48,248,22,154,13,2,20,11,10,250,80,158,45,48,248,22, -154,13,2,20,23,197,1,10,28,23,193,2,249,22,63,248,22,142,13,249,22, -140,13,23,198,1,247,22,155,13,248,80,159,45,52,36,248,22,65,23,199,1, -87,94,23,193,1,248,80,159,43,52,36,248,22,65,23,197,1,87,94,23,193, -1,27,248,22,65,23,198,1,28,248,22,71,23,194,2,9,27,248,22,64,23, -195,2,27,28,248,22,139,13,23,195,2,23,194,1,28,248,22,138,13,23,195, -2,249,22,140,13,23,196,1,250,80,158,45,48,248,22,154,13,2,20,11,10, -250,80,158,43,48,248,22,154,13,2,20,23,197,1,10,28,23,193,2,249,22, -63,248,22,142,13,249,22,140,13,23,198,1,247,22,155,13,248,80,159,43,52, -36,248,22,65,23,199,1,248,80,159,41,52,36,248,22,65,196,27,248,22,179, -12,23,195,2,28,23,193,2,192,87,94,23,193,1,28,248,22,145,6,23,195, -2,27,248,22,137,13,195,28,192,192,248,22,138,13,195,11,87,94,28,28,248, -22,180,12,23,195,2,10,27,248,22,179,12,23,196,2,28,23,193,2,192,87, -94,23,193,1,28,248,22,145,6,23,196,2,27,248,22,137,13,23,197,2,28, -23,193,2,192,87,94,23,193,1,248,22,138,13,23,197,2,11,12,250,22,180, -8,76,110,111,114,109,97,108,45,112,97,116,104,45,99,97,115,101,6,42,42, -112,97,116,104,32,40,102,111,114,32,97,110,121,32,115,121,115,116,101,109,41, -32,111,114,32,118,97,108,105,100,45,112,97,116,104,32,115,116,114,105,110,103, -23,197,2,28,28,248,22,180,12,23,195,2,249,22,150,8,248,22,181,12,23, -197,2,2,21,249,22,150,8,247,22,164,7,2,21,27,28,248,22,145,6,23, -196,2,23,195,2,248,22,154,7,248,22,184,12,23,197,2,28,249,22,167,13, -0,21,35,114,120,34,94,91,92,92,93,91,92,92,93,91,63,93,91,92,92, -93,34,23,195,2,28,248,22,145,6,195,248,22,187,12,195,194,27,248,22,184, -6,23,195,1,249,22,188,12,248,22,157,7,250,22,173,13,0,6,35,114,120, -34,47,34,28,249,22,167,13,0,22,35,114,120,34,91,47,92,92,93,91,46, -32,93,43,91,47,92,92,93,42,36,34,23,201,2,23,199,1,250,22,173,13, -0,19,35,114,120,34,91,32,46,93,43,40,91,47,92,92,93,42,41,36,34, -23,202,1,6,2,2,92,49,80,158,43,36,2,21,28,248,22,145,6,194,248, -22,187,12,194,193,87,94,28,27,248,22,179,12,23,196,2,28,23,193,2,192, -87,94,23,193,1,28,248,22,145,6,23,196,2,27,248,22,137,13,23,197,2, -28,23,193,2,192,87,94,23,193,1,248,22,138,13,23,197,2,11,12,250,22, -180,8,23,196,2,2,22,23,197,2,28,248,22,137,13,23,195,2,12,248,22, -134,11,249,22,143,10,248,22,174,6,250,22,129,7,2,23,23,200,1,23,201, -1,247,22,23,87,94,28,27,248,22,179,12,23,196,2,28,23,193,2,192,87, -94,23,193,1,28,248,22,145,6,23,196,2,27,248,22,137,13,23,197,2,28, -23,193,2,192,87,94,23,193,1,248,22,138,13,23,197,2,11,12,250,22,180, -8,23,196,2,2,22,23,197,2,28,248,22,137,13,23,195,2,12,248,22,134, -11,249,22,143,10,248,22,174,6,250,22,129,7,2,23,23,200,1,23,201,1, -247,22,23,87,94,87,94,28,27,248,22,179,12,23,196,2,28,23,193,2,192, -87,94,23,193,1,28,248,22,145,6,23,196,2,27,248,22,137,13,23,197,2, -28,23,193,2,192,87,94,23,193,1,248,22,138,13,23,197,2,11,12,250,22, -180,8,195,2,22,23,197,2,28,248,22,137,13,23,195,2,12,248,22,134,11, -249,22,143,10,248,22,174,6,250,22,129,7,2,23,199,23,201,1,247,22,23, -249,22,3,89,162,8,44,36,49,9,223,2,33,34,196,248,22,134,11,249,22, -173,10,23,196,1,247,22,23,87,94,250,80,159,38,39,36,2,7,196,197,251, -80,159,39,41,36,2,7,32,0,89,162,8,44,36,44,9,222,33,36,197,198, -32,38,89,162,43,41,58,65,99,108,111,111,112,222,33,39,28,248,22,71,23, -199,2,87,94,23,198,1,248,23,196,1,251,22,129,7,2,24,23,199,1,28, -248,22,71,23,203,2,87,94,23,202,1,23,201,1,250,22,1,22,133,13,23, -204,1,23,205,1,23,198,1,27,249,22,133,13,248,22,64,23,202,2,23,199, -2,28,248,22,128,13,23,194,2,27,250,22,1,22,133,13,23,197,1,23,202, -2,28,248,22,128,13,23,194,2,192,87,94,23,193,1,27,248,22,65,23,202, -1,28,248,22,71,23,194,2,87,94,23,193,1,248,23,199,1,251,22,129,7, -2,24,23,202,1,28,248,22,71,23,206,2,87,94,23,205,1,23,204,1,250, -22,1,22,133,13,23,207,1,23,208,1,23,201,1,27,249,22,133,13,248,22, -64,23,197,2,23,202,2,28,248,22,128,13,23,194,2,27,250,22,1,22,133, -13,23,197,1,204,28,248,22,128,13,193,192,253,2,38,203,204,205,206,23,15, -248,22,65,201,253,2,38,202,203,204,205,206,248,22,65,200,87,94,23,193,1, -27,248,22,65,23,201,1,28,248,22,71,23,194,2,87,94,23,193,1,248,23, -198,1,251,22,129,7,2,24,23,201,1,28,248,22,71,23,205,2,87,94,23, -204,1,23,203,1,250,22,1,22,133,13,23,206,1,23,207,1,23,200,1,27, -249,22,133,13,248,22,64,23,197,2,23,201,2,28,248,22,128,13,23,194,2, -27,250,22,1,22,133,13,23,197,1,203,28,248,22,128,13,193,192,253,2,38, -202,203,204,205,206,248,22,65,201,253,2,38,201,202,203,204,205,248,22,65,200, -27,247,22,156,13,253,2,38,198,199,200,201,202,198,87,95,28,28,248,22,180, -12,23,194,2,10,27,248,22,179,12,23,195,2,28,23,193,2,192,87,94,23, -193,1,28,248,22,145,6,23,195,2,27,248,22,137,13,23,196,2,28,23,193, -2,192,87,94,23,193,1,248,22,138,13,23,196,2,11,12,252,22,180,8,23, -200,2,2,25,35,23,198,2,23,199,2,28,28,248,22,145,6,23,195,2,10, -248,22,133,7,23,195,2,87,94,23,194,1,12,252,22,180,8,23,200,2,2, -26,36,23,198,2,23,199,1,91,159,38,11,90,161,38,35,11,248,22,136,13, -23,197,2,87,94,23,195,1,87,94,28,192,12,250,22,181,8,23,201,1,2, -27,23,199,1,249,22,7,194,195,91,159,37,11,90,161,37,35,11,87,95,28, -28,248,22,180,12,23,196,2,10,27,248,22,179,12,23,197,2,28,23,193,2, -192,87,94,23,193,1,28,248,22,145,6,23,197,2,27,248,22,137,13,23,198, -2,28,23,193,2,192,87,94,23,193,1,248,22,138,13,23,198,2,11,12,252, -22,180,8,2,10,2,25,35,23,200,2,23,201,2,28,28,248,22,145,6,23, -197,2,10,248,22,133,7,23,197,2,12,252,22,180,8,2,10,2,26,36,23, -200,2,23,201,2,91,159,38,11,90,161,38,35,11,248,22,136,13,23,199,2, -87,94,23,195,1,87,94,28,23,193,2,12,250,22,181,8,2,10,2,27,23, -201,2,249,22,7,23,195,1,23,196,1,27,249,22,189,12,250,22,172,13,0, -18,35,114,120,35,34,40,91,46,93,91,94,46,93,42,124,41,36,34,248,22, -185,12,23,201,1,28,248,22,145,6,23,203,2,249,22,157,7,23,204,1,8, -63,23,202,1,28,248,22,180,12,23,199,2,248,22,181,12,23,199,1,87,94, -23,198,1,247,22,182,12,28,248,22,179,12,194,249,22,133,13,195,194,192,91, -159,37,11,90,161,37,35,11,87,95,28,28,248,22,180,12,23,196,2,10,27, -248,22,179,12,23,197,2,28,23,193,2,192,87,94,23,193,1,28,248,22,145, -6,23,197,2,27,248,22,137,13,23,198,2,28,23,193,2,192,87,94,23,193, -1,248,22,138,13,23,198,2,11,12,252,22,180,8,2,11,2,25,35,23,200, -2,23,201,2,28,28,248,22,145,6,23,197,2,10,248,22,133,7,23,197,2, -12,252,22,180,8,2,11,2,26,36,23,200,2,23,201,2,91,159,38,11,90, -161,38,35,11,248,22,136,13,23,199,2,87,94,23,195,1,87,94,28,23,193, -2,12,250,22,181,8,2,11,2,27,23,201,2,249,22,7,23,195,1,23,196, -1,27,249,22,189,12,249,22,143,7,250,22,173,13,0,9,35,114,120,35,34, -91,46,93,34,248,22,185,12,23,203,1,6,1,1,95,28,248,22,145,6,23, -202,2,249,22,157,7,23,203,1,8,63,23,201,1,28,248,22,180,12,23,199, -2,248,22,181,12,23,199,1,87,94,23,198,1,247,22,182,12,28,248,22,179, -12,194,249,22,133,13,195,194,192,249,247,22,132,6,194,11,248,80,158,36,46, -9,27,247,22,158,13,249,80,158,38,47,28,23,195,2,27,248,22,162,7,6, -11,11,80,76,84,67,79,76,76,69,67,84,83,28,192,192,6,0,0,6,0, -0,27,28,23,196,1,250,22,133,13,248,22,154,13,69,97,100,100,111,110,45, -100,105,114,247,22,160,7,6,8,8,99,111,108,108,101,99,116,115,11,27,248, -80,159,41,52,36,249,22,77,23,202,1,248,22,73,248,22,154,13,72,99,111, -108,108,101,99,116,115,45,100,105,114,28,23,194,2,249,22,63,23,196,1,23, -195,1,192,32,47,89,162,8,44,38,54,2,19,222,33,48,27,249,22,165,13, -23,197,2,23,198,2,28,23,193,2,87,94,23,196,1,27,248,22,88,23,195, -2,27,27,248,22,97,23,197,1,27,249,22,165,13,23,201,2,23,196,2,28, -23,193,2,87,94,23,194,1,27,248,22,88,23,195,2,27,250,2,47,23,203, -2,23,204,1,248,22,97,23,199,1,28,249,22,139,7,23,196,2,2,28,249, -22,77,23,202,2,194,249,22,63,248,22,188,12,23,197,1,23,195,1,87,95, -23,199,1,23,193,1,28,249,22,139,7,23,196,2,2,28,249,22,77,23,200, -2,9,249,22,63,248,22,188,12,23,197,1,9,28,249,22,139,7,23,196,2, -2,28,249,22,77,197,194,87,94,23,196,1,249,22,63,248,22,188,12,23,197, -1,194,87,94,23,193,1,28,249,22,139,7,23,198,2,2,28,249,22,77,195, -9,87,94,23,194,1,249,22,63,248,22,188,12,23,199,1,9,87,95,28,28, -248,22,133,7,194,10,248,22,145,6,194,12,250,22,180,8,2,14,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,72,195,249,22,4,22,179,12,196,11,12,250,22,180,8,2, -14,6,13,13,108,105,115,116,32,111,102,32,112,97,116,104,115,197,250,2,47, -197,195,28,248,22,145,6,197,248,22,156,7,197,196,32,50,89,162,8,44,39, -57,2,19,222,33,53,32,51,89,162,8,44,38,54,70,102,111,117,110,100,45, -101,120,101,99,222,33,52,28,23,193,2,91,159,38,11,90,161,38,35,11,248, -22,136,13,23,199,2,87,95,23,195,1,23,194,1,27,28,23,198,2,27,248, -22,141,13,23,201,2,28,249,22,152,8,23,195,2,23,202,2,11,28,248,22, -137,13,23,194,2,250,2,51,23,201,2,23,202,2,249,22,133,13,23,200,2, -23,198,1,250,2,51,23,201,2,23,202,2,23,196,1,11,28,23,193,2,192, -87,94,23,193,1,27,28,248,22,179,12,23,196,2,27,249,22,133,13,23,198, -2,23,201,2,28,28,248,22,128,13,193,10,248,22,191,12,193,192,11,11,28, -23,193,2,192,87,94,23,193,1,28,23,199,2,11,27,248,22,141,13,23,202, -2,28,249,22,152,8,23,195,2,23,203,1,11,28,248,22,137,13,23,194,2, -250,2,51,23,202,1,23,203,1,249,22,133,13,23,201,1,23,198,1,250,2, -51,201,202,195,194,28,248,22,71,23,197,2,11,27,248,22,140,13,248,22,64, -23,199,2,27,249,22,133,13,23,196,1,23,197,2,28,248,22,191,12,23,194, -2,250,2,51,198,199,195,87,94,23,193,1,27,248,22,65,23,200,1,28,248, -22,71,23,194,2,11,27,248,22,140,13,248,22,64,23,196,2,27,249,22,133, -13,23,196,1,23,200,2,28,248,22,191,12,23,194,2,250,2,51,201,202,195, -87,94,23,193,1,27,248,22,65,23,197,1,28,248,22,71,23,194,2,11,27, -248,22,140,13,248,22,64,195,27,249,22,133,13,23,196,1,202,28,248,22,191, -12,193,250,2,51,204,205,195,251,2,50,204,205,206,248,22,65,199,87,95,28, -27,248,22,179,12,23,196,2,28,23,193,2,192,87,94,23,193,1,28,248,22, -145,6,23,196,2,27,248,22,137,13,23,197,2,28,23,193,2,192,87,94,23, -193,1,248,22,138,13,23,197,2,11,12,250,22,180,8,2,15,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,27,248,22,179,12,23,197,2,28, -23,193,2,192,87,94,23,193,1,28,248,22,145,6,23,197,2,27,248,22,137, -13,23,198,2,28,23,193,2,192,87,94,23,193,1,248,22,138,13,23,198,2, -11,248,22,137,13,23,196,2,11,10,12,250,22,180,8,2,15,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,137,13,23,195,2,91,159, -38,11,90,161,38,35,11,248,22,136,13,23,198,2,249,22,150,8,194,68,114, -101,108,97,116,105,118,101,11,27,248,22,162,7,6,4,4,80,65,84,72,251, -2,50,23,199,1,23,200,1,23,201,1,28,23,197,2,27,249,80,158,43,47, -23,200,1,9,28,249,22,150,8,247,22,164,7,2,21,249,22,63,248,22,188, -12,5,1,46,23,195,1,192,9,27,248,22,140,13,23,196,1,28,248,22,191, -12,193,250,2,51,198,199,195,11,250,80,158,38,48,196,197,11,250,80,158,38, -48,196,11,11,87,94,249,22,137,6,247,22,178,4,195,248,22,152,5,249,22, -162,3,35,249,22,146,3,197,198,27,28,23,197,2,87,95,23,196,1,23,195, -1,23,197,1,87,94,23,197,1,27,248,22,154,13,2,20,27,249,80,158,40, -48,23,196,1,11,27,27,248,22,165,3,23,200,1,28,192,192,35,27,27,248, -22,165,3,23,202,1,28,192,192,35,249,22,131,5,23,197,1,83,158,39,20, -97,95,89,162,8,44,35,47,9,224,3,2,33,57,23,195,1,23,196,1,27, -248,22,182,4,23,195,1,248,80,159,38,53,36,193,159,35,20,103,159,35,16, -1,20,24,65,98,101,103,105,110,16,0,83,158,41,20,100,137,67,35,37,117, -116,105,108,115,2,1,11,10,10,42,80,158,35,35,20,103,159,37,16,17,30, -2,1,2,2,193,30,2,1,2,3,193,30,2,1,2,4,193,30,2,1,2, -5,193,30,2,1,2,6,193,30,2,1,2,7,193,30,2,1,2,8,193,30, -2,1,2,9,193,30,2,1,2,10,193,30,2,1,2,11,193,30,2,1,2, -12,193,30,2,1,2,13,193,30,2,1,2,14,193,30,2,1,2,15,193,30, -2,1,2,16,193,30,2,18,1,20,112,97,114,97,109,101,116,101,114,105,122, -97,116,105,111,110,45,107,101,121,4,30,2,18,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,11, -11,16,4,2,6,2,5,2,3,2,9,39,11,38,35,11,11,16,11,2,8, -2,7,2,16,2,15,2,13,2,12,2,4,2,11,2,14,2,10,2,2,16, -11,11,11,11,11,11,11,11,11,11,11,11,16,11,2,8,2,7,2,16,2, -15,2,13,2,12,2,4,2,11,2,14,2,10,2,2,46,46,36,11,11,16, -0,16,0,16,0,35,35,11,11,11,16,0,16,0,16,0,35,35,16,0,16, -17,83,158,35,16,2,89,162,43,36,48,2,19,223,0,33,29,80,159,35,53, -36,83,158,35,16,2,89,162,8,44,36,55,2,19,223,0,33,30,80,159,35, -52,36,83,158,35,16,2,32,0,89,162,43,36,44,2,2,222,33,31,80,159, -35,35,36,83,158,35,16,2,249,22,147,6,7,92,7,92,80,159,35,36,36, -83,158,35,16,2,89,162,43,36,53,2,4,223,0,33,32,80,159,35,37,36, -83,158,35,16,2,32,0,89,162,8,44,37,49,2,5,222,33,33,80,159,35, -38,36,83,158,35,16,2,32,0,89,162,8,44,38,50,2,6,222,33,35,80, -159,35,39,36,83,158,35,16,2,89,162,8,45,37,47,2,7,223,0,33,37, -80,159,35,40,36,83,158,35,16,2,32,0,89,162,43,39,51,2,8,222,33, -40,80,159,35,41,36,83,158,35,16,2,32,0,89,162,43,38,49,2,9,222, -33,41,80,159,35,42,36,83,158,35,16,2,32,0,89,162,43,37,52,2,10, -222,33,42,80,159,35,43,36,83,158,35,16,2,32,0,89,162,43,37,53,2, -11,222,33,43,80,159,35,44,36,83,158,35,16,2,32,0,89,162,43,36,43, -2,12,222,33,44,80,159,35,45,36,83,158,35,16,2,83,158,38,20,96,95, -2,13,89,162,43,35,42,9,223,0,33,45,89,162,43,36,52,9,223,0,33, -46,80,159,35,46,36,83,158,35,16,2,27,248,22,161,13,248,22,156,7,27, -28,249,22,150,8,247,22,164,7,2,21,6,1,1,59,6,1,1,58,250,22, -129,7,6,14,14,40,91,94,126,97,93,42,41,126,97,40,46,42,41,23,196, -2,23,196,1,89,162,8,44,37,47,2,14,223,0,33,49,80,159,35,47,36, -83,158,35,16,2,83,158,38,20,96,96,2,15,89,162,8,44,38,53,9,223, -0,33,54,89,162,43,37,46,9,223,0,33,55,89,162,43,36,45,9,223,0, -33,56,80,159,35,48,36,83,158,35,16,2,89,162,43,38,51,2,16,223,0, -33,58,80,159,35,49,36,94,29,94,2,17,68,35,37,107,101,114,110,101,108, -11,29,94,2,17,69,35,37,109,105,110,45,115,116,120,11,9,9,9,35,0}; - EVAL_ONE_SIZED_STR((char *)expr, 5060); + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,52,46,48,46,49,46,50,59,0,0,0,1,0,0,3,0,16,0, +21,0,38,0,53,0,71,0,87,0,97,0,115,0,135,0,151,0,169,0,200, +0,229,0,251,0,9,1,15,1,29,1,34,1,44,1,52,1,80,1,112,1, +157,1,202,1,226,1,9,2,11,2,68,2,158,3,199,3,33,5,137,5,241, +5,102,6,116,6,150,6,166,6,16,8,30,8,193,8,200,9,206,10,213,10, +219,10,91,11,104,11,59,12,161,12,174,12,196,12,148,13,52,14,123,15,131, +15,139,15,165,15,19,16,0,0,53,19,0,0,29,11,11,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,108,108,101,99,116,105,111,110, +75,99,111,108,108,101,99,116,105,111,110,45,112,97,116,104,69,45,102,105,110, +100,45,99,111,108,77,99,104,101,99,107,45,115,117,102,102,105,120,45,99,97, +108,108,79,112,97,116,104,45,114,101,112,108,97,99,101,45,115,117,102,102,105, +120,75,112,97,116,104,45,97,100,100,45,115,117,102,102,105,120,77,108,111,97, +100,47,117,115,101,45,99,111,109,112,105,108,101,100,1,29,102,105,110,100,45, +108,105,98,114,97,114,121,45,99,111,108,108,101,99,116,105,111,110,45,112,97, +116,104,115,1,27,112,97,116,104,45,108,105,115,116,45,115,116,114,105,110,103, +45,62,112,97,116,104,45,108,105,115,116,1,20,102,105,110,100,45,101,120,101, +99,117,116,97,98,108,101,45,112,97,116,104,73,101,109,98,101,100,100,101,100, +45,108,111,97,100,65,113,117,111,116,101,29,94,2,17,68,35,37,112,97,114, +97,109,122,11,64,108,111,111,112,69,101,120,101,99,45,102,105,108,101,67,119, +105,110,100,111,119,115,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,6,29,29,126,97,58,32,105, +110,118,97,108,105,100,32,114,101,108,97,116,105,118,101,32,112,97,116,104,58, +32,126,115,6,42,42,126,97,58,32,99,111,108,108,101,99,116,105,111,110,32, +110,111,116,32,102,111,117,110,100,58,32,126,115,32,105,110,32,97,110,121,32, +111,102,58,32,126,115,6,42,42,112,97,116,104,32,40,102,111,114,32,97,110, +121,32,115,121,115,116,101,109,41,32,111,114,32,118,97,108,105,100,45,112,97, +116,104,32,115,116,114,105,110,103,6,21,21,115,116,114,105,110,103,32,111,114, +32,98,121,116,101,32,115,116,114,105,110,103,6,36,36,99,97,110,110,111,116, +32,97,100,100,32,97,32,115,117,102,102,105,120,32,116,111,32,97,32,114,111, +111,116,32,112,97,116,104,58,32,5,0,27,20,14,159,80,158,36,50,250,80, +158,39,51,249,22,27,11,80,158,41,50,22,158,12,10,248,22,134,5,23,196, +2,28,248,22,176,5,23,194,2,12,87,94,248,22,153,8,23,194,1,248,80, +159,37,53,36,195,28,248,22,71,23,195,2,9,27,248,22,64,23,196,2,27, +28,248,22,139,13,23,195,2,23,194,1,28,248,22,138,13,23,195,2,249,22, +140,13,23,196,1,250,80,158,42,48,248,22,154,13,2,20,11,10,250,80,158, +40,48,248,22,154,13,2,20,23,197,1,10,28,23,193,2,249,22,63,248,22, +142,13,249,22,140,13,23,198,1,247,22,155,13,27,248,22,65,23,200,1,28, +248,22,71,23,194,2,9,27,248,22,64,23,195,2,27,28,248,22,139,13,23, +195,2,23,194,1,28,248,22,138,13,23,195,2,249,22,140,13,23,196,1,250, +80,158,47,48,248,22,154,13,2,20,11,10,250,80,158,45,48,248,22,154,13, +2,20,23,197,1,10,28,23,193,2,249,22,63,248,22,142,13,249,22,140,13, +23,198,1,247,22,155,13,248,80,159,45,52,36,248,22,65,23,199,1,87,94, +23,193,1,248,80,159,43,52,36,248,22,65,23,197,1,87,94,23,193,1,27, +248,22,65,23,198,1,28,248,22,71,23,194,2,9,27,248,22,64,23,195,2, +27,28,248,22,139,13,23,195,2,23,194,1,28,248,22,138,13,23,195,2,249, +22,140,13,23,196,1,250,80,158,45,48,248,22,154,13,2,20,11,10,250,80, +158,43,48,248,22,154,13,2,20,23,197,1,10,28,23,193,2,249,22,63,248, +22,142,13,249,22,140,13,23,198,1,247,22,155,13,248,80,159,43,52,36,248, +22,65,23,199,1,248,80,159,41,52,36,248,22,65,196,27,248,22,179,12,23, +195,2,28,23,193,2,192,87,94,23,193,1,28,248,22,145,6,23,195,2,27, +248,22,137,13,195,28,192,192,248,22,138,13,195,11,87,94,28,28,248,22,180, +12,23,195,2,10,27,248,22,179,12,23,196,2,28,23,193,2,192,87,94,23, +193,1,28,248,22,145,6,23,196,2,27,248,22,137,13,23,197,2,28,23,193, +2,192,87,94,23,193,1,248,22,138,13,23,197,2,11,12,250,22,180,8,76, +110,111,114,109,97,108,45,112,97,116,104,45,99,97,115,101,6,42,42,112,97, +116,104,32,40,102,111,114,32,97,110,121,32,115,121,115,116,101,109,41,32,111, +114,32,118,97,108,105,100,45,112,97,116,104,32,115,116,114,105,110,103,23,197, +2,28,28,248,22,180,12,23,195,2,249,22,150,8,248,22,181,12,23,197,2, +2,21,249,22,150,8,247,22,164,7,2,21,27,28,248,22,145,6,23,196,2, +23,195,2,248,22,154,7,248,22,184,12,23,197,2,28,249,22,167,13,0,21, +35,114,120,34,94,91,92,92,93,91,92,92,93,91,63,93,91,92,92,93,34, +23,195,2,28,248,22,145,6,195,248,22,187,12,195,194,27,248,22,184,6,23, +195,1,249,22,188,12,248,22,157,7,250,22,173,13,0,6,35,114,120,34,47, +34,28,249,22,167,13,0,22,35,114,120,34,91,47,92,92,93,91,46,32,93, +43,91,47,92,92,93,42,36,34,23,201,2,23,199,1,250,22,173,13,0,19, +35,114,120,34,91,32,46,93,43,40,91,47,92,92,93,42,41,36,34,23,202, +1,6,2,2,92,49,80,158,43,36,2,21,28,248,22,145,6,194,248,22,187, +12,194,193,87,94,28,27,248,22,179,12,23,196,2,28,23,193,2,192,87,94, +23,193,1,28,248,22,145,6,23,196,2,27,248,22,137,13,23,197,2,28,23, +193,2,192,87,94,23,193,1,248,22,138,13,23,197,2,11,12,250,22,180,8, +23,196,2,2,22,23,197,2,28,248,22,137,13,23,195,2,12,248,22,134,11, +249,22,143,10,248,22,174,6,250,22,129,7,2,23,23,200,1,23,201,1,247, +22,23,87,94,28,27,248,22,179,12,23,196,2,28,23,193,2,192,87,94,23, +193,1,28,248,22,145,6,23,196,2,27,248,22,137,13,23,197,2,28,23,193, +2,192,87,94,23,193,1,248,22,138,13,23,197,2,11,12,250,22,180,8,23, +196,2,2,22,23,197,2,28,248,22,137,13,23,195,2,12,248,22,134,11,249, +22,143,10,248,22,174,6,250,22,129,7,2,23,23,200,1,23,201,1,247,22, +23,87,94,87,94,28,27,248,22,179,12,23,196,2,28,23,193,2,192,87,94, +23,193,1,28,248,22,145,6,23,196,2,27,248,22,137,13,23,197,2,28,23, +193,2,192,87,94,23,193,1,248,22,138,13,23,197,2,11,12,250,22,180,8, +195,2,22,23,197,2,28,248,22,137,13,23,195,2,12,248,22,134,11,249,22, +143,10,248,22,174,6,250,22,129,7,2,23,199,23,201,1,247,22,23,249,22, +3,89,162,8,44,36,49,9,223,2,33,34,196,248,22,134,11,249,22,173,10, +23,196,1,247,22,23,87,94,250,80,159,38,39,36,2,7,196,197,251,80,159, +39,41,36,2,7,32,0,89,162,8,44,36,44,9,222,33,36,197,198,32,38, +89,162,43,41,58,65,99,108,111,111,112,222,33,39,28,248,22,71,23,199,2, +87,94,23,198,1,248,23,196,1,251,22,129,7,2,24,23,199,1,28,248,22, +71,23,203,2,87,94,23,202,1,23,201,1,250,22,1,22,133,13,23,204,1, +23,205,1,23,198,1,27,249,22,133,13,248,22,64,23,202,2,23,199,2,28, +248,22,128,13,23,194,2,27,250,22,1,22,133,13,23,197,1,23,202,2,28, +248,22,128,13,23,194,2,192,87,94,23,193,1,27,248,22,65,23,202,1,28, +248,22,71,23,194,2,87,94,23,193,1,248,23,199,1,251,22,129,7,2,24, +23,202,1,28,248,22,71,23,206,2,87,94,23,205,1,23,204,1,250,22,1, +22,133,13,23,207,1,23,208,1,23,201,1,27,249,22,133,13,248,22,64,23, +197,2,23,202,2,28,248,22,128,13,23,194,2,27,250,22,1,22,133,13,23, +197,1,204,28,248,22,128,13,193,192,253,2,38,203,204,205,206,23,15,248,22, +65,201,253,2,38,202,203,204,205,206,248,22,65,200,87,94,23,193,1,27,248, +22,65,23,201,1,28,248,22,71,23,194,2,87,94,23,193,1,248,23,198,1, +251,22,129,7,2,24,23,201,1,28,248,22,71,23,205,2,87,94,23,204,1, +23,203,1,250,22,1,22,133,13,23,206,1,23,207,1,23,200,1,27,249,22, +133,13,248,22,64,23,197,2,23,201,2,28,248,22,128,13,23,194,2,27,250, +22,1,22,133,13,23,197,1,203,28,248,22,128,13,193,192,253,2,38,202,203, +204,205,206,248,22,65,201,253,2,38,201,202,203,204,205,248,22,65,200,27,247, +22,156,13,253,2,38,198,199,200,201,202,198,87,95,28,28,248,22,180,12,23, +194,2,10,27,248,22,179,12,23,195,2,28,23,193,2,192,87,94,23,193,1, +28,248,22,145,6,23,195,2,27,248,22,137,13,23,196,2,28,23,193,2,192, +87,94,23,193,1,248,22,138,13,23,196,2,11,12,252,22,180,8,23,200,2, +2,25,35,23,198,2,23,199,2,28,28,248,22,145,6,23,195,2,10,248,22, +133,7,23,195,2,87,94,23,194,1,12,252,22,180,8,23,200,2,2,26,36, +23,198,2,23,199,1,91,159,38,11,90,161,38,35,11,248,22,136,13,23,197, +2,87,94,23,195,1,87,94,28,192,12,250,22,181,8,23,201,1,2,27,23, +199,1,249,22,7,194,195,91,159,37,11,90,161,37,35,11,87,95,28,28,248, +22,180,12,23,196,2,10,27,248,22,179,12,23,197,2,28,23,193,2,192,87, +94,23,193,1,28,248,22,145,6,23,197,2,27,248,22,137,13,23,198,2,28, +23,193,2,192,87,94,23,193,1,248,22,138,13,23,198,2,11,12,252,22,180, +8,2,10,2,25,35,23,200,2,23,201,2,28,28,248,22,145,6,23,197,2, +10,248,22,133,7,23,197,2,12,252,22,180,8,2,10,2,26,36,23,200,2, +23,201,2,91,159,38,11,90,161,38,35,11,248,22,136,13,23,199,2,87,94, +23,195,1,87,94,28,23,193,2,12,250,22,181,8,2,10,2,27,23,201,2, +249,22,7,23,195,1,23,196,1,27,249,22,189,12,250,22,172,13,0,18,35, +114,120,35,34,40,91,46,93,91,94,46,93,42,124,41,36,34,248,22,185,12, +23,201,1,28,248,22,145,6,23,203,2,249,22,157,7,23,204,1,8,63,23, +202,1,28,248,22,180,12,23,199,2,248,22,181,12,23,199,1,87,94,23,198, +1,247,22,182,12,28,248,22,179,12,194,249,22,133,13,195,194,192,91,159,37, +11,90,161,37,35,11,87,95,28,28,248,22,180,12,23,196,2,10,27,248,22, +179,12,23,197,2,28,23,193,2,192,87,94,23,193,1,28,248,22,145,6,23, +197,2,27,248,22,137,13,23,198,2,28,23,193,2,192,87,94,23,193,1,248, +22,138,13,23,198,2,11,12,252,22,180,8,2,11,2,25,35,23,200,2,23, +201,2,28,28,248,22,145,6,23,197,2,10,248,22,133,7,23,197,2,12,252, +22,180,8,2,11,2,26,36,23,200,2,23,201,2,91,159,38,11,90,161,38, +35,11,248,22,136,13,23,199,2,87,94,23,195,1,87,94,28,23,193,2,12, +250,22,181,8,2,11,2,27,23,201,2,249,22,7,23,195,1,23,196,1,27, +249,22,189,12,249,22,143,7,250,22,173,13,0,9,35,114,120,35,34,91,46, +93,34,248,22,185,12,23,203,1,6,1,1,95,28,248,22,145,6,23,202,2, +249,22,157,7,23,203,1,8,63,23,201,1,28,248,22,180,12,23,199,2,248, +22,181,12,23,199,1,87,94,23,198,1,247,22,182,12,28,248,22,179,12,194, +249,22,133,13,195,194,192,249,247,22,132,6,194,11,248,80,158,36,46,9,27, +247,22,158,13,249,80,158,38,47,28,23,195,2,27,248,22,162,7,6,11,11, +80,76,84,67,79,76,76,69,67,84,83,28,192,192,6,0,0,6,0,0,27, +28,23,196,1,250,22,133,13,248,22,154,13,69,97,100,100,111,110,45,100,105, +114,247,22,160,7,6,8,8,99,111,108,108,101,99,116,115,11,27,248,80,159, +41,52,36,249,22,77,23,202,1,248,22,73,248,22,154,13,72,99,111,108,108, +101,99,116,115,45,100,105,114,28,23,194,2,249,22,63,23,196,1,23,195,1, +192,32,47,89,162,8,44,38,54,2,19,222,33,48,27,249,22,165,13,23,197, +2,23,198,2,28,23,193,2,87,94,23,196,1,27,248,22,88,23,195,2,27, +27,248,22,97,23,197,1,27,249,22,165,13,23,201,2,23,196,2,28,23,193, +2,87,94,23,194,1,27,248,22,88,23,195,2,27,250,2,47,23,203,2,23, +204,1,248,22,97,23,199,1,28,249,22,139,7,23,196,2,2,28,249,22,77, +23,202,2,194,249,22,63,248,22,188,12,23,197,1,23,195,1,87,95,23,199, +1,23,193,1,28,249,22,139,7,23,196,2,2,28,249,22,77,23,200,2,9, +249,22,63,248,22,188,12,23,197,1,9,28,249,22,139,7,23,196,2,2,28, +249,22,77,197,194,87,94,23,196,1,249,22,63,248,22,188,12,23,197,1,194, +87,94,23,193,1,28,249,22,139,7,23,198,2,2,28,249,22,77,195,9,87, +94,23,194,1,249,22,63,248,22,188,12,23,199,1,9,87,95,28,28,248,22, +133,7,194,10,248,22,145,6,194,12,250,22,180,8,2,14,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,72,195,249,22,4,22,179,12,196,11,12,250,22,180,8,2,14,6, +13,13,108,105,115,116,32,111,102,32,112,97,116,104,115,197,250,2,47,197,195, +28,248,22,145,6,197,248,22,156,7,197,196,32,50,89,162,8,44,39,57,2, +19,222,33,53,32,51,89,162,8,44,38,54,70,102,111,117,110,100,45,101,120, +101,99,222,33,52,28,23,193,2,91,159,38,11,90,161,38,35,11,248,22,136, +13,23,199,2,87,95,23,195,1,23,194,1,27,28,23,198,2,27,248,22,141, +13,23,201,2,28,249,22,152,8,23,195,2,23,202,2,11,28,248,22,137,13, +23,194,2,250,2,51,23,201,2,23,202,2,249,22,133,13,23,200,2,23,198, +1,250,2,51,23,201,2,23,202,2,23,196,1,11,28,23,193,2,192,87,94, +23,193,1,27,28,248,22,179,12,23,196,2,27,249,22,133,13,23,198,2,23, +201,2,28,28,248,22,128,13,193,10,248,22,191,12,193,192,11,11,28,23,193, +2,192,87,94,23,193,1,28,23,199,2,11,27,248,22,141,13,23,202,2,28, +249,22,152,8,23,195,2,23,203,1,11,28,248,22,137,13,23,194,2,250,2, +51,23,202,1,23,203,1,249,22,133,13,23,201,1,23,198,1,250,2,51,201, +202,195,194,28,248,22,71,23,197,2,11,27,248,22,140,13,248,22,64,23,199, +2,27,249,22,133,13,23,196,1,23,197,2,28,248,22,191,12,23,194,2,250, +2,51,198,199,195,87,94,23,193,1,27,248,22,65,23,200,1,28,248,22,71, +23,194,2,11,27,248,22,140,13,248,22,64,23,196,2,27,249,22,133,13,23, +196,1,23,200,2,28,248,22,191,12,23,194,2,250,2,51,201,202,195,87,94, +23,193,1,27,248,22,65,23,197,1,28,248,22,71,23,194,2,11,27,248,22, +140,13,248,22,64,195,27,249,22,133,13,23,196,1,202,28,248,22,191,12,193, +250,2,51,204,205,195,251,2,50,204,205,206,248,22,65,199,87,95,28,27,248, +22,179,12,23,196,2,28,23,193,2,192,87,94,23,193,1,28,248,22,145,6, +23,196,2,27,248,22,137,13,23,197,2,28,23,193,2,192,87,94,23,193,1, +248,22,138,13,23,197,2,11,12,250,22,180,8,2,15,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,27,248,22,179,12,23,197,2,28,23,193, +2,192,87,94,23,193,1,28,248,22,145,6,23,197,2,27,248,22,137,13,23, +198,2,28,23,193,2,192,87,94,23,193,1,248,22,138,13,23,198,2,11,248, +22,137,13,23,196,2,11,10,12,250,22,180,8,2,15,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,137,13,23,195,2,91,159,38,11, +90,161,38,35,11,248,22,136,13,23,198,2,249,22,150,8,194,68,114,101,108, +97,116,105,118,101,11,27,248,22,162,7,6,4,4,80,65,84,72,251,2,50, +23,199,1,23,200,1,23,201,1,28,23,197,2,27,249,80,158,43,47,23,200, +1,9,28,249,22,150,8,247,22,164,7,2,21,249,22,63,248,22,188,12,5, +1,46,23,195,1,192,9,27,248,22,140,13,23,196,1,28,248,22,191,12,193, +250,2,51,198,199,195,11,250,80,158,38,48,196,197,11,250,80,158,38,48,196, +11,11,87,94,249,22,137,6,247,22,178,4,195,248,22,152,5,249,22,162,3, +35,249,22,146,3,197,198,27,28,23,197,2,87,95,23,196,1,23,195,1,23, +197,1,87,94,23,197,1,27,248,22,154,13,2,20,27,249,80,158,40,48,23, +196,1,11,27,27,248,22,165,3,23,200,1,28,192,192,35,27,27,248,22,165, +3,23,202,1,28,192,192,35,249,22,131,5,23,197,1,83,158,39,20,97,95, +89,162,8,44,35,47,9,224,3,2,33,57,23,195,1,23,196,1,27,248,22, +182,4,23,195,1,248,80,159,38,53,36,193,159,35,20,103,159,35,16,1,65, +98,101,103,105,110,16,0,83,158,41,20,100,137,67,35,37,117,116,105,108,115, +2,1,11,10,10,42,80,158,35,35,20,103,159,37,16,17,30,2,1,2,2, +193,30,2,1,2,3,193,30,2,1,2,4,193,30,2,1,2,5,193,30,2, +1,2,6,193,30,2,1,2,7,193,30,2,1,2,8,193,30,2,1,2,9, +193,30,2,1,2,10,193,30,2,1,2,11,193,30,2,1,2,12,193,30,2, +1,2,13,193,30,2,1,2,14,193,30,2,1,2,15,193,30,2,1,2,16, +193,30,2,18,1,20,112,97,114,97,109,101,116,101,114,105,122,97,116,105,111, +110,45,107,101,121,4,30,2,18,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,11,11,16,4,2, +6,2,5,2,3,2,9,39,11,38,35,11,11,16,11,2,8,2,7,2,16, +2,15,2,13,2,12,2,4,2,11,2,14,2,10,2,2,16,11,11,11,11, +11,11,11,11,11,11,11,11,16,11,2,8,2,7,2,16,2,15,2,13,2, +12,2,4,2,11,2,14,2,10,2,2,46,46,36,11,11,16,0,16,0,16, +0,35,35,11,11,11,16,0,16,0,16,0,35,35,16,0,16,17,83,158,35, +16,2,89,162,43,36,48,2,19,223,0,33,29,80,159,35,53,36,83,158,35, +16,2,89,162,8,44,36,55,2,19,223,0,33,30,80,159,35,52,36,83,158, +35,16,2,32,0,89,162,43,36,44,2,2,222,33,31,80,159,35,35,36,83, +158,35,16,2,249,22,147,6,7,92,7,92,80,159,35,36,36,83,158,35,16, +2,89,162,43,36,53,2,4,223,0,33,32,80,159,35,37,36,83,158,35,16, +2,32,0,89,162,8,44,37,49,2,5,222,33,33,80,159,35,38,36,83,158, +35,16,2,32,0,89,162,8,44,38,50,2,6,222,33,35,80,159,35,39,36, +83,158,35,16,2,89,162,8,45,37,47,2,7,223,0,33,37,80,159,35,40, +36,83,158,35,16,2,32,0,89,162,43,39,51,2,8,222,33,40,80,159,35, +41,36,83,158,35,16,2,32,0,89,162,43,38,49,2,9,222,33,41,80,159, +35,42,36,83,158,35,16,2,32,0,89,162,43,37,52,2,10,222,33,42,80, +159,35,43,36,83,158,35,16,2,32,0,89,162,43,37,53,2,11,222,33,43, +80,159,35,44,36,83,158,35,16,2,32,0,89,162,43,36,43,2,12,222,33, +44,80,159,35,45,36,83,158,35,16,2,83,158,38,20,96,95,2,13,89,162, +43,35,42,9,223,0,33,45,89,162,43,36,52,9,223,0,33,46,80,159,35, +46,36,83,158,35,16,2,27,248,22,161,13,248,22,156,7,27,28,249,22,150, +8,247,22,164,7,2,21,6,1,1,59,6,1,1,58,250,22,129,7,6,14, +14,40,91,94,126,97,93,42,41,126,97,40,46,42,41,23,196,2,23,196,1, +89,162,8,44,37,47,2,14,223,0,33,49,80,159,35,47,36,83,158,35,16, +2,83,158,38,20,96,96,2,15,89,162,8,44,38,53,9,223,0,33,54,89, +162,43,37,46,9,223,0,33,55,89,162,43,36,45,9,223,0,33,56,80,159, +35,48,36,83,158,35,16,2,89,162,43,38,51,2,16,223,0,33,58,80,159, +35,49,36,94,29,94,2,17,68,35,37,107,101,114,110,101,108,11,29,94,2, +17,69,35,37,109,105,110,45,115,116,120,11,9,9,9,35,0}; + EVAL_ONE_SIZED_STR((char *)expr, 5056); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,9,51,46,57,57,46,48,46,50,53,8,0,0,0,1,0,0,6,0, -19,0,34,0,48,0,62,0,76,0,111,0,0,0,243,0,0,0,65,113,117, -111,116,101,29,94,2,1,67,35,37,117,116,105,108,115,11,29,94,2,1,69, -35,37,110,101,116,119,111,114,107,11,29,94,2,1,68,35,37,112,97,114,97, -109,122,11,29,94,2,1,68,35,37,101,120,112,111,98,115,11,29,94,2,1, -68,35,37,107,101,114,110,101,108,11,98,10,35,11,8,183,218,97,159,2,2, -35,35,159,2,3,35,35,159,2,4,35,35,159,2,5,35,35,159,2,6,35, -35,16,0,159,35,20,103,159,35,16,1,20,24,65,98,101,103,105,110,16,0, -83,158,41,20,100,137,69,35,37,98,117,105,108,116,105,110,29,11,11,10,10, -18,96,11,42,42,42,35,80,158,35,35,20,103,159,35,16,0,16,0,11,11, -16,0,35,11,38,35,11,11,16,0,16,0,16,0,35,35,36,11,11,16,0, -16,0,16,0,35,35,11,11,11,16,0,16,0,16,0,35,35,16,0,16,0, -98,2,6,2,5,29,94,2,1,69,35,37,102,111,114,101,105,103,110,11,2, -4,2,3,2,2,9,9,9,35,0}; - EVAL_ONE_SIZED_STR((char *)expr, 282); + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,52,46,48,46,49,46,50,8,0,0,0,1,0,0,6,0,19,0, +34,0,48,0,62,0,76,0,111,0,0,0,241,0,0,0,65,113,117,111,116, +101,29,94,2,1,67,35,37,117,116,105,108,115,11,29,94,2,1,69,35,37, +110,101,116,119,111,114,107,11,29,94,2,1,68,35,37,112,97,114,97,109,122, +11,29,94,2,1,68,35,37,101,120,112,111,98,115,11,29,94,2,1,68,35, +37,107,101,114,110,101,108,11,98,10,35,11,8,185,218,97,159,2,2,35,35, +159,2,3,35,35,159,2,4,35,35,159,2,5,35,35,159,2,6,35,35,16, +0,159,35,20,103,159,35,16,1,65,98,101,103,105,110,16,0,83,158,41,20, +100,137,69,35,37,98,117,105,108,116,105,110,29,11,11,10,10,18,96,11,42, +42,42,35,80,158,35,35,20,103,159,35,16,0,16,0,11,11,16,0,35,11, +38,35,11,11,16,0,16,0,16,0,35,35,36,11,11,16,0,16,0,16,0, +35,35,11,11,11,16,0,16,0,16,0,35,35,16,0,16,0,98,2,6,2, +5,29,94,2,1,69,35,37,102,111,114,101,105,103,110,11,2,4,2,3,2, +2,9,9,9,35,0}; + EVAL_ONE_SIZED_STR((char *)expr, 278); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,9,51,46,57,57,46,48,46,50,53,52,0,0,0,1,0,0,3,0, -14,0,41,0,47,0,60,0,74,0,96,0,122,0,134,0,152,0,172,0,184, -0,200,0,223,0,3,1,8,1,13,1,18,1,23,1,54,1,58,1,66,1, -74,1,82,1,185,1,230,1,250,1,29,2,64,2,98,2,108,2,155,2,165, -2,172,2,71,4,84,4,103,4,222,4,234,4,138,5,152,5,16,6,22,6, -36,6,63,6,148,6,150,6,211,6,142,12,201,12,233,12,0,0,158,15,0, -0,29,11,11,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,29,94, -2,4,68,35,37,112,97,114,97,109,122,11,1,20,100,101,102,97,117,108,116, -45,114,101,97,100,101,114,45,103,117,97,114,100,1,24,45,109,111,100,117,108, -101,45,104,97,115,104,45,116,97,98,108,101,45,116,97,98,108,101,71,45,112, -97,116,104,45,99,97,99,104,101,77,45,108,111,97,100,105,110,103,45,102,105, -108,101,110,97,109,101,79,45,108,111,97,100,105,110,103,45,112,114,111,109,112, -116,45,116,97,103,71,45,112,114,101,118,45,114,101,108,116,111,75,45,112,114, -101,118,45,114,101,108,116,111,45,100,105,114,1,21,115,112,108,105,116,45,114, -101,108,97,116,105,118,101,45,115,116,114,105,110,103,1,34,109,97,107,101,45, -115,116,97,110,100,97,114,100,45,109,111,100,117,108,101,45,110,97,109,101,45, -114,101,115,111,108,118,101,114,64,98,111,111,116,64,115,97,109,101,5,3,46, -122,111,64,108,111,111,112,1,29,115,116,97,110,100,97,114,100,45,109,111,100, -117,108,101,45,110,97,109,101,45,114,101,115,111,108,118,101,114,63,108,105,98, -67,105,103,110,111,114,101,100,249,22,14,195,80,158,37,45,249,80,159,37,48, -36,195,10,27,28,23,195,2,28,249,22,150,8,23,197,2,80,158,38,46,87, -94,23,195,1,80,158,36,47,27,248,22,161,4,23,197,2,28,248,22,179,12, -23,194,2,91,159,38,11,90,161,38,35,11,248,22,136,13,23,197,1,87,95, -83,160,37,11,80,158,40,46,198,83,160,37,11,80,158,40,47,192,192,11,11, -28,23,193,2,192,87,94,23,193,1,27,247,22,133,6,28,192,192,247,22,155, -13,20,14,159,80,158,35,39,250,80,158,38,40,249,22,27,11,80,158,40,39, -22,133,6,28,248,22,179,12,23,198,2,23,197,1,87,94,23,197,1,247,22, -155,13,247,194,250,22,133,13,23,197,1,23,199,1,249,80,158,42,38,23,198, -1,2,18,252,22,133,13,23,199,1,23,201,1,6,6,6,110,97,116,105,118, -101,247,22,165,7,249,80,158,44,38,23,200,1,80,158,44,35,87,94,23,194, -1,27,23,194,1,27,250,22,150,13,196,11,32,0,89,162,8,44,35,40,9, -222,11,28,192,249,22,63,195,194,11,27,248,23,195,1,23,196,1,27,250,22, -150,13,196,11,32,0,89,162,8,44,35,40,9,222,11,28,192,249,22,63,195, -194,11,249,247,22,160,13,248,22,64,195,195,27,250,22,133,13,23,198,1,23, -200,1,249,80,158,43,38,23,199,1,2,18,27,250,22,150,13,196,11,32,0, -89,162,8,44,35,40,9,222,11,28,192,249,22,63,195,194,11,249,247,22,131, -6,248,22,64,195,195,249,247,22,131,6,194,195,87,94,28,248,80,158,36,37, -23,195,2,12,250,22,180,8,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,91,159,41,11,90,161, -36,35,11,28,248,22,139,13,23,201,2,23,200,1,27,247,22,133,6,28,23, -193,2,249,22,140,13,23,203,1,23,195,1,200,90,161,38,36,11,248,22,136, -13,23,194,2,87,94,23,196,1,90,161,36,39,11,28,249,22,150,8,23,196, -2,68,114,101,108,97,116,105,118,101,87,94,23,194,1,2,17,23,194,1,90, -161,36,40,11,247,22,157,13,27,89,162,43,36,49,62,122,111,225,7,5,3, -33,27,27,89,162,43,36,51,9,225,8,6,4,33,28,27,249,22,5,89,162, -8,44,36,47,9,223,5,33,29,23,203,2,27,28,23,195,2,27,249,22,5, -83,158,39,20,97,94,89,162,8,44,36,47,9,223,5,33,30,23,198,1,23, -205,2,27,28,23,196,2,11,193,28,192,192,28,193,28,23,196,2,28,249,22, -158,3,248,22,65,196,248,22,65,23,199,2,193,11,11,11,87,94,23,195,1, -11,28,23,193,2,249,80,159,47,54,36,202,89,162,43,35,45,9,224,14,2, -33,31,87,94,23,193,1,27,28,23,197,1,27,249,22,5,83,158,39,20,97, -94,89,162,8,44,36,50,9,225,14,12,10,33,32,23,203,1,23,206,1,27, -28,196,11,193,28,192,192,28,193,28,196,28,249,22,158,3,248,22,65,196,248, -22,65,199,193,11,11,11,11,28,192,249,80,159,48,54,36,203,89,162,43,35, -45,9,224,15,2,33,33,249,80,159,48,54,36,203,89,162,43,35,44,9,224, -15,7,33,34,32,36,89,162,8,44,36,54,2,19,222,33,38,0,17,35,114, -120,34,94,40,46,42,63,41,47,40,46,42,41,36,34,27,249,22,165,13,2, -37,23,196,2,28,23,193,2,87,94,23,194,1,249,22,63,248,22,88,23,196, -2,27,248,22,97,23,197,1,27,249,22,165,13,2,37,23,196,2,28,23,193, -2,87,94,23,194,1,249,22,63,248,22,88,23,196,2,27,248,22,97,23,197, -1,27,249,22,165,13,2,37,23,196,2,28,23,193,2,87,94,23,194,1,249, -22,63,248,22,88,23,196,2,248,2,36,248,22,97,23,197,1,248,22,73,194, -248,22,73,194,248,22,73,194,32,39,89,162,43,36,54,2,19,222,33,40,28, -248,22,71,248,22,65,23,195,2,249,22,7,9,248,22,64,195,91,159,37,11, -90,161,37,35,11,27,248,22,65,23,197,2,28,248,22,71,248,22,65,23,195, -2,249,22,7,9,248,22,64,23,196,1,91,159,37,11,90,161,37,35,11,27, -248,22,65,23,197,2,28,248,22,71,248,22,65,23,195,2,249,22,7,9,248, -22,64,23,196,1,91,159,37,11,90,161,37,35,11,248,2,39,248,22,65,23, -197,2,249,22,7,249,22,63,248,22,64,23,200,1,23,197,1,23,196,1,249, -22,7,249,22,63,248,22,64,23,200,1,23,197,1,23,196,1,249,22,7,249, -22,63,248,22,64,23,200,1,23,197,1,195,27,248,2,36,23,195,1,28,194, -192,248,2,39,193,87,95,28,248,22,159,4,195,12,250,22,180,8,2,20,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,87,94,23,193,1,12,27,27,250,22, -133,2,80,158,41,42,248,22,183,13,247,22,162,11,11,28,23,193,2,192,87, -94,23,193,1,27,247,22,121,87,94,250,22,131,2,80,158,42,42,248,22,183, -13,247,22,162,11,195,192,250,22,131,2,195,198,66,97,116,116,97,99,104,251, -211,197,198,199,10,28,192,250,22,179,8,11,196,195,248,22,177,8,194,28,249, -22,151,6,194,6,1,1,46,2,17,28,249,22,151,6,194,6,2,2,46,46, -62,117,112,192,28,249,22,152,8,248,22,65,23,200,2,23,197,1,28,249,22, -150,8,248,22,64,23,200,2,23,196,1,251,22,177,8,2,20,6,26,26,99, -121,99,108,101,32,105,110,32,108,111,97,100,105,110,103,32,97,116,32,126,101, -58,32,126,101,23,200,1,249,22,2,22,65,248,22,78,249,22,63,23,206,1, -23,202,1,12,12,247,192,20,14,159,80,158,39,44,249,22,63,247,22,162,11, -23,197,1,20,14,159,80,158,39,39,250,80,158,42,40,249,22,27,11,80,158, -44,39,22,142,4,23,196,1,249,247,22,132,6,23,198,1,248,22,52,248,22, -183,12,23,198,1,87,94,28,28,248,22,179,12,23,197,2,10,248,22,164,4, -23,197,2,12,28,23,198,2,250,22,179,8,11,6,15,15,98,97,100,32,109, -111,100,117,108,101,32,112,97,116,104,23,201,2,250,22,180,8,2,20,6,19, -19,109,111,100,117,108,101,45,112,97,116,104,32,111,114,32,112,97,116,104,23, -199,2,28,28,248,22,61,23,197,2,249,22,150,8,248,22,64,23,199,2,2, -4,11,248,22,160,4,248,22,88,197,28,28,248,22,61,23,197,2,249,22,150, -8,248,22,64,23,199,2,66,112,108,97,110,101,116,11,87,94,28,207,12,20, -14,159,80,158,37,39,250,80,158,40,40,249,22,27,11,80,158,42,39,22,162, -11,23,197,1,90,161,36,35,10,249,22,143,4,21,94,2,21,6,18,18,112, -108,97,110,101,116,47,114,101,115,111,108,118,101,114,46,115,115,1,27,112,108, -97,110,101,116,45,109,111,100,117,108,101,45,110,97,109,101,45,114,101,115,111, -108,118,101,114,12,251,211,199,200,201,202,87,94,23,193,1,27,89,162,8,44, -36,45,79,115,104,111,119,45,99,111,108,108,101,99,116,105,111,110,45,101,114, -114,223,6,33,44,27,28,248,22,51,23,199,2,27,250,22,133,2,80,158,43, -43,249,22,63,23,204,2,247,22,156,13,11,28,23,193,2,192,87,94,23,193, -1,91,159,37,11,90,161,37,35,11,249,80,159,44,48,36,248,22,54,23,204, -2,11,27,251,80,158,47,50,2,20,23,202,1,28,248,22,71,23,199,2,23, -199,2,248,22,64,23,199,2,28,248,22,71,23,199,2,9,248,22,65,23,199, -2,249,22,133,13,23,195,1,28,248,22,71,23,197,1,87,94,23,197,1,6, -7,7,109,97,105,110,46,115,115,249,22,168,6,23,199,1,6,3,3,46,115, -115,28,248,22,145,6,23,199,2,87,94,23,194,1,27,248,80,159,41,55,36, -23,201,2,27,250,22,133,2,80,158,44,43,249,22,63,23,205,2,23,199,2, -11,28,23,193,2,192,87,94,23,193,1,91,159,37,11,90,161,37,35,11,249, -80,159,45,48,36,23,204,2,11,250,22,1,22,133,13,23,199,1,249,22,77, -249,22,2,32,0,89,162,8,44,36,43,9,222,33,45,23,200,1,248,22,73, -23,200,1,28,248,22,179,12,23,199,2,87,94,23,194,1,28,248,22,138,13, -23,199,2,23,198,2,248,22,73,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,150, -8,248,22,64,23,201,2,2,21,27,250,22,133,2,80,158,43,43,249,22,63, -23,204,2,247,22,156,13,11,28,23,193,2,192,87,94,23,193,1,91,159,38, -11,90,161,37,35,11,249,80,159,45,48,36,248,22,88,23,205,2,11,90,161, -36,37,11,28,248,22,71,248,22,90,23,204,2,28,248,22,71,23,194,2,249, -22,167,13,0,8,35,114,120,34,91,46,93,34,23,196,2,11,10,27,27,28, -23,197,2,249,22,77,28,248,22,71,248,22,90,23,208,2,21,93,6,5,5, -109,122,108,105,98,249,22,1,22,77,249,22,2,80,159,51,56,36,248,22,90, -23,211,2,23,197,2,28,248,22,71,23,196,2,248,22,73,23,197,2,23,195, -2,251,80,158,49,50,2,20,23,204,1,248,22,64,23,198,2,248,22,65,23, -198,1,249,22,133,13,23,195,1,28,23,198,1,87,94,23,196,1,23,197,1, -28,248,22,71,23,197,1,87,94,23,197,1,6,7,7,109,97,105,110,46,115, -115,28,249,22,167,13,0,8,35,114,120,34,91,46,93,34,23,199,2,23,197, -1,249,22,168,6,23,199,1,6,3,3,46,115,115,28,249,22,150,8,248,22, -64,23,201,2,64,102,105,108,101,249,22,140,13,248,22,144,13,248,22,88,23, -202,2,248,80,159,42,55,36,23,202,2,12,87,94,28,28,248,22,179,12,23, -194,2,10,248,22,167,7,23,194,2,87,94,23,200,1,12,28,23,200,2,250, -22,179,8,67,114,101,113,117,105,114,101,249,22,129,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,64, -23,199,2,6,0,0,23,203,1,87,94,23,200,1,250,22,180,8,2,20,249, -22,129,7,6,13,13,109,111,100,117,108,101,32,112,97,116,104,126,97,28,23, -198,2,248,22,64,23,199,2,6,0,0,23,201,2,27,28,248,22,167,7,23, -195,2,249,22,172,7,23,196,2,35,249,22,142,13,248,22,143,13,23,197,2, -11,27,28,248,22,167,7,23,196,2,249,22,172,7,23,197,2,36,248,80,158, -42,51,23,195,2,91,159,38,11,90,161,38,35,11,28,248,22,167,7,23,199, -2,250,22,7,2,22,249,22,172,7,23,203,2,37,2,22,248,22,136,13,23, -198,2,87,95,23,195,1,23,193,1,27,28,248,22,167,7,23,200,2,249,22, -172,7,23,201,2,38,249,80,158,47,52,23,197,2,5,0,27,28,248,22,167, -7,23,201,2,249,22,172,7,23,202,2,39,248,22,160,4,23,200,2,27,27, -250,22,133,2,80,158,51,42,248,22,183,13,247,22,162,11,11,28,23,193,2, -192,87,94,23,193,1,27,247,22,121,87,94,250,22,131,2,80,158,52,42,248, -22,183,13,247,22,162,11,195,192,87,95,28,23,209,1,27,250,22,133,2,23, -197,2,197,11,28,23,193,1,12,87,95,27,27,28,248,22,17,80,158,51,45, -80,158,50,45,247,22,19,250,22,25,248,22,23,23,197,2,80,158,53,44,23, -196,1,27,247,22,162,11,249,22,3,83,158,39,20,97,94,89,162,8,44,36, -54,9,226,12,11,2,3,33,46,23,195,1,23,196,1,248,28,248,22,17,80, -158,50,45,32,0,89,162,43,36,41,9,222,33,47,80,159,49,57,36,89,162, -43,35,50,9,227,14,9,8,4,3,33,48,250,22,131,2,23,197,1,197,10, -12,28,28,248,22,167,7,23,202,1,11,27,248,22,145,6,23,208,2,28,192, -192,28,248,22,61,23,208,2,249,22,150,8,248,22,64,23,210,2,2,21,11, -250,22,131,2,80,158,50,43,28,248,22,145,6,23,210,2,249,22,63,23,211, -1,248,80,159,53,55,36,23,213,1,87,94,23,210,1,249,22,63,23,211,1, -247,22,156,13,252,22,169,7,23,208,1,23,207,1,23,205,1,23,203,1,201, -12,193,91,159,37,10,90,161,36,35,10,11,90,161,36,36,10,83,158,38,20, -96,96,2,20,89,162,8,44,36,50,9,224,2,0,33,42,89,162,43,38,48, -9,223,1,33,43,89,162,43,39,8,30,9,225,2,3,0,33,49,208,87,95, -248,22,141,4,248,80,158,37,49,247,22,162,11,248,22,132,6,80,158,36,36, -248,22,153,12,80,159,36,41,36,159,35,20,103,159,35,16,1,20,24,65,98, -101,103,105,110,16,0,83,158,41,20,100,137,66,35,37,98,111,111,116,2,1, -11,10,10,36,80,158,35,35,20,103,159,39,16,19,30,2,1,2,2,193,30, -2,1,2,3,193,30,2,5,72,112,97,116,104,45,115,116,114,105,110,103,63, -10,30,2,5,75,112,97,116,104,45,97,100,100,45,115,117,102,102,105,120,7, -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,4,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,3,30,2,1,2,7,193,30,2, -1,2,8,193,30,2,1,2,9,193,30,2,1,2,10,193,30,2,1,2,11, -193,30,2,1,2,12,193,30,2,1,2,13,193,30,2,1,2,14,193,30,2, -1,2,15,193,30,2,5,69,45,102,105,110,100,45,99,111,108,0,30,2,5, -76,110,111,114,109,97,108,45,99,97,115,101,45,112,97,116,104,6,30,2,5, -79,112,97,116,104,45,114,101,112,108,97,99,101,45,115,117,102,102,105,120,9, -30,2,1,2,16,193,16,0,11,11,16,11,2,10,2,11,2,8,2,9,2, -12,2,13,2,3,2,7,2,2,2,15,2,14,46,11,38,35,11,11,16,1, -2,16,16,1,11,16,1,2,16,36,36,36,11,11,16,0,16,0,16,0,35, -35,11,11,11,16,0,16,0,16,0,35,35,16,0,16,16,83,158,35,16,2, -89,162,43,36,44,9,223,0,33,23,80,159,35,57,36,83,158,35,16,2,89, -162,43,36,44,9,223,0,33,24,80,159,35,56,36,83,158,35,16,2,89,162, -43,36,48,67,103,101,116,45,100,105,114,223,0,33,25,80,159,35,55,36,83, -158,35,16,2,89,162,43,37,48,68,119,105,116,104,45,100,105,114,223,0,33, -26,80,159,35,54,36,83,158,35,16,2,248,22,164,7,69,115,111,45,115,117, -102,102,105,120,80,159,35,35,36,83,158,35,16,2,89,162,43,37,59,2,3, -223,0,33,35,80,159,35,36,36,83,158,35,16,2,32,0,89,162,8,44,36, -41,2,7,222,192,80,159,35,41,36,83,158,35,16,2,247,22,123,80,159,35, -42,36,83,158,35,16,2,247,22,122,80,159,35,43,36,83,158,35,16,2,247, -22,59,80,159,35,44,36,83,158,35,16,2,248,22,18,74,109,111,100,117,108, -101,45,108,111,97,100,105,110,103,80,159,35,45,36,83,158,35,16,2,11,80, -158,35,46,83,158,35,16,2,11,80,158,35,47,83,158,35,16,2,32,0,89, -162,43,37,44,2,14,222,33,41,80,159,35,48,36,83,158,35,16,2,89,162, -8,44,36,44,2,15,223,0,33,50,80,159,35,49,36,83,158,35,16,2,89, -162,43,35,43,2,16,223,0,33,51,80,159,35,53,36,95,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,9,9,9,35,0}; - EVAL_ONE_SIZED_STR((char *)expr, 4125); + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,52,46,48,46,49,46,50,52,0,0,0,1,0,0,3,0,14,0, +41,0,47,0,60,0,74,0,96,0,122,0,134,0,152,0,172,0,184,0,200, +0,223,0,3,1,8,1,13,1,18,1,23,1,54,1,58,1,66,1,74,1, +82,1,185,1,230,1,250,1,29,2,64,2,98,2,108,2,155,2,165,2,172, +2,71,4,84,4,103,4,222,4,234,4,138,5,152,5,16,6,22,6,36,6, +63,6,148,6,150,6,211,6,142,12,201,12,233,12,0,0,156,15,0,0,29, +11,11,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,29,94,2,4, +68,35,37,112,97,114,97,109,122,11,1,20,100,101,102,97,117,108,116,45,114, +101,97,100,101,114,45,103,117,97,114,100,1,24,45,109,111,100,117,108,101,45, +104,97,115,104,45,116,97,98,108,101,45,116,97,98,108,101,71,45,112,97,116, +104,45,99,97,99,104,101,77,45,108,111,97,100,105,110,103,45,102,105,108,101, +110,97,109,101,79,45,108,111,97,100,105,110,103,45,112,114,111,109,112,116,45, +116,97,103,71,45,112,114,101,118,45,114,101,108,116,111,75,45,112,114,101,118, +45,114,101,108,116,111,45,100,105,114,1,21,115,112,108,105,116,45,114,101,108, +97,116,105,118,101,45,115,116,114,105,110,103,1,34,109,97,107,101,45,115,116, +97,110,100,97,114,100,45,109,111,100,117,108,101,45,110,97,109,101,45,114,101, +115,111,108,118,101,114,64,98,111,111,116,64,115,97,109,101,5,3,46,122,111, +64,108,111,111,112,1,29,115,116,97,110,100,97,114,100,45,109,111,100,117,108, +101,45,110,97,109,101,45,114,101,115,111,108,118,101,114,63,108,105,98,67,105, +103,110,111,114,101,100,249,22,14,195,80,158,37,45,249,80,159,37,48,36,195, +10,27,28,23,195,2,28,249,22,150,8,23,197,2,80,158,38,46,87,94,23, +195,1,80,158,36,47,27,248,22,161,4,23,197,2,28,248,22,179,12,23,194, +2,91,159,38,11,90,161,38,35,11,248,22,136,13,23,197,1,87,95,83,160, +37,11,80,158,40,46,198,83,160,37,11,80,158,40,47,192,192,11,11,28,23, +193,2,192,87,94,23,193,1,27,247,22,133,6,28,192,192,247,22,155,13,20, +14,159,80,158,35,39,250,80,158,38,40,249,22,27,11,80,158,40,39,22,133, +6,28,248,22,179,12,23,198,2,23,197,1,87,94,23,197,1,247,22,155,13, +247,194,250,22,133,13,23,197,1,23,199,1,249,80,158,42,38,23,198,1,2, +18,252,22,133,13,23,199,1,23,201,1,6,6,6,110,97,116,105,118,101,247, +22,165,7,249,80,158,44,38,23,200,1,80,158,44,35,87,94,23,194,1,27, +23,194,1,27,250,22,150,13,196,11,32,0,89,162,8,44,35,40,9,222,11, +28,192,249,22,63,195,194,11,27,248,23,195,1,23,196,1,27,250,22,150,13, +196,11,32,0,89,162,8,44,35,40,9,222,11,28,192,249,22,63,195,194,11, +249,247,22,160,13,248,22,64,195,195,27,250,22,133,13,23,198,1,23,200,1, +249,80,158,43,38,23,199,1,2,18,27,250,22,150,13,196,11,32,0,89,162, +8,44,35,40,9,222,11,28,192,249,22,63,195,194,11,249,247,22,131,6,248, +22,64,195,195,249,247,22,131,6,194,195,87,94,28,248,80,158,36,37,23,195, +2,12,250,22,180,8,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,91,159,41,11,90,161,36,35, +11,28,248,22,139,13,23,201,2,23,200,1,27,247,22,133,6,28,23,193,2, +249,22,140,13,23,203,1,23,195,1,200,90,161,38,36,11,248,22,136,13,23, +194,2,87,94,23,196,1,90,161,36,39,11,28,249,22,150,8,23,196,2,68, +114,101,108,97,116,105,118,101,87,94,23,194,1,2,17,23,194,1,90,161,36, +40,11,247,22,157,13,27,89,162,43,36,49,62,122,111,225,7,5,3,33,27, +27,89,162,43,36,51,9,225,8,6,4,33,28,27,249,22,5,89,162,8,44, +36,47,9,223,5,33,29,23,203,2,27,28,23,195,2,27,249,22,5,83,158, +39,20,97,94,89,162,8,44,36,47,9,223,5,33,30,23,198,1,23,205,2, +27,28,23,196,2,11,193,28,192,192,28,193,28,23,196,2,28,249,22,158,3, +248,22,65,196,248,22,65,23,199,2,193,11,11,11,87,94,23,195,1,11,28, +23,193,2,249,80,159,47,54,36,202,89,162,43,35,45,9,224,14,2,33,31, +87,94,23,193,1,27,28,23,197,1,27,249,22,5,83,158,39,20,97,94,89, +162,8,44,36,50,9,225,14,12,10,33,32,23,203,1,23,206,1,27,28,196, +11,193,28,192,192,28,193,28,196,28,249,22,158,3,248,22,65,196,248,22,65, +199,193,11,11,11,11,28,192,249,80,159,48,54,36,203,89,162,43,35,45,9, +224,15,2,33,33,249,80,159,48,54,36,203,89,162,43,35,44,9,224,15,7, +33,34,32,36,89,162,8,44,36,54,2,19,222,33,38,0,17,35,114,120,34, +94,40,46,42,63,41,47,40,46,42,41,36,34,27,249,22,165,13,2,37,23, +196,2,28,23,193,2,87,94,23,194,1,249,22,63,248,22,88,23,196,2,27, +248,22,97,23,197,1,27,249,22,165,13,2,37,23,196,2,28,23,193,2,87, +94,23,194,1,249,22,63,248,22,88,23,196,2,27,248,22,97,23,197,1,27, +249,22,165,13,2,37,23,196,2,28,23,193,2,87,94,23,194,1,249,22,63, +248,22,88,23,196,2,248,2,36,248,22,97,23,197,1,248,22,73,194,248,22, +73,194,248,22,73,194,32,39,89,162,43,36,54,2,19,222,33,40,28,248,22, +71,248,22,65,23,195,2,249,22,7,9,248,22,64,195,91,159,37,11,90,161, +37,35,11,27,248,22,65,23,197,2,28,248,22,71,248,22,65,23,195,2,249, +22,7,9,248,22,64,23,196,1,91,159,37,11,90,161,37,35,11,27,248,22, +65,23,197,2,28,248,22,71,248,22,65,23,195,2,249,22,7,9,248,22,64, +23,196,1,91,159,37,11,90,161,37,35,11,248,2,39,248,22,65,23,197,2, +249,22,7,249,22,63,248,22,64,23,200,1,23,197,1,23,196,1,249,22,7, +249,22,63,248,22,64,23,200,1,23,197,1,23,196,1,249,22,7,249,22,63, +248,22,64,23,200,1,23,197,1,195,27,248,2,36,23,195,1,28,194,192,248, +2,39,193,87,95,28,248,22,159,4,195,12,250,22,180,8,2,20,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,87,94,23,193,1,12,27,27,250,22,133,2, +80,158,41,42,248,22,184,13,247,22,162,11,11,28,23,193,2,192,87,94,23, +193,1,27,247,22,121,87,94,250,22,131,2,80,158,42,42,248,22,184,13,247, +22,162,11,195,192,250,22,131,2,195,198,66,97,116,116,97,99,104,251,211,197, +198,199,10,28,192,250,22,179,8,11,196,195,248,22,177,8,194,28,249,22,151, +6,194,6,1,1,46,2,17,28,249,22,151,6,194,6,2,2,46,46,62,117, +112,192,28,249,22,152,8,248,22,65,23,200,2,23,197,1,28,249,22,150,8, +248,22,64,23,200,2,23,196,1,251,22,177,8,2,20,6,26,26,99,121,99, +108,101,32,105,110,32,108,111,97,100,105,110,103,32,97,116,32,126,101,58,32, +126,101,23,200,1,249,22,2,22,65,248,22,78,249,22,63,23,206,1,23,202, +1,12,12,247,192,20,14,159,80,158,39,44,249,22,63,247,22,162,11,23,197, +1,20,14,159,80,158,39,39,250,80,158,42,40,249,22,27,11,80,158,44,39, +22,142,4,23,196,1,249,247,22,132,6,23,198,1,248,22,52,248,22,183,12, +23,198,1,87,94,28,28,248,22,179,12,23,197,2,10,248,22,164,4,23,197, +2,12,28,23,198,2,250,22,179,8,11,6,15,15,98,97,100,32,109,111,100, +117,108,101,32,112,97,116,104,23,201,2,250,22,180,8,2,20,6,19,19,109, +111,100,117,108,101,45,112,97,116,104,32,111,114,32,112,97,116,104,23,199,2, +28,28,248,22,61,23,197,2,249,22,150,8,248,22,64,23,199,2,2,4,11, +248,22,160,4,248,22,88,197,28,28,248,22,61,23,197,2,249,22,150,8,248, +22,64,23,199,2,66,112,108,97,110,101,116,11,87,94,28,207,12,20,14,159, +80,158,37,39,250,80,158,40,40,249,22,27,11,80,158,42,39,22,162,11,23, +197,1,90,161,36,35,10,249,22,143,4,21,94,2,21,6,18,18,112,108,97, +110,101,116,47,114,101,115,111,108,118,101,114,46,115,115,1,27,112,108,97,110, +101,116,45,109,111,100,117,108,101,45,110,97,109,101,45,114,101,115,111,108,118, +101,114,12,251,211,199,200,201,202,87,94,23,193,1,27,89,162,8,44,36,45, +79,115,104,111,119,45,99,111,108,108,101,99,116,105,111,110,45,101,114,114,223, +6,33,44,27,28,248,22,51,23,199,2,27,250,22,133,2,80,158,43,43,249, +22,63,23,204,2,247,22,156,13,11,28,23,193,2,192,87,94,23,193,1,91, +159,37,11,90,161,37,35,11,249,80,159,44,48,36,248,22,54,23,204,2,11, +27,251,80,158,47,50,2,20,23,202,1,28,248,22,71,23,199,2,23,199,2, +248,22,64,23,199,2,28,248,22,71,23,199,2,9,248,22,65,23,199,2,249, +22,133,13,23,195,1,28,248,22,71,23,197,1,87,94,23,197,1,6,7,7, +109,97,105,110,46,115,115,249,22,168,6,23,199,1,6,3,3,46,115,115,28, +248,22,145,6,23,199,2,87,94,23,194,1,27,248,80,159,41,55,36,23,201, +2,27,250,22,133,2,80,158,44,43,249,22,63,23,205,2,23,199,2,11,28, +23,193,2,192,87,94,23,193,1,91,159,37,11,90,161,37,35,11,249,80,159, +45,48,36,23,204,2,11,250,22,1,22,133,13,23,199,1,249,22,77,249,22, +2,32,0,89,162,8,44,36,43,9,222,33,45,23,200,1,248,22,73,23,200, +1,28,248,22,179,12,23,199,2,87,94,23,194,1,28,248,22,138,13,23,199, +2,23,198,2,248,22,73,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,150,8,248, +22,64,23,201,2,2,21,27,250,22,133,2,80,158,43,43,249,22,63,23,204, +2,247,22,156,13,11,28,23,193,2,192,87,94,23,193,1,91,159,38,11,90, +161,37,35,11,249,80,159,45,48,36,248,22,88,23,205,2,11,90,161,36,37, +11,28,248,22,71,248,22,90,23,204,2,28,248,22,71,23,194,2,249,22,167, +13,0,8,35,114,120,34,91,46,93,34,23,196,2,11,10,27,27,28,23,197, +2,249,22,77,28,248,22,71,248,22,90,23,208,2,21,93,6,5,5,109,122, +108,105,98,249,22,1,22,77,249,22,2,80,159,51,56,36,248,22,90,23,211, +2,23,197,2,28,248,22,71,23,196,2,248,22,73,23,197,2,23,195,2,251, +80,158,49,50,2,20,23,204,1,248,22,64,23,198,2,248,22,65,23,198,1, +249,22,133,13,23,195,1,28,23,198,1,87,94,23,196,1,23,197,1,28,248, +22,71,23,197,1,87,94,23,197,1,6,7,7,109,97,105,110,46,115,115,28, +249,22,167,13,0,8,35,114,120,34,91,46,93,34,23,199,2,23,197,1,249, +22,168,6,23,199,1,6,3,3,46,115,115,28,249,22,150,8,248,22,64,23, +201,2,64,102,105,108,101,249,22,140,13,248,22,144,13,248,22,88,23,202,2, +248,80,159,42,55,36,23,202,2,12,87,94,28,28,248,22,179,12,23,194,2, +10,248,22,167,7,23,194,2,87,94,23,200,1,12,28,23,200,2,250,22,179, +8,67,114,101,113,117,105,114,101,249,22,129,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,64,23,199, +2,6,0,0,23,203,1,87,94,23,200,1,250,22,180,8,2,20,249,22,129, +7,6,13,13,109,111,100,117,108,101,32,112,97,116,104,126,97,28,23,198,2, +248,22,64,23,199,2,6,0,0,23,201,2,27,28,248,22,167,7,23,195,2, +249,22,172,7,23,196,2,35,249,22,142,13,248,22,143,13,23,197,2,11,27, +28,248,22,167,7,23,196,2,249,22,172,7,23,197,2,36,248,80,158,42,51, +23,195,2,91,159,38,11,90,161,38,35,11,28,248,22,167,7,23,199,2,250, +22,7,2,22,249,22,172,7,23,203,2,37,2,22,248,22,136,13,23,198,2, +87,95,23,195,1,23,193,1,27,28,248,22,167,7,23,200,2,249,22,172,7, +23,201,2,38,249,80,158,47,52,23,197,2,5,0,27,28,248,22,167,7,23, +201,2,249,22,172,7,23,202,2,39,248,22,160,4,23,200,2,27,27,250,22, +133,2,80,158,51,42,248,22,184,13,247,22,162,11,11,28,23,193,2,192,87, +94,23,193,1,27,247,22,121,87,94,250,22,131,2,80,158,52,42,248,22,184, +13,247,22,162,11,195,192,87,95,28,23,209,1,27,250,22,133,2,23,197,2, +197,11,28,23,193,1,12,87,95,27,27,28,248,22,17,80,158,51,45,80,158, +50,45,247,22,19,250,22,25,248,22,23,23,197,2,80,158,53,44,23,196,1, +27,247,22,162,11,249,22,3,83,158,39,20,97,94,89,162,8,44,36,54,9, +226,12,11,2,3,33,46,23,195,1,23,196,1,248,28,248,22,17,80,158,50, +45,32,0,89,162,43,36,41,9,222,33,47,80,159,49,57,36,89,162,43,35, +50,9,227,14,9,8,4,3,33,48,250,22,131,2,23,197,1,197,10,12,28, +28,248,22,167,7,23,202,1,11,27,248,22,145,6,23,208,2,28,192,192,28, +248,22,61,23,208,2,249,22,150,8,248,22,64,23,210,2,2,21,11,250,22, +131,2,80,158,50,43,28,248,22,145,6,23,210,2,249,22,63,23,211,1,248, +80,159,53,55,36,23,213,1,87,94,23,210,1,249,22,63,23,211,1,247,22, +156,13,252,22,169,7,23,208,1,23,207,1,23,205,1,23,203,1,201,12,193, +91,159,37,10,90,161,36,35,10,11,90,161,36,36,10,83,158,38,20,96,96, +2,20,89,162,8,44,36,50,9,224,2,0,33,42,89,162,43,38,48,9,223, +1,33,43,89,162,43,39,8,30,9,225,2,3,0,33,49,208,87,95,248,22, +141,4,248,80,158,37,49,247,22,162,11,248,22,132,6,80,158,36,36,248,22, +153,12,80,159,36,41,36,159,35,20,103,159,35,16,1,65,98,101,103,105,110, +16,0,83,158,41,20,100,137,66,35,37,98,111,111,116,2,1,11,10,10,36, +80,158,35,35,20,103,159,39,16,19,30,2,1,2,2,193,30,2,1,2,3, +193,30,2,5,72,112,97,116,104,45,115,116,114,105,110,103,63,10,30,2,5, +75,112,97,116,104,45,97,100,100,45,115,117,102,102,105,120,7,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, +4,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,3,30,2,1,2,7,193,30,2,1,2,8,193, +30,2,1,2,9,193,30,2,1,2,10,193,30,2,1,2,11,193,30,2,1, +2,12,193,30,2,1,2,13,193,30,2,1,2,14,193,30,2,1,2,15,193, +30,2,5,69,45,102,105,110,100,45,99,111,108,0,30,2,5,76,110,111,114, +109,97,108,45,99,97,115,101,45,112,97,116,104,6,30,2,5,79,112,97,116, +104,45,114,101,112,108,97,99,101,45,115,117,102,102,105,120,9,30,2,1,2, +16,193,16,0,11,11,16,11,2,10,2,11,2,8,2,9,2,12,2,13,2, +3,2,7,2,2,2,15,2,14,46,11,38,35,11,11,16,1,2,16,16,1, +11,16,1,2,16,36,36,36,11,11,16,0,16,0,16,0,35,35,11,11,11, +16,0,16,0,16,0,35,35,16,0,16,16,83,158,35,16,2,89,162,43,36, +44,9,223,0,33,23,80,159,35,57,36,83,158,35,16,2,89,162,43,36,44, +9,223,0,33,24,80,159,35,56,36,83,158,35,16,2,89,162,43,36,48,67, +103,101,116,45,100,105,114,223,0,33,25,80,159,35,55,36,83,158,35,16,2, +89,162,43,37,48,68,119,105,116,104,45,100,105,114,223,0,33,26,80,159,35, +54,36,83,158,35,16,2,248,22,164,7,69,115,111,45,115,117,102,102,105,120, +80,159,35,35,36,83,158,35,16,2,89,162,43,37,59,2,3,223,0,33,35, +80,159,35,36,36,83,158,35,16,2,32,0,89,162,8,44,36,41,2,7,222, +192,80,159,35,41,36,83,158,35,16,2,247,22,123,80,159,35,42,36,83,158, +35,16,2,247,22,122,80,159,35,43,36,83,158,35,16,2,247,22,59,80,159, +35,44,36,83,158,35,16,2,248,22,18,74,109,111,100,117,108,101,45,108,111, +97,100,105,110,103,80,159,35,45,36,83,158,35,16,2,11,80,158,35,46,83, +158,35,16,2,11,80,158,35,47,83,158,35,16,2,32,0,89,162,43,37,44, +2,14,222,33,41,80,159,35,48,36,83,158,35,16,2,89,162,8,44,36,44, +2,15,223,0,33,50,80,159,35,49,36,83,158,35,16,2,89,162,43,35,43, +2,16,223,0,33,51,80,159,35,53,36,95,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,9,9,9,35,0}; + EVAL_ONE_SIZED_STR((char *)expr, 4121); } diff --git a/src/mzscheme/src/env.c b/src/mzscheme/src/env.c index 72f24df573..cb077b84f2 100644 --- a/src/mzscheme/src/env.c +++ b/src/mzscheme/src/env.c @@ -74,6 +74,7 @@ static Scheme_Env *make_empty_inited_env(int toplevel_size); static Scheme_Env *make_empty_not_inited_env(int toplevel_size); static Scheme_Object *namespace_identifier(int, Scheme_Object *[]); +static Scheme_Object *namespace_module_identifier(int, Scheme_Object *[]); static Scheme_Object *namespace_variable_value(int, Scheme_Object *[]); static Scheme_Object *namespace_set_variable_value(int, Scheme_Object *[]); static Scheme_Object *namespace_undefine_variable(int, Scheme_Object *[]); @@ -497,6 +498,12 @@ static void make_init_env(void) 1, 2), env); + scheme_add_global_constant("namespace-module-identifier", + scheme_make_prim_w_arity(namespace_module_identifier, + "namespace-module-identifier", + 0, 1), + env); + scheme_add_global_constant("namespace-variable-value", scheme_make_prim_w_arity(namespace_variable_value, "namespace-variable-value", @@ -537,9 +544,9 @@ static void make_init_env(void) "variable-reference->empty-namespace", 1, 1), env); - scheme_add_global_constant("variable-reference->top-level-namespace", + scheme_add_global_constant("variable-reference->namespace", scheme_make_prim_w_arity(variable_top_level_namespace, - "variable-reference->top-level-namespace", + "variable-reference->namespace", 1, 1), env); scheme_add_global_constant("variable-reference->phase", @@ -3708,6 +3715,23 @@ namespace_identifier(int argc, Scheme_Object *argv[]) return obj; } +static Scheme_Object * +namespace_module_identifier(int argc, Scheme_Object *argv[]) +{ + Scheme_Env *genv; + + if ((argc > 0) && !SCHEME_NAMESPACEP(argv[0])) + scheme_wrong_type("namespace-module-identifier", "namespace", 0, argc, argv); + + if (argc) + genv = (Scheme_Env *)argv[0]; + else + genv = scheme_get_env(NULL); + + return scheme_datum_to_syntax(scheme_intern_symbol("module"), scheme_false, + scheme_sys_wraps_phase(genv->phase), 0, 0); +} + static Scheme_Object * namespace_variable_value(int argc, Scheme_Object *argv[]) { @@ -3893,34 +3917,24 @@ static Scheme_Object *do_variable_namespace(const char *who, int tl, int argc, S else { v = SCHEME_PTR_VAL(argv[0]); env = ((Scheme_Bucket_With_Home *)v)->home; - if (tl && env->module) { - env = NULL; - } } if (!env) scheme_wrong_type(who, - (tl ? "top-level variable-reference" : "variable-reference"), + "variable-reference", 0, argc, argv); ph = env->phase; if (tl == 2) { return scheme_make_integer(ph); } else if (tl) { - while (ph--) { - env = env->template_env; - } + /* return env directly */ } else { - env = make_env(env, 0); - - /* rewind modchain to phase 0: */ - while (ph--) { - v = SCHEME_VEC_ELS(env->modchain)[2]; - if (SCHEME_FALSEP(v)) { - scheme_signal_error("internal error: missing modchain for previous phase"); - } - env->modchain = v; - } + /* new namespace: */ + Scheme_Env *new_env; + new_env = make_env(env, 0); + new_env->phase = env->phase; + env = new_env; } return (Scheme_Object *)env; @@ -3933,7 +3947,7 @@ static Scheme_Object *variable_namespace(int argc, Scheme_Object *argv[]) static Scheme_Object *variable_top_level_namespace(int argc, Scheme_Object *argv[]) { - return do_variable_namespace("variable-reference->top-level-namespace", 1, argc, argv); + return do_variable_namespace("variable-reference->namespace", 1, argc, argv); } static Scheme_Object *variable_phase(int argc, Scheme_Object *argv[]) diff --git a/src/mzscheme/src/eval.c b/src/mzscheme/src/eval.c index e58957c057..8593acbaf2 100644 --- a/src/mzscheme/src/eval.c +++ b/src/mzscheme/src/eval.c @@ -1814,10 +1814,13 @@ static Scheme_Object *link_module_variable(Scheme_Object *modidx, } static Scheme_Object *link_toplevel(Scheme_Object *expr, Scheme_Env *env, - Scheme_Object *src_modidx, - Scheme_Object *dest_modidx) + Scheme_Object *src_modidx, + Scheme_Object *dest_modidx) { - if (SAME_TYPE(SCHEME_TYPE(expr), scheme_variable_type)) { + if (SCHEME_SYMBOLP(expr)) { + /* See scheme_make_environment_dummy */ + return (Scheme_Object *)scheme_global_bucket(begin_symbol, env); + } else if (SAME_TYPE(SCHEME_TYPE(expr), scheme_variable_type)) { Scheme_Bucket_With_Home *b = (Scheme_Bucket_With_Home *)expr; if (!env || !b->home->module) @@ -4655,12 +4658,15 @@ static Scheme_Object *add_renames_unless_module(Scheme_Object *form, Scheme_Env { if (genv->rename_set) { if (SCHEME_STX_PAIRP(form)) { - Scheme_Object *a, *d; + Scheme_Object *a, *d, *module_stx; a = SCHEME_STX_CAR(form); if (SCHEME_STX_SYMBOLP(a)) { a = scheme_add_rename(a, genv->rename_set); - if (scheme_stx_module_eq(a, scheme_module_stx, 0)) { + module_stx = scheme_datum_to_syntax(scheme_intern_symbol("module"), + scheme_false, scheme_sys_wraps_phase(genv->phase), + 0, 0); + if (scheme_stx_module_eq(a, module_stx, genv->phase)) { /* Don't add renames to the whole module; let the module's language take over. */ d = SCHEME_STX_CDR(form); @@ -5873,8 +5879,9 @@ top_syntax(Scheme_Object *form, Scheme_Comp_Env *env, Scheme_Compile_Info *rec, c = scheme_hash_module_variable(env->genv, env->genv->module->self_modidx, c, env->genv->module->insp, -1, env->genv->mod_phase); - } else + } else { c = (Scheme_Object *)scheme_global_bucket(c, env->genv); + } return scheme_register_toplevel_in_prefix(c, env, rec, drec); } @@ -8841,7 +8848,7 @@ static Scheme_Object *expand(int argc, Scheme_Object **argv) env = scheme_get_env(NULL); return _expand(argv[0], scheme_new_expand_env(env, NULL, SCHEME_TOPLEVEL_FRAME), - -1, 1, 0, scheme_true, 0, NULL, 0); + -1, 1, 0, scheme_false, 0, NULL, 0); } static Scheme_Object *expand_stx(int argc, Scheme_Object **argv) @@ -8854,7 +8861,7 @@ static Scheme_Object *expand_stx(int argc, Scheme_Object **argv) env = scheme_get_env(NULL); return _expand(argv[0], scheme_new_expand_env(env, NULL, SCHEME_TOPLEVEL_FRAME), - -1, -1, 0, scheme_true, 0, NULL, 0); + -1, -1, 0, scheme_false, 0, NULL, 0); } static Scheme_Object *stop_syntax(Scheme_Object *form, Scheme_Comp_Env *env, @@ -9163,7 +9170,7 @@ expand_once(int argc, Scheme_Object **argv) env = scheme_get_env(NULL); return _expand(argv[0], scheme_new_expand_env(env, NULL, SCHEME_TOPLEVEL_FRAME), - 1, 1, 0, scheme_true, 0, NULL, 0); + 1, 1, 0, scheme_false, 0, NULL, 0); } static Scheme_Object * @@ -9177,7 +9184,7 @@ expand_stx_once(int argc, Scheme_Object **argv) env = scheme_get_env(NULL); return _expand(argv[0], scheme_new_expand_env(env, NULL, SCHEME_TOPLEVEL_FRAME), - 1, -1, 0, scheme_true, 0, NULL, 0); + 1, -1, 0, scheme_false, 0, NULL, 0); } static Scheme_Object * @@ -9188,7 +9195,7 @@ expand_to_top_form(int argc, Scheme_Object **argv) env = scheme_get_env(NULL); return _expand(argv[0], scheme_new_expand_env(env, NULL, SCHEME_TOPLEVEL_FRAME), - 1, 1, 1, scheme_true, 0, NULL, 0); + 1, 1, 1, scheme_false, 0, NULL, 0); } static Scheme_Object * @@ -9202,7 +9209,7 @@ expand_stx_to_top_form(int argc, Scheme_Object **argv) env = scheme_get_env(NULL); return _expand(argv[0], scheme_new_expand_env(env, NULL, SCHEME_TOPLEVEL_FRAME), - 1, -1, 1, scheme_true, 0, NULL, 0); + 1, -1, 1, scheme_false, 0, NULL, 0); } static Scheme_Object *do_eval_string_all(const char *str, Scheme_Env *env, int cont, int w_prompt) diff --git a/src/mzscheme/src/fun.c b/src/mzscheme/src/fun.c index bf285b7da7..4414d200c9 100644 --- a/src/mzscheme/src/fun.c +++ b/src/mzscheme/src/fun.c @@ -2626,11 +2626,23 @@ scheme_apply_macro(Scheme_Object *name, Scheme_Env *menv, { Scheme_Dynamic_State dyn_state; + Scheme_Cont_Frame_Data cframe; + Scheme_Config *config; + + scheme_prepare_exp_env(env->genv); + config = scheme_extend_config(scheme_current_config(), + MZCONFIG_ENV, + (Scheme_Object *)env->genv->exp_env); + scheme_push_continuation_frame(&cframe); + scheme_set_cont_mark(scheme_parameterization_key, (Scheme_Object *)config); + scheme_set_dynamic_state(&dyn_state, env, mark, boundname, certs, menv, menv ? menv->link_midx : env->genv->link_midx); rands_vec[0] = code; code = scheme_apply_with_dynamic_state(rator, 1, rands_vec, &dyn_state); + + scheme_pop_continuation_frame(&cframe); } SCHEME_EXPAND_OBSERVE_MACRO_POST_X(rec[drec].observer, code); diff --git a/src/mzscheme/src/module.c b/src/mzscheme/src/module.c index 5c017377d1..a0b4a60ab4 100644 --- a/src/mzscheme/src/module.c +++ b/src/mzscheme/src/module.c @@ -101,12 +101,12 @@ static Scheme_Object *read_module(Scheme_Object *obj); static Scheme_Module *module_load(Scheme_Object *modname, Scheme_Env *env, const char *who); -static void eval_defmacro(Scheme_Object *names, int count, - Scheme_Object *expr, - Scheme_Env *genv, Scheme_Comp_Env *env, - Resolve_Prefix *rp, int let_depth, int shift, - Scheme_Bucket_Table *syntax, int for_stx, - Scheme_Object *certs); +static void eval_exptime(Scheme_Object *names, int count, + Scheme_Object *expr, + Scheme_Env *genv, Scheme_Comp_Env *env, + Resolve_Prefix *rp, int let_depth, int shift, + Scheme_Bucket_Table *syntax, int for_stx, + Scheme_Object *certs); static Scheme_Module_Exports *make_module_exports(); @@ -236,7 +236,7 @@ static char *compute_provide_arrays(Scheme_Hash_Table *all_provided, Scheme_Hash int reprovide_kernel, Scheme_Object *form); static void start_module(Scheme_Module *m, Scheme_Env *env, int restart, Scheme_Object *syntax_idx, - int eval_exp, int eval_run, Scheme_Object *cycle_list); + int eval_exp, int eval_run, long base_phase, Scheme_Object *cycle_list); static void finish_expstart_module(Scheme_Env *menv); static void finish_expstart_module_in_namespace(Scheme_Env *menv, Scheme_Env *env); static void finish_start_module_in_namespace(Scheme_Env *menv, Scheme_Env *env, int eval_run); @@ -660,7 +660,6 @@ int scheme_is_kernel_modname(Scheme_Object *modname) Scheme_Object *scheme_sys_wraps(Scheme_Comp_Env *env) { - Scheme_Object *rn, *w; long phase; if (!env) @@ -670,6 +669,13 @@ Scheme_Object *scheme_sys_wraps(Scheme_Comp_Env *env) else phase = env->genv->phase; + return scheme_sys_wraps_phase(phase); +} + +Scheme_Object *scheme_sys_wraps_phase(long phase) +{ + Scheme_Object *rn, *w; + if ((phase == 0) && scheme_sys_wraps0) return scheme_sys_wraps0; if ((phase == 1) && scheme_sys_wraps1) @@ -767,7 +773,7 @@ void scheme_install_initial_module_set(Scheme_Env *env) /* Make sure module is running: */ m = (Scheme_Module *)scheme_hash_get(initial_modules_env->module_registry, a[1]); - start_module(m, initial_modules_env, 0, a[1], 0, 1, scheme_null); + start_module(m, initial_modules_env, 0, a[1], 0, 1, 0, scheme_null); namespace_attach_module(3, a); } @@ -878,6 +884,7 @@ static Scheme_Object *_dynamic_require(int argc, Scheme_Object *argv[], Scheme_Env *menv, *lookup_env = NULL; int i, count, protected = 0; const char *errname; + long base_phase; modname = argv[0]; name = argv[1]; @@ -899,6 +906,7 @@ static Scheme_Object *_dynamic_require(int argc, Scheme_Object *argv[], modidx = scheme_make_modidx(modname, scheme_false, scheme_false); modname = scheme_module_resolve(modidx, 1); + base_phase = env->phase; if (phase == 1) { scheme_prepare_exp_env(env); @@ -950,7 +958,7 @@ static Scheme_Object *_dynamic_require(int argc, Scheme_Object *argv[], if (!phase) { /* Evaluate id in a fresh namespace */ Scheme_Object *a[3], *ns; - start_module(m, env, 0, modidx, 0, 1, scheme_null); + start_module(m, env, 0, modidx, 0, 1, base_phase, scheme_null); a[0] = scheme_intern_symbol("empty"); ns = scheme_make_namespace(1, a); a[0] = (Scheme_Object *)env; @@ -1038,9 +1046,9 @@ static Scheme_Object *_dynamic_require(int argc, Scheme_Object *argv[], } if (SCHEME_VOIDP(name)) - start_module(m, env, 0, modidx, 1, 0, scheme_null); + start_module(m, env, 0, modidx, 1, 0, base_phase, scheme_null); else - start_module(m, env, 0, modidx, 0, 1, scheme_null); + start_module(m, env, 0, modidx, 0, 1, base_phase, scheme_null); if (SCHEME_SYMBOLP(name)) { Scheme_Bucket *b; @@ -1244,6 +1252,13 @@ static Scheme_Object *namespace_attach_module(int argc, Scheme_Object *argv[]) same_namespace = SAME_OBJ(from_env, to_env); + if (from_env->phase != to_env->phase) { + scheme_raise_exn(MZEXN_FAIL_CONTRACT, + "namespace-attach-module: " + "source namespace phase: %ld does not match destination namespace phase: %ld", + (long)from_env->phase, (long)to_env->phase); + } + name = scheme_module_resolve(scheme_make_modidx(argv[1], scheme_false, scheme_false), 0); todo = scheme_make_pair(name, scheme_null); @@ -1252,7 +1267,7 @@ static Scheme_Object *namespace_attach_module(int argc, Scheme_Object *argv[]) nophase_todo = scheme_null; from_modchain = from_env->modchain; to_modchain = to_env->modchain; - phase = 0; + phase = from_env->phase; checked = NULL; next_checked = NULL; @@ -1267,7 +1282,7 @@ static Scheme_Object *namespace_attach_module(int argc, Scheme_Object *argv[]) nophase_checked = scheme_make_hash_table(SCHEME_hash_ptr); first_iteration = 1; - max_phase = 0; + max_phase = phase; just_declare = 0; checked = scheme_make_hash_table(SCHEME_hash_ptr); @@ -1282,7 +1297,7 @@ static Scheme_Object *namespace_attach_module(int argc, Scheme_Object *argv[]) if (phase < 0) { /* As soon as we start traversing negative phases, stop transferring instances (i.e., transfer declarations only). This transfer-only - mode should stikc even even if we go back into positive phases. */ + mode should stick even even if we go back into positive phases. */ just_declare = 1; } @@ -1345,7 +1360,7 @@ static Scheme_Object *namespace_attach_module(int argc, Scheme_Object *argv[]) } if (m2) { - char *phase, buf[32]; + char *phase, buf[32], *kind; if (!menv->phase) phase = ""; @@ -1356,11 +1371,16 @@ static Scheme_Object *namespace_attach_module(int argc, Scheme_Object *argv[]) phase = buf; } + if (SAME_OBJ(menv->module, m2)) + kind = "instance of the same module"; + else + kind = "module with the same name"; + scheme_raise_exn(MZEXN_FAIL_CONTRACT, "namespace-attach-module: " - "a different module with the same name is already " + "a different %s is already " "in the destination namespace%s, for name: %D", - phase, name); + kind, phase, name); return NULL; } } else @@ -1666,7 +1686,7 @@ static Scheme_Object *namespace_attach_module(int argc, Scheme_Object *argv[]) Scheme_Env *te = to_env; from_modchain = from_env->modchain; to_modchain = to_env->modchain; - for (i = 0; i < phase; i++) { + for (i = from_env->phase; i < phase; i++) { from_modchain = SCHEME_VEC_ELS(from_modchain)[1]; scheme_prepare_exp_env(te); @@ -3470,7 +3490,7 @@ static void compute_require_names(Scheme_Env *menv, Scheme_Object *phase, } static void chain_start_module(Scheme_Env *menv, Scheme_Env *env, int eval_exp, int eval_run, - Scheme_Object *cycle_list, Scheme_Object *syntax_idx) + long base_phase, Scheme_Object *cycle_list, Scheme_Object *syntax_idx) { Scheme_Object *new_cycle_list, *midx, *l; Scheme_Module *im; @@ -3502,7 +3522,7 @@ static void chain_start_module(Scheme_Env *menv, Scheme_Env *env, int eval_exp, start_module(im, menv->label_env, 0, midx, - 0, 0, + 0, 0, base_phase, new_cycle_list); } } @@ -3521,7 +3541,7 @@ static void chain_start_module(Scheme_Env *menv, Scheme_Env *env, int eval_exp, start_module(im, menv->template_env, 0, midx, - eval_exp, eval_run, + eval_exp, eval_run, base_phase, new_cycle_list); } } @@ -3533,7 +3553,7 @@ static void chain_start_module(Scheme_Env *menv, Scheme_Env *env, int eval_exp, im = module_load(scheme_module_resolve(midx, 1), env, NULL); - start_module(im, env, 0, midx, eval_exp, eval_run, new_cycle_list); + start_module(im, env, 0, midx, eval_exp, eval_run, base_phase, new_cycle_list); } scheme_prepare_exp_env(menv); @@ -3547,7 +3567,7 @@ static void chain_start_module(Scheme_Env *menv, Scheme_Env *env, int eval_exp, im = module_load(scheme_module_resolve(midx, 1), env, NULL); - start_module(im, menv->exp_env, 0, midx, eval_exp, eval_run, new_cycle_list); + start_module(im, menv->exp_env, 0, midx, eval_exp, eval_run, base_phase, new_cycle_list); } } @@ -3580,7 +3600,7 @@ static void chain_start_module(Scheme_Env *menv, Scheme_Env *env, int eval_exp, start_module(im, menv2, 0, midx, - eval_exp, eval_run, + eval_exp, eval_run, base_phase, new_cycle_list); } } else { @@ -3602,7 +3622,7 @@ static void chain_start_module(Scheme_Env *menv, Scheme_Env *env, int eval_exp, im = module_load(scheme_module_resolve(midx, 1), env, NULL); - start_module(im, menv2, 0, midx, eval_exp, eval_run, new_cycle_list); + start_module(im, menv2, 0, midx, eval_exp, eval_run, base_phase, new_cycle_list); } } } @@ -3692,10 +3712,10 @@ static Scheme_Env *instantiate_module(Scheme_Module *m, Scheme_Env *env, int res } static void expstart_module(Scheme_Env *menv, Scheme_Env *env, int restart, - int eval_exp, int eval_run) + int eval_exp, int eval_run, long base_phase) { - int delay_run = ((!eval_exp && (menv->phase >= 0)) - || (!eval_run && (menv->phase == -1))); + int delay_run = ((!eval_exp && (menv->phase >= base_phase)) + || (!eval_run && (menv->phase < base_phase))); if (!restart) { if (menv && menv->et_running) { @@ -3790,9 +3810,9 @@ void scheme_run_module_exptime(Scheme_Env *menv, int set_ns) for_stx = SCHEME_TRUEP(SCHEME_VEC_ELS(e)[4]); e = SCHEME_VEC_ELS(e)[1]; - eval_defmacro(names, scheme_list_length(names), e, exp_env, rhs_env, - rp, let_depth, 1, (for_stx ? for_stx_globals : syntax), for_stx, - NULL); + eval_exptime(names, scheme_list_length(names), e, exp_env, rhs_env, + rp, let_depth, 1, (for_stx ? for_stx_globals : syntax), for_stx, + NULL); } if (set_ns) { @@ -3816,7 +3836,7 @@ static void finish_start_module_in_namespace(Scheme_Env *menv, Scheme_Env *from_ scheme_set_cont_mark(scheme_parameterization_key, (Scheme_Object *)config); } - start_module(menv->module, menv, 0, NULL, 1, eval_run, scheme_null); + start_module(menv->module, menv, 0, NULL, 1, eval_run, menv->phase, scheme_null); if (from_env) scheme_pop_continuation_frame(&cframe); @@ -3828,7 +3848,7 @@ static void finish_expstart_module_in_namespace(Scheme_Env *menv, Scheme_Env *fr } static void start_module(Scheme_Module *m, Scheme_Env *env, int restart, - Scheme_Object *syntax_idx, int eval_exp, int eval_run, + Scheme_Object *syntax_idx, int eval_exp, int eval_run, long base_phase, Scheme_Object *cycle_list) { Scheme_Env *menv; @@ -3851,17 +3871,17 @@ static void start_module(Scheme_Module *m, Scheme_Env *env, int restart, show("strt", menv, eval_exp, eval_run); - chain_start_module(menv, env, eval_exp, eval_run, cycle_list, syntax_idx); + chain_start_module(menv, env, eval_exp, eval_run, base_phase, cycle_list, syntax_idx); - if (!env->phase) { + if (env->phase == base_phase) { if (!eval_run) { - expstart_module(menv, env, restart, eval_exp, eval_run); + expstart_module(menv, env, restart, eval_exp, eval_run, base_phase); show_done("nrn0", menv, eval_exp, eval_run); return; } - } else if (env->phase < 0) { + } else if (env->phase < base_phase) { if (env->phase == -1) { - expstart_module(menv, env, restart, eval_exp, eval_run); + expstart_module(menv, env, restart, eval_exp, eval_run, base_phase); } show_done("nrn-", menv, eval_exp, eval_run); return; @@ -3872,7 +3892,7 @@ static void start_module(Scheme_Module *m, Scheme_Env *env, int restart, } } - expstart_module(menv, env, restart, eval_exp, eval_run); + expstart_module(menv, env, restart, eval_exp, eval_run, base_phase); if (m->primitive) { menv->running = 1; @@ -4208,7 +4228,7 @@ static Scheme_Module_Exports *make_module_exports() /* define-syntaxes */ /**********************************************************************/ -static void *eval_defmacro_k(void) +static void *eval_exptime_k(void) { Scheme_Thread *p = scheme_current_thread; Scheme_Object *names; @@ -4238,7 +4258,7 @@ static void *eval_defmacro_k(void) p->ku.k.p4 = NULL; p->ku.k.p5 = NULL; - eval_defmacro(names, count, expr, genv, comp_env, rp, let_depth, shift, syntax, for_stx, certs); + eval_exptime(names, count, expr, genv, comp_env, rp, let_depth, shift, syntax, for_stx, certs); return NULL; } @@ -4254,12 +4274,12 @@ static int is_simple_expr(Scheme_Object *v) return 0; } -static void eval_defmacro(Scheme_Object *names, int count, - Scheme_Object *expr, - Scheme_Env *genv, Scheme_Comp_Env *comp_env, - Resolve_Prefix *rp, - int let_depth, int shift, Scheme_Bucket_Table *syntax, - int for_stx, Scheme_Object *certs) +static void eval_exptime(Scheme_Object *names, int count, + Scheme_Object *expr, + Scheme_Env *genv, Scheme_Comp_Env *comp_env, + Resolve_Prefix *rp, + int let_depth, int shift, Scheme_Bucket_Table *syntax, + int for_stx, Scheme_Object *certs) { Scheme_Object *macro, *vals, *name, **save_runstack; int i, g, depth; @@ -4278,7 +4298,7 @@ static void eval_defmacro(Scheme_Object *names, int count, p->ku.k.i3 = shift; p->ku.k.i4 = for_stx; p->ku.k.p5 = certs; - (void)scheme_enlarge_runstack(depth, eval_defmacro_k); + (void)scheme_enlarge_runstack(depth, eval_exptime_k); return; } @@ -4293,11 +4313,21 @@ static void eval_defmacro(Scheme_Object *names, int count, if (is_simple_expr(expr)) { vals = _scheme_eval_linked_expr_multi_wp(expr, scheme_current_thread); } else { + Scheme_Cont_Frame_Data cframe; + Scheme_Config *config; Scheme_Dynamic_State dyn_state; + config = scheme_extend_config(scheme_current_config(), + MZCONFIG_ENV, + (Scheme_Object *)genv); + scheme_push_continuation_frame(&cframe); + scheme_set_cont_mark(scheme_parameterization_key, (Scheme_Object *)config); + scheme_set_dynamic_state(&dyn_state, comp_env, NULL, scheme_false, certs, genv, (genv->link_midx ? genv->link_midx : genv->module->me->src_modidx)); vals = scheme_eval_linked_expr_multi_with_dynamic_state(expr, &dyn_state); + + scheme_pop_continuation_frame(&cframe); } scheme_pop_prefix(save_runstack); @@ -4424,7 +4454,7 @@ module_execute(Scheme_Object *data) /* Replacing an already-running or already-syntaxing module? */ if (old_menv) { - start_module(m, env, 1, NULL, 0, (old_menv->running > 0) ? 1 : 0, scheme_null); + start_module(m, env, 1, NULL, 0, (old_menv->running > 0) ? 1 : 0, env->phase, scheme_null); } return scheme_void; @@ -4996,7 +5026,7 @@ static Scheme_Object *do_module(Scheme_Object *form, Scheme_Comp_Env *env, { Scheme_Object *fm, *nm, *ii, *rn, *et_rn, *iidx, *self_modidx, *rmp, *rn_set; Scheme_Module *iim; - Scheme_Env *menv; + Scheme_Env *menv, *top_env; Scheme_Comp_Env *benv; Scheme_Module *m; Scheme_Object *mbval, *orig_ii; @@ -5043,7 +5073,16 @@ static Scheme_Object *do_module(Scheme_Object *form, Scheme_Comp_Env *env, m->me = me; } - menv = scheme_new_module_env(env->genv, m, 1); + top_env = env->genv; + /* Create module env from phase-0 env. This doesn't create bad + sharing, because compile-time module instances for compiling this + module are all fresh instances. */ + while (top_env->phase) { + scheme_prepare_template_env(top_env); + top_env = top_env->template_env; + } + + menv = scheme_new_module_env(top_env, m, 1); menv->disallow_unbound = 1; @@ -5070,7 +5109,7 @@ static Scheme_Object *do_module(Scheme_Object *form, Scheme_Comp_Env *env, /* load the module for the initial require */ iim = module_load(_module_resolve(iidx, m->ii_src, NULL, 1), menv, NULL); - start_module(iim, menv, 0, iidx, 1, 0, scheme_null); + start_module(iim, menv, 0, iidx, 1, 0, menv->phase, scheme_null); { Scheme_Object *ins; @@ -5918,9 +5957,9 @@ static Scheme_Object *do_module_begin(Scheme_Object *form, Scheme_Comp_Env *env, if (ri->use_jit) m = scheme_jit_expr(m); - eval_defmacro(names, count, m, eenv->genv, rhs_env, rp, ri->max_let_depth, 0, - (for_stx ? env->genv->exp_env->toplevel : env->genv->syntax), for_stx, - rec[drec].certs); + eval_exptime(names, count, m, eenv->genv, rhs_env, rp, ri->max_let_depth, 0, + (for_stx ? env->genv->exp_env->toplevel : env->genv->syntax), for_stx, + rec[drec].certs); if (rec[drec].comp) e = NULL; @@ -8159,7 +8198,7 @@ void parse_requires(Scheme_Object *form, int unpack_kern, int copy_vars, int can_save_marshal, int always_run, int *all_simple) { - Scheme_Object *ll = form, *mode = scheme_make_integer(0), *just_mode = NULL; + Scheme_Object *ll = form, *mode = scheme_make_integer(0), *just_mode = NULL, *x_mode, *x_just_mode; Scheme_Module *m; Scheme_Object *idxstx, *idx, *name, *i, *exns, *prefix, *iname, *ename, *aa, *aav; Scheme_Object *mark_src, *err_src; @@ -8455,9 +8494,9 @@ void parse_requires(Scheme_Object *form, m = module_load(name, env, NULL); if (start) - start_module(m, env, 0, idx, 1, always_run ? 1 : 0, scheme_null); + start_module(m, env, 0, idx, 1, always_run ? 1 : 0, main_env->phase, scheme_null); else - start_module(m, env, 0, idx, 0, 0, scheme_null); + start_module(m, env, 0, idx, 0, 0, main_env->phase, scheme_null); /* Add name to require list, if it's not there: */ if (main_env->module) { @@ -8488,8 +8527,20 @@ void parse_requires(Scheme_Object *form, scheme_hash_set(oht, mode, reqs); } } + + x_just_mode = just_mode; + x_mode = mode; + if (main_env->phase) { + /* We get here only via `eval' or `namespace-require'. */ + if (x_just_mode && SCHEME_TRUEP(x_just_mode)) { + x_just_mode = scheme_bin_plus(x_just_mode, scheme_make_integer(main_env->phase)); + } + if (x_mode && SCHEME_TRUEP(x_mode)) { + x_mode = scheme_bin_plus(x_mode, scheme_make_integer(main_env->phase)); + } + } - add_single_require(m->me, just_mode, mode, idx, rename_env, + add_single_require(m->me, x_just_mode, x_mode, idx, rename_env, rn_set, post_ex_rn_set, NULL, exns, onlys, prefix, iname, ename, mark_src, diff --git a/src/mzscheme/src/portfun.c b/src/mzscheme/src/portfun.c index b17406cd60..2fb8154b40 100644 --- a/src/mzscheme/src/portfun.c +++ b/src/mzscheme/src/portfun.c @@ -4442,7 +4442,7 @@ static Scheme_Object *do_load_handler(void *data) Scheme_Config *config = lhd->config; Scheme_Object *last_val = scheme_void, *obj, **save_array = NULL; Scheme_Env *genv; - int save_count = 0, got_one = 0; + int save_count = 0, got_one = 0, as_module; while ((obj = scheme_internal_read(port, lhd->stxsrc, 1, 0, 0, 0, 0, -1, NULL, NULL, NULL, lhd->delay_load_info)) @@ -4452,6 +4452,9 @@ static Scheme_Object *do_load_handler(void *data) /* ... begin special support for module loading ... */ + genv = scheme_get_env(config); + as_module = 0; + if (SCHEME_SYMBOLP(lhd->expected_module)) { /* Must be of the form `(module ...)',possibly compiled. */ /* Also, file should have no more expressions. */ @@ -4539,9 +4542,10 @@ static Scheme_Object *do_load_handler(void *data) /* Replace `module' in read expression with one bound to #%kernel's `module': */ a = SCHEME_STX_CAR(obj); d = SCHEME_STX_CDR(obj); - a = scheme_datum_to_syntax(module_symbol, a, scheme_sys_wraps(NULL), 0, 1); + a = scheme_datum_to_syntax(module_symbol, a, scheme_sys_wraps_phase(genv->phase), 0, 1); d = scheme_make_pair(a, d); obj = scheme_datum_to_syntax(d, obj, scheme_false, 0, 1); + as_module = 1; } } else { /* Add #%top-interaction, since we're in non-module mode: */ @@ -4552,8 +4556,7 @@ static Scheme_Object *do_load_handler(void *data) /* ... end special support for module loading ... */ - genv = scheme_get_env(config); - if (genv->rename_set) + if (!as_module && genv->rename_set) obj = scheme_add_rename(obj, genv->rename_set); last_val = _scheme_apply_multi_with_prompt(scheme_get_param(config, MZCONFIG_EVAL_HANDLER), diff --git a/src/mzscheme/src/print.c b/src/mzscheme/src/print.c index 2c12e2d02d..ac4af4e8d8 100644 --- a/src/mzscheme/src/print.c +++ b/src/mzscheme/src/print.c @@ -2168,6 +2168,34 @@ print(Scheme_Object *obj, int notdisplay, int compact, Scheme_Hash_Table *ht, print_utf8_string(pp, ">", 0, 1); } } + else if (SCHEME_NAMESPACEP(obj)) + { + if (compact || !pp->print_unreadable) { + cannot_print(pp, notdisplay, obj, ht, compact); + } else { + char s[10]; + + print_utf8_string(pp, "#module) { + Scheme_Object *modname; + int is_sym; + + modname = ((Scheme_Env *)obj)->module->modname; + is_sym = SCHEME_SYMBOLP(SCHEME_PTR_VAL(modname)); + print_utf8_string(pp, (is_sym ? "'" : "\""), 0, 1); + print(SCHEME_PTR_VAL(modname), 0, 0, ht, mt, pp); + PRINTADDRESS(pp, modname); + if (!is_sym) + print_utf8_string(pp, "\"" , 0, 1); + print_utf8_string(pp, ":", 0, 1); + } + + sprintf(s, "%ld", ((Scheme_Env *)obj)->phase); + print_utf8_string(pp, s, 0, -1); + print_utf8_string(pp, ">", 0, 1); + } + } else if (SCHEME_INPORTP(obj)) { if (compact || !pp->print_unreadable) { diff --git a/src/mzscheme/src/schminc.h b/src/mzscheme/src/schminc.h index d806416087..86debf4aca 100644 --- a/src/mzscheme/src/schminc.h +++ b/src/mzscheme/src/schminc.h @@ -13,7 +13,7 @@ #define USE_COMPILED_STARTUP 1 -#define EXPECTED_PRIM_COUNT 915 +#define EXPECTED_PRIM_COUNT 916 #ifdef MZSCHEME_SOMETHING_OMITTED # undef USE_COMPILED_STARTUP diff --git a/src/mzscheme/src/schpriv.h b/src/mzscheme/src/schpriv.h index 5455eaced9..cebbe07cfd 100644 --- a/src/mzscheme/src/schpriv.h +++ b/src/mzscheme/src/schpriv.h @@ -2577,6 +2577,7 @@ Scheme_Object *scheme_tl_id_sym(Scheme_Env *env, Scheme_Object *id, Scheme_Objec int scheme_tl_id_is_sym_used(Scheme_Hash_Table *marked_names, Scheme_Object *sym); Scheme_Object *scheme_sys_wraps(Scheme_Comp_Env *env); +Scheme_Object *scheme_sys_wraps_phase(long phase); Scheme_Env *scheme_new_module_env(Scheme_Env *env, Scheme_Module *m, int new_exp_module_tree); int scheme_is_module_env(Scheme_Comp_Env *env); diff --git a/src/mzscheme/src/schvers.h b/src/mzscheme/src/schvers.h index 830bdf5bbb..ef5ac07c47 100644 --- a/src/mzscheme/src/schvers.h +++ b/src/mzscheme/src/schvers.h @@ -13,12 +13,12 @@ consistently.) */ -#define MZSCHEME_VERSION "4.0.1.1" +#define MZSCHEME_VERSION "4.0.1.2" #define MZSCHEME_VERSION_X 4 #define MZSCHEME_VERSION_Y 0 #define MZSCHEME_VERSION_Z 1 -#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) diff --git a/src/mzscheme/src/stxobj.c b/src/mzscheme/src/stxobj.c index a9b18ecdc1..be6579fae2 100644 --- a/src/mzscheme/src/stxobj.c +++ b/src/mzscheme/src/stxobj.c @@ -3260,9 +3260,9 @@ static int explain_resolves = 0; etc.). */ static Scheme_Object *resolve_env(WRAP_POS *_wraps, - Scheme_Object *a, Scheme_Object *orig_phase, - int w_mod, Scheme_Object **get_names, - Scheme_Object *skip_ribs) + Scheme_Object *a, Scheme_Object *orig_phase, + int w_mod, Scheme_Object **get_names, + Scheme_Object *skip_ribs) /* Module binding ignored if w_mod is 0. If module bound, result is module idx, and get_names[0] is set to source name, get_names[1] is set to the nominal source module, get_names[2] is set to @@ -3345,6 +3345,8 @@ static Scheme_Object *resolve_env(WRAP_POS *_wraps, /* Module rename: */ Module_Renames *mrn; + EXPLAIN(printf("Rename/set\n")); + if (SCHEME_RENAMESP(WRAP_POS_FIRST(wraps))) { mrn = (Module_Renames *)WRAP_POS_FIRST(wraps); } else { @@ -3359,10 +3361,12 @@ static Scheme_Object *resolve_env(WRAP_POS *_wraps, if (mrn && (!is_in_module || (mrn->kind != mzMOD_RENAME_TOPLEVEL)) && !skip_other_mods) { + EXPLAIN(printf(" use rename %p %d\n", mrn->phase, mrn->kind)); + if (mrn->kind != mzMOD_RENAME_TOPLEVEL) is_in_module = 1; - - if (same_phase(phase, mrn->phase)) { + + if (same_phase(phase, mrn->phase)) { Scheme_Object *rename, *nominal = NULL, *glob_id; int get_names_done; @@ -3392,6 +3396,8 @@ static Scheme_Object *resolve_env(WRAP_POS *_wraps, } else glob_id = SCHEME_STX_VAL(a); + EXPLAIN(printf(" search %s\n", scheme_write_to_string(glob_id, 0))); + rename = scheme_hash_get(mrn->ht, glob_id); if (!rename && mrn->nomarshal_ht) rename = scheme_hash_get(mrn->nomarshal_ht, glob_id); @@ -3405,6 +3411,8 @@ static Scheme_Object *resolve_env(WRAP_POS *_wraps, if (rename) get_names_done = 1; } + + EXPLAIN(printf(" search result: %p\n", rename)); if (rename) { if (mrn->kind == mzMOD_RENAME_MARKED) { diff --git a/src/mzscheme/src/syntax.c b/src/mzscheme/src/syntax.c index 28dc2fdf5b..7b1906fb30 100644 --- a/src/mzscheme/src/syntax.c +++ b/src/mzscheme/src/syntax.c @@ -5087,9 +5087,24 @@ do_define_syntaxes_execute(Scheme_Object *form, Scheme_Env *dm_env, int for_stx) { Scheme_Dynamic_State dyn_state; + Scheme_Cont_Frame_Data cframe; + Scheme_Config *config; + Scheme_Object *result; + + scheme_prepare_exp_env(dm_env); + + config = scheme_extend_config(scheme_current_config(), + MZCONFIG_ENV, + (Scheme_Object *)dm_env->exp_env); + scheme_push_continuation_frame(&cframe); + scheme_set_cont_mark(scheme_parameterization_key, (Scheme_Object *)config); scheme_set_dynamic_state(&dyn_state, rhs_env, NULL, scheme_false, NULL, dm_env, dm_env->link_midx); - return define_execute_with_dynamic_state(form, 4, for_stx ? 2 : 1, rp, dm_env, &dyn_state); + result = define_execute_with_dynamic_state(form, 4, for_stx ? 2 : 1, rp, dm_env, &dyn_state); + + scheme_pop_continuation_frame(&cframe); + + return result; } } @@ -5418,12 +5433,11 @@ Scheme_Object *scheme_make_environment_dummy(Scheme_Comp_Env *env) { Scheme_Object *dummy; - /* Get prefixed-based accessors for a dummy top-level buckets. It's - used to "link" to the right enviornment. begin_symbol is arbitrary */ - dummy = (Scheme_Object *)scheme_global_bucket(begin_symbol, env->genv); - dummy = scheme_register_toplevel_in_prefix(dummy, env, NULL, 0); - - return dummy; + /* Get a prefixed-based accessor for a dummy top-level bucket. It's + used to "link" to the right environment at run time. The `begin' + symbol is arbitrary; the top-level/prefix support handles a symbol + as a "toplevel" specially. */ + return scheme_register_toplevel_in_prefix(begin_symbol, env, NULL, 0); } Scheme_Env *scheme_environment_from_dummy(Scheme_Object *dummy) @@ -5467,10 +5481,22 @@ static Scheme_Object *eval_letmacro_rhs(Scheme_Object *a, Scheme_Comp_Env *rhs_e /* short cut */ a = _scheme_eval_linked_expr_multi(a); } else { + Scheme_Cont_Frame_Data cframe; + Scheme_Config *config; Scheme_Dynamic_State dyn_state; + scheme_prepare_exp_env(rhs_env->genv); + + config = scheme_extend_config(scheme_current_config(), + MZCONFIG_ENV, + (Scheme_Object *)rhs_env->genv->exp_env); + scheme_push_continuation_frame(&cframe); + scheme_set_cont_mark(scheme_parameterization_key, (Scheme_Object *)config); + scheme_set_dynamic_state(&dyn_state, rhs_env, NULL, scheme_false, certs, rhs_env->genv, rhs_env->genv->link_midx); a = scheme_eval_linked_expr_multi_with_dynamic_state(a, &dyn_state); + + scheme_pop_continuation_frame(&cframe); } scheme_pop_prefix(save_runstack); diff --git a/src/mzscheme/src/thread.c b/src/mzscheme/src/thread.c index 8debebe367..6af0ce9461 100644 --- a/src/mzscheme/src/thread.c +++ b/src/mzscheme/src/thread.c @@ -6674,7 +6674,18 @@ void scheme_add_namespace_option(Scheme_Object *key, void (*f)(Scheme_Env *)) Scheme_Object *scheme_make_namespace(int argc, Scheme_Object *argv[]) { - return (Scheme_Object *)scheme_make_empty_env(); + Scheme_Env *genv, *env; + long phase; + + genv = scheme_get_env(NULL); + env = scheme_make_empty_env(); + + for (phase = genv->phase; phase--; ) { + scheme_prepare_exp_env(env); + env = env->exp_env; + } + + return env; } static Scheme_Object *namespace_p(int argc, Scheme_Object **argv)