(require mzlib/restart) |
See scheme/sandbox for a more general way to simulate running a new Racket process.
(restart-mzscheme init-argv adjust-flag-table argv init-namespace) → boolean? init-argv : (vectorof string?) adjust-flag-table : (any/c . -> . any/c) argv : (vectorof string?) init-namespace : (-> any)
The vector of strings init-argv is read first with the standard Racket command-line parsing. Flags that load files or evaluate expressions (e.g., -f and -e) are ignored, but flags that set Racket’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” Racket. (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 Racket’s stand-alone behavior.