From b64d03d93265a89530560bc3e2b08d9d4fbe8e40 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Sun, 16 Mar 2008 23:08:53 +0000 Subject: [PATCH] fix mac sdk support; change initial namespace to not have 'module'; set up mzc --c-mods (still need docs) svn: r8997 --- collects/compiler/embed-unit.ss | 293 ++++++----- collects/compiler/main.ss | 76 ++- collects/drscheme/private/module-language.ss | 8 +- collects/lang/htdp-langs.ss | 2 +- collects/profj/compile.ss | 8 +- collects/scribblings/inside/hooks.scrbl | 15 + collects/scribblings/inside/memory.scrbl | 54 +- collects/scribblings/inside/misc.scrbl | 13 + collects/scribblings/inside/namespaces.scrbl | 7 +- collects/scribblings/inside/overview.scrbl | 153 +++--- collects/scribblings/mzc/exe-api.scrbl | 44 +- collects/scribblings/mzc/exe.scrbl | 2 +- collects/scribblings/mzc/sa.scrbl | 2 +- collects/scribblings/reference/startup.scrbl | 13 +- collects/tests/mzscheme/embed.ss | 77 ++- collects/tests/r6rs/test.ss | 16 +- src/configure | 8 +- src/mred/Makefile.in | 2 +- src/mred/gc2/Makefile.in | 4 +- src/mzscheme/Makefile.in | 4 +- src/mzscheme/cmdline.inc | 31 +- src/mzscheme/configure.ac | 8 +- src/mzscheme/gc2/Makefile.in | 2 +- src/mzscheme/include/mzscheme.exp | 1 + src/mzscheme/include/mzscheme3m.exp | 1 + src/mzscheme/include/mzwin.def | 1 + src/mzscheme/include/mzwin3m.def | 1 + src/mzscheme/include/scheme.h | 7 + src/mzscheme/main.c | 8 +- src/mzscheme/src/builtin.c | 2 +- src/mzscheme/src/cstartup.inc | 486 +++++++++--------- src/mzscheme/src/env.c | 1 - src/mzscheme/src/eval.c | 46 +- src/mzscheme/src/module.c | 16 +- src/mzscheme/src/salloc.c | 18 + src/mzscheme/src/schemef.h | 1 + src/mzscheme/src/schemex.h | 1 + src/mzscheme/src/schemex.inc | 1 + src/mzscheme/src/schemexm.h | 1 + src/mzscheme/src/schpriv.h | 2 - src/mzscheme/src/sstoinc.ss | 2 + src/mzscheme/src/startup.inc | 15 +- src/mzscheme/src/startup.ss | 25 +- .../contrib/wxxpm/libxpm.34b/lib/xpm34p.h | 7 + 44 files changed, 890 insertions(+), 595 deletions(-) diff --git a/collects/compiler/embed-unit.ss b/collects/compiler/embed-unit.ss index c5a091f175..3a1c20ae9d 100644 --- a/collects/compiler/embed-unit.ss +++ b/collects/compiler/embed-unit.ss @@ -433,7 +433,7 @@ (if (path? module-path) (path->complete-path module-path) module-path)]) - (syntax-case (expand `(module m mzscheme + (syntax-case (expand `(,#'module m mzscheme (require (only ,module-path) mzlib/runtime-path) (runtime-paths ,module-path))) (quote) @@ -493,6 +493,15 @@ ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + (define (compile-using-kernel e) + (let ([ns (make-empty-namespace)]) + (namespace-attach-module (current-namespace) ''#%kernel ns) + (parameterize ([current-namespace ns]) + (namespace-require ''#%kernel) + (compile e)))) + + ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + (define (lib-path->string path) (cond [(null? (cddr path)) @@ -516,89 +525,90 @@ (define (make-module-name-resolver code-l) (let ([extensions (filter (lambda (m) (extension? (mod-code m))) code-l)]) - `(let-values ([(orig) (current-module-name-resolver)] - [(reg) (namespace-module-registry (current-namespace))] - [(mapping-table) (quote - ,(map - (lambda (m) - `(,(mod-full-name m) - ,(mod-mappings m))) - code-l))] - [(library-table) (quote - ,(filter values - (map (lambda (m) - (let ([path (mod-mod-path m)]) - (if (and (pair? path) - (eq? 'lib (car path))) - (cons (lib-path->string path) - (mod-full-name m)) - #f))) - code-l)))]) - (letrec-values ([(embedded-resolver) - (case-lambda - [(name) - ;; a notification - (orig name)] - [(name rel-to stx) - (embedded-resolver name rel-to stx #t)] - [(name rel-to stx load?) - (if (not (module-path? name)) - ;; Bad input - (orig name rel-to stx load?) - (if (not (eq? reg (namespace-module-registry (current-namespace)))) - ;; Wrong registry - (orig name rel-to stx load?) - ;; Have a relative mapping? - (let-values ([(a) (if rel-to - (assq (resolved-module-path-name rel-to) mapping-table) - #f)]) - (if a - (let-values ([(a2) (assoc name (cadr a))]) - (if a2 - (make-resolved-module-path (cdr a2)) - ;; No relative mapping found (presumably a lib) - (orig name rel-to stx load?))) - (let-values ([(lname) - ;; normalize `lib' to single string (same as lib-path->string): - (let-values ([(name) - (if (symbol? name) - (list 'lib (symbol->string name)) - name)]) - (if (pair? name) - (if (eq? 'lib (car name)) - (if (null? (cddr name)) - (if (regexp-match #rx"^[^/]*[.]" (cadr name)) - ;; mzlib - (string-append "mzlib/" (cadr name)) - ;; new-style - (if (regexp-match #rx"^[^/.]*$" (cadr name)) - (string-append (cadr name) "/main.ss") - (if (regexp-match #rx"^[^.]*$" (cadr name)) - ;; need a suffix: - (string-append (cadr name) ".ss") - (cadr name)))) - ;; old-style multi-string - (string-append (apply string-append - (map (lambda (s) - (string-append s "/")) - (cddr name))) - (cadr name))) - #f) - #f))]) - ;; A library mapping that we have? - (let-values ([(a3) (assoc lname library-table)]) - (if a3 - ;; Have it: - (make-resolved-module-path (cdr a3)) - ;; Let default handler try: - (orig name rel-to stx load?))))))))])]) - (current-module-name-resolver embedded-resolver))))) + `(module #%resolver '#%kernel + (let-values ([(orig) (current-module-name-resolver)] + [(reg) (namespace-module-registry (current-namespace))] + [(mapping-table) (quote + ,(map + (lambda (m) + `(,(mod-full-name m) + ,(mod-mappings m))) + code-l))] + [(library-table) (quote + ,(filter values + (map (lambda (m) + (let ([path (mod-mod-path m)]) + (if (and (pair? path) + (eq? 'lib (car path))) + (cons (lib-path->string path) + (mod-full-name m)) + #f))) + code-l)))]) + (letrec-values ([(embedded-resolver) + (case-lambda + [(name) + ;; a notification + (orig name)] + [(name rel-to stx) + (embedded-resolver name rel-to stx #t)] + [(name rel-to stx load?) + (if (not (module-path? name)) + ;; Bad input + (orig name rel-to stx load?) + (if (not (eq? reg (namespace-module-registry (current-namespace)))) + ;; Wrong registry + (orig name rel-to stx load?) + ;; Have a relative mapping? + (let-values ([(a) (if rel-to + (assq (resolved-module-path-name rel-to) mapping-table) + #f)]) + (if a + (let-values ([(a2) (assoc name (cadr a))]) + (if a2 + (make-resolved-module-path (cdr a2)) + ;; No relative mapping found (presumably a lib) + (orig name rel-to stx load?))) + (let-values ([(lname) + ;; normalize `lib' to single string (same as lib-path->string): + (let-values ([(name) + (if (symbol? name) + (list 'lib (symbol->string name)) + name)]) + (if (pair? name) + (if (eq? 'lib (car name)) + (if (null? (cddr name)) + (if (regexp-match #rx"^[^/]*[.]" (cadr name)) + ;; mzlib + (string-append "mzlib/" (cadr name)) + ;; new-style + (if (regexp-match #rx"^[^/.]*$" (cadr name)) + (string-append (cadr name) "/main.ss") + (if (regexp-match #rx"^[^.]*$" (cadr name)) + ;; need a suffix: + (string-append (cadr name) ".ss") + (cadr name)))) + ;; old-style multi-string + (string-append (apply string-append + (map (lambda (s) + (string-append s "/")) + (cddr name))) + (cadr name))) + #f) + #f))]) + ;; A library mapping that we have? + (let-values ([(a3) (assoc lname library-table)]) + (if a3 + ;; Have it: + (make-resolved-module-path (cdr a3)) + ;; Let default handler try: + (orig name rel-to stx load?))))))))])]) + (current-module-name-resolver embedded-resolver)))))) ;; Write a module bundle that can be loaded with 'load' (do not embed it ;; into an executable). The bundle is written to the current output port. - (define (write-module-bundle verbose? modules literal-files literal-expression collects-dest - on-extension program-name compiler expand-namespace - src-filter get-extra-imports) + (define (do-write-module-bundle verbose? modules literal-files literal-expressions collects-dest + on-extension program-name compiler expand-namespace + src-filter get-extra-imports) (let* ([module-paths (map cadr modules)] [files (map (lambda (mp) @@ -633,9 +643,12 @@ collapsed-mps) ;; Drop elements of `codes' that just record copied libs: (set-box! codes (filter mod-code (unbox codes))) + ;; Bind `module' to get started: + (write (compile-using-kernel '(namespace-require '(only '#%kernel module)))) ;; Install a module name resolver that redirects ;; to the embedded modules (write (make-module-name-resolver (filter mod-code (unbox codes)))) + (write (compile-using-kernel '(namespace-require ''#%resolver))) ;; Write the extension table and copy module code: (let* ([l (reverse (unbox codes))] [extensions (filter (lambda (m) (extension? (mod-code m))) l)] @@ -649,41 +662,44 @@ [table-path (resolved-module-path-name table-sym)]) (assoc (normalize table-path) l)))]) (unless (null? extensions) - ;; The extension table: - (write '(#%require '#%utils)) + ;; The extension table:` (write - `(let-values ([(eXtEnSiOn-modules) ;; this name is magic for the exe->distribution process - (quote ,(map (lambda (m) - (let ([p (extension-path (mod-code m))]) - (when verbose? - (fprintf (current-error-port) "Recording extension at ~s~n" p)) - (list (path->bytes p) - (mod-full-name m) - ;; The program name isn't used. It just helps ensures that - ;; there's plenty of room in the executable for patching - ;; the path later when making a distribution. - (path->bytes program-name)))) - extensions))]) - (for-each (lambda (pr) - (current-module-declare-name (make-resolved-module-path (cadr pr))) - (let-values ([(p) (bytes->path (car pr))]) - (load-extension (if (relative-path? p) - (let-values ([(d) (current-directory)]) - (current-directory (find-system-path 'orig-dir)) - (begin0 - (let-values ([(p2) (find-executable-path (find-system-path 'exec-file) p #t)]) - (if p2 - p2 - (path->complete-path p (current-directory)))) - (current-directory d))) - p)))) - eXtEnSiOn-modules)))) + `(module #%extension-table '#%kernel + (#%require '#%utils) + (let-values ([(eXtEnSiOn-modules) ;; this name is magic for the exe->distribution process + (quote ,(map (lambda (m) + (let ([p (extension-path (mod-code m))]) + (when verbose? + (fprintf (current-error-port) "Recording extension at ~s~n" p)) + (list (path->bytes p) + (mod-full-name m) + ;; The program name isn't used. It just helps ensures that + ;; there's plenty of room in the executable for patching + ;; the path later when making a distribution. + (path->bytes program-name)))) + extensions))]) + (for-each (lambda (pr) + (current-module-declare-name (make-resolved-module-path (cadr pr))) + (let-values ([(p) (bytes->path (car pr))]) + (load-extension (if (relative-path? p) + (let-values ([(d) (current-directory)]) + (current-directory (find-system-path 'orig-dir)) + (begin0 + (let-values ([(p2) (find-executable-path (find-system-path 'exec-file) p #t)]) + (if p2 + p2 + (path->complete-path p (current-directory)))) + (current-directory d))) + p)))) + eXtEnSiOn-modules)))) + (write (compile-using-kernel '(namespace-require ''#%extension-table)))) ;; Runtime-path table: (unless (null? runtimes) (unless table-mod (error 'create-embedding-executable "cannot find module for runtime-path table")) - (write `(current-module-declare-name (make-resolved-module-path - ',(mod-full-name table-mod)))) + (write (compile-using-kernel + `(current-module-declare-name (make-resolved-module-path + ',(mod-full-name table-mod))))) (write `(module runtime-path-table '#%kernel (#%provide table) (define-values (table) @@ -734,27 +750,48 @@ (eq? nc table-mod)) (when verbose? (fprintf (current-error-port) "Writing module from ~s~n" (mod-file nc))) - (write `(current-module-declare-name - (make-resolved-module-path - ',(mod-full-name nc)))) + (write (compile-using-kernel + `(current-module-declare-name + (make-resolved-module-path + ',(mod-full-name nc))))) (if (src-filter (mod-file nc)) (with-input-from-file (mod-file nc) (lambda () (copy-port (current-input-port) (current-output-port)))) (write (mod-code nc))))) l)) - (write '(current-module-declare-name #f)) + (write (compile-using-kernel '(current-module-declare-name #f))) + ;; Remove `module' binding before we start running user code: + (write (compile-using-kernel '(namespace-set-variable-value! 'module #f #t))) + (write (compile-using-kernel '(namespace-undefine-variable! 'module))) (newline) (for-each (lambda (f) (when verbose? (fprintf (current-error-port) "Copying from ~s~n" f)) - (call-with-input-file* - f + (call-with-input-file* f (lambda (i) (copy-port i (current-output-port))))) literal-files) - (when literal-expression - (write literal-expression)))) + (for-each write literal-expressions))) + + (define (write-module-bundle #:verbose? [verbose? #f] + #:modules [modules null] + #:literal-files [literal-files null] + #:literal-expressions [literal-expressions null] + #:on-extension [on-extension #f] + #:expand-namespace [expand-namespace (current-namespace)] + #:compiler [compiler (lambda (expr) + (parameterize ([current-namespace expand-namespace]) + (compile expr)))] + #:src-filter [src-filter (lambda (filename) #f)] + #:get-extra-imports [get-extra-imports (lambda (filename code) null)]) + (do-write-module-bundle verbose? modules literal-files literal-expressions + #f ; collects-dest + on-extension + "?" ; program-name + compiler expand-namespace + src-filter get-extra-imports)) + ;; The old interface: (define make-embedding-executable @@ -783,6 +820,10 @@ #:modules [modules null] #:literal-files [literal-files null] #:literal-expression [literal-expression #f] + #:literal-expressions [literal-expressions + (if literal-expression + (list literal-expression) + null)] #:cmdline [cmdline null] #:aux [aux null] #:launcher? [launcher? #f] @@ -890,13 +931,13 @@ (update-dll-dir dest (build-path orig-dir dir)))))))) (let ([write-module (lambda () - (write-module-bundle verbose? modules literal-files literal-expression collects-dest - on-extension - (file-name-from-path dest) - compiler - expand-namespace - src-filter - get-extra-imports))]) + (do-write-module-bundle verbose? modules literal-files literal-expressions collects-dest + on-extension + (file-name-from-path dest) + compiler + expand-namespace + src-filter + get-extra-imports))]) (let-values ([(start end) (if (and (eq? (system-type) 'macosx) (not unix-starter?)) diff --git a/collects/compiler/main.ss b/collects/compiler/main.ss index 84567e02c5..8ce687401e 100644 --- a/collects/compiler/main.ss +++ b/collects/compiler/main.ss @@ -49,6 +49,8 @@ (define exe-dir-output (make-parameter #f)) + (define mods-output (make-parameter #f)) + (define module-mode (make-parameter #f)) (define default-plt-name "archive") @@ -112,6 +114,10 @@ ,(lambda (f name) (exe-dir-output name) 'exe-dir) ((,(format "Combine executables with support files in ") "") "dir")] + [("--c-mods") + ,(lambda (f name) (mods-output name) 'c-mods) + ((,(format "Write C-embeddable module bytecode to ") "") + "file")] [("--collection-plt") ,(lambda (f name) (plt-output name) 'plt-collect) (,(format "Create .plt containing collections") @@ -287,7 +293,7 @@ ,(lambda (f l) (exe-embedded-libraries (append (exe-embedded-libraries) (list l)))) - ("Embed from in --[gui-]exe executable" "lib")] + ("Embed in --[gui-]exe executable" "lib")] [("++collects-copy") ,(lambda (f d) (exe-dir-add-collects-dirs (append (exe-dir-add-collects-dirs) @@ -384,14 +390,14 @@ [("--debug") ,(lambda (f) (compiler:option:debug #t)) ("Write debugging output to dump.txt")]]) - (lambda (accum file . files) + (lambda (accum . files) (let ([mode (let ([l (filter symbol? accum)]) (if (null? l) 'make-zo (car l)))]) (values mode - (cons file files) + files (let ([prefixes (filter string? accum)]) (unless (memq mode '(compile compile-c zo)) (unless (null? prefixes) @@ -411,7 +417,7 @@ (require compiler/cffi) ,@(map (lambda (s) `(load ,s)) prefixes) (void))))))) - (list "file/directory/collection" "file/directory/sub-collection"))) + (list "file/directory/collection"))) (printf "mzc v~a [~a], Copyright (c) 2004-2008 PLT Scheme Inc.~n" (version) @@ -544,16 +550,68 @@ (map (lambda (l) `(#t (lib ,l))) (exe-embedded-libraries))) - #:literal-expression `(#%require ',(string->symbol - (format - "#%mzc:~a" - (let-values ([(base name dir?) (split-path (car source-files))]) - (path->bytes (path-replace-suffix name #"")))))) + #:literal-expression (parameterize ([current-namespace (make-base-namespace)]) + (compile + `(namespace-require + '',(string->symbol + (format + "#%mzc:~a" + (let-values ([(base name dir?) (split-path (car source-files))]) + (path->bytes (path-replace-suffix name #"")))))))) #:cmdline (exe-embedded-flags) #:collects-path (exe-embedded-collects-path) #:collects-dest (exe-embedded-collects-dest) #:aux (exe-aux)) (printf " [output to \"~a\"]~n" dest))] + [(c-mods) + (let ([dest (mods-output)]) + (let-values ([(in out) (make-pipe)]) + (parameterize ([current-output-port out]) + ((dynamic-require '(lib "embed.ss" "compiler") + 'write-module-bundle) + #:modules + (append + (map (lambda (l) + `(#f (file ,l))) + source-files) + (map (lambda (l) + `(#t (lib ,l))) + (exe-embedded-libraries))))) + (close-output-port out) + (let ([out (open-output-file + dest + #:exists 'truncate/replace)]) + (fprintf out "#ifdef MZ_XFORM\n") + (fprintf out "XFORM_START_SKIP;\n") + (fprintf out "#endif\n") + (fprintf out "static void declare_modules(Scheme_Env *env) {\n") + (fprintf out " static unsigned char data[] = {") + (let loop ([pos 0]) + (let ([b (read-byte in)]) + (when (zero? (modulo pos 20)) + (fprintf out "\n ")) + (unless (eof-object? b) + (fprintf out "~a," b) + (loop (add1 pos))))) + (fprintf out "0\n };\n") + (fprintf out " Scheme_Object *eload = NULL, *a[3] = {NULL, NULL, NULL};\n") + (fprintf out " MZ_GC_DECL_REG(4);\n") + (fprintf out " MZ_GC_VAR_IN_REG(0, eload);\n") + (fprintf out " MZ_GC_ARRAY_VAR_IN_REG(1, a, 3);\n") + (fprintf out " MZ_GC_REG();\n") + (fprintf out " eload = scheme_builtin_value(\"embedded-load\");\n") + (fprintf out " a[0] = scheme_false;\n") + (fprintf out " a[1] = scheme_false;\n") + (fprintf out " a[2] = scheme_make_sized_byte_string((char *)data, ~a, 0);\n" + (file-position in)) + (fprintf out " scheme_apply(eload, 3, a);\n") + (fprintf out " MZ_GC_UNREG();\n") + (fprintf out "}\n") + (fprintf out "#ifdef MZ_XFORM\n") + (fprintf out "XFORM_END_SKIP;\n") + (fprintf out "#endif\n") + (close-output-port out))) + (printf " [output to \"~a\"]~n" dest))] [(exe-dir) ((dynamic-require 'compiler/distribute 'assemble-distribution) diff --git a/collects/drscheme/private/module-language.ss b/collects/drscheme/private/module-language.ss index 839e412bac..843560dbf1 100644 --- a/collects/drscheme/private/module-language.ss +++ b/collects/drscheme/private/module-language.ss @@ -213,9 +213,11 @@ #f ;; verbose? (list (list #f program-filename)) null - null - (list "-nqe-" - (format "~s" `(#%require ',(string->symbol (path->string short-program-name))))))))) + (parameterize ([current-namespace (make-namespace 'empty)]) + (namespace-require 'mzscheme) + (compile + `(namespace-require '',(string->symbol (path->string short-program-name))))) + null)))) (let ([make-launcher (if gui? make-mred-launcher make-mzscheme-launcher)]) (make-launcher (list "-qt-" (path->string program-filename)) executable-filename)))))))) diff --git a/collects/lang/htdp-langs.ss b/collects/lang/htdp-langs.ss index 4ed2288d17..c1bb5fb723 100644 --- a/collects/lang/htdp-langs.ss +++ b/collects/lang/htdp-langs.ss @@ -889,7 +889,7 @@ ;; any structure defined in the user's namespace (define drscheme-inspector (current-inspector)) - (eval `(module drscheme-secrets mzscheme + (eval `(,#'module drscheme-secrets mzscheme (provide drscheme-inspector) (define drscheme-inspector ,drscheme-inspector))) (namespace-require ''drscheme-secrets) diff --git a/collects/profj/compile.ss b/collects/profj/compile.ss index 8440158ef2..0843ed7bae 100644 --- a/collects/profj/compile.ss +++ b/collects/profj/compile.ss @@ -73,6 +73,10 @@ (else (compile-java-internal port loc type-recs #f level))))) + (define (compile-module expr) + (parameterize ([current-namespace (make-namespace)]) + (compile expr))) + ;compile-to-file: port location level -> void ;Should have side-effect of writing to file all files needed for compilation (define (compile-to-file port location level) @@ -98,7 +102,7 @@ (build-path (send type-recs get-compilation-location) (file-name-from-path (send type-recs get-composite-location (car names)))) - (lambda (port) (write (compile (car syntaxes)) port)) 'truncate/replace) + (lambda (port) (write (compile-module (car syntaxes)) port)) 'truncate/replace) (set! syntaxes (cdr syntaxes))) (unless (= (length names) (length syntaxes) (length locations)) (error 'compile-to-file "Internal error: compilation unit not represented as expected")) @@ -109,7 +113,7 @@ (unless (directory-exists? directory) (make-directory directory)) (call-with-output-zo-file* location (build-path directory (string-append name "_ss.zo")) - (lambda (port) (write (compile code) port)) + (lambda (port) (write (compile-module code) port)) 'truncate/replace) (call-with-output-file* (build-path directory (string-append name ".jinfo")) (lambda (port) (write-record (send type-recs get-class-record diff --git a/collects/scribblings/inside/hooks.scrbl b/collects/scribblings/inside/hooks.scrbl index 8fff128723..0c8e6453bc 100644 --- a/collects/scribblings/inside/hooks.scrbl +++ b/collects/scribblings/inside/hooks.scrbl @@ -49,3 +49,18 @@ embedded: calls @cppi{scheme_console_output}.} } + +@function[(void scheme_set_collects_path + [Scheme_Object* path])]{ + +Sets the path to be returned by @scheme[(find-system-path +'collects-dir)].} + + +@function[(void scheme_init_collection_paths + [Scheme_Env* env] + [Scheme_Object* extra_paths])]{ + +Initializes the @scheme[current-library-collection-paths] parameter +using @scheme[find-library-collection-paths]. The @var{extra_paths} +argument is propagated to @scheme[find-library-collection-paths].} diff --git a/collects/scribblings/inside/memory.scrbl b/collects/scribblings/inside/memory.scrbl index 086d65b676..d9253d1297 100644 --- a/collects/scribblings/inside/memory.scrbl +++ b/collects/scribblings/inside/memory.scrbl @@ -85,12 +85,11 @@ times). With conservative collection, no registration is needed for the global or static variables of an embedding program, unless it calls -@cppi{scheme_set_stack_base} with a non-zero second argument. (Under -Mac OS X or with 3m, @cpp{scheme_set_stack_base} must be called -always.) In that case, global and static variables containing -collectable pointers must be registered with -@cppi{scheme_register_static}. The @cppi{MZ_REGISTER_STATIC} macro -takes any variable name and registers it with +@cpp{scheme_setup} or @cppi{scheme_set_stack_base} with a non-zero +first or second (respectively) argument. In that case, global and +static variables containing collectable pointers must be registered +with @cppi{scheme_register_static}. The @cppi{MZ_REGISTER_STATIC} +macro takes any variable name and registers it with @cppi{scheme_register_static}. The @cppi{scheme_register_static} function can be safely called even when it's not needed, but it must not be called multiple times for a single memory address. @@ -141,7 +140,7 @@ Pointers are registered in three different ways: A pointer must never refer to the interior of an allocated object (when a garbage collection is possible), unless the object was -allocated with {@cppi{scheme_malloc_allow_interior}}. For this reason, +allocated with @cppi{scheme_malloc_allow_interior}. For this reason, pointer arithmetic must usually be avoided, unless the variable holding the generated pointer is @cpp{NULL}ed before a collection. @@ -313,7 +312,8 @@ can be supplied as well: In general, the only constraint on the second argument to @cppi{MZ_GC_VAR_IN_REG} or @cppi{MZ_GC_ARRAY_VAR_IN_REG} is that -@cpp{&} must produce the relevant address. +@cpp{&} must produce the relevant address, and that address must be on +the stack. Pointer information is not actually registered with the collector until the @cppi{MZ_GC_REG} macro is used. The @cppi{MZ_GC_UNREG} macro @@ -685,6 +685,32 @@ Registers an extension's global variable that can contain Scheme collector would otherwise treat as atomic. A garbage collection can occur during the registration.} + +@function[(int scheme_setup + [int no_auto_statics] + [Scheme_Main main] + [int argc] + [char** argv])]{ + +Initializes the GC stack base, creates the initial namespace by +calling @cpp{scheme_basic_env}, and then calls @var{main} with the +namespace, @var{argc}, and @var{argv}. (The @var{argc} and @var{argv} +are just passed on to @var{main}, and are not inspected in any way.) + +The @cpp{Scheme_Main} type is defined as follows: + +@verbatim[#:indent 4]{ +typedef int (*Scheme_Main)(Scheme_Env *env, + int argc, char **argv); +} + +The result of @var{main} is the result of @cpp{scheme_setup}. + +If @var{no_auto_statics} is non-zero, then static variables must be +explicitly registered with the garbage collector; see +@secref["im:memoryalloc"] for more information.} + + @function[(void scheme_set_stack_base [void* stack_addr] [int no_auto_statics])]{ @@ -697,7 +723,8 @@ Overrides the GC's auto-determined stack base, and/or disables the should be called only once, and before any other @cpp{scheme_} function is called. It never triggers a garbage collection. -The following example shows a typical use for setting the stack base: +The following example shows a typical use for setting the stack base +for CGC: @verbatim[#:indent 4]{ int main(int argc, char **argv) { @@ -705,7 +732,14 @@ The following example shows a typical use for setting the stack base: scheme_set_stack_base(&dummy, 0); real_main(argc, argv); /* calls scheme_basic_env(), etc. */ } -}} +} + +Under 3m, the above code does not quite work, because @var{stack_addr} +must be the beginning or end of a local-frame registration. Worse, in +CGC or 3m, if @cpp{real_main} is declared @cpp{static}, the compiler +may inline it and place variables containing collectable values deeper +in the stack than @cpp{dummy}. To avoid these problems, use +@cpp{scheme_setup}, instead.} @function[(void scheme_set_stack_bounds [void* stack_addr] diff --git a/collects/scribblings/inside/misc.scrbl b/collects/scribblings/inside/misc.scrbl index f8741e63d9..e5cc0f6c85 100644 --- a/collects/scribblings/inside/misc.scrbl +++ b/collects/scribblings/inside/misc.scrbl @@ -134,6 +134,19 @@ Returns the contents of the given box.} Sets the contents of the given box.} +@function[(Scheme_Object* scheme_dynamic_require + [int argc] + [Scheme_Object** argv])]{ + +The same as @scheme[dynamic-require]. The @var{argc} argument must be +@scheme[2], and @var{argv} contains the arguments.} + +@function[(Scheme_Object* scheme_namespace_require + [Scheme_Object* prim_req_spec])]{ + +The same as @scheme[namespace-require].} + + @function[(Scheme_Object* scheme_load [char* file])]{ diff --git a/collects/scribblings/inside/namespaces.scrbl b/collects/scribblings/inside/namespaces.scrbl index b21de253e6..b1ab68d1ea 100644 --- a/collects/scribblings/inside/namespaces.scrbl +++ b/collects/scribblings/inside/namespaces.scrbl @@ -11,9 +11,10 @@ and syntax. The @cpp{scheme_basic_env} function must be called once by an embedding program, before any other PLT Scheme function is called -(except @cpp{scheme_make_param}). The returned namespace is the -initial current namespace for the main Scheme thread. Scheme -extensions cannot call @cpp{scheme_basic_env}. +(except @cpp{scheme_make_param}), but @cpp{scheme_setup} automatically +calls @cpp{scheme_basic_env}. The returned namespace is the initial +current namespace for the main Scheme thread. Scheme extensions cannot +call @cpp{scheme_basic_env}. The current thread's current namespace is available from @cppi{scheme_get_env}, given the current parameterization (see diff --git a/collects/scribblings/inside/overview.scrbl b/collects/scribblings/inside/overview.scrbl index baf581d3e7..831abbd2f1 100644 --- a/collects/scribblings/inside/overview.scrbl +++ b/collects/scribblings/inside/overview.scrbl @@ -296,13 +296,33 @@ To embed PLT Scheme CGC in a program, follow these steps: installing from source also places this file in the installation's @filepath{include} directory.} - @item{In your main program, obtain a global MzScheme environment - @cpp{Scheme_Env*} by calling @cppi{scheme_basic_env}. This function - must be called before any other function in the MzScheme library - (except @cpp{scheme_make_param}).} + @item{Start your main program through the @cpp{scheme_setup} + trampoline, and put all uses of MzScheme functions inside the + function passed to @cpp{scheme_setup}. The @cpp{scheme_setup} + function registers the current C stack location with the memory + manager. It also creates the initial namespace @cpp{Scheme_Env*} by + calling @cppi{scheme_basic_env} and passing the result to the + function provided to @cpp{scheme_setup}.} - @item{Access MzScheme through @cppi{scheme_load}, - @cppi{scheme_eval}, and/or other top-level MzScheme functions + @item{Configure the namespace by adding module declarations. The + initial namespace contains declarations only for a few primitive + modules, such as @scheme['#%kernel], and no bindings are imported + into the top-level environment. + + To embed a module like @schememodname[scheme/base] (along with all + its dependencies), use @exec{mzc --c-mods}, which generates a C file + that contains modules in bytecode form as encapsulated in a static + array. The generated C file defines a @cppi{declare_modules} + function that takes a @cpp{Scheme_Env*}, installs the modules into + the environment, and adjusts the module name resolver to access the + embedded declarations. + + Alternately, use @cpp{scheme_set_collects_path} and + @cpp{scheme_init_collection_paths} to configure and install a path + for finding modules at run time.} + + @item{Access Scheme through @cppi{scheme_dynamic_require}, + @cppi{scheme_load}, @cppi{scheme_eval}, and/or other functions described in this manual.} @item{Compile the program and link it with the MzScheme libraries.} @@ -320,21 +340,29 @@ specific to Mac OS X and Windows). For example, the following is a simple embedding program which evaluates all expressions provided on the command line and displays the results, then runs a @scheme[read]-@scheme[eval]-@scheme[print] -loop: +loop. Run -@verbatim{ +@commandline{mzc --c-mods base.c ++lib scheme/base} + +to generate @filepath{base.c}, which encapsulates @scheme[scheme/base] +and all of its transitive imports (so that they need not be found +separately a run time). + +@verbatim[#:indent 2]{ #include "scheme.h" -int main(int argc, char *argv[]) +#include "base.c" + +static int run(Scheme_Env *e, int argc, char *argv[]) { - Scheme_Env *e; Scheme_Object *curout; int i; mz_jmp_buf * volatile save, fresh; - scheme_set_stack_base(NULL, 1); /* required for OS X, only */ + /* Declare embedded modules in "base.c": */ + declare_modules(e); - e = scheme_basic_env(); + scheme_namespace_require(scheme_intern_symbol("scheme/base")); curout = scheme_get_param(scheme_current_config(), MZCONFIG_OUTPUT_PORT); @@ -346,44 +374,49 @@ int main(int argc, char *argv[]) scheme_current_thread->error_buf = save; return -1; /* There was an error */ } else { - Scheme_Object *v = scheme_eval_string(argv[i], e); + Scheme_Object *v, *a[2]; + v = scheme_eval_string(argv[i], e); scheme_display(v, curout); - scheme_display(scheme_make_character('\n'), curout); + scheme_display(scheme_make_char('\n'), curout); /* read-eval-print loop, uses initial Scheme_Env: */ - scheme_apply(scheme_builtin_value("read-eval-print-loop"), - 0, NULL); + a[0] = scheme_intern_symbol("scheme/base"); + a[1] = scheme_intern_symbol("read-eval-print-loop"); + scheme_apply(scheme_dynamic_require(2, a), 0, NULL); scheme_current_thread->error_buf = save; } } return 0; } + +int main(int argc, char *argv[]) +{ + return scheme_setup(1, run, argc, argv); +} } Under Mac OS X, or under Windows when MzScheme is compiled to a DLL using Cygwin, the garbage collector cannot find static variables -automatically. In that case, @cppi{scheme_set_stack_base} must be -called with a non-zero second argument before calling any -@cpp{scheme_} function. +automatically. In that case, @cppi{scheme_setup} must be called with a +non-zero first argument. Under Windows (for any other build mode), the garbage collector finds static variables in an embedding program by examining all memory pages. This strategy fails if a program contains multiple Windows threads; a page may get unmapped by a thread while the collector is examining the page, causing the collector to crash. To avoid this -problem, call @cpp{scheme_set_stack_base} with a non-zero second -argument before calling any @cpp{scheme_} function. +problem, call @cpp{scheme_setup} with a non-zero first argument. -When an embedding application calls @cpp{scheme_set_stack_base} with a -non-zero second argument, it must register each of its static -variables with @cppi{MZ_REGISTER_STATIC} if the variable can contain a -GCable pointer. For example, if @cpp{e} above is made @cpp{static}, -then @cpp{MZ_REGISTER_STATIC(e)} should be inserted before the call to -@cpp{scheme_basic_env}. +When an embedding application calls @cpp{scheme_setup} with a non-zero +first argument, it must register each of its static variables with +@cppi{MZ_REGISTER_STATIC} if the variable can contain a GCable +pointer. For example, if @cpp{curout} above is made @cpp{static}, then +@cpp{MZ_REGISTER_STATIC(curout)} should be inserted before the call to +@cpp{scheme_get_param}. When building an embedded MzSchemeCGC to use SenoraGC (SGC) instead of -the default collector, @cpp{scheme_set_stack_base} must be called both -with a non-zero second argument and with a stack-base pointer in the -first argument. See @secref["im:memoryalloc"] for more information. +the default collector, @cpp{scheme_setup} must be called with a +non-zero first argument. See @secref["im:memoryalloc"] for more +information. @subsection{3m Embedding} @@ -421,44 +454,41 @@ In addition, some library details are different: } -For MzScheme3m, an embedding application must call -@cpp{scheme_set_stack_base} with non-zero arguments. Furthermore, the -first argument must be @cpp{&__gc_var_stack__}, where -@cpp{__gc_var_stack__} is bound by a @cpp{MZ_GC_DECL_REG}. +For MzScheme3m, an embedding application must call @cpp{scheme_setup} +with a non-zero first argument. The simple embedding program from the previous section can be -extended to work with either CGC or 3m, dependong on whether -@cpp{MZ_PRECISE_GC} is specified on the compiler's command line: +processed by @exec{mzc --xform}, then compiled and linked with +MzScheme3m. Alternately, the source code can be extended to work with +either CGC or 3m depending on whether @cpp{MZ_PRECISE_GC} is defined +on the compiler's command line: -@verbatim{ +@verbatim[#:indent 2]{ #include "scheme.h" -int main(int argc, char *argv[]) +#include "base.c" + +static int run(Scheme_Env *e, int argc, char *argv[]) { - Scheme_Env *e = NULL; - Scheme_Object *curout = NULL, *v = NULL; + Scheme_Object *curout = NULL, *v = NULL, *a[2] = {NULL, NULL}; Scheme_Config *config = NULL; int i; mz_jmp_buf * volatile save = NULL, fresh; - MZ_GC_DECL_REG(5); + MZ_GC_DECL_REG(8); MZ_GC_VAR_IN_REG(0, e); MZ_GC_VAR_IN_REG(1, curout); MZ_GC_VAR_IN_REG(2, save); MZ_GC_VAR_IN_REG(3, config); MZ_GC_VAR_IN_REG(4, v); - -# ifdef MZ_PRECISE_GC -# define STACK_BASE &__gc_var_stack__ -# else -# define STACK_BASE NULL -# endif - - scheme_set_stack_base(STACK_BASE, 1); + MZ_GC_ARRAY_VAR_IN_REG(5, a, 2); MZ_GC_REG(); - e = scheme_basic_env(); + declare_modules(e); + + v = scheme_intern_symbol("scheme/base"); + scheme_namespace_require(v); config = scheme_current_config(); curout = scheme_get_param(config, MZCONFIG_OUTPUT_PORT); @@ -472,10 +502,12 @@ int main(int argc, char *argv[]) } else { v = scheme_eval_string(argv[i], e); scheme_display(v, curout); - v = scheme_make_character('\n'); + v = scheme_make_char('\n'); scheme_display(v, curout); /* read-eval-print loop, uses initial Scheme_Env: */ - v = scheme_builtin_value("read-eval-print-loop"); + a[0] = scheme_intern_symbol("scheme/base"); + a[1] = scheme_intern_symbol("read-eval-print-loop"); + v = scheme_dynamic_require(2, a); scheme_apply(v, 0, NULL); scheme_current_thread->error_buf = save; } @@ -485,15 +517,18 @@ int main(int argc, char *argv[]) return 0; } + +int main(int argc, char *argv[]) +{ + return scheme_setup(1, run, argc, argv); +} } -Strictly speaking, the @cpp{config} and @cpp{v} variables above need not be -registered with the garbage collector, since their values are not needed -across function calls that allocate. That is, the original example could have -been left alone starting with the @cpp{scheme_base_env} call, except for the -addition of @cpp{MZ_GC_UNREG}. The code is much easier to maintain, however, -when all local variables are regsistered and when all temporary values are -put into variables. +Strictly speaking, the @cpp{config} and @cpp{v} variables above need +not be registered with the garbage collector, since their values are +not needed across function calls that allocate. The code is much +easier to maintain, however, when all local variables are registered +and when all temporary values are put into variables. @; ---------------------------------------------------------------------- diff --git a/collects/scribblings/mzc/exe-api.scrbl b/collects/scribblings/mzc/exe-api.scrbl index 808efe58fd..b899484297 100644 --- a/collects/scribblings/mzc/exe-api.scrbl +++ b/collects/scribblings/mzc/exe-api.scrbl @@ -51,7 +51,12 @@ parameter is true. null] [#:literal-expression literal-sexp any/c - null] + #f] + [#:literal-expressions literal-sexps + list? + (if literal-sexp + (list literal-sexp) + null)] [#:cmdline cmdline (listof string?) null] [#:mred? mred? any/c #f] @@ -99,17 +104,20 @@ namespace except as specified in @scheme[mod-list], other modules generated prefix, so that they are not directly accessible. The @scheme[#:modules] argument @scheme[mod-list] designates modules -to be embedded, as described below. The @scheme[literal-files] and -@scheme[literal-sexp] arguments specify literal code to be copied into -the executable: the content of each file in @scheme[literal-files] -is copied in order (with no intervening space), followed by -@scheme[literal-sexp]. The @scheme[literal-files] files or -@scheme[literal-sexp] can contain compiled bytecode, and it's possible -that the content of the @scheme[literal-files] files only parse -when concatenated; the files and expression are not compiled or -inspected in any way during the embedding process. If +to be embedded, as described below. The @scheme[#:literal-files] and +@scheme[#:literal-expressions] arguments specify literal code to be +copied into the executable: the content of each file in +@scheme[literal-files] is copied in order (with no intervening space), +followed by each element of @scheme[literal-sexps]. The +@scheme[literal-files] files or @scheme[literal-sexps] list can +contain compiled bytecode, and it's possible that the content of the +@scheme[literal-files] files only parse when concatenated; the files +and expression are not compiled or inspected in any way during the +embedding process. Beware that the initial namespace contains no +bindings; use compiled expressions to bootstrap the namespace. If @scheme[literal-sexp] is @scheme[#f], no literal expression is -included in the executable. +included in the executable. The @scheme[#:literal-expression] +(singular) argument is for backward compatibility. The @scheme[#:cmdline] argument @scheme[cmdline] contains command-line strings that are prefixed onto any actual command-line arguments that @@ -130,14 +138,14 @@ embeds the module @scheme[m] from the file @filepath{m.ss}, without prefixing the name of the module; the @scheme[literal-sexpr] argument to go with the above might be @scheme['(require m)]. -All modules are compiled before they are embedded into the target -executable; see also @scheme[compile-proc] below. When a module -declares run-time paths via @scheme[define-runtime-path], the -generated executable records the path (for use both by immediate -execution and for creating a distribution that contains the -executable). +Modules are normally compiled before they are embedded into the target +executable; see also @scheme[#:compiler] and @scheme[#:src-filter] +below. When a module declares run-time paths via +@scheme[define-runtime-path], the generated executable records the +path (for use both by immediate execution and for creating a +distribution that contains the executable). -The optional @scheme[aux] argument is an association list for +The optional @scheme[#:aux] argument is an association list for platform-specific options (i.e., it is a list of pairs where the first element of the pair is a key symbol and the second element is the value for that key). The currently supported keys are as follows: diff --git a/collects/scribblings/mzc/exe.scrbl b/collects/scribblings/mzc/exe.scrbl index 341e485653..dbc6be2b1b 100644 --- a/collects/scribblings/mzc/exe.scrbl +++ b/collects/scribblings/mzc/exe.scrbl @@ -3,7 +3,7 @@ "common.ss" (for-label scheme/runtime-path)) -@title{Stand-Alone Executables from Scheme Code} +@title[#:tag "exe"]{Stand-Alone Executables from Scheme Code} The command-line flag @DFlag{exe} directs @|mzc| to embed a module, from source or byte code, into a copy of the MzScheme diff --git a/collects/scribblings/mzc/sa.scrbl b/collects/scribblings/mzc/sa.scrbl index 790e114487..2920210ea7 100644 --- a/collects/scribblings/mzc/sa.scrbl +++ b/collects/scribblings/mzc/sa.scrbl @@ -2,7 +2,7 @@ @(require scribble/manual "common.ss") -@title[#:tag "exe" #:style 'toc]{Creating and Distributing Stand-Alone Executables} +@title[#:tag "sa" #:style 'toc]{Creating and Distributing Stand-Alone Executables} Whether bytecode or native code, the compiled code produced by @|mzc| relies on MzScheme (or MrEd) to provide run-time support to the diff --git a/collects/scribblings/reference/startup.scrbl b/collects/scribblings/reference/startup.scrbl index 6e7d367ad9..3d06195017 100644 --- a/collects/scribblings/reference/startup.scrbl +++ b/collects/scribblings/reference/startup.scrbl @@ -40,7 +40,12 @@ The core PLT Scheme run-time system is available in two main variants: @section[#:tag "init-actions"]{Initialization} On startup, the top-level environment contains no bindings---not even -for function application. +for function application. Primitive modules with names that start with +@schemeidfont{#%} are defined, but they are not meant for direct use, +and the set of such modules can change. For example, the +@indexed-scheme['#%kernel] module is eventually used to bootstrap the +implemetation of @schememodname[scheme/base], and +@scheme['#%mred-kernel] is used for @schememodname[scheme/gui/base]. The first action of MzScheme or MrEd is to initialize @scheme[current-library-collection-paths] to the result of @@ -97,7 +102,7 @@ the exit status is @scheme[0] or determined by a call to @; ---------------------------------------------------------------------- -@section{Command Line} +@section["mz-cmdline"]{Command Line} The MzScheme and MrEd executables recognize the following command-line flags: @@ -142,8 +147,8 @@ flags: @item{@FlagFirst{k} @nonterm{n} @nonterm{m} : Loads code embedded in the executable from file position @nonterm{n} to - @nonterm{m}. This option normally embedded in a stand-alone - binary that embeds Scheme code.} + @nonterm{m}. This option is normally embedded in a stand-alone + binary that also embeds Scheme code.} @item{@FlagFirst{m} or @DFlagFirst{main} : Evaluates a call to @scheme[main] in the top-level environment. All of the diff --git a/collects/tests/mzscheme/embed.ss b/collects/tests/mzscheme/embed.ss index a86b85b7ab..616eb4e9c8 100644 --- a/collects/tests/mzscheme/embed.ss +++ b/collects/tests/mzscheme/embed.ss @@ -86,6 +86,14 @@ expect mred?) (delete-directory/files dist-dir)])) +(define (base-compile e) + (parameterize ([current-namespace (make-base-namespace)]) + (compile e))) +(define (kernel-compile e) + (parameterize ([current-namespace (make-base-empty-namespace)]) + (namespace-require ''#%kernel) + (compile e))) + (define (mz-tests mred?) (define dest (if mred? mr-dest mz-dest)) (define (flags s) @@ -97,7 +105,7 @@ dest mred? #f `((#t (lib ,filename "tests" "mzscheme"))) null - null + #f `(,(flags "l") ,(string-append "tests/mzscheme/" filename))) (try-exe dest expect mred?) @@ -111,9 +119,10 @@ `((,pfx (lib ,filename "tests" "mzscheme")) (#t (lib "scheme/init"))) null - null - `(,(flags "ne") - ,(format "(#%require '~a~a)" + #f + `(,(flags "lne") + "scheme/base" + ,(format "(require '~a~a)" (or pfx "") (regexp-replace #rx"[.].*$" filename "")))) (try-exe dest expect mred?))]) @@ -128,7 +137,8 @@ dest mred? #f `((#t ,path)) null - `(#%require (file ,(path->string path))) + (base-compile + `(namespace-require '(file ,(path->string path)))) `(,(flags "")))) (try-exe dest expect mred?) @@ -140,7 +150,8 @@ dest mred? #f `((#t (file ,(path->string path)))) null - `(#%require (file ,(path->string path))) + (base-compile + `(namespace-require '(file ,(path->string path)))) `(,(flags "")))) (try-exe dest expect mred?) @@ -152,7 +163,8 @@ dest mred? #f `((#f ,filename)) null - `(#%require ',(string->symbol (regexp-replace #rx"[.].*$" filename ""))) + (base-compile + `(namespace-require '',(string->symbol (regexp-replace #rx"[.].*$" filename "")))) `(,(flags "")))) (try-exe dest expect mred?) @@ -164,23 +176,33 @@ `((#t (lib ,filename "tests" "mzscheme")) (#t (lib "embed-me3.ss" "tests" "mzscheme"))) null - `(begin - (#%require (lib "embed-me3.ss" "tests" "mzscheme")) - (#%require (lib ,filename "tests" "mzscheme"))) + (base-compile + `(begin + (namespace-require '(lib "embed-me3.ss" "tests" "mzscheme")) + (namespace-require '(lib ,filename "tests" "mzscheme")))) `(,(flags ""))) (try-exe dest (string-append "3 is here, too? #t\n" expect) mred?) ;; Try a literal file (printf ">>>literal\n") (prepare dest filename) - (make-embedding-executable - dest mred? #f - `((#t (lib ,filename "tests" "mzscheme"))) - (list (build-path (collection-path "tests" "mzscheme") "embed-me4.ss")) - `(with-output-to-file "stdout" - (lambda () (display "... and more!\n")) - 'append) - `(,(flags "l") ,(string-append "tests/mzscheme/" filename))) + (let ([tmp (make-temporary-file)]) + (with-output-to-file tmp + #:exists 'truncate + (lambda () + (write (kernel-compile + '(namespace-require ''#%kernel))))) + (make-embedding-executable + dest mred? #f + `((#t (lib ,filename "tests" "mzscheme"))) + (list + tmp + (build-path (collection-path "tests" "mzscheme") "embed-me4.ss")) + `(with-output-to-file "stdout" + (lambda () (display "... and more!\n")) + 'append) + `(,(flags "l") ,(string-append "tests/mzscheme/" filename))) + (delete-file tmp)) (try-exe dest (string-append "This is the literal expression 4.\n" "... and more!\n" @@ -196,13 +218,14 @@ dest mred? #f '((#t scheme/base)) null - `(begin - (#%require scheme/base) - (define (out s) - (with-output-to-file "stdout" - (lambda () (printf s)) - #:exists 'append)) - (out "\uA9, \u7238, and \U1D670\n")) + (base-compile + '(begin + (require scheme/base) + (eval '(define (out s) + (with-output-to-file "stdout" + (lambda () (printf s)) + #:exists 'append))) + (out "\uA9, \u7238, and \U1D670\n"))) `(,(flags "ne") "(out \"\u7237...\U1D671\n\")")) (try-exe dest "\uA9, \u7238, and \U1D670\n\u7237...\U1D671\n" mred?)) @@ -215,7 +238,7 @@ mr-dest #t #f `((#t (lib "embed-me5.ss" "tests" "mzscheme"))) null - null + #f `("-l" "tests/mzscheme/embed-me5.ss")) (try-exe mr-dest "This is 5: #\n" #t)) @@ -278,10 +301,8 @@ (void))) -#| REMOVEME (mzc-tests #f) (mzc-tests #t) -|# (require dynext/file) (define (extension-test mred?) diff --git a/collects/tests/r6rs/test.ss b/collects/tests/r6rs/test.ss index c8b0cdbc7a..9bd23b5899 100644 --- a/collects/tests/r6rs/test.ss +++ b/collects/tests/r6rs/test.ss @@ -88,11 +88,17 @@ (define (capture-output thunk) (if (file-exists? "tmp-catch-out") (delete-file "tmp-catch-out")) - (with-output-to-file "tmp-catch-out" - thunk) - (call-with-input-file "tmp-catch-out" - (lambda (p) - (get-string-n p 1024)))) + (dynamic-wind + (lambda () 'nothing) + (lambda () + (with-output-to-file "tmp-catch-out" + thunk) + (call-with-input-file "tmp-catch-out" + (lambda (p) + (get-string-n p 1024)))) + (lambda () + (if (file-exists? "tmp-catch-out") + (delete-file "tmp-catch-out"))))) (define (check-test expr got expected) (set! checked (+ 1 checked)) diff --git a/src/configure b/src/configure index 0c09434290..0a078eaa4e 100755 --- a/src/configure +++ b/src/configure @@ -1360,7 +1360,7 @@ Optional Features: --enable-gprof compile for profiling with gprof (gcc only) --enable-gcov compile to gather gcov statistics (gcc3 only) --enable-noopt drop -O C flags - --enable-sdk= use Mac OS X SDK directory + --enable-sdk= use Mac OS X 10.4 SDK directory --enable-xonx compile X11 (not Quartz) MrEd for Mac OS X --enable-libfw install Mac OS X frameworks to /Library/Frameworks --enable-userfw install Mac OS X frameworks to ~/Library/Frameworks @@ -5849,10 +5849,8 @@ case $OS in Darwin) if test "${enable_sdk}" != "" ; then - PREFLAGS="$PREFLAGS -I${enable_sdk}/usr/include" - PREFLAGS="$PREFLAGS -F${enable_sdk}/System/Library/Frameworks/" - LDFLAGS="$LDFLAGS -L${enable_sdk}/usr/lib" - LDFLAGS="$LDFLAGS -F${enable_sdk}/System/Library/Frameworks/" + PREFLAGS="$PREFLAGS -isysroot ${enable_sdk} -mmacosx-version-min=10.4 -DEXTRA_EXCEPTION_STUBS" + LDFLAGS="$LDFLAGS -isysroot ${enable_sdk} -mmacosx-version-min=10.4" fi PREFLAGS="$PREFLAGS -DOS_X -D_DARWIN_UNLIMITED_SELECT" diff --git a/src/mred/Makefile.in b/src/mred/Makefile.in index 1381d6082b..8ee1ab36e5 100644 --- a/src/mred/Makefile.in +++ b/src/mred/Makefile.in @@ -134,7 +134,7 @@ $(MRFW) : $(MZSCHEMEDEPS) $(MREDOBJECTS) $(@WXLIBS@) $(MRSTATIC_STUB) $(MRFWRES) $(MREDLINKER) $(MREDLDFLAGS) -dynamiclib -o $(MRFW) -Wl,-headerpad_max_install_names ../mzscheme/libmzscheme.@LIBSFX@ ../mzscheme/libmzgc.@LIBSFX@ $(@WXLIBS@) $(GUILIBS_@WXVARIANT@) @X_EXTRA_LIBS@ MrEd@CGC@.app/Contents/MacOS/MrEd@CGC@: $(MRFWRES) $(MRFW) mrmain.@LTO@ - $(MREDLINKER) -o MrEd@CGC@.app/Contents/MacOS/MrEd@CGC@ mrmain.@LTO@ -Wl,-headerpad_max_install_names -F. -framework PLT_MrEd -framework Carbon -framework Cocoa @PROFFLAGS@ + $(MREDLINKER) $(MREDLDFLAGS) -o MrEd@CGC@.app/Contents/MacOS/MrEd@CGC@ mrmain.@LTO@ -Wl,-headerpad_max_install_names -F. -framework PLT_MrEd -framework Carbon -framework Cocoa @PROFFLAGS@ /usr/bin/install_name_tool -change "PLT_MrEd.framework/Versions/$(FWVERSION)/PLT_MrEd" "@executable_path/../../../PLT_MrEd.framework/Versions/$(FWVERSION)/PLT_MrEd" MrEd@CGC@.app/Contents/MacOS/MrEd@CGC@ $(MRFWRES): $(srcdir)/../mac/osx_appl.ss $(srcdir)/../mac/cw/MrEd.r diff --git a/src/mred/gc2/Makefile.in b/src/mred/gc2/Makefile.in index adc2455386..c453604e6f 100644 --- a/src/mred/gc2/Makefile.in +++ b/src/mred/gc2/Makefile.in @@ -1372,7 +1372,7 @@ MRFW = PLT_MrEd.framework/Versions/$(FWVERSION)_3m/PLT_MrEd MRFWRES = PLT_MrEd.framework/Versions/$(FWVERSION)_3m/Resources/PLT_MrEd.rsrc ../MrEd@MMM@.app/Contents/MacOS/MrEd@MMM@: $(MRFWRES) $(MRFW) mrmain.@LTO@ - $(MREDLINKER) -o ../MrEd@MMM@.app/Contents/MacOS/MrEd@MMM@ mrmain.@LTO@ -Wl,-headerpad_max_install_names -F. -framework PLT_MrEd -framework Carbon -framework Cocoa + $(MREDLINKER) $(LDFLAGS) -o ../MrEd@MMM@.app/Contents/MacOS/MrEd@MMM@ mrmain.@LTO@ -Wl,-headerpad_max_install_names -F. -framework PLT_MrEd -framework Carbon -framework Cocoa mkdir -p "../PLT_MrEd.framework/Versions/$(FWVERSION)_3m" cp "$(MRFW)" "../$(MRFW)" rm -rf "../PLT_MrEd.framework/Versions/$(FWVERSION)_3m/Resources" @@ -1380,7 +1380,7 @@ MRFWRES = PLT_MrEd.framework/Versions/$(FWVERSION)_3m/Resources/PLT_MrEd.rsrc /usr/bin/install_name_tool -change "PLT_MrEd.framework/Versions/$(FWVERSION)_3m/PLT_MrEd" "@executable_path/../../../PLT_MrEd.framework/Versions/$(FWVERSION)_3m/PLT_MrEd" "../MrEd@MMM@.app/Contents/MacOS/MrEd@MMM@" $(MRFW) : $(XOBJS) $(@WXVARIANT@_PLAIN_OBJS) ../../mzscheme/libmzscheme3m.@LIBSFX@ wx_font.o $(MRFWRES) - $(MREDLINKER) -dynamiclib -o $(MRFW) -Wl,-headerpad_max_install_names $(XOBJS) $(@WXVARIANT@_PLAIN_OBJS) ../../mzscheme/libmzscheme3m.@LIBSFX@ $(@WXVARIANT@_LIBS) @X_EXTRA_LIBS@ wx_font.o + $(MREDLINKER) $(LDFLAGS) -dynamiclib -o $(MRFW) -Wl,-headerpad_max_install_names $(XOBJS) $(@WXVARIANT@_PLAIN_OBJS) ../../mzscheme/libmzscheme3m.@LIBSFX@ $(@WXVARIANT@_LIBS) @X_EXTRA_LIBS@ wx_font.o $(MRFWRES): $(srcdir)/../../mac/osx_appl.ss $(srcdir)/../../mac/cw/MrEd.r rm -rf PLT_MrEd.framework/Resources PLT_MrEd.framework/PLT_MrEd diff --git a/src/mzscheme/Makefile.in b/src/mzscheme/Makefile.in index 4cef59080a..4cd06701f0 100644 --- a/src/mzscheme/Makefile.in +++ b/src/mzscheme/Makefile.in @@ -139,12 +139,12 @@ MZFW = PLT_MzScheme.framework/Versions/$(FWVERSION)/PLT_MzScheme $(MZFW): libmzscheme.@LIBSFX@ libmzgc.@LIBSFX@ $(SPECIALIZINGOBJECTS) mkdir -p PLT_MzScheme.framework/Versions/$(FWVERSION) - @MZLINKER@ -o $(MZFW) -framework CoreFoundation -dynamiclib -all_load $(SPECIALIZINGOBJECTS) libmzscheme.@LIBSFX@ libmzgc.@LIBSFX@ @LDFLAGS@ @LIBS@ + @MZLINKER@ -o $(MZFW) @LDFLAGS@ -framework CoreFoundation -dynamiclib -all_load $(SPECIALIZINGOBJECTS) libmzscheme.@LIBSFX@ libmzgc.@LIBSFX@ @LIBS@ rm -f PLT_MzScheme.framework/PLT_MzScheme ln -s Versions/$(FWVERSION)/PLT_MzScheme PLT_MzScheme.framework/PLT_MzScheme mzscheme@CGC@@OSX@: $(MZFW) main.@LTO@ - @MZLINKER@ -o mzscheme@CGC@ @PROFFLAGS@ main.@LTO@ -Wl,-headerpad_max_install_names -F. -framework PLT_MzScheme + @MZLINKER@ -o mzscheme@CGC@ @PROFFLAGS@ @LDFLAGS@ main.@LTO@ -Wl,-headerpad_max_install_names -F. -framework PLT_MzScheme @LIBS@ /usr/bin/install_name_tool -change "PLT_MzScheme.framework/Versions/$(FWVERSION)/PLT_MzScheme" "@executable_path/PLT_MzScheme.framework/Versions/$(FWVERSION)/PLT_MzScheme" "mzscheme@CGC@" # OSKit ---------------------------------------- diff --git a/src/mzscheme/cmdline.inc b/src/mzscheme/cmdline.inc index a8036a941f..659dfd09f1 100644 --- a/src/mzscheme/cmdline.inc +++ b/src/mzscheme/cmdline.inc @@ -262,13 +262,14 @@ static int finish_cmd_line_run(FinishArgs *fa, Repl_Proc repl) if (fa->eval_kind[i] == mzcmd_EVAL) { scheme_eval_string_all_with_prompt(fa->evals_and_loads[i], fa->global_env, 2); } else if (fa->eval_kind[i] == mzcmd_EMBEDDED) { - Scheme_Object *s, *e, *a[2], *eload; + Scheme_Object *s, *e, *a[3], *eload; eload = scheme_builtin_value("embedded-load"); s = scheme_make_utf8_string(fa->evals_and_loads[i]); e = scheme_make_utf8_string(fa->evals_and_loads[i] + strlen(fa->evals_and_loads[i]) + 1); a[0] = s; a[1] = e; - scheme_apply(eload, 2, a); + a[2] = scheme_make_false(); + scheme_apply(eload, 3, a); } else { Scheme_Object *a[1], *nsreq; nsreq = scheme_builtin_value("namespace-require"); @@ -428,30 +429,6 @@ static int finish_cmd_line_run(FinishArgs *fa, Repl_Proc repl) return exit_val; } -#ifndef NO_FILE_SYSTEM_UTILS -static void init_collection_paths(Scheme_Env *global_env, Scheme_Object *extra_dirs) -{ - mz_jmp_buf * volatile save, newbuf; - Scheme_Thread * volatile p; - p = scheme_get_current_thread(); - save = p->error_buf; - p->error_buf = &newbuf; - if (!scheme_setjmp(newbuf)) { - Scheme_Object *clcp, *flcp, *a[1]; - - clcp = scheme_builtin_value("current-library-collection-paths"); - flcp = scheme_builtin_value("find-library-collection-paths"); - - if (clcp && flcp) { - a[0] = extra_dirs; - a[0] = _scheme_apply(flcp, 1, a); - _scheme_apply(clcp, 1, a); - } - } - p->error_buf = save; -} -#endif - #ifdef USE_OSKIT_CONSOLE /* Hack to disable normal input mode: */ int osk_not_console = 0; @@ -1058,7 +1035,7 @@ static int run_from_cmd_line(int argc, char *_argv[], l = SCHEME_CDR(l); } - init_collection_paths(global_env, r); + scheme_init_collection_paths(global_env, r); } #endif /* NO_FILE_SYSTEM_UTILS */ diff --git a/src/mzscheme/configure.ac b/src/mzscheme/configure.ac index b0d3c35a46..46a479ac4f 100644 --- a/src/mzscheme/configure.ac +++ b/src/mzscheme/configure.ac @@ -66,7 +66,7 @@ AC_ARG_ENABLE(gcov, [ --enable-gcov compile to gather gcov statist AC_ARG_ENABLE(noopt, [ --enable-noopt drop -O C flags]) -AC_ARG_ENABLE(noopt, [ --enable-sdk= use Mac OS X SDK directory]) +AC_ARG_ENABLE(noopt, [ --enable-sdk= use Mac OS X 10.4 SDK directory]) AC_ARG_ENABLE(xonx, [ --enable-xonx compile X11 (not Quartz) MrEd for Mac OS X]) AC_ARG_ENABLE(libfw, [ --enable-libfw install Mac OS X frameworks to /Library/Frameworks]) @@ -591,10 +591,8 @@ case $OS in Darwin) if test "${enable_sdk}" != "" ; then - PREFLAGS="$PREFLAGS -I${enable_sdk}/usr/include" - PREFLAGS="$PREFLAGS -F${enable_sdk}/System/Library/Frameworks/" - LDFLAGS="$LDFLAGS -L${enable_sdk}/usr/lib" - LDFLAGS="$LDFLAGS -F${enable_sdk}/System/Library/Frameworks/" + PREFLAGS="$PREFLAGS -isysroot ${enable_sdk} -mmacosx-version-min=10.4 -DEXTRA_EXCEPTION_STUBS" + LDFLAGS="$LDFLAGS -isysroot ${enable_sdk} -mmacosx-version-min=10.4" fi PREFLAGS="$PREFLAGS -DOS_X -D_DARWIN_UNLIMITED_SELECT" diff --git a/src/mzscheme/gc2/Makefile.in b/src/mzscheme/gc2/Makefile.in index aec2534fcd..9f3cd80bad 100644 --- a/src/mzscheme/gc2/Makefile.in +++ b/src/mzscheme/gc2/Makefile.in @@ -340,7 +340,7 @@ $(MZFWMMM): ../libmzscheme3m.@LIBSFX@ ln -s Versions/$(FWVERSION)_3m/PLT_MzScheme PLT_MzScheme.framework/PLT_MzScheme ../mzscheme@MMM@@OSX@: $(MZFWMMM) main.@LTO@ - @MZLINKER@ -o ../mzscheme@MMM@ @PROFFLAGS@ main.@LTO@ -Wl,-headerpad_max_install_names -F. -framework PLT_MzScheme + @MZLINKER@ -o ../mzscheme@MMM@ @PROFFLAGS@ @LDFLAGS@ main.@LTO@ -Wl,-headerpad_max_install_names -F. -framework PLT_MzScheme mkdir -p "../PLT_MzScheme.framework/Versions/$(FWVERSION)_3m" cp "PLT_MzScheme.framework/Versions/$(FWVERSION)_3m/PLT_MzScheme" "../PLT_MzScheme.framework/Versions/$(FWVERSION)_3m/PLT_MzScheme" /usr/bin/install_name_tool -change "PLT_MzScheme.framework/Versions/$(FWVERSION)_3m/PLT_MzScheme" "@executable_path/PLT_MzScheme.framework/Versions/$(FWVERSION)_3m/PLT_MzScheme" "../mzscheme@MMM@" diff --git a/src/mzscheme/include/mzscheme.exp b/src/mzscheme/include/mzscheme.exp index 72262feab4..463f50c863 100644 --- a/src/mzscheme/include/mzscheme.exp +++ b/src/mzscheme/include/mzscheme.exp @@ -128,6 +128,7 @@ scheme_eval_string_all scheme_eval_string_with_prompt scheme_eval_string_multi_with_prompt scheme_eval_string_all_with_prompt +scheme_eval_module_string _scheme_apply_known_prim_closure _scheme_apply_known_prim_closure_multi _scheme_apply_prim_closure diff --git a/src/mzscheme/include/mzscheme3m.exp b/src/mzscheme/include/mzscheme3m.exp index 54dc68f284..f4c66b67f2 100644 --- a/src/mzscheme/include/mzscheme3m.exp +++ b/src/mzscheme/include/mzscheme3m.exp @@ -128,6 +128,7 @@ scheme_eval_string_all scheme_eval_string_with_prompt scheme_eval_string_multi_with_prompt scheme_eval_string_all_with_prompt +scheme_eval_module_string _scheme_apply_known_prim_closure _scheme_apply_known_prim_closure_multi _scheme_apply_prim_closure diff --git a/src/mzscheme/include/mzwin.def b/src/mzscheme/include/mzwin.def index b2afb08f34..428cfe110e 100644 --- a/src/mzscheme/include/mzwin.def +++ b/src/mzscheme/include/mzwin.def @@ -126,6 +126,7 @@ EXPORTS scheme_eval_string_with_prompt scheme_eval_string_multi_with_prompt scheme_eval_string_all_with_prompt + scheme_eval_module_string scheme_call_with_prompt scheme_call_with_prompt_multi scheme_values diff --git a/src/mzscheme/include/mzwin3m.def b/src/mzscheme/include/mzwin3m.def index e709d3be0d..caafcadb21 100644 --- a/src/mzscheme/include/mzwin3m.def +++ b/src/mzscheme/include/mzwin3m.def @@ -126,6 +126,7 @@ EXPORTS scheme_eval_string_with_prompt scheme_eval_string_multi_with_prompt scheme_eval_string_all_with_prompt + scheme_eval_module_string scheme_call_with_prompt scheme_call_with_prompt_multi scheme_values diff --git a/src/mzscheme/include/scheme.h b/src/mzscheme/include/scheme.h index f2a19e8be6..061083ec4a 100644 --- a/src/mzscheme/include/scheme.h +++ b/src/mzscheme/include/scheme.h @@ -1665,6 +1665,8 @@ MZ_EXTERN Scheme_Object *scheme_set_run_cmd(char *s); MZ_EXTERN void scheme_set_collects_path(Scheme_Object *p); MZ_EXTERN void scheme_set_original_dir(Scheme_Object *d); +MZ_EXTERN void scheme_init_collection_paths(Scheme_Env *global_env, Scheme_Object *extra_dirs); + /* Initialization */ MZ_EXTERN Scheme_Env *scheme_basic_env(void); MZ_EXTERN void scheme_reset_overflow(void); @@ -1686,6 +1688,11 @@ MZ_EXTERN void scheme_set_actual_main(int (*m)(int argc, char **argv)); MZ_EXTERN void scheme_set_stack_base(void *base, int no_auto_statics); MZ_EXTERN void scheme_set_stack_bounds(void *base, void *deepest, int no_auto_statics); +/* More automatic start-up: */ +typedef int (*Scheme_Main)(Scheme_Env *env, int argc, char **argv); +MZ_EXTERN int scheme_setup(int no_auto_statics, Scheme_Main _main, int argc, char **argv); + + MZ_EXTERN void scheme_register_static(void *ptr, long size); #if defined(MUST_REGISTER_GLOBALS) || defined(GC_MIGHT_USE_REGISTERED_STATICS) # define MZ_REGISTER_STATIC(x) scheme_register_static((void *)&x, sizeof(x)) diff --git a/src/mzscheme/main.c b/src/mzscheme/main.c index 443bd75bad..dad5ba3c2f 100644 --- a/src/mzscheme/main.c +++ b/src/mzscheme/main.c @@ -323,8 +323,12 @@ static void do_scheme_rep(Scheme_Env *env) { /* enter read-eval-print loop */ { - Scheme_Object *rep; - rep = scheme_builtin_value("read-eval-print-loop"); + Scheme_Object *rep, *a[2]; + + a[0] = scheme_intern_symbol("scheme/base"); + a[1] = scheme_intern_symbol("read-eval-print-loop"); + rep = scheme_dynamic_require(2, a); + if (rep) { scheme_apply(rep, 0, NULL); printf("\n"); diff --git a/src/mzscheme/src/builtin.c b/src/mzscheme/src/builtin.c index 16c4ad6a4f..e6d24dd256 100644 --- a/src/mzscheme/src/builtin.c +++ b/src/mzscheme/src/builtin.c @@ -64,7 +64,7 @@ Scheme_Object *scheme_eval_compiled_sized_string(const char *str, int len, Schem void scheme_add_embedded_builtins(Scheme_Env *env) { -#define EVAL_ONE_STR(str) scheme_eval_string(str, env) +#define EVAL_ONE_STR(str) scheme_eval_module_string(str, env) #define EVAL_ONE_SIZED_STR(str, len) scheme_eval_compiled_sized_string(str, len, env) #if USE_COMPILED_STARTUP diff --git a/src/mzscheme/src/cstartup.inc b/src/mzscheme/src/cstartup.inc index 460111ad70..00d25d8ffd 100644 --- a/src/mzscheme/src/cstartup.inc +++ b/src/mzscheme/src/cstartup.inc @@ -14,11 +14,11 @@ 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,34,11,8,167,184,94,159,2,16,34,34,159,2,15,34,34,16,20, +115,98,10,34,11,8,191,184,94,159,2,16,34,34,159,2,15,34,34,16,20, 2,3,2,2,2,5,2,2,2,6,2,2,2,7,2,2,2,8,2,2,2, 9,2,2,2,4,2,2,2,10,2,2,2,11,2,2,2,12,2,2,97,35, -11,8,167,184,93,159,2,15,34,35,16,2,2,13,161,2,2,35,2,13,2, -2,2,13,97,10,11,11,8,167,184,16,0,97,10,36,11,8,167,184,16,0, +11,8,191,184,93,159,2,15,34,35,16,2,2,13,161,2,2,35,2,13,2, +2,2,13,97,10,11,11,8,191,184,16,0,97,10,36,11,8,191,184,16,0, 13,16,4,34,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,180,3,23,196,1,249,22,173,3,80,158,37, 34,251,22,73,2,17,248,22,88,23,200,2,12,249,22,63,2,1,248,22,90, @@ -28,14 +28,14 @@ 35,34,35,28,248,22,71,248,22,65,23,195,2,248,22,64,193,249,22,173,3, 80,158,37,34,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,55,50,57,52,16,4,11,11,2,19,3, -1,7,101,110,118,55,50,57,53,27,248,22,65,248,22,180,3,23,197,1,28, +11,11,2,18,3,1,7,101,110,118,55,51,48,52,16,4,11,11,2,19,3, +1,7,101,110,118,55,51,48,53,27,248,22,65,248,22,180,3,23,197,1,28, 248,22,71,23,194,2,20,15,159,35,34,35,28,248,22,71,248,22,65,23,195, 2,248,22,64,193,249,22,173,3,80,158,37,34,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,4,248,22,65,23,205,1,18,100,11,8,31,8,30,8, -29,8,28,8,27,16,4,11,11,2,18,3,1,7,101,110,118,55,50,57,55, -16,4,11,11,2,19,3,1,7,101,110,118,55,50,57,56,248,22,180,3,193, +29,8,28,8,27,16,4,11,11,2,18,3,1,7,101,110,118,55,51,48,55, +16,4,11,11,2,19,3,1,7,101,110,118,55,51,48,56,248,22,180,3,193, 27,248,22,180,3,194,249,22,63,248,22,73,248,22,64,196,248,22,65,195,27, 248,22,65,248,22,180,3,23,197,1,249,22,173,3,80,158,37,34,28,248,22, 51,248,22,174,3,248,22,64,23,198,2,27,249,22,2,32,0,89,162,8,44, @@ -65,8 +65,8 @@ 65,202,251,22,73,2,17,28,249,22,140,8,248,22,174,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,3,248,22,65,23,203,1,99,8,31,8,30,8, -29,8,28,8,27,16,4,11,11,2,18,3,1,7,101,110,118,55,51,50,48, -16,4,11,11,2,19,3,1,7,101,110,118,55,51,50,49,18,158,94,10,64, +29,8,28,8,27,16,4,11,11,2,18,3,1,7,101,110,118,55,51,51,48, +16,4,11,11,2,19,3,1,7,101,110,118,55,51,51,49,18,158,94,10,64, 118,111,105,100,8,47,27,248,22,65,248,22,180,3,196,249,22,173,3,80,158, 37,34,28,248,22,51,248,22,174,3,248,22,64,197,250,22,73,2,26,248,22, 73,248,22,64,199,248,22,88,198,27,248,22,174,3,248,22,64,197,250,22,73, @@ -100,246 +100,246 @@ EVAL_ONE_SIZED_STR((char *)expr, 2046); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,9,51,46,57,57,46,48,46,49,56,61,0,0,0,1,0,0,3,0, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,9,51,46,57,57,46,48,46,49,56,60,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,20,2,77,2,167,3,176,3,217, -3,51,5,155,5,3,6,119,6,133,6,176,6,192,6,42,8,56,8,219,8, -226,9,232,10,239,10,245,10,117,11,130,11,243,11,89,12,102,12,124,12,76, -13,236,13,51,15,59,15,67,15,93,15,195,15,0,0,0,19,0,0,29,11, -11,72,112,97,116,104,45,115,116,114,105,110,103,63,64,98,115,98,115,76,110, -111,114,109,97,108,45,99,97,115,101,45,112,97,116,104,74,45,99,104,101,99, -107,45,114,101,108,112,97,116,104,77,45,99,104,101,99,107,45,99,111,108,108, -101,99,116,105,111,110,75,99,111,108,108,101,99,116,105,111,110,45,112,97,116, -104,69,45,102,105,110,100,45,99,111,108,77,99,104,101,99,107,45,115,117,102, -102,105,120,45,99,97,108,108,79,112,97,116,104,45,114,101,112,108,97,99,101, -45,115,117,102,102,105,120,75,112,97,116,104,45,97,100,100,45,115,117,102,102, -105,120,77,108,111,97,100,47,117,115,101,45,99,111,109,112,105,108,101,100,1, -29,102,105,110,100,45,108,105,98,114,97,114,121,45,99,111,108,108,101,99,116, -105,111,110,45,112,97,116,104,115,1,27,112,97,116,104,45,108,105,115,116,45, -115,116,114,105,110,103,45,62,112,97,116,104,45,108,105,115,116,1,20,102,105, -110,100,45,101,120,101,99,117,116,97,98,108,101,45,112,97,116,104,73,101,109, -98,101,100,100,101,100,45,108,111,97,100,65,113,117,111,116,101,29,94,2,17, -68,35,37,112,97,114,97,109,122,11,64,108,111,111,112,69,101,120,101,99,45, -102,105,108,101,67,119,105,110,100,111,119,115,6,25,25,112,97,116,104,32,111, -114,32,118,97,108,105,100,45,112,97,116,104,32,115,116,114,105,110,103,6,29, -29,126,97,58,32,105,110,118,97,108,105,100,32,114,101,108,97,116,105,118,101, -32,112,97,116,104,58,32,126,115,6,42,42,126,97,58,32,99,111,108,108,101, -99,116,105,111,110,32,110,111,116,32,102,111,117,110,100,58,32,126,115,32,105, -110,32,97,110,121,32,111,102,58,32,126,115,6,42,42,112,97,116,104,32,40, -102,111,114,32,97,110,121,32,115,121,115,116,101,109,41,32,111,114,32,118,97, -108,105,100,45,112,97,116,104,32,115,116,114,105,110,103,6,21,21,115,116,114, -105,110,103,32,111,114,32,98,121,116,101,32,115,116,114,105,110,103,6,36,36, -99,97,110,110,111,116,32,97,100,100,32,97,32,115,117,102,102,105,120,32,116, -111,32,97,32,114,111,111,116,32,112,97,116,104,58,32,5,0,68,35,37,107, -101,114,110,101,108,27,20,14,159,80,158,35,49,250,80,158,38,50,249,22,27, -11,80,158,40,49,22,142,12,10,248,22,188,4,23,196,2,28,248,22,166,5, -23,194,2,12,87,94,248,22,143,8,23,194,1,248,80,159,36,53,35,195,28, -248,22,71,23,195,2,9,27,248,22,64,23,196,2,27,28,248,22,187,12,23, -195,2,23,194,1,28,248,22,186,12,23,195,2,249,22,188,12,23,196,1,250, -80,158,41,47,248,22,138,13,2,20,11,10,250,80,158,39,47,248,22,138,13, -2,20,23,197,1,10,28,23,193,2,249,22,63,248,22,190,12,249,22,188,12, -23,198,1,247,22,139,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,187,12,23,195,2,23,194,1,28, -248,22,186,12,23,195,2,249,22,188,12,23,196,1,250,80,158,46,47,248,22, -138,13,2,20,11,10,250,80,158,44,47,248,22,138,13,2,20,23,197,1,10, -28,23,193,2,249,22,63,248,22,190,12,249,22,188,12,23,198,1,247,22,139, -13,248,80,159,44,52,35,248,22,65,23,199,1,87,94,23,193,1,248,80,159, -42,52,35,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,187,12, -23,195,2,23,194,1,28,248,22,186,12,23,195,2,249,22,188,12,23,196,1, -250,80,158,44,47,248,22,138,13,2,20,11,10,250,80,158,42,47,248,22,138, -13,2,20,23,197,1,10,28,23,193,2,249,22,63,248,22,190,12,249,22,188, -12,23,198,1,247,22,139,13,248,80,159,42,52,35,248,22,65,23,199,1,248, -80,159,40,52,35,248,22,65,196,249,80,159,36,37,35,2,7,195,27,248,22, -163,12,23,195,2,28,23,193,2,192,87,94,23,193,1,28,248,22,135,6,23, -195,2,27,248,22,185,12,195,28,192,192,248,22,186,12,195,11,87,94,28,28, -248,22,164,12,23,195,2,10,27,248,22,163,12,23,196,2,28,23,193,2,192, -87,94,23,193,1,28,248,22,135,6,23,196,2,27,248,22,185,12,23,197,2, -28,23,193,2,192,87,94,23,193,1,248,22,186,12,23,197,2,11,12,250,22, -170,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,164,12,23,195,2,249,22,140,8,248,22,165,12, -23,197,2,2,21,249,22,140,8,247,22,154,7,2,21,27,28,248,22,135,6, -23,196,2,23,195,2,248,22,144,7,248,22,168,12,23,197,2,28,249,22,151, -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,135,6,195,248,22,171,12,195,194,27,248,22, -174,6,23,195,1,249,22,172,12,248,22,147,7,250,22,157,13,0,6,35,114, -120,34,47,34,28,249,22,151,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,157, -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,42,35,2,21,28,248,22,135,6,194, -248,22,171,12,194,193,87,94,28,27,248,22,163,12,23,196,2,28,23,193,2, -192,87,94,23,193,1,28,248,22,135,6,23,196,2,27,248,22,185,12,23,197, -2,28,23,193,2,192,87,94,23,193,1,248,22,186,12,23,197,2,11,12,250, -22,170,8,23,196,2,2,22,23,197,2,28,248,22,185,12,23,195,2,12,248, -22,187,10,249,22,132,10,248,22,164,6,250,22,183,6,2,23,23,200,1,23, -201,1,247,22,23,87,94,28,27,248,22,163,12,23,196,2,28,23,193,2,192, -87,94,23,193,1,28,248,22,135,6,23,196,2,27,248,22,185,12,23,197,2, -28,23,193,2,192,87,94,23,193,1,248,22,186,12,23,197,2,11,12,250,22, -170,8,23,196,2,2,22,23,197,2,28,248,22,185,12,23,195,2,12,248,22, -187,10,249,22,132,10,248,22,164,6,250,22,183,6,2,23,23,200,1,23,201, -1,247,22,23,87,94,87,94,28,27,248,22,163,12,23,196,2,28,23,193,2, -192,87,94,23,193,1,28,248,22,135,6,23,196,2,27,248,22,185,12,23,197, -2,28,23,193,2,192,87,94,23,193,1,248,22,186,12,23,197,2,11,12,250, -22,170,8,195,2,22,23,197,2,28,248,22,185,12,23,195,2,12,248,22,187, -10,249,22,132,10,248,22,164,6,250,22,183,6,2,23,199,23,201,1,247,22, -23,249,22,3,89,162,42,35,48,9,223,2,33,36,196,248,22,187,10,249,22, -162,10,23,196,1,247,22,23,87,94,87,94,249,80,159,36,37,35,2,7,195, -249,22,3,80,159,36,51,35,196,251,80,159,38,40,35,2,7,32,0,89,162, -42,35,43,9,222,33,38,197,198,32,40,89,162,42,40,57,65,99,108,111,111, -112,222,33,41,28,248,22,71,23,199,2,87,94,23,198,1,248,23,196,1,251, -22,183,6,2,24,23,199,1,28,248,22,71,23,203,2,87,94,23,202,1,23, -201,1,250,22,1,22,181,12,23,204,1,23,205,1,23,198,1,27,249,22,181, -12,248,22,64,23,202,2,23,199,2,28,248,22,176,12,23,194,2,27,250,22, -1,22,181,12,23,197,1,23,202,2,28,248,22,176,12,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,183,6,2,24,23,202,1,28,248,22,71,23,206,2, -87,94,23,205,1,23,204,1,250,22,1,22,181,12,23,207,1,23,208,1,23, -201,1,27,249,22,181,12,248,22,64,23,197,2,23,202,2,28,248,22,176,12, -23,194,2,27,250,22,1,22,181,12,23,197,1,204,28,248,22,176,12,193,192, -253,2,40,203,204,205,206,23,15,248,22,65,201,253,2,40,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,183,6,2,24,23,201,1,28, -248,22,71,23,205,2,87,94,23,204,1,23,203,1,250,22,1,22,181,12,23, -206,1,23,207,1,23,200,1,27,249,22,181,12,248,22,64,23,197,2,23,201, -2,28,248,22,176,12,23,194,2,27,250,22,1,22,181,12,23,197,1,203,28, -248,22,176,12,193,192,253,2,40,202,203,204,205,206,248,22,65,201,253,2,40, -201,202,203,204,205,248,22,65,200,27,247,22,140,13,253,2,40,198,199,200,201, -202,198,87,95,28,28,248,22,164,12,23,194,2,10,27,248,22,163,12,23,195, -2,28,23,193,2,192,87,94,23,193,1,28,248,22,135,6,23,195,2,27,248, -22,185,12,23,196,2,28,23,193,2,192,87,94,23,193,1,248,22,186,12,23, -196,2,11,12,252,22,170,8,23,200,2,2,25,34,23,198,2,23,199,2,28, -28,248,22,135,6,23,195,2,10,248,22,187,6,23,195,2,87,94,23,194,1, -12,252,22,170,8,23,200,2,2,26,35,23,198,2,23,199,1,91,159,37,11, -90,161,37,34,11,248,22,184,12,23,197,2,87,94,23,195,1,87,94,28,192, -12,250,22,171,8,23,201,1,2,27,23,199,1,249,22,7,194,195,91,159,36, +112,1,157,1,202,1,226,1,9,2,11,2,68,2,158,3,167,3,208,3,42, +5,146,5,250,5,110,6,124,6,167,6,183,6,33,8,47,8,210,8,217,9, +223,10,230,10,236,10,108,11,121,11,234,11,80,12,93,12,115,12,67,13,227, +13,42,15,50,15,58,15,84,15,194,15,0,0,6,19,0,0,29,11,11,72, +112,97,116,104,45,115,116,114,105,110,103,63,64,98,115,98,115,76,110,111,114, +109,97,108,45,99,97,115,101,45,112,97,116,104,74,45,99,104,101,99,107,45, +114,101,108,112,97,116,104,77,45,99,104,101,99,107,45,99,111,108,108,101,99, +116,105,111,110,75,99,111,108,108,101,99,116,105,111,110,45,112,97,116,104,69, +45,102,105,110,100,45,99,111,108,77,99,104,101,99,107,45,115,117,102,102,105, +120,45,99,97,108,108,79,112,97,116,104,45,114,101,112,108,97,99,101,45,115, +117,102,102,105,120,75,112,97,116,104,45,97,100,100,45,115,117,102,102,105,120, +77,108,111,97,100,47,117,115,101,45,99,111,109,112,105,108,101,100,1,29,102, +105,110,100,45,108,105,98,114,97,114,121,45,99,111,108,108,101,99,116,105,111, +110,45,112,97,116,104,115,1,27,112,97,116,104,45,108,105,115,116,45,115,116, +114,105,110,103,45,62,112,97,116,104,45,108,105,115,116,1,20,102,105,110,100, +45,101,120,101,99,117,116,97,98,108,101,45,112,97,116,104,73,101,109,98,101, +100,100,101,100,45,108,111,97,100,65,113,117,111,116,101,29,94,2,17,68,35, +37,112,97,114,97,109,122,11,64,108,111,111,112,69,101,120,101,99,45,102,105, +108,101,67,119,105,110,100,111,119,115,6,25,25,112,97,116,104,32,111,114,32, +118,97,108,105,100,45,112,97,116,104,32,115,116,114,105,110,103,6,29,29,126, +97,58,32,105,110,118,97,108,105,100,32,114,101,108,97,116,105,118,101,32,112, +97,116,104,58,32,126,115,6,42,42,126,97,58,32,99,111,108,108,101,99,116, +105,111,110,32,110,111,116,32,102,111,117,110,100,58,32,126,115,32,105,110,32, +97,110,121,32,111,102,58,32,126,115,6,42,42,112,97,116,104,32,40,102,111, +114,32,97,110,121,32,115,121,115,116,101,109,41,32,111,114,32,118,97,108,105, +100,45,112,97,116,104,32,115,116,114,105,110,103,6,21,21,115,116,114,105,110, +103,32,111,114,32,98,121,116,101,32,115,116,114,105,110,103,6,36,36,99,97, +110,110,111,116,32,97,100,100,32,97,32,115,117,102,102,105,120,32,116,111,32, +97,32,114,111,111,116,32,112,97,116,104,58,32,5,0,27,20,14,159,80,158, +35,49,250,80,158,38,50,249,22,27,11,80,158,40,49,22,142,12,10,248,22, +188,4,23,196,2,28,248,22,166,5,23,194,2,12,87,94,248,22,143,8,23, +194,1,248,80,159,36,53,35,195,28,248,22,71,23,195,2,9,27,248,22,64, +23,196,2,27,28,248,22,187,12,23,195,2,23,194,1,28,248,22,186,12,23, +195,2,249,22,188,12,23,196,1,250,80,158,41,47,248,22,138,13,2,20,11, +10,250,80,158,39,47,248,22,138,13,2,20,23,197,1,10,28,23,193,2,249, +22,63,248,22,190,12,249,22,188,12,23,198,1,247,22,139,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,187,12,23,195,2,23,194,1,28,248,22,186,12,23,195,2,249,22,188,12, +23,196,1,250,80,158,46,47,248,22,138,13,2,20,11,10,250,80,158,44,47, +248,22,138,13,2,20,23,197,1,10,28,23,193,2,249,22,63,248,22,190,12, +249,22,188,12,23,198,1,247,22,139,13,248,80,159,44,52,35,248,22,65,23, +199,1,87,94,23,193,1,248,80,159,42,52,35,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,187,12,23,195,2,23,194,1,28,248,22,186,12, +23,195,2,249,22,188,12,23,196,1,250,80,158,44,47,248,22,138,13,2,20, +11,10,250,80,158,42,47,248,22,138,13,2,20,23,197,1,10,28,23,193,2, +249,22,63,248,22,190,12,249,22,188,12,23,198,1,247,22,139,13,248,80,159, +42,52,35,248,22,65,23,199,1,248,80,159,40,52,35,248,22,65,196,249,80, +159,36,37,35,2,7,195,27,248,22,163,12,23,195,2,28,23,193,2,192,87, +94,23,193,1,28,248,22,135,6,23,195,2,27,248,22,185,12,195,28,192,192, +248,22,186,12,195,11,87,94,28,28,248,22,164,12,23,195,2,10,27,248,22, +163,12,23,196,2,28,23,193,2,192,87,94,23,193,1,28,248,22,135,6,23, +196,2,27,248,22,185,12,23,197,2,28,23,193,2,192,87,94,23,193,1,248, +22,186,12,23,197,2,11,12,250,22,170,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,164,12,23, +195,2,249,22,140,8,248,22,165,12,23,197,2,2,21,249,22,140,8,247,22, +154,7,2,21,27,28,248,22,135,6,23,196,2,23,195,2,248,22,144,7,248, +22,168,12,23,197,2,28,249,22,151,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,135,6, +195,248,22,171,12,195,194,27,248,22,174,6,23,195,1,249,22,172,12,248,22, +147,7,250,22,157,13,0,6,35,114,120,34,47,34,28,249,22,151,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,157,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, +42,35,2,21,28,248,22,135,6,194,248,22,171,12,194,193,87,94,28,27,248, +22,163,12,23,196,2,28,23,193,2,192,87,94,23,193,1,28,248,22,135,6, +23,196,2,27,248,22,185,12,23,197,2,28,23,193,2,192,87,94,23,193,1, +248,22,186,12,23,197,2,11,12,250,22,170,8,23,196,2,2,22,23,197,2, +28,248,22,185,12,23,195,2,12,248,22,187,10,249,22,132,10,248,22,164,6, +250,22,183,6,2,23,23,200,1,23,201,1,247,22,23,87,94,28,27,248,22, +163,12,23,196,2,28,23,193,2,192,87,94,23,193,1,28,248,22,135,6,23, +196,2,27,248,22,185,12,23,197,2,28,23,193,2,192,87,94,23,193,1,248, +22,186,12,23,197,2,11,12,250,22,170,8,23,196,2,2,22,23,197,2,28, +248,22,185,12,23,195,2,12,248,22,187,10,249,22,132,10,248,22,164,6,250, +22,183,6,2,23,23,200,1,23,201,1,247,22,23,87,94,87,94,28,27,248, +22,163,12,23,196,2,28,23,193,2,192,87,94,23,193,1,28,248,22,135,6, +23,196,2,27,248,22,185,12,23,197,2,28,23,193,2,192,87,94,23,193,1, +248,22,186,12,23,197,2,11,12,250,22,170,8,195,2,22,23,197,2,28,248, +22,185,12,23,195,2,12,248,22,187,10,249,22,132,10,248,22,164,6,250,22, +183,6,2,23,199,23,201,1,247,22,23,249,22,3,89,162,42,35,48,9,223, +2,33,35,196,248,22,187,10,249,22,162,10,23,196,1,247,22,23,87,94,87, +94,249,80,159,36,37,35,2,7,195,249,22,3,80,159,36,51,35,196,251,80, +159,38,40,35,2,7,32,0,89,162,42,35,43,9,222,33,37,197,198,32,39, +89,162,42,40,57,65,99,108,111,111,112,222,33,40,28,248,22,71,23,199,2, +87,94,23,198,1,248,23,196,1,251,22,183,6,2,24,23,199,1,28,248,22, +71,23,203,2,87,94,23,202,1,23,201,1,250,22,1,22,181,12,23,204,1, +23,205,1,23,198,1,27,249,22,181,12,248,22,64,23,202,2,23,199,2,28, +248,22,176,12,23,194,2,27,250,22,1,22,181,12,23,197,1,23,202,2,28, +248,22,176,12,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,183,6,2,24, +23,202,1,28,248,22,71,23,206,2,87,94,23,205,1,23,204,1,250,22,1, +22,181,12,23,207,1,23,208,1,23,201,1,27,249,22,181,12,248,22,64,23, +197,2,23,202,2,28,248,22,176,12,23,194,2,27,250,22,1,22,181,12,23, +197,1,204,28,248,22,176,12,193,192,253,2,39,203,204,205,206,23,15,248,22, +65,201,253,2,39,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,183,6,2,24,23,201,1,28,248,22,71,23,205,2,87,94,23,204,1, +23,203,1,250,22,1,22,181,12,23,206,1,23,207,1,23,200,1,27,249,22, +181,12,248,22,64,23,197,2,23,201,2,28,248,22,176,12,23,194,2,27,250, +22,1,22,181,12,23,197,1,203,28,248,22,176,12,193,192,253,2,39,202,203, +204,205,206,248,22,65,201,253,2,39,201,202,203,204,205,248,22,65,200,27,247, +22,140,13,253,2,39,198,199,200,201,202,198,87,95,28,28,248,22,164,12,23, +194,2,10,27,248,22,163,12,23,195,2,28,23,193,2,192,87,94,23,193,1, +28,248,22,135,6,23,195,2,27,248,22,185,12,23,196,2,28,23,193,2,192, +87,94,23,193,1,248,22,186,12,23,196,2,11,12,252,22,170,8,23,200,2, +2,25,34,23,198,2,23,199,2,28,28,248,22,135,6,23,195,2,10,248,22, +187,6,23,195,2,87,94,23,194,1,12,252,22,170,8,23,200,2,2,26,35, +23,198,2,23,199,1,91,159,37,11,90,161,37,34,11,248,22,184,12,23,197, +2,87,94,23,195,1,87,94,28,192,12,250,22,171,8,23,201,1,2,27,23, +199,1,249,22,7,194,195,91,159,36,11,90,161,36,34,11,87,95,28,28,248, +22,164,12,23,196,2,10,27,248,22,163,12,23,197,2,28,23,193,2,192,87, +94,23,193,1,28,248,22,135,6,23,197,2,27,248,22,185,12,23,198,2,28, +23,193,2,192,87,94,23,193,1,248,22,186,12,23,198,2,11,12,252,22,170, +8,2,10,2,25,34,23,200,2,23,201,2,28,28,248,22,135,6,23,197,2, +10,248,22,187,6,23,197,2,12,252,22,170,8,2,10,2,26,35,23,200,2, +23,201,2,91,159,37,11,90,161,37,34,11,248,22,184,12,23,199,2,87,94, +23,195,1,87,94,28,23,193,2,12,250,22,171,8,2,10,2,27,23,201,2, +249,22,7,23,195,1,23,196,1,27,249,22,173,12,250,22,156,13,0,18,35, +114,120,35,34,40,91,46,93,91,94,46,93,42,124,41,36,34,248,22,169,12, +23,201,1,28,248,22,135,6,23,203,2,249,22,147,7,23,204,1,8,63,23, +202,1,28,248,22,164,12,23,199,2,248,22,165,12,23,199,1,87,94,23,198, +1,247,22,166,12,28,248,22,163,12,194,249,22,181,12,195,194,192,91,159,36, 11,90,161,36,34,11,87,95,28,28,248,22,164,12,23,196,2,10,27,248,22, 163,12,23,197,2,28,23,193,2,192,87,94,23,193,1,28,248,22,135,6,23, 197,2,27,248,22,185,12,23,198,2,28,23,193,2,192,87,94,23,193,1,248, -22,186,12,23,198,2,11,12,252,22,170,8,2,10,2,25,34,23,200,2,23, +22,186,12,23,198,2,11,12,252,22,170,8,2,11,2,25,34,23,200,2,23, 201,2,28,28,248,22,135,6,23,197,2,10,248,22,187,6,23,197,2,12,252, -22,170,8,2,10,2,26,35,23,200,2,23,201,2,91,159,37,11,90,161,37, +22,170,8,2,11,2,26,35,23,200,2,23,201,2,91,159,37,11,90,161,37, 34,11,248,22,184,12,23,199,2,87,94,23,195,1,87,94,28,23,193,2,12, -250,22,171,8,2,10,2,27,23,201,2,249,22,7,23,195,1,23,196,1,27, -249,22,173,12,250,22,156,13,0,18,35,114,120,35,34,40,91,46,93,91,94, -46,93,42,124,41,36,34,248,22,169,12,23,201,1,28,248,22,135,6,23,203, -2,249,22,147,7,23,204,1,8,63,23,202,1,28,248,22,164,12,23,199,2, -248,22,165,12,23,199,1,87,94,23,198,1,247,22,166,12,28,248,22,163,12, -194,249,22,181,12,195,194,192,91,159,36,11,90,161,36,34,11,87,95,28,28, -248,22,164,12,23,196,2,10,27,248,22,163,12,23,197,2,28,23,193,2,192, -87,94,23,193,1,28,248,22,135,6,23,197,2,27,248,22,185,12,23,198,2, -28,23,193,2,192,87,94,23,193,1,248,22,186,12,23,198,2,11,12,252,22, -170,8,2,11,2,25,34,23,200,2,23,201,2,28,28,248,22,135,6,23,197, -2,10,248,22,187,6,23,197,2,12,252,22,170,8,2,11,2,26,35,23,200, -2,23,201,2,91,159,37,11,90,161,37,34,11,248,22,184,12,23,199,2,87, -94,23,195,1,87,94,28,23,193,2,12,250,22,171,8,2,11,2,27,23,201, -2,249,22,7,23,195,1,23,196,1,27,249,22,173,12,249,22,133,7,250,22, -157,13,0,9,35,114,120,35,34,91,46,93,34,248,22,169,12,23,203,1,6, -1,1,95,28,248,22,135,6,23,202,2,249,22,147,7,23,203,1,8,63,23, -201,1,28,248,22,164,12,23,199,2,248,22,165,12,23,199,1,87,94,23,198, -1,247,22,166,12,28,248,22,163,12,194,249,22,181,12,195,194,192,249,247,22, -186,5,194,11,248,80,158,35,45,9,27,247,22,142,13,249,80,158,37,46,28, -23,195,2,27,248,22,152,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,181,12,248,22, -138,13,69,97,100,100,111,110,45,100,105,114,247,22,150,7,6,8,8,99,111, -108,108,101,99,116,115,11,27,248,80,159,40,52,35,249,22,77,23,202,1,248, -22,73,248,22,138,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,49,89,162,8,44,37,49,2, -19,222,33,50,27,249,22,149,13,23,197,2,23,198,2,28,23,193,2,87,94, -23,196,1,27,248,22,88,23,195,2,27,250,2,49,23,199,2,23,200,1,248, -22,97,23,199,1,28,249,22,129,7,23,196,2,2,28,249,22,77,197,194,87, -94,23,196,1,249,22,63,248,22,172,12,23,197,1,194,87,95,23,195,1,23, -193,1,28,249,22,129,7,23,198,2,2,28,249,22,77,195,9,87,94,23,194, -1,249,22,63,248,22,172,12,23,199,1,9,87,95,28,28,248,22,187,6,194, -10,248,22,135,6,194,12,250,22,170,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,163,12,196,11,12,250,22,170,8,2,14,6,13,13,108, -105,115,116,32,111,102,32,112,97,116,104,115,197,250,2,49,197,195,28,248,22, -135,6,197,248,22,146,7,197,196,32,52,89,162,8,44,38,56,2,19,222,33, -55,32,53,89,162,8,44,37,53,70,102,111,117,110,100,45,101,120,101,99,222, -33,54,28,23,193,2,91,159,37,11,90,161,37,34,11,248,22,184,12,23,199, -2,87,95,23,195,1,23,194,1,27,28,23,198,2,27,248,22,189,12,23,201, -2,28,249,22,142,8,23,195,2,23,202,2,11,28,248,22,185,12,23,194,2, -250,2,53,23,201,2,23,202,2,249,22,181,12,23,200,2,23,198,1,250,2, -53,23,201,2,23,202,2,23,196,1,11,28,23,193,2,192,87,94,23,193,1, -27,28,248,22,163,12,23,196,2,27,249,22,181,12,23,198,2,23,201,2,28, -28,248,22,176,12,193,10,248,22,175,12,193,192,11,11,28,23,193,2,192,87, -94,23,193,1,28,23,199,2,11,27,248,22,189,12,23,202,2,28,249,22,142, -8,23,195,2,23,203,1,11,28,248,22,185,12,23,194,2,250,2,53,23,202, -1,23,203,1,249,22,181,12,23,201,1,23,198,1,250,2,53,201,202,195,194, -28,248,22,71,23,197,2,11,27,248,22,188,12,248,22,64,23,199,2,27,249, -22,181,12,23,196,1,23,197,2,28,248,22,175,12,23,194,2,250,2,53,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,188,12,248,22,64,23,196,2,27,249,22,181,12,23,196,1,23, -200,2,28,248,22,175,12,23,194,2,250,2,53,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,188,12,248, -22,64,195,27,249,22,181,12,23,196,1,202,28,248,22,175,12,193,250,2,53, -204,205,195,251,2,52,204,205,206,248,22,65,199,87,95,28,27,248,22,163,12, -23,196,2,28,23,193,2,192,87,94,23,193,1,28,248,22,135,6,23,196,2, -27,248,22,185,12,23,197,2,28,23,193,2,192,87,94,23,193,1,248,22,186, -12,23,197,2,11,12,250,22,170,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,163,12,23,197,2,28,23,193,2,192,87, -94,23,193,1,28,248,22,135,6,23,197,2,27,248,22,185,12,23,198,2,28, -23,193,2,192,87,94,23,193,1,248,22,186,12,23,198,2,11,248,22,185,12, -23,196,2,11,10,12,250,22,170,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,185,12,23,195,2,91,159,37,11,90,161,37, -34,11,248,22,184,12,23,198,2,249,22,140,8,194,68,114,101,108,97,116,105, -118,101,11,27,248,22,152,7,6,4,4,80,65,84,72,251,2,52,23,199,1, -23,200,1,23,201,1,28,23,197,2,27,249,80,158,42,46,23,200,1,9,28, -249,22,140,8,247,22,154,7,2,21,249,22,63,248,22,172,12,5,1,46,23, -195,1,192,9,27,248,22,188,12,23,196,1,28,248,22,175,12,193,250,2,53, -198,199,195,11,250,80,158,37,47,196,197,11,250,80,158,37,47,196,11,11,87, -94,249,22,191,5,247,22,168,4,195,248,22,142,5,249,22,153,3,34,249,22, -137,3,197,198,27,248,22,138,13,2,20,27,249,80,158,38,47,23,196,1,11, -27,27,248,22,156,3,23,199,1,28,192,192,34,27,27,248,22,156,3,23,201, -1,28,192,192,34,27,249,22,185,4,23,198,1,83,158,38,20,96,95,89,162, -8,44,34,46,9,224,4,3,33,59,23,196,1,23,197,1,27,248,22,172,4, -23,195,1,87,94,248,22,136,4,21,94,2,17,2,29,248,80,159,41,53,35, -193,159,34,20,102,159,34,16,1,20,24,65,98,101,103,105,110,16,0,83,158, -40,20,99,137,67,35,37,117,116,105,108,115,2,1,11,10,10,41,80,158,34, -34,20,102,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,38,11, -37,34,11,16,11,9,9,9,9,9,9,9,9,9,9,9,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,45,45,35,11,11,16,0, -16,0,16,0,34,34,11,11,11,16,0,16,0,16,0,34,34,16,0,16,18, -83,158,34,16,2,89,162,42,35,47,2,19,223,0,33,30,80,159,34,53,35, -83,158,34,16,2,89,162,8,44,35,54,2,19,223,0,33,31,80,159,34,52, -35,83,158,34,16,2,89,162,8,44,35,43,9,223,0,33,32,80,159,34,51, -35,83,158,34,16,2,32,0,89,162,42,35,43,2,2,222,33,33,80,159,34, -34,35,83,158,34,16,2,249,22,137,6,7,92,7,92,80,159,34,35,35,83, -158,34,16,2,89,162,42,35,52,2,4,223,0,33,34,80,159,34,36,35,83, -158,34,16,2,32,0,89,162,42,36,48,2,5,222,33,35,80,159,34,37,35, -83,158,34,16,2,32,0,89,162,8,44,37,49,2,6,222,33,37,80,159,34, -38,35,83,158,34,16,2,89,162,8,45,36,46,2,7,223,0,33,39,80,159, -34,39,35,83,158,34,16,2,32,0,89,162,42,38,50,2,8,222,33,42,80, -159,34,40,35,83,158,34,16,2,32,0,89,162,42,37,48,2,9,222,33,43, -80,159,34,41,35,83,158,34,16,2,32,0,89,162,42,36,51,2,10,222,33, -44,80,159,34,42,35,83,158,34,16,2,32,0,89,162,42,36,52,2,11,222, -33,45,80,159,34,43,35,83,158,34,16,2,32,0,89,162,42,35,42,2,12, -222,33,46,80,159,34,44,35,83,158,34,16,2,83,158,37,20,95,95,2,13, -89,162,42,34,41,9,223,0,33,47,89,162,42,35,51,9,223,0,33,48,80, -159,34,45,35,83,158,34,16,2,27,248,22,145,13,248,22,146,7,27,28,249, -22,140,8,247,22,154,7,2,21,6,1,1,59,6,1,1,58,250,22,183,6, -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,36,46,2,14,223,0,33,51,80,159,34,46,35,83,158, -34,16,2,83,158,37,20,95,96,2,15,89,162,8,44,37,52,9,223,0,33, -56,89,162,42,36,45,9,223,0,33,57,89,162,42,35,44,9,223,0,33,58, -80,159,34,47,35,83,158,34,16,2,89,162,42,36,49,2,16,223,0,33,60, -80,159,34,48,35,94,29,94,2,17,2,29,11,29,94,2,17,69,35,37,109, -105,110,45,115,116,120,11,9,9,9,34,0}; - EVAL_ONE_SIZED_STR((char *)expr, 5009); +250,22,171,8,2,11,2,27,23,201,2,249,22,7,23,195,1,23,196,1,27, +249,22,173,12,249,22,133,7,250,22,157,13,0,9,35,114,120,35,34,91,46, +93,34,248,22,169,12,23,203,1,6,1,1,95,28,248,22,135,6,23,202,2, +249,22,147,7,23,203,1,8,63,23,201,1,28,248,22,164,12,23,199,2,248, +22,165,12,23,199,1,87,94,23,198,1,247,22,166,12,28,248,22,163,12,194, +249,22,181,12,195,194,192,249,247,22,186,5,194,11,248,80,158,35,45,9,27, +247,22,142,13,249,80,158,37,46,28,23,195,2,27,248,22,152,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,181,12,248,22,138,13,69,97,100,100,111,110,45,100,105, +114,247,22,150,7,6,8,8,99,111,108,108,101,99,116,115,11,27,248,80,159, +40,52,35,249,22,77,23,202,1,248,22,73,248,22,138,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,48,89,162,8,44,37,49,2,19,222,33,49,27,249,22,149,13,23,197, +2,23,198,2,28,23,193,2,87,94,23,196,1,27,248,22,88,23,195,2,27, +250,2,48,23,199,2,23,200,1,248,22,97,23,199,1,28,249,22,129,7,23, +196,2,2,28,249,22,77,197,194,87,94,23,196,1,249,22,63,248,22,172,12, +23,197,1,194,87,95,23,195,1,23,193,1,28,249,22,129,7,23,198,2,2, +28,249,22,77,195,9,87,94,23,194,1,249,22,63,248,22,172,12,23,199,1, +9,87,95,28,28,248,22,187,6,194,10,248,22,135,6,194,12,250,22,170,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,163,12,196,11,12, +250,22,170,8,2,14,6,13,13,108,105,115,116,32,111,102,32,112,97,116,104, +115,197,250,2,48,197,195,28,248,22,135,6,197,248,22,146,7,197,196,32,51, +89,162,8,44,38,56,2,19,222,33,54,32,52,89,162,8,44,37,53,70,102, +111,117,110,100,45,101,120,101,99,222,33,53,28,23,193,2,91,159,37,11,90, +161,37,34,11,248,22,184,12,23,199,2,87,95,23,195,1,23,194,1,27,28, +23,198,2,27,248,22,189,12,23,201,2,28,249,22,142,8,23,195,2,23,202, +2,11,28,248,22,185,12,23,194,2,250,2,52,23,201,2,23,202,2,249,22, +181,12,23,200,2,23,198,1,250,2,52,23,201,2,23,202,2,23,196,1,11, +28,23,193,2,192,87,94,23,193,1,27,28,248,22,163,12,23,196,2,27,249, +22,181,12,23,198,2,23,201,2,28,28,248,22,176,12,193,10,248,22,175,12, +193,192,11,11,28,23,193,2,192,87,94,23,193,1,28,23,199,2,11,27,248, +22,189,12,23,202,2,28,249,22,142,8,23,195,2,23,203,1,11,28,248,22, +185,12,23,194,2,250,2,52,23,202,1,23,203,1,249,22,181,12,23,201,1, +23,198,1,250,2,52,201,202,195,194,28,248,22,71,23,197,2,11,27,248,22, +188,12,248,22,64,23,199,2,27,249,22,181,12,23,196,1,23,197,2,28,248, +22,175,12,23,194,2,250,2,52,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,188,12,248,22,64,23,196, +2,27,249,22,181,12,23,196,1,23,200,2,28,248,22,175,12,23,194,2,250, +2,52,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,188,12,248,22,64,195,27,249,22,181,12,23,196,1, +202,28,248,22,175,12,193,250,2,52,204,205,195,251,2,51,204,205,206,248,22, +65,199,87,95,28,27,248,22,163,12,23,196,2,28,23,193,2,192,87,94,23, +193,1,28,248,22,135,6,23,196,2,27,248,22,185,12,23,197,2,28,23,193, +2,192,87,94,23,193,1,248,22,186,12,23,197,2,11,12,250,22,170,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,163, +12,23,197,2,28,23,193,2,192,87,94,23,193,1,28,248,22,135,6,23,197, +2,27,248,22,185,12,23,198,2,28,23,193,2,192,87,94,23,193,1,248,22, +186,12,23,198,2,11,248,22,185,12,23,196,2,11,10,12,250,22,170,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,185,12, +23,195,2,91,159,37,11,90,161,37,34,11,248,22,184,12,23,198,2,249,22, +140,8,194,68,114,101,108,97,116,105,118,101,11,27,248,22,152,7,6,4,4, +80,65,84,72,251,2,51,23,199,1,23,200,1,23,201,1,28,23,197,2,27, +249,80,158,42,46,23,200,1,9,28,249,22,140,8,247,22,154,7,2,21,249, +22,63,248,22,172,12,5,1,46,23,195,1,192,9,27,248,22,188,12,23,196, +1,28,248,22,175,12,193,250,2,52,198,199,195,11,250,80,158,37,47,196,197, +11,250,80,158,37,47,196,11,11,87,94,249,22,191,5,247,22,168,4,195,248, +22,142,5,249,22,153,3,34,249,22,137,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,138,13,2,20, +27,249,80,158,39,47,23,196,1,11,27,27,248,22,156,3,23,200,1,28,192, +192,34,27,27,248,22,156,3,23,202,1,28,192,192,34,249,22,185,4,23,197, +1,83,158,38,20,96,95,89,162,8,44,34,46,9,224,3,2,33,58,23,195, +1,23,196,1,27,248,22,172,4,23,195,1,248,80,159,37,53,35,193,159,34, +20,102,159,34,16,1,20,24,65,98,101,103,105,110,16,0,83,158,40,20,99, +137,67,35,37,117,116,105,108,115,2,1,11,10,10,41,80,158,34,34,20,102, +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,38,11,37,34,11, +16,11,9,9,9,9,9,9,9,9,9,9,9,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,45,45,35,11,11,16,0,16,0,16, +0,34,34,11,11,11,16,0,16,0,16,0,34,34,16,0,16,18,83,158,34, +16,2,89,162,42,35,47,2,19,223,0,33,29,80,159,34,53,35,83,158,34, +16,2,89,162,8,44,35,54,2,19,223,0,33,30,80,159,34,52,35,83,158, +34,16,2,89,162,8,44,35,43,9,223,0,33,31,80,159,34,51,35,83,158, +34,16,2,32,0,89,162,42,35,43,2,2,222,33,32,80,159,34,34,35,83, +158,34,16,2,249,22,137,6,7,92,7,92,80,159,34,35,35,83,158,34,16, +2,89,162,42,35,52,2,4,223,0,33,33,80,159,34,36,35,83,158,34,16, +2,32,0,89,162,42,36,48,2,5,222,33,34,80,159,34,37,35,83,158,34, +16,2,32,0,89,162,8,44,37,49,2,6,222,33,36,80,159,34,38,35,83, +158,34,16,2,89,162,8,45,36,46,2,7,223,0,33,38,80,159,34,39,35, +83,158,34,16,2,32,0,89,162,42,38,50,2,8,222,33,41,80,159,34,40, +35,83,158,34,16,2,32,0,89,162,42,37,48,2,9,222,33,42,80,159,34, +41,35,83,158,34,16,2,32,0,89,162,42,36,51,2,10,222,33,43,80,159, +34,42,35,83,158,34,16,2,32,0,89,162,42,36,52,2,11,222,33,44,80, +159,34,43,35,83,158,34,16,2,32,0,89,162,42,35,42,2,12,222,33,45, +80,159,34,44,35,83,158,34,16,2,83,158,37,20,95,95,2,13,89,162,42, +34,41,9,223,0,33,46,89,162,42,35,51,9,223,0,33,47,80,159,34,45, +35,83,158,34,16,2,27,248,22,145,13,248,22,146,7,27,28,249,22,140,8, +247,22,154,7,2,21,6,1,1,59,6,1,1,58,250,22,183,6,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,36,46,2,14,223,0,33,50,80,159,34,46,35,83,158,34,16,2, +83,158,37,20,95,96,2,15,89,162,8,44,37,52,9,223,0,33,55,89,162, +42,36,45,9,223,0,33,56,89,162,42,35,44,9,223,0,33,57,80,159,34, +47,35,83,158,34,16,2,89,162,42,37,50,2,16,223,0,33,59,80,159,34, +48,35,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,34,0}; + EVAL_ONE_SIZED_STR((char *)expr, 5013); } { static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,9,51,46,57,57,46,48,46,49,56,8,0,0,0,1,0,0,6,0, @@ -347,7 +347,7 @@ 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,34,11,8,168,186,97,159,2,2, +68,35,37,107,101,114,110,101,108,11,98,10,34,11,8,129,187,97,159,2,2, 34,34,159,2,3,34,34,159,2,4,34,34,159,2,5,34,34,159,2,6,34, 34,16,0,159,34,20,102,159,34,16,1,20,24,65,98,101,103,105,110,16,0, 83,158,40,20,99,137,69,35,37,98,117,105,108,116,105,110,29,11,11,10,10, diff --git a/src/mzscheme/src/env.c b/src/mzscheme/src/env.c index 76a652f9a6..d0a0c3aa78 100644 --- a/src/mzscheme/src/env.c +++ b/src/mzscheme/src/env.c @@ -369,7 +369,6 @@ Scheme_Env *scheme_basic_env() make_init_env(); env = scheme_make_empty_env(); - scheme_require_from_original_env(env, 1); /* Need kernel syntax... */ scheme_set_param(scheme_current_config(), MZCONFIG_ENV, (Scheme_Object *)env); diff --git a/src/mzscheme/src/eval.c b/src/mzscheme/src/eval.c index 5ccf06f79c..564403d5e6 100644 --- a/src/mzscheme/src/eval.c +++ b/src/mzscheme/src/eval.c @@ -9093,7 +9093,8 @@ expand_stx_to_top_form(int argc, Scheme_Object **argv) } static Scheme_Object *do_eval_string_all(const char *str, Scheme_Env *env, int cont, int w_prompt) -/* cont == -1 => single result +/* cont == -2 => module (no result) + cont == -1 => single result cont == 1 -> multiple result ok cont == 2 -> multiple result ok, use current_print to show results */ { @@ -9102,6 +9103,22 @@ static Scheme_Object *do_eval_string_all(const char *str, Scheme_Env *env, int c port = scheme_make_byte_string_input_port(str); do { expr = scheme_read_syntax(port, scheme_false); + + if (cont == -2) { + if (SCHEME_STXP(expr)) { + Scheme_Object *m; + m = SCHEME_STX_VAL(expr); + if (SCHEME_PAIRP(m)) { + m = scheme_make_pair(scheme_datum_to_syntax(module_symbol, + SCHEME_CAR(m), + scheme_sys_wraps(NULL), + 0, 0), + SCHEME_CDR(m)); + expr = scheme_datum_to_syntax(m, expr, expr, 0, 0); + } + } + } + if (SAME_OBJ(expr, scheme_eof)) cont = 0; else if (cont < 0) { @@ -9153,6 +9170,11 @@ Scheme_Object *scheme_eval_string(const char *str, Scheme_Env *env) return do_eval_string_all(str, env, -1, 0); } +Scheme_Object *scheme_eval_module_string(const char *str, Scheme_Env *env) +{ + return do_eval_string_all(str, env, -2, 0); +} + Scheme_Object *scheme_eval_string_multi(const char *str, Scheme_Env *env) { return do_eval_string_all(str, env, 0, 0); @@ -9173,6 +9195,28 @@ Scheme_Object *scheme_eval_string_multi_with_prompt(const char *str, Scheme_Env return do_eval_string_all(str, env, 0, 1); } +void scheme_init_collection_paths(Scheme_Env *global_env, Scheme_Object *extra_dirs) +{ + mz_jmp_buf * volatile save, newbuf; + Scheme_Thread * volatile p; + p = scheme_get_current_thread(); + save = p->error_buf; + p->error_buf = &newbuf; + if (!scheme_setjmp(newbuf)) { + Scheme_Object *clcp, *flcp, *a[1]; + + clcp = scheme_builtin_value("current-library-collection-paths"); + flcp = scheme_builtin_value("find-library-collection-paths"); + + if (clcp && flcp) { + a[0] = extra_dirs; + a[0] = _scheme_apply(flcp, 1, a); + _scheme_apply(clcp, 1, a); + } + } + p->error_buf = save; +} + static Scheme_Object *allow_set_undefined(int argc, Scheme_Object **argv) { return scheme_param_config("compile-allow-set!-undefined", diff --git a/src/mzscheme/src/module.c b/src/mzscheme/src/module.c index e273cc7972..f1d392bf65 100644 --- a/src/mzscheme/src/module.c +++ b/src/mzscheme/src/module.c @@ -642,17 +642,6 @@ int scheme_is_kernel_modname(Scheme_Object *modname) return SAME_OBJ(modname, kernel_modname); } -void scheme_require_from_original_env(Scheme_Env *env, int syntax_only) -{ - Scheme_Object *rn, *mod_sym; - - scheme_prepare_env_renames(env, mzMOD_RENAME_TOPLEVEL); - rn = scheme_get_module_rename_from_set(env->rename_set, scheme_make_integer(0), 1); - - mod_sym = scheme_intern_symbol("module"); - scheme_extend_module_rename(rn, kernel_modidx, mod_sym, mod_sym, kernel_modidx, mod_sym, 0, NULL, NULL, 0); -} - Scheme_Object *scheme_sys_wraps(Scheme_Comp_Env *env) { Scheme_Object *rn, *w; @@ -3936,10 +3925,7 @@ Scheme_Object *scheme_builtin_value(const char *name) if (v) return v; - /* FIXME... */ - /* Last resort: 'mzscheme */ - a[0] = scheme_intern_symbol("mzscheme"); - return _dynamic_require(2, a, initial_modules_env, 0, 0, 0, 0, 0, -1); + return NULL; } Scheme_Module *scheme_extract_compiled_module(Scheme_Object *o) diff --git a/src/mzscheme/src/salloc.c b/src/mzscheme/src/salloc.c index c037aed7d7..3226767d27 100644 --- a/src/mzscheme/src/salloc.c +++ b/src/mzscheme/src/salloc.c @@ -88,6 +88,24 @@ void scheme_set_stack_base(void *base, int no_auto_statics) use_registered_statics = no_auto_statics; } +int scheme_setup(int no_auto_statics, Scheme_Main _main, int argc, char **argv) +{ + void *start_addr = &start_addr; + +#ifdef MZ_PRECISE_GC + start_addr = &__gc_var_stack__; +#endif + + scheme_set_stack_base(start_addr, no_auto_statics); + +#ifdef MZ_PRECISE_GC + /* Trick xform conversion to keep start_addr: */ + start_addr = start_addr; +#endif + + return _main(scheme_basic_env(), argc, argv); +} + void scheme_set_stack_bounds(void *base, void *deepest, int no_auto_statics) { scheme_set_stack_base(base, no_auto_statics); diff --git a/src/mzscheme/src/schemef.h b/src/mzscheme/src/schemef.h index 25a09fd6e9..1ef39cc62e 100644 --- a/src/mzscheme/src/schemef.h +++ b/src/mzscheme/src/schemef.h @@ -264,6 +264,7 @@ MZ_EXTERN Scheme_Object *scheme_eval_string_all(const char *str, Scheme_Env *env MZ_EXTERN Scheme_Object *scheme_eval_string_with_prompt(const char *str, Scheme_Env *env); MZ_EXTERN Scheme_Object *scheme_eval_string_multi_with_prompt(const char *str, Scheme_Env *env); MZ_EXTERN Scheme_Object *scheme_eval_string_all_with_prompt(const char *str, Scheme_Env *env, int all); +MZ_EXTERN Scheme_Object *scheme_eval_module_string(const char *str, Scheme_Env *env); MZ_EXTERN Scheme_Object *_scheme_apply_known_prim_closure(Scheme_Object *rator, int argc, Scheme_Object **argv); diff --git a/src/mzscheme/src/schemex.h b/src/mzscheme/src/schemex.h index 4354299d40..c97cdad4b8 100644 --- a/src/mzscheme/src/schemex.h +++ b/src/mzscheme/src/schemex.h @@ -215,6 +215,7 @@ Scheme_Object *(*scheme_eval_string_all)(const char *str, Scheme_Env *env, int a Scheme_Object *(*scheme_eval_string_with_prompt)(const char *str, Scheme_Env *env); Scheme_Object *(*scheme_eval_string_multi_with_prompt)(const char *str, Scheme_Env *env); Scheme_Object *(*scheme_eval_string_all_with_prompt)(const char *str, Scheme_Env *env, int all); +Scheme_Object *(*scheme_eval_module_string)(const char *str, Scheme_Env *env); Scheme_Object *(*_scheme_apply_known_prim_closure)(Scheme_Object *rator, int argc, Scheme_Object **argv); Scheme_Object *(*_scheme_apply_known_prim_closure_multi)(Scheme_Object *rator, int argc, diff --git a/src/mzscheme/src/schemex.inc b/src/mzscheme/src/schemex.inc index dc520ceeb8..00780dc0c3 100644 --- a/src/mzscheme/src/schemex.inc +++ b/src/mzscheme/src/schemex.inc @@ -136,6 +136,7 @@ scheme_extension_table->scheme_eval_string_with_prompt = scheme_eval_string_with_prompt; scheme_extension_table->scheme_eval_string_multi_with_prompt = scheme_eval_string_multi_with_prompt; scheme_extension_table->scheme_eval_string_all_with_prompt = scheme_eval_string_all_with_prompt; + scheme_extension_table->scheme_eval_module_string = scheme_eval_module_string; scheme_extension_table->_scheme_apply_known_prim_closure = _scheme_apply_known_prim_closure; scheme_extension_table->_scheme_apply_known_prim_closure_multi = _scheme_apply_known_prim_closure_multi; scheme_extension_table->_scheme_apply_prim_closure = _scheme_apply_prim_closure; diff --git a/src/mzscheme/src/schemexm.h b/src/mzscheme/src/schemexm.h index 4a98c162c6..ff0abdcc60 100644 --- a/src/mzscheme/src/schemexm.h +++ b/src/mzscheme/src/schemexm.h @@ -136,6 +136,7 @@ #define scheme_eval_string_with_prompt (scheme_extension_table->scheme_eval_string_with_prompt) #define scheme_eval_string_multi_with_prompt (scheme_extension_table->scheme_eval_string_multi_with_prompt) #define scheme_eval_string_all_with_prompt (scheme_extension_table->scheme_eval_string_all_with_prompt) +#define scheme_eval_module_string (scheme_extension_table->scheme_eval_module_string) #define _scheme_apply_known_prim_closure (scheme_extension_table->_scheme_apply_known_prim_closure) #define _scheme_apply_known_prim_closure_multi (scheme_extension_table->_scheme_apply_known_prim_closure_multi) #define _scheme_apply_prim_closure (scheme_extension_table->_scheme_apply_prim_closure) diff --git a/src/mzscheme/src/schpriv.h b/src/mzscheme/src/schpriv.h index f5bd31aa78..edfb88d67a 100644 --- a/src/mzscheme/src/schpriv.h +++ b/src/mzscheme/src/schpriv.h @@ -478,8 +478,6 @@ scheme_get_primitive_global(Scheme_Object *var, Scheme_Env *env, void scheme_add_bucket_to_table(Scheme_Bucket_Table *table, Scheme_Bucket *b); Scheme_Bucket *scheme_bucket_or_null_from_table(Scheme_Bucket_Table *table, const char *key, int add); -void scheme_require_from_original_env(Scheme_Env *env, int syntax_only); - /*========================================================================*/ /* structs */ /*========================================================================*/ diff --git a/src/mzscheme/src/sstoinc.ss b/src/mzscheme/src/sstoinc.ss index def2fc3417..627de6a98e 100644 --- a/src/mzscheme/src/sstoinc.ss +++ b/src/mzscheme/src/sstoinc.ss @@ -5,6 +5,8 @@ (define DIGS-PER-LINE 20) +(namespace-require ''#%kernel) + (let loop () (let ([expr (read)]) (unless (eof-object? expr) diff --git a/src/mzscheme/src/startup.inc b/src/mzscheme/src/startup.inc index 34e6aa9bf8..02e142b10c 100644 --- a/src/mzscheme/src/startup.inc +++ b/src/mzscheme/src/startup.inc @@ -366,21 +366,24 @@ "(and(file-exists? p)(found-exec p))))))" "((program libpath)(find-executable-path program libpath #f))" "((program)(find-executable-path program #f #f))))" -"(define(embedded-load start end)" +"(define(embedded-load start end str)" +"(let*((s(if str" +" str" "(let*((sp(find-system-path 'exec-file)) " "(exe(find-executable-path sp #f))" "(start(or(string->number start) 0))" -"(end(or(string->number end) 0))" -"(s(with-input-from-file exe " +"(end(or(string->number end) 0)))" +"(with-input-from-file exe " "(lambda()" "(file-position(current-input-port) start)" -"(read-bytes(max 0(- end start))))))" +"(read-bytes(max 0(- end start))))))))" "(p(open-input-bytes s)))" -"(namespace-require ''#%kernel)" "(let loop()" "(let((e(parameterize((read-accept-compiled #t))" "(read p))))" -"(unless(eof-object? e)(eval e)(loop)))))))" +"(unless(eof-object? e)" +"(eval e)" +"(loop)))))))" ); EVAL_ONE_STR( "(module #%builtin '#%kernel" diff --git a/src/mzscheme/src/startup.ss b/src/mzscheme/src/startup.ss index 39d1bdde1e..7e106875a4 100644 --- a/src/mzscheme/src/startup.ss +++ b/src/mzscheme/src/startup.ss @@ -434,21 +434,24 @@ [(program) (find-executable-path program #f #f)])) ;; used for the -k command-line argument: - (define (embedded-load start end) - (let* ([sp (find-system-path 'exec-file)] - [exe (find-executable-path sp #f)] - [start (or (string->number start) 0)] - [end (or (string->number end) 0)] - [s (with-input-from-file exe - (lambda () - (file-position (current-input-port) start) - (read-bytes (max 0 (- end start)))))] + (define (embedded-load start end str) + (let* ([s (if str + str + (let* ([sp (find-system-path 'exec-file)] + [exe (find-executable-path sp #f)] + [start (or (string->number start) 0)] + [end (or (string->number end) 0)]) + (with-input-from-file exe + (lambda () + (file-position (current-input-port) start) + (read-bytes (max 0 (- end start)))))))] [p (open-input-bytes s)]) - (namespace-require ''#%kernel) (let loop () (let ([e (parameterize ([read-accept-compiled #t]) (read p))]) - (unless (eof-object? e) (eval e) (loop))))))) + (unless (eof-object? e) + (eval e) + (loop))))))) ;; ---------------------------------------- ;; A module that collects all the built-in modules, diff --git a/src/wxmac/contrib/wxxpm/libxpm.34b/lib/xpm34p.h b/src/wxmac/contrib/wxxpm/libxpm.34b/lib/xpm34p.h index bdf11eed5a..9964c15d65 100644 --- a/src/wxmac/contrib/wxxpm/libxpm.34b/lib/xpm34p.h +++ b/src/wxmac/contrib/wxxpm/libxpm.34b/lib/xpm34p.h @@ -40,6 +40,13 @@ #ifndef XPMP_h #define XPMP_h +/* We don't want all those "deprecated" messages: */ +#ifndef WX_KEEP_DEPRECATED_WARNINGS +# include +# undef DEPRECATED_ATTRIBUTE +# define DEPRECATED_ATTRIBUTE /**/ +#endif + #include "xpm34.h" /*