Next: Block Compilation Declarations
Up: Block Compilation
Previous: Block Compilation
  Contents
  Index
The effect of block compilation can be envisioned as the compiler turning all
the defuns 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.
Next: Block Compilation Declarations
Up: Block Compilation
Previous: Block Compilation
  Contents
  Index
Peter Van Eynde
2000-02-08