The dspec system is used to keep track of global definitions in many ways, and global definition macros usually tell the dspec system when the definition changes.
The main purpose of the system is to keep track of where the definition was located, but it also allows fine-tuned control of redefinitions.
A definition existed in the file named or an editor buffer with that name.
The location information is entered into the database when the definition is executed, by the defining function calling record-definition.
record-definition performs various checks, and returns true or false depending on whether the definition was allowed or not. In particular, it checks whether the same name has already been defined in a different location and if so a warning or error can be signaled. See record-definition for details.
You should not usually call record-definition, since all the system-provided definers call it.
However, for new classes of definition which you add with define-dspec-class, you should call record-definition for dspecs in their new classes, as shown in Complete example of a top-level dspec class.
LispWorks has a mechanism for protecting packages against defining any of their external symbols. By default, all the LispWorks implementation packages are protected. This is configurable by the variables *packages-for-warn-on-redefinition* and *handle-warn-on-redefinition*.
The protection is useful because it is relatively easy to redefine an external symbol by mistake, and it leads to undefined behavior which is difficult to debug. However, in some circumstances you may want to force such definition. In this case, you can rebind either of *packages-for-warn-on-redefinition* or *handle-warn-on-redefinition* around the definition to avoid the error.
You can also protect your packages by adding their names to the global value of *packages-for-warn-on-redefinition*.
With suitable compilation options (see toggle-source-debugging), the LispWorks debugger will automatically identify the exact subform in the source code for each stack frame. In addition, the Stepper tool in the LispWorks IDE can step subforms in the source code.
This also works for a subform that occurs within a macro expansion, provided that the subform is
eq to the original subform in the call to the macro. In the rare case where a macro copied a subform, making it non-eq, you can use the replacement-source-form macro to indicate which original subform should be identified as the source code for the new form.
LispWorks User Guide and Reference Manual - 13 Feb 2015