\chapter{Evaluating expression in ``safe'' environments} % \begin{description} \item[Used files:] none, defined in modules.scm \item[Name of the package:] loser, toothless, toothless-eval \\ (you want the last one) \end{description} % \section{Overview} \FIXME{Is toothless really R5RS, too?} These modules define an environment that is \RnRS without features that could examine or effect the file system. You can also use it as a model of how to execute code in other protected environments in \scm. \section{The \protect{\texttt{loser}} package} The \ex{loser} package exports only one procedure: \begin{defundesc}{loser}{name}{nothing} Raises an error like ``Illegal call \var{name}''. \end{defundesc} \section{The \protect{\texttt{toothless}} package} The \ex{toothless} package contains everything of \RnRS except that following procedure cause an error if called: \begin{itemize} \item \ex{call-with-input-file} \item \ex{call-with-output-file} \item \ex{load} \item \ex{open-input-file} \item \ex{open-output-file} \item \ex{transcript-on} \item \ex{with-input-from-file} \item \ex{with-input-to-file} \item \ex{eval} \item \ex{interaction-environment} \item \ex{scheme-report-environment} \end{itemize} So, \ex{toothless} creates an environment as described in \emph{Overview} above. \section{The \protect{\texttt{toothless-eval}} package} \begin{defundesc}{eval-safely} {expression} {any result} Creates a brand new package, imports the \ex{toothless} structure, and evaluates \semvar{expression} in it. When the evaluation is done, the environment is thrown away, so \semvar{expression}'s side-effects don't persist from one \ex{eval\=safely} call to the next. If \semvar{expression} raises an error exception, we abort and return \sharpf. \end{defundesc} %%% Local Variables: %%% mode: latex %%% TeX-master: "man" %%% End: