Previous: Context Declarations, Up: Block Compilation [Contents][Index]
Here is a more complex example of with-compilation-unit
options:
:optimize '(optimize (speed 2) (space 2) (inhibit-warnings 2) (debug 1) (safety 0)) :optimize-interface '(optimize-interface (safety 1) (debug 1)) :context-declarations '(((:or :external (:and (:match "@%") (:match "SET"))) (declare (optimize-interface (safety 2)))) ((:or (:and :external :macro) (:match "$PARSE-")) (declare (optimize (safety 2)))))
The optimize
and extensions:optimize-interface
declarations (see optimize-declaration) set up the global
compilation policy. The bodies of functions are to be compiled
completely unsafe (safety 0
), but argument count and weakened
argument type checking is to be done when a function is called
(speed 2 safety 1
).
The first declaration specifies that all functions that are external
or whose names contain both “@%
” and “SET
” are to be
compiled compiled with completely safe interfaces (safety 2
).
The reason for this particular :match
rule is that setf
inverse functions in this system tend to have both strings in their
name somewhere. We want setf
inverses to be safe because they
are implicitly called by users even though their name is not exported.
The second declaration makes external macros or functions whose names
start with “PARSE-
” have safe bodies (as well as interfaces).
This is desirable because a syntax error in a macro may cause a type
error inside the body. The :match
rule is used because macros
often have auxiliary functions whose names begin with this string.
This particular example is used to build part of the standard CMUCL
system. Note however, that context declarations must be set up
according to the needs and coding conventions of a particular system;
different parts of CMUCL are compiled with different context
declarations, and your system will probably need its own declarations.
In particular, any use of the :match
option depends on naming
conventions used in coding.
Previous: Context Declarations, Up: Block Compilation [Contents][Index]