From dd7db9ff7b3996520954abcb9ca704cf73c35c48 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Sun, 21 Sep 2008 16:00:42 +0000 Subject: [PATCH] add read-language, module-compiled-language-info, and module->language-info svn: r11827 --- collects/compiler/zo-parse.ss | 2 +- collects/planet/lang/reader.ss | 32 +- .../reference/module-reflect.scrbl | 30 + collects/scribblings/reference/read.scrbl | 46 ++ collects/scribblings/reference/syntax.scrbl | 13 +- doc/release-notes/mzscheme/HISTORY.txt | 5 + src/mzscheme/src/cstartup.inc | 692 +++++++++--------- src/mzscheme/src/module.c | 94 ++- src/mzscheme/src/mzmark.c | 4 + src/mzscheme/src/mzmarksrc.c | 2 + src/mzscheme/src/portfun.c | 26 + src/mzscheme/src/read.c | 167 +++-- src/mzscheme/src/schminc.h | 2 +- src/mzscheme/src/schpriv.h | 4 + src/mzscheme/src/schvers.h | 4 +- 15 files changed, 713 insertions(+), 410 deletions(-) diff --git a/collects/compiler/zo-parse.ss b/collects/compiler/zo-parse.ss index 7bcefcbde9..cc44ec16fe 100644 --- a/collects/compiler/zo-parse.ss +++ b/collects/compiler/zo-parse.ss @@ -194,7 +194,7 @@ (define (read-module v) (match v - [`(,name ,self-modidx ,functional? ,et-functional? + [`(,name ,self-modidx ,lang-info ,functional? ,et-functional? ,rename ,max-let-depth ,dummy ,prefix ,kernel-exclusion ,reprovide-kernel? ,indirect-provides ,num-indirect-provides ,protects diff --git a/collects/planet/lang/reader.ss b/collects/planet/lang/reader.ss index cab963a3a0..724ec6d998 100644 --- a/collects/planet/lang/reader.ss +++ b/collects/planet/lang/reader.ss @@ -3,10 +3,12 @@ (require "../parsereq.ss" syntax/readerr) -(provide (rename-out [planet-read read] - [planet-read-syntax read-syntax])) -(define (planet-read-fn in read-sym args src mod line col pos) +(provide (rename-out [planet-read read] + [planet-read-syntax read-syntax]) + get-info) + +(define (planet-get in lang-mod export-sym src line col pos mk-fail-thunk) (let ([spec (regexp-try-match #px"^(.*?)(\\s|$)" in)] [bad (lambda (str eof?) ((if eof? @@ -24,17 +26,27 @@ (let ([parsed-spec (let ([str (bytes->string/latin-1 (cadr spec))]) (if (module-path? `(planet ,(string->symbol str))) - `(planet ,(string->symbol (string-append str "/lang/reader"))) + `(planet ,(string->symbol (string-append str lang-mod))) #f))]) (if parsed-spec - (let ([r (dynamic-require parsed-spec read-sym)]) - (if (and (procedure? r) - (procedure-arity-includes? r (+ 5 (length args)))) - (apply r (append args - (list in mod line col pos))) - (apply r (append args (list in))))) + (dynamic-require parsed-spec export-sym (mk-fail-thunk spec)) (bad (cadr spec) #f)))))) +(define (get-info in mod line col pos) + (planet-get in "/lang/langinfo" 'get-info (object-name in) line col pos + (lambda (spec) (lambda () (lambda (tag) #f))))) + +(define (planet-read-fn in read-sym args src mod line col pos) + (let ([r (planet-get in "/lang/reader" read-sym src mod line col pos + (lambda (spec) + (lambda () + (error 'planet "cannot find reader for `#lang planet ~a'" spec))))]) + (if (and (procedure? r) + (procedure-arity-includes? r (+ 5 (length args)))) + (apply r (append args + (list in mod line col pos))) + (apply r (append args (list in)))))) + (define (planet-read inp mod line col pos) (planet-read-fn inp 'read null (object-name inp) mod line col pos)) diff --git a/collects/scribblings/reference/module-reflect.scrbl b/collects/scribblings/reference/module-reflect.scrbl index 82a9426dca..3d91c5bf7c 100644 --- a/collects/scribblings/reference/module-reflect.scrbl +++ b/collects/scribblings/reference/module-reflect.scrbl @@ -293,6 +293,25 @@ explicitly the import, the import @tech{phase level} shift (where name of the re-exported binding, and the @tech{phase level} of the import.} +@defproc[(module-compiled-language-info [compiled-module-code compiled-module-expression?]) + (or/c false/c (vector/c module-path? symbol? any/c))]{ + +Returns information intended to reflect the ``language'' of the +module's implementation as originally attached to the syntax of the +module's declaration though the @indexed-scheme['module-language] +@tech{syntax property}. See also @scheme[module]. + +If no information is available for the module, the result is +@scheme[#f]. Otherwise, the result is @scheme[(vector _mp _name _val)] +such that @scheme[((dynamic-require _mp _name) _val)] should return +function that takes a single argument. The function's argument is a +key for reflected information, and the result is a value associated +with that key. Acceptable keys and the interpretation of results is +up to external tools, such as DrScheme. If no information is +available for a given key, the result should be @scheme[#f]. + +See also @scheme[module->language-info].} + @;------------------------------------------------------------------------ @section[#:tag "dynreq"]{Dynamic Module Access} @@ -329,3 +348,14 @@ If @scheme[provided] is @|void-const|, then the module is any]{ Like @scheme[dynamic-require], but in @tech{phase} 1.} + + +@defproc[(module->language-info [mod module-path?]) + (or/c false/c (vector/c module-path? symbol? any/c))]{ + +Returns information intended to reflect the ``language'' of the +implementation of @scheme[mod], which must be declared (but not +necessarily @tech{instantiate}d or @tech{visit}ed) in the current +namespace. The information is the same as would have been returned by +@scheme[module-compiled-language-info] applied to the module's +implementation as compiled code.} diff --git a/collects/scribblings/reference/read.scrbl b/collects/scribblings/reference/read.scrbl index de2dfa6c8f..e9d27f8eb9 100644 --- a/collects/scribblings/reference/read.scrbl +++ b/collects/scribblings/reference/read.scrbl @@ -105,6 +105,52 @@ See @secref["readtables"] for an extended example that uses @scheme[read-syntax/recursive].} +@defproc[(read-language [in input-port? (current-input-port)] + [fail-thunk (-> any) (lambda () (error ...))]) + any]{ + +Reads @scheme[in] in the same way as @scheme[read], but stopping as +soon as a @tech{reader language} (or its absence) is determined. + +A @deftech{reader language} is specified by @litchar{#lang} or +@litchar{#!} (see @secref["parse-reader"]) at the beginning of the +input, though possibly after comment forms. Instead of dispatching to +a @schemeidfont{read} or @schemeidfont{read-syntax} form as +@scheme[read] and @scheme[read-syntax] do, @scheme[read-language] +dispatches to a @schemeidfont{get-info} function (if any) exported by +the same module. The result of the @schemeidfont{get-info} function is +the result of @scheme[read-language] if it is a function of one +argument; if @schemeidfont{get-info} produces any other kind of +result, the @exnraise[exn:fail:contract]. + +The function produced by @schemeidfont{get-info} reflects information +about the expected syntax of the input stream. The argument to the +function serves as a key on such information; acceptable keys and the +interpretation of results is up to external tools, such as DrScheme. +If no information is available for a given key, the result should be +@scheme[#f]. + +The @schemeidfont{get-info} function itself is applied to five +arguments: the input port being read, the module path from which the +@schemeidfont{get-info} function was extracted, and the source line +(positive exact integer or @scheme[#f]), column (non-negative exact +integer or @scheme[#f]), and position (positive exact integer or +@scheme[#f]) of the start of the @litchar{#lang} or @litchar{#!} +form. The @schemeidfont{get-info} function may further read from the +given input port to determine its result, but it should read no +further than necessary. + +If @scheme[in] starts with a @tech{reader language} specification but +the relevant module does not export @schemeidfont{get-info} (but +perhaps does export @schemeidfont{read} and +@schemeidfont{read-syntax}), then the result of @scheme[read-language] +is @scheme[#f]. + +If @scheme[in] does not specify a @tech{reader language}, then +@scheme[fail-thunk] is called. The default @scheme[fail-thunk] raises +@scheme[exn:fail:contract].} + + @defboolparam[read-case-sensitive on?]{ A parameter that controls parsing and printing of symbols. When this diff --git a/collects/scribblings/reference/syntax.scrbl b/collects/scribblings/reference/syntax.scrbl index 645b5502e6..64b6e2cb6d 100644 --- a/collects/scribblings/reference/syntax.scrbl +++ b/collects/scribblings/reference/syntax.scrbl @@ -161,7 +161,18 @@ are evaluated in order as they appear within the module; accessing a @tech{module-level variable} before it is defined signals a run-time error, just like accessing an undefined global variable. -See also @secref["module-eval-model"] and @secref["mod-parse"].} +See also @secref["module-eval-model"] and @secref["mod-parse"]. + +When a @tech{syntax object} representing a @scheme[module] form has a +@indexed-scheme['module-language] @tech{syntax property} attached, and +when the property value is a vector of three elements where the first +is a module path (in the sense of @scheme[module-path?]) and the +second is a symbol, then the property value is preserved in the +corresponding compiled and/or declared module. The third component of +the vector should be printable and @scheme[read]able, so that it can +be preserved in marshaled bytecode. See also +@scheme[module-compiled-language-info] and +@scheme[module->language-info].} @defform[(#%module-begin form ...)]{ diff --git a/doc/release-notes/mzscheme/HISTORY.txt b/doc/release-notes/mzscheme/HISTORY.txt index ca2557e9c8..14e1caab2b 100644 --- a/doc/release-notes/mzscheme/HISTORY.txt +++ b/doc/release-notes/mzscheme/HISTORY.txt @@ -1,3 +1,8 @@ +Version 4.1.0.4 +Added read-language +Added module-compiled-language-info, module->language-info, + and 'module-language property support + Version 4.1, August 2008 Changed namespaces to have a base phase; for example, calling eval at compile-time uses a phase-1 namespace diff --git a/src/mzscheme/src/cstartup.inc b/src/mzscheme/src/cstartup.inc index 8682e99bec..10e1ae9207 100644 --- a/src/mzscheme/src/cstartup.inc +++ b/src/mzscheme/src/cstartup.inc @@ -1,24 +1,24 @@ { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,52,46,49,46,48,46,51,50,0,0,0,1,0,0,6,0,9,0, -13,0,20,0,23,0,28,0,35,0,40,0,45,0,52,0,65,0,69,0,78, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,52,46,49,46,48,46,52,50,0,0,0,1,0,0,6,0,9,0, +13,0,20,0,23,0,36,0,41,0,48,0,53,0,58,0,65,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,63,108,101,116,66,100,101,102,105,110,101,62,111,114,64,108,101, -116,42,66,117,110,108,101,115,115,64,99,111,110,100,64,119,104,101,110,66,108, -101,116,114,101,99,72,112,97,114,97,109,101,116,101,114,105,122,101,63,97,110, +75,4,233,4,20,5,31,5,110,5,0,0,119,7,0,0,65,98,101,103,105, +110,29,11,11,63,108,101,116,66,100,101,102,105,110,101,62,111,114,72,112,97, +114,97,109,101,116,101,114,105,122,101,64,108,101,116,42,66,117,110,108,101,115, +115,64,99,111,110,100,64,119,104,101,110,66,108,101,116,114,101,99,63,97,110, 100,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,155,226,94,159,2,16,35,35,159,2,15,35,35,16,20,2,3, -2,2,2,4,2,2,2,10,2,2,2,5,2,2,2,6,2,2,2,7,2, -2,2,8,2,2,2,9,2,2,2,11,2,2,2,12,2,2,97,36,11,8, -155,226,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,155,226,16,0,97,10,37,11,8,155,226,16,0,13,16, +10,35,11,8,147,225,94,159,2,16,35,35,159,2,15,35,35,16,20,2,3, +2,2,2,4,2,2,2,11,2,2,2,5,2,2,2,6,2,2,2,7,2, +2,2,8,2,2,2,9,2,2,2,10,2,2,2,12,2,2,97,36,11,8, +147,225,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,147,225,16,0,97,10,37,11,8,147,225,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,190,3,23,196,1,249,22,183,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, @@ -28,14 +28,14 @@ 36,28,248,22,71,248,22,65,23,195,2,248,22,64,193,249,22,183,3,80,158, 38,35,251,22,73,2,17,248,22,64,23,200,2,249,22,63,2,12,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,56,50,57,49,16,4,11,11,2,19,3,1,7, -101,110,118,56,50,57,50,27,248,22,65,248,22,190,3,23,197,1,28,248,22, +2,18,3,1,7,101,110,118,56,50,54,57,16,4,11,11,2,19,3,1,7, +101,110,118,56,50,55,48,27,248,22,65,248,22,190,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,183,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,5,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,56,50,57,52,16,4, -11,11,2,19,3,1,7,101,110,118,56,50,57,53,248,22,190,3,193,27,248, +28,8,27,16,4,11,11,2,18,3,1,7,101,110,118,56,50,55,50,16,4, +11,11,2,19,3,1,7,101,110,118,56,50,55,51,248,22,190,3,193,27,248, 22,190,3,194,249,22,63,248,22,73,248,22,64,196,248,22,65,195,27,248,22, 65,248,22,190,3,23,197,1,249,22,183,3,80,158,38,35,28,248,22,51,248, 22,184,3,248,22,64,23,198,2,27,249,22,2,32,0,89,162,8,44,36,42, @@ -49,7 +49,7 @@ 22,2,32,0,89,162,8,44,36,46,9,222,33,42,248,22,190,3,248,22,64, 201,248,22,65,198,27,248,22,65,248,22,190,3,196,27,248,22,190,3,248,22, 64,195,249,22,183,3,80,158,39,35,28,248,22,71,195,250,22,74,2,20,9, -248,22,65,199,250,22,73,2,3,248,22,73,248,22,64,199,250,22,74,2,6, +248,22,65,199,250,22,73,2,3,248,22,73,248,22,64,199,250,22,74,2,7, 248,22,65,201,248,22,65,202,27,248,22,65,248,22,190,3,23,197,1,27,249, 22,1,22,77,249,22,2,22,190,3,248,22,190,3,248,22,64,199,249,22,183, 3,80,158,39,35,251,22,73,1,22,119,105,116,104,45,99,111,110,116,105,110, @@ -59,53 +59,53 @@ 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,190,3,23,197,1,28,248,22,71,23,194,2,20, 15,159,36,35,36,249,22,183,3,80,158,38,35,27,248,22,190,3,248,22,64, -23,198,2,28,249,22,151,8,62,61,62,248,22,184,3,248,22,88,23,197,2, +23,198,2,28,249,22,154,8,62,61,62,248,22,184,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,151,8,248,22,184,3,248,22,64,23,201,2,64, +74,2,9,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,154,8,248,22,184,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,51,49,55,16,4, -11,11,2,19,3,1,7,101,110,118,56,51,49,56,18,158,94,10,64,118,111, +201,1,249,22,63,2,9,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,50,57,53,16,4, +11,11,2,19,3,1,7,101,110,118,56,50,57,54,18,158,94,10,64,118,111, 105,100,8,47,27,248,22,65,248,22,190,3,196,249,22,183,3,80,158,38,35, 28,248,22,51,248,22,184,3,248,22,64,197,250,22,73,2,26,248,22,73,248, 22,64,199,248,22,88,198,27,248,22,184,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,7,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,9,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,12,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,5,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,3,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,10,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,6,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,11,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,4,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); +35,20,103,159,35,16,1,2,1,16,0,83,158,41,20,100,138,69,35,37,109, +105,110,45,115,116,120,2,2,11,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,8,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,10,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,12,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,5,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,3,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,11,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,7,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, +9,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,4,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, 2032); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,52,46,49,46,48,46,51,59,0,0,0,1,0,0,3,0,16,0, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,52,46,49,46,48,46,52,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, +15,139,15,165,15,19,16,0,0,54,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, @@ -131,241 +131,241 @@ 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,167,12,10,248,22,145,5,23,196, -2,28,248,22,141,6,23,194,2,12,87,94,248,22,154,8,23,194,1,248,80, +158,39,51,249,22,27,11,80,158,41,50,22,170,12,10,248,22,147,5,23,196, +2,28,248,22,144,6,23,194,2,12,87,94,248,22,157,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,148,13,23,195,2,23,194,1,28,248,22,147,13,23,195,2,249,22, -149,13,23,196,1,250,80,158,42,48,248,22,163,13,2,20,11,10,250,80,158, -40,48,248,22,163,13,2,20,23,197,1,10,28,23,193,2,249,22,63,248,22, -151,13,249,22,149,13,23,198,1,247,22,164,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,148,13,23, -195,2,23,194,1,28,248,22,147,13,23,195,2,249,22,149,13,23,196,1,250, -80,158,47,48,248,22,163,13,2,20,11,10,250,80,158,45,48,248,22,163,13, -2,20,23,197,1,10,28,23,193,2,249,22,63,248,22,151,13,249,22,149,13, -23,198,1,247,22,164,13,248,80,159,45,52,36,248,22,65,23,199,1,87,94, +28,248,22,151,13,23,195,2,23,194,1,28,248,22,150,13,23,195,2,249,22, +152,13,23,196,1,250,80,158,42,48,248,22,166,13,2,20,11,10,250,80,158, +40,48,248,22,166,13,2,20,23,197,1,10,28,23,193,2,249,22,63,248,22, +154,13,249,22,152,13,23,198,1,247,22,167,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,151,13,23, +195,2,23,194,1,28,248,22,150,13,23,195,2,249,22,152,13,23,196,1,250, +80,158,47,48,248,22,166,13,2,20,11,10,250,80,158,45,48,248,22,166,13, +2,20,23,197,1,10,28,23,193,2,249,22,63,248,22,154,13,249,22,152,13, +23,198,1,247,22,167,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,148,13,23,195,2,23,194,1,28,248,22,147,13,23,195,2,249, -22,149,13,23,196,1,250,80,158,45,48,248,22,163,13,2,20,11,10,250,80, -158,43,48,248,22,163,13,2,20,23,197,1,10,28,23,193,2,249,22,63,248, -22,151,13,249,22,149,13,23,198,1,247,22,164,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,188,12,23, -195,2,28,23,193,2,192,87,94,23,193,1,28,248,22,146,6,23,195,2,27, -248,22,146,13,195,28,192,192,248,22,147,13,195,11,87,94,28,28,248,22,189, -12,23,195,2,10,27,248,22,188,12,23,196,2,28,23,193,2,192,87,94,23, -193,1,28,248,22,146,6,23,196,2,27,248,22,146,13,23,197,2,28,23,193, -2,192,87,94,23,193,1,248,22,147,13,23,197,2,11,12,250,22,181,8,76, +27,28,248,22,151,13,23,195,2,23,194,1,28,248,22,150,13,23,195,2,249, +22,152,13,23,196,1,250,80,158,45,48,248,22,166,13,2,20,11,10,250,80, +158,43,48,248,22,166,13,2,20,23,197,1,10,28,23,193,2,249,22,63,248, +22,154,13,249,22,152,13,23,198,1,247,22,167,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,191,12,23, +195,2,28,23,193,2,192,87,94,23,193,1,28,248,22,149,6,23,195,2,27, +248,22,149,13,195,28,192,192,248,22,150,13,195,11,87,94,28,28,248,22,128, +13,23,195,2,10,27,248,22,191,12,23,196,2,28,23,193,2,192,87,94,23, +193,1,28,248,22,149,6,23,196,2,27,248,22,149,13,23,197,2,28,23,193, +2,192,87,94,23,193,1,248,22,150,13,23,197,2,11,12,250,22,184,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,189,12,23,195,2,249,22,151,8,248,22,190,12,23,197,2, -2,21,249,22,151,8,247,22,165,7,2,21,27,28,248,22,146,6,23,196,2, -23,195,2,248,22,155,7,248,22,129,13,23,197,2,28,249,22,176,13,0,21, +2,28,28,248,22,128,13,23,195,2,249,22,154,8,248,22,129,13,23,197,2, +2,21,249,22,154,8,247,22,168,7,2,21,27,28,248,22,149,6,23,196,2, +23,195,2,248,22,158,7,248,22,132,13,23,197,2,28,249,22,179,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,146,6,195,248,22,132,13,195,194,27,248,22,185,6,23, -195,1,249,22,133,13,248,22,158,7,250,22,182,13,0,6,35,114,120,34,47, -34,28,249,22,176,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,182,13,0,19, +23,195,2,28,248,22,149,6,195,248,22,135,13,195,194,27,248,22,188,6,23, +195,1,249,22,136,13,248,22,161,7,250,22,185,13,0,6,35,114,120,34,47, +34,28,249,22,179,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,185,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,146,6,194,248,22,132, -13,194,193,87,94,28,27,248,22,188,12,23,196,2,28,23,193,2,192,87,94, -23,193,1,28,248,22,146,6,23,196,2,27,248,22,146,13,23,197,2,28,23, -193,2,192,87,94,23,193,1,248,22,147,13,23,197,2,11,12,250,22,181,8, -23,196,2,2,22,23,197,2,28,248,22,146,13,23,195,2,12,248,22,143,11, -249,22,152,10,248,22,175,6,250,22,130,7,2,23,23,200,1,23,201,1,247, -22,23,87,94,28,27,248,22,188,12,23,196,2,28,23,193,2,192,87,94,23, -193,1,28,248,22,146,6,23,196,2,27,248,22,146,13,23,197,2,28,23,193, -2,192,87,94,23,193,1,248,22,147,13,23,197,2,11,12,250,22,181,8,23, -196,2,2,22,23,197,2,28,248,22,146,13,23,195,2,12,248,22,143,11,249, -22,152,10,248,22,175,6,250,22,130,7,2,23,23,200,1,23,201,1,247,22, -23,87,94,87,94,28,27,248,22,188,12,23,196,2,28,23,193,2,192,87,94, -23,193,1,28,248,22,146,6,23,196,2,27,248,22,146,13,23,197,2,28,23, -193,2,192,87,94,23,193,1,248,22,147,13,23,197,2,11,12,250,22,181,8, -195,2,22,23,197,2,28,248,22,146,13,23,195,2,12,248,22,143,11,249,22, -152,10,248,22,175,6,250,22,130,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,143,11,249,22,182,10, +1,6,2,2,92,49,80,158,43,36,2,21,28,248,22,149,6,194,248,22,135, +13,194,193,87,94,28,27,248,22,191,12,23,196,2,28,23,193,2,192,87,94, +23,193,1,28,248,22,149,6,23,196,2,27,248,22,149,13,23,197,2,28,23, +193,2,192,87,94,23,193,1,248,22,150,13,23,197,2,11,12,250,22,184,8, +23,196,2,2,22,23,197,2,28,248,22,149,13,23,195,2,12,248,22,146,11, +249,22,155,10,248,22,178,6,250,22,133,7,2,23,23,200,1,23,201,1,247, +22,23,87,94,28,27,248,22,191,12,23,196,2,28,23,193,2,192,87,94,23, +193,1,28,248,22,149,6,23,196,2,27,248,22,149,13,23,197,2,28,23,193, +2,192,87,94,23,193,1,248,22,150,13,23,197,2,11,12,250,22,184,8,23, +196,2,2,22,23,197,2,28,248,22,149,13,23,195,2,12,248,22,146,11,249, +22,155,10,248,22,178,6,250,22,133,7,2,23,23,200,1,23,201,1,247,22, +23,87,94,87,94,28,27,248,22,191,12,23,196,2,28,23,193,2,192,87,94, +23,193,1,28,248,22,149,6,23,196,2,27,248,22,149,13,23,197,2,28,23, +193,2,192,87,94,23,193,1,248,22,150,13,23,197,2,11,12,250,22,184,8, +195,2,22,23,197,2,28,248,22,149,13,23,195,2,12,248,22,146,11,249,22, +155,10,248,22,178,6,250,22,133,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,146,11,249,22,185,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,130,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,142,13,23,204,1, -23,205,1,23,198,1,27,249,22,142,13,248,22,64,23,202,2,23,199,2,28, -248,22,137,13,23,194,2,27,250,22,1,22,142,13,23,197,1,23,202,2,28, -248,22,137,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,130,7,2,24, +87,94,23,198,1,248,23,196,1,251,22,133,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,145,13,23,204,1, +23,205,1,23,198,1,27,249,22,145,13,248,22,64,23,202,2,23,199,2,28, +248,22,140,13,23,194,2,27,250,22,1,22,145,13,23,197,1,23,202,2,28, +248,22,140,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,133,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,142,13,23,207,1,23,208,1,23,201,1,27,249,22,142,13,248,22,64,23, -197,2,23,202,2,28,248,22,137,13,23,194,2,27,250,22,1,22,142,13,23, -197,1,204,28,248,22,137,13,193,192,253,2,38,203,204,205,206,23,15,248,22, +22,145,13,23,207,1,23,208,1,23,201,1,27,249,22,145,13,248,22,64,23, +197,2,23,202,2,28,248,22,140,13,23,194,2,27,250,22,1,22,145,13,23, +197,1,204,28,248,22,140,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,130,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,142,13,23,206,1,23,207,1,23,200,1,27,249,22, -142,13,248,22,64,23,197,2,23,201,2,28,248,22,137,13,23,194,2,27,250, -22,1,22,142,13,23,197,1,203,28,248,22,137,13,193,192,253,2,38,202,203, +251,22,133,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,145,13,23,206,1,23,207,1,23,200,1,27,249,22, +145,13,248,22,64,23,197,2,23,201,2,28,248,22,140,13,23,194,2,27,250, +22,1,22,145,13,23,197,1,203,28,248,22,140,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,165,13,253,2,38,198,199,200,201,202,198,87,95,28,28,248,22,189,12,23, -194,2,10,27,248,22,188,12,23,195,2,28,23,193,2,192,87,94,23,193,1, -28,248,22,146,6,23,195,2,27,248,22,146,13,23,196,2,28,23,193,2,192, -87,94,23,193,1,248,22,147,13,23,196,2,11,12,252,22,181,8,23,200,2, -2,25,35,23,198,2,23,199,2,28,28,248,22,146,6,23,195,2,10,248,22, -134,7,23,195,2,87,94,23,194,1,12,252,22,181,8,23,200,2,2,26,36, -23,198,2,23,199,1,91,159,38,11,90,161,38,35,11,248,22,145,13,23,197, -2,87,94,23,195,1,87,94,28,192,12,250,22,182,8,23,201,1,2,27,23, +22,168,13,253,2,38,198,199,200,201,202,198,87,95,28,28,248,22,128,13,23, +194,2,10,27,248,22,191,12,23,195,2,28,23,193,2,192,87,94,23,193,1, +28,248,22,149,6,23,195,2,27,248,22,149,13,23,196,2,28,23,193,2,192, +87,94,23,193,1,248,22,150,13,23,196,2,11,12,252,22,184,8,23,200,2, +2,25,35,23,198,2,23,199,2,28,28,248,22,149,6,23,195,2,10,248,22, +137,7,23,195,2,87,94,23,194,1,12,252,22,184,8,23,200,2,2,26,36, +23,198,2,23,199,1,91,159,38,11,90,161,38,35,11,248,22,148,13,23,197, +2,87,94,23,195,1,87,94,28,192,12,250,22,185,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,189,12,23,196,2,10,27,248,22,188,12,23,197,2,28,23,193,2,192,87, -94,23,193,1,28,248,22,146,6,23,197,2,27,248,22,146,13,23,198,2,28, -23,193,2,192,87,94,23,193,1,248,22,147,13,23,198,2,11,12,252,22,181, -8,2,10,2,25,35,23,200,2,23,201,2,28,28,248,22,146,6,23,197,2, -10,248,22,134,7,23,197,2,12,252,22,181,8,2,10,2,26,36,23,200,2, -23,201,2,91,159,38,11,90,161,38,35,11,248,22,145,13,23,199,2,87,94, -23,195,1,87,94,28,23,193,2,12,250,22,182,8,2,10,2,27,23,201,2, -249,22,7,23,195,1,23,196,1,27,249,22,134,13,250,22,181,13,0,18,35, -114,120,35,34,40,91,46,93,91,94,46,93,42,124,41,36,34,248,22,130,13, -23,201,1,28,248,22,146,6,23,203,2,249,22,158,7,23,204,1,8,63,23, -202,1,28,248,22,189,12,23,199,2,248,22,190,12,23,199,1,87,94,23,198, -1,247,22,191,12,28,248,22,188,12,194,249,22,142,13,195,194,192,91,159,37, -11,90,161,37,35,11,87,95,28,28,248,22,189,12,23,196,2,10,27,248,22, -188,12,23,197,2,28,23,193,2,192,87,94,23,193,1,28,248,22,146,6,23, -197,2,27,248,22,146,13,23,198,2,28,23,193,2,192,87,94,23,193,1,248, -22,147,13,23,198,2,11,12,252,22,181,8,2,11,2,25,35,23,200,2,23, -201,2,28,28,248,22,146,6,23,197,2,10,248,22,134,7,23,197,2,12,252, -22,181,8,2,11,2,26,36,23,200,2,23,201,2,91,159,38,11,90,161,38, -35,11,248,22,145,13,23,199,2,87,94,23,195,1,87,94,28,23,193,2,12, -250,22,182,8,2,11,2,27,23,201,2,249,22,7,23,195,1,23,196,1,27, -249,22,134,13,249,22,144,7,250,22,182,13,0,9,35,114,120,35,34,91,46, -93,34,248,22,130,13,23,203,1,6,1,1,95,28,248,22,146,6,23,202,2, -249,22,158,7,23,203,1,8,63,23,201,1,28,248,22,189,12,23,199,2,248, -22,190,12,23,199,1,87,94,23,198,1,247,22,191,12,28,248,22,188,12,194, -249,22,142,13,195,194,192,249,247,22,178,4,194,11,248,80,158,36,46,9,27, -247,22,167,13,249,80,158,38,47,28,23,195,2,27,248,22,163,7,6,11,11, +22,128,13,23,196,2,10,27,248,22,191,12,23,197,2,28,23,193,2,192,87, +94,23,193,1,28,248,22,149,6,23,197,2,27,248,22,149,13,23,198,2,28, +23,193,2,192,87,94,23,193,1,248,22,150,13,23,198,2,11,12,252,22,184, +8,2,10,2,25,35,23,200,2,23,201,2,28,28,248,22,149,6,23,197,2, +10,248,22,137,7,23,197,2,12,252,22,184,8,2,10,2,26,36,23,200,2, +23,201,2,91,159,38,11,90,161,38,35,11,248,22,148,13,23,199,2,87,94, +23,195,1,87,94,28,23,193,2,12,250,22,185,8,2,10,2,27,23,201,2, +249,22,7,23,195,1,23,196,1,27,249,22,137,13,250,22,184,13,0,18,35, +114,120,35,34,40,91,46,93,91,94,46,93,42,124,41,36,34,248,22,133,13, +23,201,1,28,248,22,149,6,23,203,2,249,22,161,7,23,204,1,8,63,23, +202,1,28,248,22,128,13,23,199,2,248,22,129,13,23,199,1,87,94,23,198, +1,247,22,130,13,28,248,22,191,12,194,249,22,145,13,195,194,192,91,159,37, +11,90,161,37,35,11,87,95,28,28,248,22,128,13,23,196,2,10,27,248,22, +191,12,23,197,2,28,23,193,2,192,87,94,23,193,1,28,248,22,149,6,23, +197,2,27,248,22,149,13,23,198,2,28,23,193,2,192,87,94,23,193,1,248, +22,150,13,23,198,2,11,12,252,22,184,8,2,11,2,25,35,23,200,2,23, +201,2,28,28,248,22,149,6,23,197,2,10,248,22,137,7,23,197,2,12,252, +22,184,8,2,11,2,26,36,23,200,2,23,201,2,91,159,38,11,90,161,38, +35,11,248,22,148,13,23,199,2,87,94,23,195,1,87,94,28,23,193,2,12, +250,22,185,8,2,11,2,27,23,201,2,249,22,7,23,195,1,23,196,1,27, +249,22,137,13,249,22,147,7,250,22,185,13,0,9,35,114,120,35,34,91,46, +93,34,248,22,133,13,23,203,1,6,1,1,95,28,248,22,149,6,23,202,2, +249,22,161,7,23,203,1,8,63,23,201,1,28,248,22,128,13,23,199,2,248, +22,129,13,23,199,1,87,94,23,198,1,247,22,130,13,28,248,22,191,12,194, +249,22,145,13,195,194,192,249,247,22,180,4,194,11,248,80,158,36,46,9,27, +247,22,170,13,249,80,158,38,47,28,23,195,2,27,248,22,166,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,142,13,248,22,163,13,69,97,100,100,111,110,45,100,105, -114,247,22,161,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,163,13,72,99,111,108,108, +28,23,196,1,250,22,145,13,248,22,166,13,69,97,100,100,111,110,45,100,105, +114,247,22,164,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,166,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,174,13,23,197, +192,32,47,89,162,8,44,38,54,2,19,222,33,48,27,249,22,177,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,174,13,23,201,2,23,196,2,28,23,193, +27,248,22,97,23,197,1,27,249,22,177,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,140,7,23,196,2,2,28,249,22,77, -23,202,2,194,249,22,63,248,22,133,13,23,197,1,23,195,1,87,95,23,199, -1,23,193,1,28,249,22,140,7,23,196,2,2,28,249,22,77,23,200,2,9, -249,22,63,248,22,133,13,23,197,1,9,28,249,22,140,7,23,196,2,2,28, -249,22,77,197,194,87,94,23,196,1,249,22,63,248,22,133,13,23,197,1,194, -87,94,23,193,1,28,249,22,140,7,23,198,2,2,28,249,22,77,195,9,87, -94,23,194,1,249,22,63,248,22,133,13,23,199,1,9,87,95,28,28,248,22, -134,7,194,10,248,22,146,6,194,12,250,22,181,8,2,14,6,21,21,98,121, +204,1,248,22,97,23,199,1,28,249,22,143,7,23,196,2,2,28,249,22,77, +23,202,2,194,249,22,63,248,22,136,13,23,197,1,23,195,1,87,95,23,199, +1,23,193,1,28,249,22,143,7,23,196,2,2,28,249,22,77,23,200,2,9, +249,22,63,248,22,136,13,23,197,1,9,28,249,22,143,7,23,196,2,2,28, +249,22,77,197,194,87,94,23,196,1,249,22,63,248,22,136,13,23,197,1,194, +87,94,23,193,1,28,249,22,143,7,23,198,2,2,28,249,22,77,195,9,87, +94,23,194,1,249,22,63,248,22,136,13,23,199,1,9,87,95,28,28,248,22, +137,7,194,10,248,22,149,6,194,12,250,22,184,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,188,12,196,11,12,250,22,181,8,2,14,6, +28,248,22,72,195,249,22,4,22,191,12,196,11,12,250,22,184,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,146,6,197,248,22,157,7,197,196,32,50,89,162,8,44,39,57,2, +28,248,22,149,6,197,248,22,160,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,145, -13,23,199,2,87,95,23,195,1,23,194,1,27,28,23,198,2,27,248,22,150, -13,23,201,2,28,249,22,153,8,23,195,2,23,202,2,11,28,248,22,146,13, -23,194,2,250,2,51,23,201,2,23,202,2,249,22,142,13,23,200,2,23,198, +101,99,222,33,52,28,23,193,2,91,159,38,11,90,161,38,35,11,248,22,148, +13,23,199,2,87,95,23,195,1,23,194,1,27,28,23,198,2,27,248,22,153, +13,23,201,2,28,249,22,156,8,23,195,2,23,202,2,11,28,248,22,149,13, +23,194,2,250,2,51,23,201,2,23,202,2,249,22,145,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,188,12,23,196,2,27,249,22,142,13,23,198,2,23, -201,2,28,28,248,22,137,13,193,10,248,22,136,13,193,192,11,11,28,23,193, -2,192,87,94,23,193,1,28,23,199,2,11,27,248,22,150,13,23,202,2,28, -249,22,153,8,23,195,2,23,203,1,11,28,248,22,146,13,23,194,2,250,2, -51,23,202,1,23,203,1,249,22,142,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,149,13,248,22,64,23,199, -2,27,249,22,142,13,23,196,1,23,197,2,28,248,22,136,13,23,194,2,250, +23,193,1,27,28,248,22,191,12,23,196,2,27,249,22,145,13,23,198,2,23, +201,2,28,28,248,22,140,13,193,10,248,22,139,13,193,192,11,11,28,23,193, +2,192,87,94,23,193,1,28,23,199,2,11,27,248,22,153,13,23,202,2,28, +249,22,156,8,23,195,2,23,203,1,11,28,248,22,149,13,23,194,2,250,2, +51,23,202,1,23,203,1,249,22,145,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,152,13,248,22,64,23,199, +2,27,249,22,145,13,23,196,1,23,197,2,28,248,22,139,13,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,149,13,248,22,64,23,196,2,27,249,22,142,13,23, -196,1,23,200,2,28,248,22,136,13,23,194,2,250,2,51,201,202,195,87,94, +23,194,2,11,27,248,22,152,13,248,22,64,23,196,2,27,249,22,145,13,23, +196,1,23,200,2,28,248,22,139,13,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, -149,13,248,22,64,195,27,249,22,142,13,23,196,1,202,28,248,22,136,13,193, +152,13,248,22,64,195,27,249,22,145,13,23,196,1,202,28,248,22,139,13,193, 250,2,51,204,205,195,251,2,50,204,205,206,248,22,65,199,87,95,28,27,248, -22,188,12,23,196,2,28,23,193,2,192,87,94,23,193,1,28,248,22,146,6, -23,196,2,27,248,22,146,13,23,197,2,28,23,193,2,192,87,94,23,193,1, -248,22,147,13,23,197,2,11,12,250,22,181,8,2,15,6,25,25,112,97,116, +22,191,12,23,196,2,28,23,193,2,192,87,94,23,193,1,28,248,22,149,6, +23,196,2,27,248,22,149,13,23,197,2,28,23,193,2,192,87,94,23,193,1, +248,22,150,13,23,197,2,11,12,250,22,184,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,188,12,23,197,2,28,23,193, -2,192,87,94,23,193,1,28,248,22,146,6,23,197,2,27,248,22,146,13,23, -198,2,28,23,193,2,192,87,94,23,193,1,248,22,147,13,23,198,2,11,248, -22,146,13,23,196,2,11,10,12,250,22,181,8,2,15,6,29,29,35,102,32, +41,23,197,2,28,28,23,195,2,28,27,248,22,191,12,23,197,2,28,23,193, +2,192,87,94,23,193,1,28,248,22,149,6,23,197,2,27,248,22,149,13,23, +198,2,28,23,193,2,192,87,94,23,193,1,248,22,150,13,23,198,2,11,248, +22,149,13,23,196,2,11,10,12,250,22,184,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,146,13,23,195,2,91,159,38,11, -90,161,38,35,11,248,22,145,13,23,198,2,249,22,151,8,194,68,114,101,108, -97,116,105,118,101,11,27,248,22,163,7,6,4,4,80,65,84,72,251,2,50, +116,114,105,110,103,23,198,2,28,28,248,22,149,13,23,195,2,91,159,38,11, +90,161,38,35,11,248,22,148,13,23,198,2,249,22,154,8,194,68,114,101,108, +97,116,105,118,101,11,27,248,22,166,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,151,8,247,22,165,7,2,21,249,22,63,248,22,133,13,5, -1,46,23,195,1,192,9,27,248,22,149,13,23,196,1,28,248,22,136,13,193, +1,9,28,249,22,154,8,247,22,168,7,2,21,249,22,63,248,22,136,13,5, +1,46,23,195,1,192,9,27,248,22,152,13,23,196,1,28,248,22,139,13,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,174,4,195,248,22,163,5,249,22,163,3, +11,11,87,94,249,22,140,6,247,22,176,4,195,248,22,166,5,249,22,163,3, 35,249,22,147,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,163,13,2,20,27,249,80,158,40,48,23, +197,1,87,94,23,197,1,27,248,22,166,13,2,20,27,249,80,158,40,48,23, 196,1,11,27,27,248,22,166,3,23,200,1,28,192,192,35,27,27,248,22,166, -3,23,202,1,28,192,192,35,249,22,141,5,23,197,1,83,158,39,20,97,95, +3,23,202,1,28,192,192,35,249,22,143,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, -190,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,148,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,170,13,248,22,157,7,27,28,249,22,151, -8,247,22,165,7,2,21,6,1,1,59,6,1,1,58,250,22,130,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); +128,5,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,138,67,35,37,117,116,105,108,115, +2,1,11,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,151,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,173,13,248,22,160,7,27,28,249,22, +154,8,247,22,168,7,2,21,6,1,1,59,6,1,1,58,250,22,133,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, 5057); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,52,46,49,46,48,46,51,8,0,0,0,1,0,0,6,0,19,0, -34,0,48,0,62,0,76,0,111,0,0,0,254,0,0,0,65,113,117,111,116, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,52,46,49,46,48,46,52,8,0,0,0,1,0,0,6,0,19,0, +34,0,48,0,62,0,76,0,111,0,0,0,255,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,157,228,97,159,2,2,35,35, +37,107,101,114,110,101,108,11,98,10,35,11,8,149,227,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,99,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,29,94,2,1,67,35,37,112,108,97,99,101,11,9,9,9,35,0}; - EVAL_ONE_SIZED_STR((char *)expr, 291); +100,138,69,35,37,98,117,105,108,116,105,110,29,11,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,99,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,29,94,2,1,67,35,37,112,108,97,99,101,11,9,9,9,35,0}; + EVAL_ONE_SIZED_STR((char *)expr, 292); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,52,46,49,46,48,46,51,52,0,0,0,1,0,0,3,0,14,0, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,52,46,49,46,48,46,52,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, +63,6,148,6,150,6,211,6,142,12,201,12,233,12,0,0,157,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, @@ -382,31 +382,31 @@ 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,151,8,23,197,2,80,158,38,46,87,94,23, -195,1,80,158,36,47,27,248,22,162,4,23,197,2,28,248,22,188,12,23,194, -2,91,159,38,11,90,161,38,35,11,248,22,145,13,23,197,1,87,95,83,160, +10,27,28,23,195,2,28,249,22,154,8,23,197,2,80,158,38,46,87,94,23, +195,1,80,158,36,47,27,248,22,163,4,23,197,2,28,248,22,191,12,23,194, +2,91,159,38,11,90,161,38,35,11,248,22,148,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,179,4,28,192,192,247,22,164,13,20, -14,159,80,158,35,39,250,80,158,38,40,249,22,27,11,80,158,40,39,22,179, -4,28,248,22,188,12,23,198,2,23,197,1,87,94,23,197,1,247,22,164,13, -247,194,250,22,142,13,23,197,1,23,199,1,249,80,158,42,38,23,198,1,2, -18,252,22,142,13,23,199,1,23,201,1,6,6,6,110,97,116,105,118,101,247, -22,166,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,159,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,159,13, +193,2,192,87,94,23,193,1,27,247,22,181,4,28,192,192,247,22,167,13,20, +14,159,80,158,35,39,250,80,158,38,40,249,22,27,11,80,158,40,39,22,181, +4,28,248,22,191,12,23,198,2,23,197,1,87,94,23,197,1,247,22,167,13, +247,194,250,22,145,13,23,197,1,23,199,1,249,80,158,42,38,23,198,1,2, +18,252,22,145,13,23,199,1,23,201,1,6,6,6,110,97,116,105,118,101,247, +22,169,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,162,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,162,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,169,13,248,22,64,195,195,27,250,22,142,13,23,198,1,23,200,1, -249,80,158,43,38,23,199,1,2,18,27,250,22,159,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,177,4,248, -22,64,195,195,249,247,22,177,4,194,195,87,94,28,248,80,158,36,37,23,195, -2,12,250,22,181,8,77,108,111,97,100,47,117,115,101,45,99,111,109,112,105, +249,247,22,172,13,248,22,64,195,195,27,250,22,145,13,23,198,1,23,200,1, +249,80,158,43,38,23,199,1,2,18,27,250,22,162,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,179,4,248, +22,64,195,195,249,247,22,179,4,194,195,87,94,28,248,80,158,36,37,23,195, +2,12,250,22,184,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,148,13,23,201,2,23,200,1,27,247,22,179,4,28,23,193,2, -249,22,149,13,23,203,1,23,195,1,200,90,161,38,36,11,248,22,145,13,23, -194,2,87,94,23,196,1,90,161,36,39,11,28,249,22,151,8,23,196,2,68, +11,28,248,22,151,13,23,201,2,23,200,1,27,247,22,181,4,28,23,193,2, +249,22,152,13,23,203,1,23,195,1,200,90,161,38,36,11,248,22,148,13,23, +194,2,87,94,23,196,1,90,161,36,39,11,28,249,22,154,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,166,13,27,89,162,43,36,49,62,122,111,225,7,5,3,33,27, +40,11,247,22,169,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, @@ -419,11 +419,11 @@ 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,174,13,2,37,23, +94,40,46,42,63,41,47,40,46,42,41,36,34,27,249,22,177,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,174,13,2,37,23,196,2,28,23,193,2,87, +248,22,97,23,197,1,27,249,22,177,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,174,13,2,37,23,196,2,28,23,193,2,87,94,23,194,1,249,22,63, +249,22,177,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, @@ -434,128 +434,128 @@ 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,160,4,195,12,250,22,181,8,2,20,6,20,20, +2,39,193,87,95,28,248,22,161,4,195,12,250,22,184,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,130,14,247,22,171,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,130,14,247, -22,171,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,180,8,11,196,195,248,22,178,8,194,28,249,22,152, -6,194,6,1,1,46,2,17,28,249,22,152,6,194,6,2,2,46,46,62,117, -112,192,28,249,22,153,8,248,22,65,23,200,2,23,197,1,28,249,22,151,8, -248,22,64,23,200,2,23,196,1,251,22,178,8,2,20,6,26,26,99,121,99, +80,158,41,42,248,22,133,14,247,22,174,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,133,14,247, +22,174,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,183,8,11,196,195,248,22,181,8,194,28,249,22,155, +6,194,6,1,1,46,2,17,28,249,22,155,6,194,6,2,2,46,46,62,117, +112,192,28,249,22,156,8,248,22,65,23,200,2,23,197,1,28,249,22,154,8, +248,22,64,23,200,2,23,196,1,251,22,181,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,171,11,23,197, +1,12,12,247,192,20,14,159,80,158,39,44,249,22,63,247,22,174,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,143,4,23,196,1,249,247,22,178,4,23,198,1,248,22,52,248,22,128,13, -23,198,1,87,94,28,28,248,22,188,12,23,197,2,10,248,22,165,4,23,197, -2,12,28,23,198,2,250,22,180,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,181,8,2,20,6,19,19,109, +22,143,4,23,196,1,249,247,22,180,4,23,198,1,248,22,52,248,22,131,13, +23,198,1,87,94,28,28,248,22,191,12,23,197,2,10,248,22,167,4,23,197, +2,12,28,23,198,2,250,22,183,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,184,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,151,8,248,22,64,23,199,2,2,4,11, -248,22,161,4,248,22,88,197,28,28,248,22,61,23,197,2,249,22,151,8,248, +28,28,248,22,61,23,197,2,249,22,154,8,248,22,64,23,199,2,2,4,11, +248,22,162,4,248,22,88,197,28,28,248,22,61,23,197,2,249,22,154,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,171,11,23, +80,158,37,39,250,80,158,40,40,249,22,27,11,80,158,42,39,22,174,11,23, 197,1,90,161,36,35,10,249,22,144,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,165,13,11,28,23,193,2,192,87,94,23,193,1,91, +22,63,23,204,2,247,22,168,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,142,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,169,6,23,199,1,6,3,3,46,115,115,28, -248,22,146,6,23,199,2,87,94,23,194,1,27,248,80,159,41,55,36,23,201, +22,145,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,172,6,23,199,1,6,3,3,46,115,115,28, +248,22,149,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,142,13,23,199,1,249,22,77,249,22, +45,48,36,23,204,2,11,250,22,1,22,145,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,188,12,23,199,2,87,94,23,194,1,28,248,22,147,13,23,199, +1,28,248,22,191,12,23,199,2,87,94,23,194,1,28,248,22,150,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,151,8,248, +115,116,32,98,101,32,97,98,115,111,108,117,116,101,41,28,249,22,154,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,165,13,11,28,23,193,2,192,87,94,23,193,1,91,159,38,11,90, +2,247,22,168,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,176, +11,28,248,22,71,248,22,90,23,204,2,28,248,22,71,23,194,2,249,22,179, 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,142,13,23,195,1,28,23,198,1,87,94,23,196,1,23,197,1,28,248, +249,22,145,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,176,13,0,8,35,114,120,34,91,46,93,34,23,199,2,23,197,1,249, -22,169,6,23,199,1,6,3,3,46,115,115,28,249,22,151,8,248,22,64,23, -201,2,64,102,105,108,101,249,22,149,13,248,22,153,13,248,22,88,23,202,2, -248,80,159,42,55,36,23,202,2,12,87,94,28,28,248,22,188,12,23,194,2, -10,248,22,168,7,23,194,2,87,94,23,200,1,12,28,23,200,2,250,22,180, -8,67,114,101,113,117,105,114,101,249,22,130,7,6,17,17,98,97,100,32,109, +249,22,179,13,0,8,35,114,120,34,91,46,93,34,23,199,2,23,197,1,249, +22,172,6,23,199,1,6,3,3,46,115,115,28,249,22,154,8,248,22,64,23, +201,2,64,102,105,108,101,249,22,152,13,248,22,156,13,248,22,88,23,202,2, +248,80,159,42,55,36,23,202,2,12,87,94,28,28,248,22,191,12,23,194,2, +10,248,22,171,7,23,194,2,87,94,23,200,1,12,28,23,200,2,250,22,183, +8,67,114,101,113,117,105,114,101,249,22,133,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,181,8,2,20,249,22,130, +2,6,0,0,23,203,1,87,94,23,200,1,250,22,184,8,2,20,249,22,133, 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,168,7,23,195,2, -249,22,173,7,23,196,2,35,249,22,151,13,248,22,152,13,23,197,2,11,27, -28,248,22,168,7,23,196,2,249,22,173,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,168,7,23,199,2,250, -22,7,2,22,249,22,173,7,23,203,2,37,2,22,248,22,145,13,23,198,2, -87,95,23,195,1,23,193,1,27,28,248,22,168,7,23,200,2,249,22,173,7, -23,201,2,38,249,80,158,47,52,23,197,2,5,0,27,28,248,22,168,7,23, -201,2,249,22,173,7,23,202,2,39,248,22,161,4,23,200,2,27,27,250,22, -133,2,80,158,51,42,248,22,130,14,247,22,171,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,130, -14,247,22,171,11,195,192,87,95,28,23,209,1,27,250,22,133,2,23,197,2, +248,22,64,23,199,2,6,0,0,23,201,2,27,28,248,22,171,7,23,195,2, +249,22,176,7,23,196,2,35,249,22,154,13,248,22,155,13,23,197,2,11,27, +28,248,22,171,7,23,196,2,249,22,176,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,171,7,23,199,2,250, +22,7,2,22,249,22,176,7,23,203,2,37,2,22,248,22,148,13,23,198,2, +87,95,23,195,1,23,193,1,27,28,248,22,171,7,23,200,2,249,22,176,7, +23,201,2,38,249,80,158,47,52,23,197,2,5,0,27,28,248,22,171,7,23, +201,2,249,22,176,7,23,202,2,39,248,22,162,4,23,200,2,27,27,250,22, +133,2,80,158,51,42,248,22,133,14,247,22,174,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,133, +14,247,22,174,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,171,11,249,22,3,83,158,39,20,97,94,89,162,8,44,36,54,9, +27,247,22,174,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,168,7,23,202,1,11,27,248,22,146,6,23,208,2,28,192,192,28, -248,22,61,23,208,2,249,22,151,8,248,22,64,23,210,2,2,21,11,250,22, -131,2,80,158,50,43,28,248,22,146,6,23,210,2,249,22,63,23,211,1,248, +28,248,22,171,7,23,202,1,11,27,248,22,149,6,23,208,2,28,192,192,28, +248,22,61,23,208,2,249,22,154,8,248,22,64,23,210,2,2,21,11,250,22, +131,2,80,158,50,43,28,248,22,149,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, -165,13,252,22,170,7,23,208,1,23,207,1,23,205,1,23,203,1,201,12,193, +168,13,252,22,173,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, -142,4,248,80,158,37,49,247,22,171,11,248,22,178,4,80,158,36,36,248,22, -162,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,165,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); +142,4,248,80,158,37,49,247,22,174,11,248,22,180,4,80,158,36,36,248,22, +165,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,138,66,35,37,98,111,111,116,2,1,11,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,168,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, 4122); } diff --git a/src/mzscheme/src/module.c b/src/mzscheme/src/module.c index b7446c4c44..f12fa6a763 100644 --- a/src/mzscheme/src/module.c +++ b/src/mzscheme/src/module.c @@ -55,7 +55,9 @@ static Scheme_Object *module_compiled_p(int argc, Scheme_Object *argv[]); static Scheme_Object *module_compiled_name(int argc, Scheme_Object *argv[]); static Scheme_Object *module_compiled_imports(int argc, Scheme_Object *argv[]); static Scheme_Object *module_compiled_exports(int argc, Scheme_Object *argv[]); +static Scheme_Object *module_compiled_lang_info(int argc, Scheme_Object *argv[]); static Scheme_Object *module_to_namespace(int argc, Scheme_Object *argv[]); +static Scheme_Object *module_to_lang_info(int argc, Scheme_Object *argv[]); static Scheme_Object *module_path_index_p(int argc, Scheme_Object *argv[]); static Scheme_Object *module_path_index_resolve(int argc, Scheme_Object *argv[]); @@ -334,8 +336,8 @@ void scheme_init_module(Scheme_Env *env) GLOBAL_PARAMETER("current-module-name-resolver", current_module_name_resolver, MZCONFIG_CURRENT_MODULE_RESOLVER, env); GLOBAL_PARAMETER("current-module-declare-name", current_module_name_prefix, MZCONFIG_CURRENT_MODULE_NAME, env); - GLOBAL_PRIM_W_ARITY("dynamic-require", scheme_dynamic_require, 2, 2, env); - GLOBAL_PRIM_W_ARITY("dynamic-require-for-syntax", dynamic_require_for_syntax, 2, 2, env); + GLOBAL_PRIM_W_ARITY("dynamic-require", scheme_dynamic_require, 2, 3, env); + GLOBAL_PRIM_W_ARITY("dynamic-require-for-syntax", dynamic_require_for_syntax, 2, 3, env); GLOBAL_PRIM_W_ARITY("namespace-require", namespace_require, 1, 1, env); GLOBAL_PRIM_W_ARITY("namespace-attach-module", namespace_attach_module, 2, 3, env); GLOBAL_PRIM_W_ARITY("namespace-unprotect-module", namespace_unprotect_module, 2, 3, env); @@ -346,6 +348,7 @@ void scheme_init_module(Scheme_Env *env) GLOBAL_PRIM_W_ARITY("module-compiled-name", module_compiled_name, 1, 1, env); GLOBAL_PRIM_W_ARITY("module-compiled-imports", module_compiled_imports, 1, 1, env); GLOBAL_PRIM_W_ARITY2("module-compiled-exports", module_compiled_exports, 1, 1, 2, 2, env); + GLOBAL_PRIM_W_ARITY("module-compiled-language-info", module_compiled_lang_info, 1, 1, env); GLOBAL_FOLDING_PRIM("module-path-index?", module_path_index_p, 1, 1, 1, env); GLOBAL_PRIM_W_ARITY("module-path-index-resolve", module_path_index_resolve, 1, 1, env); GLOBAL_PRIM_W_ARITY2("module-path-index-split", module_path_index_split, 1, 1, 2, 2, env); @@ -355,6 +358,7 @@ void scheme_init_module(Scheme_Env *env) GLOBAL_PRIM_W_ARITY("resolved-module-path-name", resolved_module_path_name, 1, 1, env); GLOBAL_PRIM_W_ARITY("module-provide-protected?", module_export_protected_p, 2, 2, env); GLOBAL_PRIM_W_ARITY("module->namespace", module_to_namespace, 1, 1, env); + GLOBAL_PRIM_W_ARITY("module->language-info", module_to_lang_info, 1, 1, env); GLOBAL_PRIM_W_ARITY("module-path?", is_module_path, 1, 1, env); } @@ -788,7 +792,7 @@ static Scheme_Object *_dynamic_require(int argc, Scheme_Object *argv[], int position) { Scheme_Object *modname, *modidx; - Scheme_Object *name, *srcname, *srcmname; + Scheme_Object *name, *srcname, *srcmname, *fail_thunk; Scheme_Module *m, *srcm; Scheme_Env *menv, *lookup_env = NULL; int i, count, protected = 0; @@ -797,6 +801,10 @@ static Scheme_Object *_dynamic_require(int argc, Scheme_Object *argv[], modname = argv[0]; name = argv[1]; + if (argc > 2) + fail_thunk = argv[2]; + else + fail_thunk = NULL; errname = (phase ? ((phase < 0) @@ -809,6 +817,9 @@ static Scheme_Object *_dynamic_require(int argc, Scheme_Object *argv[], return NULL; } + if (fail_thunk) + scheme_check_proc_arity(errname, 0, 2, argc, argv); + if (SAME_TYPE(SCHEME_TYPE(modname), scheme_module_index_type)) modidx = modname; else @@ -943,11 +954,14 @@ static Scheme_Object *_dynamic_require(int argc, Scheme_Object *argv[], } if (i == count) { - if (fail_with_error) + if (fail_with_error) { + if (fail_thunk) + return scheme_tail_apply(fail_thunk, 0, NULL); scheme_raise_exn(MZEXN_FAIL_CONTRACT, "%s: name is not provided: %V by module: %V", errname, name, srcm->modname); + } return NULL; } } @@ -992,8 +1006,11 @@ static Scheme_Object *_dynamic_require(int argc, Scheme_Object *argv[], if (!menv->ran) scheme_run_module(menv, 1); } - if (!b->val && fail_with_error) + if (!b->val && fail_with_error) { + if (fail_thunk) + return scheme_tail_apply(fail_thunk, 0, NULL); scheme_unbound_global(b); + } return b->val; } } else @@ -2459,6 +2476,31 @@ static Scheme_Object *module_to_namespace(int argc, Scheme_Object *argv[]) return scheme_module_to_namespace(argv[0], env); } +static Scheme_Object *module_to_lang_info(int argc, Scheme_Object *argv[]) +{ + Scheme_Env *env; + Scheme_Object *name; + Scheme_Module *m; + + env = scheme_get_env(NULL); + + if (!SCHEME_PATHP(argv[0]) + && !scheme_is_module_path(argv[0])) + scheme_wrong_type("module->language-info", "path or module-path", 0, argc, argv); + + name = scheme_module_resolve(scheme_make_modidx(argv[0], scheme_false, scheme_false), 1); + + env = scheme_get_env(NULL); + m = (Scheme_Module *)scheme_hash_get(env->module_registry, name); + + if (!m) + scheme_arg_mismatch("module->laguage-info", + "unknown module in the current namespace: ", + name); + + return (m->lang_info ? m->lang_info : scheme_false); +} + static Scheme_Object *module_compiled_p(int argc, Scheme_Object *argv[]) { @@ -2596,6 +2638,20 @@ static Scheme_Object *module_compiled_exports(int argc, Scheme_Object *argv[]) return NULL; } +static Scheme_Object *module_compiled_lang_info(int argc, Scheme_Object *argv[]) +{ + Scheme_Module *m; + + m = scheme_extract_compiled_module(argv[0]); + + if (m) { + return (m->lang_info ? m->lang_info : scheme_false); + } + + scheme_wrong_type("module-compiled-language-info", "compiled module declaration", 0, argc, argv); + return NULL; +} + static Scheme_Object *module_path_index_p(int argc, Scheme_Object *argv[]) { return (SAME_TYPE(SCHEME_TYPE(argv[0]), scheme_module_index_type) @@ -5193,7 +5249,7 @@ static Scheme_Object *do_module(Scheme_Object *form, Scheme_Comp_Env *env, } if (rec[drec].comp) { - Scheme_Object *dummy; + Scheme_Object *dummy, *pv; dummy = scheme_make_environment_dummy(env); m->dummy = dummy; @@ -5211,6 +5267,15 @@ static Scheme_Object *do_module(Scheme_Object *form, Scheme_Comp_Env *env, m->ii_src = NULL; + pv = scheme_stx_property(form, scheme_intern_symbol("module-lanuage"), NULL); + if (pv) { + if (SCHEME_VECTORP(pv) + && (3 == SCHEME_VEC_SIZE(pv)) + && scheme_is_module_path(SCHEME_VEC_ELS(pv)[0]) + && SCHEME_SYMBOLP(SCHEME_VEC_ELS(pv)[1])) + m->lang_info = pv; + } + fm = scheme_make_syntax_compiled(MODULE_EXPD, (Scheme_Object *)m); } else { Scheme_Object *hints, *formname; @@ -8900,6 +8965,11 @@ static Scheme_Object *write_module(Scheme_Object *obj) l = cons(m->et_functional ? scheme_true : scheme_false, l); l = cons(m->functional ? scheme_true : scheme_false, l); + if (m->lang_info) + l = cons(m->lang_info, l); + else + l = cons(scheme_false, l); + l = cons(m->me->src_modidx, l); l = cons(SCHEME_PTR_VAL(m->modname), l); @@ -8951,6 +9021,18 @@ static Scheme_Object *read_module(Scheme_Object *obj) ((Scheme_Modidx *)m->me->src_modidx)->resolved = m->modname; m->self_modidx = m->me->src_modidx; + if (!SCHEME_PAIRP(obj)) return_NULL(); + e = SCHEME_CAR(obj); + if (SCHEME_FALSEP(e)) + e = NULL; + else if (!(SCHEME_VECTORP(e) + && (3 == SCHEME_VEC_SIZE(e)) + && scheme_is_module_path(SCHEME_VEC_ELS(e)[0]) + && SCHEME_SYMBOLP(SCHEME_VEC_ELS(e)[1]))) + return_NULL(); + m->lang_info = e; + obj = SCHEME_CDR(obj); + if (!SCHEME_PAIRP(obj)) return_NULL(); m->functional = SCHEME_TRUEP(SCHEME_CAR(obj)); obj = SCHEME_CDR(obj); diff --git a/src/mzscheme/src/mzmark.c b/src/mzscheme/src/mzmark.c index 517bf9029c..6763b55411 100644 --- a/src/mzscheme/src/mzmark.c +++ b/src/mzscheme/src/mzmark.c @@ -2348,6 +2348,8 @@ static int module_val_MARK(void *p) { gcMARK(m->insp); + gcMARK(m->lang_info); + gcMARK(m->hints); gcMARK(m->ii_src); @@ -2390,6 +2392,8 @@ static int module_val_FIXUP(void *p) { gcFIXUP(m->insp); + gcFIXUP(m->lang_info); + gcFIXUP(m->hints); gcFIXUP(m->ii_src); diff --git a/src/mzscheme/src/mzmarksrc.c b/src/mzscheme/src/mzmarksrc.c index f3611ec6db..056e906e7b 100644 --- a/src/mzscheme/src/mzmarksrc.c +++ b/src/mzscheme/src/mzmarksrc.c @@ -943,6 +943,8 @@ module_val { gcMARK(m->insp); + gcMARK(m->lang_info); + gcMARK(m->hints); gcMARK(m->ii_src); diff --git a/src/mzscheme/src/portfun.c b/src/mzscheme/src/portfun.c index 7614cbafeb..9cc9cda1dd 100644 --- a/src/mzscheme/src/portfun.c +++ b/src/mzscheme/src/portfun.c @@ -53,6 +53,7 @@ static Scheme_Object *read_syntax_f (int, Scheme_Object *[]); static Scheme_Object *read_syntax_recur_f (int, Scheme_Object *[]); static Scheme_Object *read_honu_syntax_f (int, Scheme_Object *[]); static Scheme_Object *read_honu_syntax_recur_f (int, Scheme_Object *[]); +static Scheme_Object *read_language (int, Scheme_Object *[]); static Scheme_Object *read_char (int, Scheme_Object *[]); static Scheme_Object *read_char_spec (int, Scheme_Object *[]); static Scheme_Object *read_byte (int, Scheme_Object *[]); @@ -262,6 +263,7 @@ scheme_init_port_fun(Scheme_Env *env) GLOBAL_NONCM_PRIM("read-honu/recursive", read_honu_recur_f, 0, 1, env); GLOBAL_NONCM_PRIM("read-honu-syntax", read_honu_syntax_f, 0, 2, env); GLOBAL_NONCM_PRIM("read-honu-syntax/recursive", read_honu_syntax_recur_f, 0, 2, env); + GLOBAL_NONCM_PRIM("read-language", read_language, 0, 2, env); GLOBAL_NONCM_PRIM("read-char", read_char, 0, 1, env); GLOBAL_NONCM_PRIM("read-char-or-special", read_char_spec, 0, 1, env); GLOBAL_NONCM_PRIM("read-byte", read_byte, 0, 1, env); @@ -2856,6 +2858,30 @@ static Scheme_Object *read_honu_syntax_recur_f(int argc, Scheme_Object *argv[]) return do_read_syntax_f("read-honu-syntax/recursive", argc, argv, 1, 1); } +static Scheme_Object *read_language(int argc, Scheme_Object **argv) +{ + Scheme_Object *port, *v, *fail_thunk = NULL; + + if (argc > 0) { + port = argv[0]; + if (!SCHEME_INPUT_PORTP(port)) + scheme_wrong_type("read-language", "input-port", 0, argc, argv); + if (argc > 1) { + scheme_check_proc_arity("read-language", 0, 1, argc, argv); + fail_thunk = argv[1]; + } + } else { + port = CURRENT_INPUT_PORT(scheme_current_config()); + } + + v = scheme_read_language(port, !!fail_thunk); + + if (SCHEME_VOIDP(v)) + return _scheme_tail_apply(fail_thunk, 0, NULL); + + return v; +} + static Scheme_Object * do_read_char(char *name, int argc, Scheme_Object *argv[], int peek, int spec, int is_byte) { diff --git a/src/mzscheme/src/read.c b/src/mzscheme/src/read.c index e228528700..93b7718f61 100644 --- a/src/mzscheme/src/read.c +++ b/src/mzscheme/src/read.c @@ -254,6 +254,7 @@ static Scheme_Object *read_reader(Scheme_Object *port, Scheme_Object *stxsrc, ReadParams *params); static Scheme_Object *read_lang(Scheme_Object *port, Scheme_Object *stxsrc, long line, long col, long pos, + int get_info, Scheme_Hash_Table **ht, Scheme_Object *indentation, ReadParams *params, @@ -267,6 +268,10 @@ static void unexpected_closer(int ch, long line, long col, long pos, Scheme_Object *indentation, ReadParams *params); +static Scheme_Object *expected_lang(const char *prefix, int ch, + Scheme_Object *port, Scheme_Object *stxsrc, + long line, long col, long pos, + int get_info); static void pop_indentation(Scheme_Object *indentation); static int skip_whitespace_comments(Scheme_Object *port, Scheme_Object *stxsrc, @@ -276,6 +281,7 @@ static int skip_whitespace_comments(Scheme_Object *port, Scheme_Object *stxsrc, static Scheme_Object *readtable_call(int w_char, int ch, Scheme_Object *proc, ReadParams *params, Scheme_Object *port, Scheme_Object *src, long line, long col, long pos, + int get_info, Scheme_Hash_Table **ht, Scheme_Object *modpath_stx); #define READTABLE_WHITESPACE 0x1 @@ -709,7 +715,8 @@ static Scheme_Object *read_inner_inner(Scheme_Object *port, ReadParams *params, int comment_mode, int pre_char, - Readtable *init_readtable); + Readtable *init_readtable, + int get_info); static Scheme_Object *read_inner(Scheme_Object *port, Scheme_Object *stxsrc, Scheme_Hash_Table **ht, @@ -744,7 +751,7 @@ static Scheme_Object *read_inner_inner_k(void) p->ku.k.p4 = NULL; p->ku.k.p5 = NULL; - return read_inner_inner(o, stxsrc, ht, indentation, params, p->ku.k.i1, p->ku.k.i2, table); + return read_inner_inner(o, stxsrc, ht, indentation, params, p->ku.k.i1, p->ku.k.i2, table, p->ku.k.i3); } #endif @@ -753,7 +760,8 @@ static Scheme_Object *read_inner_inner_k(void) static Scheme_Object * read_inner_inner(Scheme_Object *port, Scheme_Object *stxsrc, Scheme_Hash_Table **ht, Scheme_Object *indentation, ReadParams *params, - int comment_mode, int pre_char, Readtable *table) + int comment_mode, int pre_char, Readtable *table, + int get_info) { int ch, ch2, depth, dispatch_ch, special_value_need_copy = 0; long line = 0, col = 0, pos = 0; @@ -785,6 +793,7 @@ read_inner_inner(Scheme_Object *port, Scheme_Object *stxsrc, Scheme_Hash_Table * p->ku.k.i1 = comment_mode; p->ku.k.i2 = pre_char; + p->ku.k.i3 = get_info; return scheme_handle_stack_overflow(read_inner_inner_k); } } @@ -844,6 +853,10 @@ read_inner_inner(Scheme_Object *port, Scheme_Object *stxsrc, Scheme_Hash_Table * } else dispatch_ch = ch; + if (get_info && (dispatch_ch != '#') && (dispatch_ch != ';')) { + return expected_lang("", ch, port, stxsrc, line, col, pos, get_info); + } + switch ( dispatch_ch ) { case EOF: @@ -968,6 +981,10 @@ read_inner_inner(Scheme_Object *port, Scheme_Object *stxsrc, Scheme_Hash_Table * case '#': ch = scheme_getc_special_ok(port); + if (get_info && (ch != '|') && (ch != '!') && (ch != 'l') && (ch != ';')) { + return expected_lang("#", ch, port, stxsrc, line, col, pos, get_info); + } + if (table) { Scheme_Object *v; int use_default; @@ -1330,7 +1347,7 @@ read_inner_inner(Scheme_Object *port, Scheme_Object *stxsrc, Scheme_Hash_Table * "read: #lang expressions not currently enabled"); return NULL; } - v = read_lang(port, stxsrc, line, col, pos, ht, indentation, params, 0); + v = read_lang(port, stxsrc, line, col, pos, get_info, ht, indentation, params, 0); if (!v) { if (comment_mode & RETURN_FOR_SPECIAL_COMMENT) return NULL; @@ -1601,7 +1618,7 @@ read_inner_inner(Scheme_Object *port, Scheme_Object *stxsrc, Scheme_Hash_Table * "read: #! reader expressions not currently enabled"); return NULL; } - v = read_lang(port, stxsrc, line, col, pos, ht, indentation, params, ch); + v = read_lang(port, stxsrc, line, col, pos, get_info, ht, indentation, params, ch); if (!v) { if (comment_mode & RETURN_FOR_SPECIAL_COMMENT) return NULL; @@ -1863,7 +1880,7 @@ read_inner(Scheme_Object *port, Scheme_Object *stxsrc, Scheme_Hash_Table **ht, Scheme_Object *indentation, ReadParams *params, int comment_mode) { - return read_inner_inner(port, stxsrc, ht, indentation, params, comment_mode, -1, params->table); + return read_inner_inner(port, stxsrc, ht, indentation, params, comment_mode, -1, params->table, 0); } #ifdef DO_STACK_CHECK @@ -2133,11 +2150,11 @@ static Scheme_Object *resolve_references(Scheme_Object *obj, return result; } -Scheme_Object * -_scheme_internal_read(Scheme_Object *port, Scheme_Object *stxsrc, int crc, int cant_fail, int honu_mode, - int recur, int expose_comment, int extra_char, Scheme_Object *init_readtable, - Scheme_Object *magic_sym, Scheme_Object *magic_val, - Scheme_Object *delay_load_info) +static Scheme_Object * +_internal_read(Scheme_Object *port, Scheme_Object *stxsrc, int crc, int cant_fail, int honu_mode, + int recur, int expose_comment, int extra_char, Scheme_Object *init_readtable, + Scheme_Object *magic_sym, Scheme_Object *magic_val, + Scheme_Object *delay_load_info, int get_info) { Scheme_Object *v, *v2; Scheme_Config *config; @@ -2146,11 +2163,15 @@ _scheme_internal_read(Scheme_Object *port, Scheme_Object *stxsrc, int crc, int c config = scheme_current_config(); - v = scheme_get_param(config, MZCONFIG_READTABLE); - if (SCHEME_TRUEP(v)) - params.table = (Readtable *)v; - else + if (get_info) { params.table = NULL; + } else { + v = scheme_get_param(config, MZCONFIG_READTABLE); + if (SCHEME_TRUEP(v)) + params.table = (Readtable *)v; + else + params.table = NULL; + } params.can_read_compiled = crc; v = scheme_get_param(config, MZCONFIG_CAN_READ_PIPE_QUOTE); params.can_read_pipe_quote = SCHEME_TRUEP(v); @@ -2158,7 +2179,7 @@ _scheme_internal_read(Scheme_Object *port, Scheme_Object *stxsrc, int crc, int c params.can_read_box = SCHEME_TRUEP(v); v = scheme_get_param(config, MZCONFIG_CAN_READ_GRAPH); params.can_read_graph = SCHEME_TRUEP(v); - if (crc) { + if (crc || get_info) { params.can_read_reader = 1; } else { v = scheme_get_param(config, MZCONFIG_CAN_READ_READER); @@ -2215,7 +2236,8 @@ _scheme_internal_read(Scheme_Object *port, Scheme_Object *stxsrc, int crc, int c ? (SCHEME_FALSEP(init_readtable) ? NULL : (Readtable *)init_readtable) - : params.table)); + : params.table), + get_info); extra_char = -1; @@ -2280,10 +2302,10 @@ static void *scheme_internal_read_k(void) magic_sym = SCHEME_CAR(magic_sym); } - return (void *)_scheme_internal_read(port, stxsrc, p->ku.k.i1, 0, p->ku.k.i2, - p->ku.k.i3 & 0x2, p->ku.k.i3 & 0x1, - p->ku.k.i4, init_readtable, - magic_sym, magic_val, delay_load_info); + return (void *)_internal_read(port, stxsrc, p->ku.k.i1, 0, p->ku.k.i2, + p->ku.k.i3 & 0x2, p->ku.k.i3 & 0x1, + p->ku.k.i4, init_readtable, + magic_sym, magic_val, delay_load_info, 0); } Scheme_Object * @@ -2298,8 +2320,8 @@ scheme_internal_read(Scheme_Object *port, Scheme_Object *stxsrc, int crc, int ca crc = SCHEME_TRUEP(scheme_get_param(scheme_current_config(), MZCONFIG_CAN_READ_COMPILED)); if (cantfail) { - return _scheme_internal_read(port, stxsrc, crc, cantfail, honu_mode, recur, expose_comment, -1, NULL, - magic_sym, magic_val, delay_load_info); + return _internal_read(port, stxsrc, crc, cantfail, honu_mode, recur, expose_comment, -1, NULL, + magic_sym, magic_val, delay_load_info, 0); } else { if (magic_sym) magic_sym = scheme_make_pair(magic_sym, magic_val); @@ -2320,12 +2342,12 @@ scheme_internal_read(Scheme_Object *port, Scheme_Object *stxsrc, int crc, int ca Scheme_Object *scheme_read(Scheme_Object *port) { - return scheme_internal_read(port, NULL, -1, 0, 0, 0, 0, -1, NULL, NULL, NULL, NULL); + return scheme_internal_read(port, NULL, -1, 0, 0, 0, 0, -1, NULL, NULL, NULL, 0); } Scheme_Object *scheme_read_syntax(Scheme_Object *port, Scheme_Object *stxsrc) { - return scheme_internal_read(port, stxsrc, -1, 0, 0, 0, 0, -1, NULL, NULL, NULL, NULL); + return scheme_internal_read(port, stxsrc, -1, 0, 0, 0, 0, -1, NULL, NULL, NULL, 0); } Scheme_Object *scheme_resolve_placeholders(Scheme_Object *obj) @@ -3339,7 +3361,7 @@ read_number_or_symbol(int init_ch, int skip_rt, Scheme_Object *port, /* If the readtable provides a "symbol" reader, then use it: */ if (table->symbol_parser) { return readtable_call(1, init_ch, table->symbol_parser, params, - port, stxsrc, line, col, pos, ht, NULL); + port, stxsrc, line, col, pos, 0, ht, NULL); /* Special-comment result is handled in main loop. */ } } @@ -5532,7 +5554,8 @@ static int readtable_kind(Readtable *t, int ch, ReadParams *params) static Scheme_Object *readtable_call(int w_char, int ch, Scheme_Object *proc, ReadParams *params, Scheme_Object *port, Scheme_Object *src, long line, long col, long pos, - Scheme_Hash_Table **ht, Scheme_Object *modpath_stx) + int get_info, + Scheme_Hash_Table **ht, Scheme_Object *modpath_stx) { int cnt, add_srcloc = 0; Scheme_Object *a[6], *v; @@ -5581,15 +5604,25 @@ static Scheme_Object *readtable_call(int w_char, int ch, Scheme_Object *proc, Re ht = MALLOC_N(Scheme_Hash_Table *, 1); } - - scheme_push_continuation_frame(&cframe); - scheme_set_in_read_mark(src, ht); + if (!get_info) { + scheme_push_continuation_frame(&cframe); + scheme_set_in_read_mark(src, ht); + } v = scheme_apply(proc, cnt, a); - scheme_pop_continuation_frame(&cframe); + if (get_info) { + a[0] = v; + if (!scheme_check_proc_arity(NULL, 1, 0, 1, a)) { + scheme_wrong_type("read-language", "procedure (arity 1)", -1, -1, a); + } + } - if (!scheme_special_comment_value(v)) { + if (!get_info) { + scheme_pop_continuation_frame(&cframe); + } + + if (!get_info && !scheme_special_comment_value(v)) { if (SCHEME_STXP(v)) { if (!src) v = scheme_syntax_to_datum(v, 0, NULL); @@ -5651,7 +5684,7 @@ static Scheme_Object *readtable_handle(Readtable *t, int *_ch, int *_use_default v = SCHEME_CDR(v); - v = readtable_call(1, ch, v, params, port, src, line, col, pos, ht, NULL); + v = readtable_call(1, ch, v, params, port, src, line, col, pos, 0, ht, NULL); return v; } @@ -5687,7 +5720,7 @@ static Scheme_Object *readtable_handle_hash(Readtable *t, int ch, int *_use_defa *_use_default = 0; - v = readtable_call(1, ch, v, params, port, src, line, col, pos, ht, NULL); + v = readtable_call(1, ch, v, params, port, src, line, col, pos, 0, ht, NULL); if (scheme_special_comment_value(v)) return NULL; @@ -5927,13 +5960,20 @@ static Scheme_Object *current_reader_guard(int argc, Scheme_Object **argv) 1, NULL, NULL, 0); } +static Scheme_Object *no_val_thunk(void *d, int argc, Scheme_Object **argv) +{ + return (Scheme_Object *)d; +} + static Scheme_Object *do_reader(Scheme_Object *modpath_stx, Scheme_Object *port, Scheme_Object *stxsrc, long line, long col, long pos, + int get_info, Scheme_Hash_Table **ht, Scheme_Object *indentation, ReadParams *params) { - Scheme_Object *modpath, *name, *a[2], *proc, *v; + Scheme_Object *modpath, *name, *a[3], *proc, *v, *no_val; + int num_a; if (stxsrc) modpath = scheme_syntax_to_datum(modpath_stx, 0, NULL); @@ -5946,32 +5986,51 @@ static Scheme_Object *do_reader(Scheme_Object *modpath_stx, modpath = scheme_apply(proc, 1, a); a[0] = modpath; - if (stxsrc) + if (get_info) + name = scheme_intern_symbol("get-info"); + else if (stxsrc) name = scheme_intern_symbol("read-syntax"); else name = scheme_intern_symbol("read"); a[1] = name; + if (get_info) { + no_val = scheme_make_pair(scheme_false, scheme_false); + a[2] = scheme_make_closed_prim(no_val_thunk, no_val); + num_a = 3; + } else { + no_val = NULL; + num_a = 2; + } - proc = scheme_dynamic_require(2, a); + proc = scheme_dynamic_require(num_a, a); + if (get_info) { + proc = scheme_force_value(proc); + } + + if (get_info && SAME_OBJ(proc, no_val)) + return scheme_false; a[0] = proc; if (scheme_check_proc_arity(NULL, stxsrc ? 6 : 5, 0, 1, a)) { /* provide modpath_stx to reader */ - } else if (scheme_check_proc_arity(NULL, stxsrc ? 2 : 1, 0, 1, a)) { + } else if (!get_info && scheme_check_proc_arity(NULL, stxsrc ? 2 : 1, 0, 1, a)) { /* don't provide modpath_stx to reader */ modpath_stx = NULL; } else { scheme_wrong_type("#reader", - (stxsrc ? "procedure (arity 2 or 6)" : "procedure (arity 1 or 5)"), + (stxsrc ? "procedure (arity 2 or 6)" + : (get_info + ? "procedure (arity 5)" + : "procedure (arity 1 or 5)")), -1, -1, a); return NULL; } v = readtable_call(0, 0, proc, params, port, stxsrc, line, col, pos, - ht, modpath_stx); + get_info, ht, modpath_stx); - if (scheme_special_comment_value(v)) + if (!get_info && scheme_special_comment_value(v)) return NULL; else return v; @@ -5996,12 +6055,13 @@ static Scheme_Object *read_reader(Scheme_Object *port, return NULL; } - return do_reader(modpath, port, stxsrc, line, col, pos, ht, indentation, params); + return do_reader(modpath, port, stxsrc, line, col, pos, 0, ht, indentation, params); } /* "#lang " has been read */ static Scheme_Object *read_lang(Scheme_Object *port, Scheme_Object *stxsrc, long line, long col, long pos, + int get_info, Scheme_Hash_Table **ht, Scheme_Object *indentation, ReadParams *params, int init_ch) @@ -6094,7 +6154,28 @@ static Scheme_Object *read_lang(Scheme_Object *port, stxsrc, STX_SRCTAG); } - return do_reader(modpath, port, stxsrc, line, col, pos, ht, indentation, params); + return do_reader(modpath, port, stxsrc, line, col, pos, get_info, ht, indentation, params); +} + +Scheme_Object *scheme_read_language(Scheme_Object *port, int nonlang_ok) +{ + return _internal_read(port, NULL, 0, 0, 0, 0, 0, -1, + NULL, NULL, NULL, NULL, nonlang_ok ? 2 : 1); +} + +static Scheme_Object *expected_lang(const char *prefix, int ch, + Scheme_Object *port, Scheme_Object *stxsrc, + long line, long col, long pos, + int get_lang) +{ + if (get_lang > 1) { + return scheme_void; + } else { + scheme_read_err(port, stxsrc, line, col, pos, 1, 0, NULL, + "read-language: expected `#lang' or `#!', found `%s%c'", + prefix, ch); + return NULL; + } } /*========================================================================*/ diff --git a/src/mzscheme/src/schminc.h b/src/mzscheme/src/schminc.h index 79921ba3c9..2e0f01e031 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 926 +#define EXPECTED_PRIM_COUNT 929 #ifdef MZSCHEME_SOMETHING_OMITTED # undef USE_COMPILED_STARTUP diff --git a/src/mzscheme/src/schpriv.h b/src/mzscheme/src/schpriv.h index ef28bde3ea..219f9dc5ca 100644 --- a/src/mzscheme/src/schpriv.h +++ b/src/mzscheme/src/schpriv.h @@ -1716,6 +1716,8 @@ void scheme_internal_display(Scheme_Object *obj, Scheme_Object *port); void scheme_internal_write(Scheme_Object *obj, Scheme_Object *port); void scheme_internal_print(Scheme_Object *obj, Scheme_Object *port); +Scheme_Object *scheme_read_language(Scheme_Object *port, int nonlang_ok); + #define _scheme_eval_linked_expr(obj) scheme_do_eval(obj,-1,NULL,1) #define _scheme_eval_linked_expr_multi(obj) scheme_do_eval(obj,-1,NULL,-1) #define _scheme_eval_linked_expr_wp(obj, p) scheme_do_eval_w_thread(obj,-1,NULL,1,p) @@ -2542,6 +2544,8 @@ typedef struct Scheme_Module Scheme_Object *insp; /* declaration-time inspector, for creating certificates and for module instantiation */ + Scheme_Object *lang_info; /* NULL or vector */ + Scheme_Object *hints; /* set by expansion; moved to properties */ Scheme_Object *ii_src; /* set by compile, temporary */ Comp_Prefix *comp_prefix; /* set by body compile, temporary */ diff --git a/src/mzscheme/src/schvers.h b/src/mzscheme/src/schvers.h index 295c71ae6e..d443cd80a4 100644 --- a/src/mzscheme/src/schvers.h +++ b/src/mzscheme/src/schvers.h @@ -13,12 +13,12 @@ consistently.) */ -#define MZSCHEME_VERSION "4.1.0.3" +#define MZSCHEME_VERSION "4.1.0.4" #define MZSCHEME_VERSION_X 4 #define MZSCHEME_VERSION_Y 1 #define MZSCHEME_VERSION_Z 0 -#define MZSCHEME_VERSION_W 3 +#define MZSCHEME_VERSION_W 4 #define MZSCHEME_VERSION_MAJOR ((MZSCHEME_VERSION_X * 100) + MZSCHEME_VERSION_Y) #define MZSCHEME_VERSION_MINOR ((MZSCHEME_VERSION_Z * 1000) + MZSCHEME_VERSION_W)