separate that they have their own chapter, @ref{Efficiency}.
@menu
-* Diagnostic Messages::
+* Diagnostic Messages::
* Handling of Types::
* Compiler Policy::
* Compiler Errors::
* Open Coding and Inline Expansion::
+* Interpreter::
@end menu
@node Diagnostic Messages
@comment node-name, next, previous, up
@subsection Diagnostic Severity
@cindex Severity of compiler messages
-@cindex compiler diagnostic severity
+@cindex Compiler Diagnostic Severity
@tindex error
@tindex warning
@tindex style-warning
@node The Processing Path
@comment node-name, next, previous, up
@subsubsection The Processing Path
-@cindex Processing path
+@cindex Processing Path
@cindex Macroexpansion
@cindex Source-to-source transformation
@comment node-name, next, previous, up
@section Open Coding and Inline Expansion
@cindex Open-coding
-@cindex inline expansion
-@cindex static functions
+@cindex Inline expansion
+@cindex Static functions
Since Common Lisp forbids the redefinition of standard functions, the
compiler can have special knowledge of these standard functions
may be transformed into a different function call (as in the last
example) or compiled as @emph{static call}. Static function call uses
a more efficient calling convention that forbids redefinition.
+
+@node Interpreter
+@comment node-name, next, previous, up
+@section Interpreter
+@cindex Interpreter
+@vindex sb-ext:*evaluator-mode*
+
+By default SBCL implements @code{eval} by calling the native code
+compiler. SBCL also includes an interpreter for use in special cases
+where using the compiler is undesireable, for example due to compilation
+overhead. Unlike in some other Lisp implementations, in SBCL interpreted
+code is not safer or more debuggable than compiled code.
+
+Switching between the compiler and the interpreter is done using the
+special variable @code{sb-ext:*evaluator-mode*}. As of 0.9.17, valid
+values for @code{sb-ext:*evaluator-mode*} are @code{:compile} and
+@code{:interpret}.