CLHS: Function PROCLAIM

#

Function PROCLAIM

Syntax:

proclaim declaration-specifier => implementation-dependent

Arguments and Values:

declaration-specifier---a declaration specifier.

Description:

Establishes the declaration specified by declaration-specifier in the global environment.

Such a declaration, sometimes called a global declaration or a proclamation, is always in force unless locally shadowed.

Names of variables and functions within declaration-specifier refer to dynamic variables and global function definitions, respectively.

The next figure shows a list of declaration identifiers that can be used with proclaim.

    declaration  inline     optimize  type
    ftype        notinline  special

Figure 3-22. Global Declaration Specifiers

An implementation is free to support other (implementation-defined) declaration identifiers as well.

Examples:

     (defun declare-variable-types-globally (type vars)
       (proclaim `(type ,type ,@vars))
       type)

     ;; Once this form is executed, the dynamic variable *TOLERANCE*
     ;; must always contain a float.
     (declare-variable-types-globally 'float '(*tolerance*))
    =>  FLOAT

Affected By: None.

Exceptional Situations: None.

See Also:

declaim, declare, Section 3.2 (Compilation)

Notes:

Although the execution of a proclaim form has effects that might affect compilation, the compiler does not make any attempt to recognize and specially process proclaim forms. A proclamation such as the following, even if a top level form, does not have any effect until it is executed:

    (proclaim '(special *x*))

If compile time side effects are desired, eval-when may be useful. For example:

     (eval-when (:execute :compile-toplevel :load-toplevel)
       (proclaim '(special *x*)))

In most such cases, however, it is preferrable to use declaim for this purpose.

Since proclaim forms are ordinary function forms, macro forms can expand into them.

The following X3J13 cleanup issues, not part of the specification, apply to this section:

- DECLARE-MACROS:FLUSH
- DECLARE-FUNCTION-AMBIGUITY:DELETE-FTYPE-ABBREVIATION
- DYNAMIC-EXTENT:NEW-DECLARATION

Copyright 1996-2005, LispWorks Ltd. All rights reserved.