restart.ss: Simulating Stand-alone MzScheme
To load: (require (lib "restart.ss"))
(restart-mzscheme
init-argv adjust-flag-table argv init-namespace
)
PROCEDURE
Simulates starting the stand-alone version of MzScheme with the vector
of command-line strings argv
. The init-argv
,
adjust-flag-table
, and init-namespace
arguments are used
to modify the default settings for command-line flags, adjust the
parsing of command-line flags, and customize the initial namespace,
respectively.
The vector of strings init-argv
is read first with the standard
MzScheme command-line parsing. Flags that load files or evaluate
expressions (e.g., -f and -e) are ignored, but flags that
set MzScheme's modes (e.g., -g or -m) effectively set the
default mode before argv
is parsed.
Before argv
is parsed, the procedure adjust-flag-table
is
called with a command-line flag table as accepted by
parse-command-line
(see section 10). The return
value must also be a table of command-line flags, and this table is
used to parse argv
. The intent is to allow
adjust-flag-table
to add or remove flags from the standard set.
After argv
is parsed, a new thread and a namespace are created
for the ``restarted'' MzScheme. (The new namespace is installed as
the current namespace in the new thread.) In the new thread,
restarting performs the following actions:
The
init-namespace
procedure is called with no arguments. The return value is ignored.Expressions and files specified by
argv
are evaluated and loaded. If an error occurs, the remaining expressions and files are ignored, and the return value forrestart-mzscheme
is set to#f
.The
read-eval-print-loop
procedure is called, unless a flag ininit-argv
orargv
disables it. Whenread-eval-print-loop
returns, the return value forrestart-mzscheme
is set to#t
.
Before evaluating command-line arguments, an exit handler is installed
that immediately returns from restart-mzscheme
with the value
supplied to the handler. This exit handler remains in effect when
read-eval-print-loop
is called (unless a command-line argument
changes it). If restart-mzscheme
returns normally, the return
value is determined as described above. (Note that an error in a
command-line expression followed by read-eval-print-loop
produces a #t
result. This is consistent with MzScheme's
stand-alone behavior.)