Next: Block Compilation Declarations, Up: Block Compilation [Contents][Index]
The effect of block compilation can be envisioned as the compiler turning all
the defun
s in the block compilation into a single labels
form:
(declaim (start-block fun1 fun3)) (defun fun1 () ...) (defun fun2 () ... (fun1) ...) (defun fun3 (x) (if x (fun1) (fun2))) (declaim (end-block))
becomes:
(labels ((fun1 () ...) (fun2 () ... (fun1) ...) (fun3 (x) (if x (fun1) (fun2)))) (setf (fdefinition 'fun1) #'fun1) (setf (fdefinition 'fun3) #'fun3))
Calls between the block compiled functions are local calls, so changing the
global definition of fun1
will have no effect on what fun2
does;
fun2
will keep calling the old fun1
.
The entry points fun1
and fun3
are still installed in
the symbol-function
as the global definitions of the functions,
so a full call to an entry point works just as before. However,
fun2
is not an entry point, so it is not globally defined. In
addition, fun2
is only called in one place, so it will be let
converted.