See scheme/sandbox for a more general way to simulate running a new PLT Scheme process.
| ||||||||||||||||||||||||||||
init-argv : (vectorof string?) | ||||||||||||||||||||||||||||
adjust-flag-table : (any/c . -> . any/c) | ||||||||||||||||||||||||||||
argv : (vectorof string?) | ||||||||||||||||||||||||||||
init-namespace : (-> any) |
Simulates starting 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., -c or -j) 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. 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 for restart-mzscheme is set to #f.
The read-eval-print-loop procedure is called, unless a flag in init-argv or argv disables it. When read-eval-print-loop returns, the return value for restart-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.