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"
/*