5.5  Declarations

[syntax] (declare DECLSPEC ...)
Process declaration specifiers. Declarations always override any command-line settings. Declarations are valid for the whole compilation-unit (source file), the position of the declaration in the source file can be arbitrary. DECLSPEC may be any of the following:

[declaration specifier] (always-bound SYMBOL ...)
Declares that the given variables are always bound and accesses to those have not to be checked.

[declaration specifier] (block)
Assume global variables are never redefined. This is the same as specifying the -block option.

[declaration specifier] (block-global SYMBOL ...)
[declaration specifier] (hide SYMBOL ...)
Declares that the toplevel bindings for SYMBOL ... should not be accessible from code in other compilation units or by eval. Access to toplevel bindings declared as block global is also more efficient.

[declaration specifier] (bound-to-procedure SYMBOL ...)
Declares that the given identifiers are always bound to procedure values.

[declaration specifier] (compile-time-macros-only)
Equivalent to the compiler option of the same name - low-level macros defined in the compiled code are not made available at runtime.

[declaration specifier] (compress-literals [THRESHOLD [INITIALIZER]])
The same as the -compress-literals compiler option. The threshold argument defaults to 50. If the optional argument INITIALIZER is given, then the literals will not be created at module startup, but when the procedure with this name will be called.

[declaration specifier] (foreign-declare STRING ...)
Include given strings verbatim into header of generated file.

[declaration specifier] (foreign-parse STRING ...)
Parse given strings and generate foreign-interface bindings. See the chapter ``The "Easy" FFI'' for more information.

[declaration specifier] (interrupts-enabled)
Enable timer-interrupts checks in the compiled program (the default).

[declaration specifier] (disable-interrupts)
[declaration specifier] (not interrupts-enabled)
Disable timer-interrupts checks in the compiled program. Threads can not be preempted in main- or library-units that contain this declaration.

[declaration specifier] (no-argc-checks)
Disables argument count checking.

[declaration specifier] (no-bound-checks)
Disables the bound-checking of toplevel bindings.

[declaration specifier] (no-procedure-checks)
Disables checking of values in operator position for being of procedure type.

[declaration specifier] ([number-type] TYPE)
[declaration specifier] (fixnum-arithmetic)
Declares that only numbers of the given type are used. TYPE may be fixnum or generic (which is the default).

[declaration specifier] ([not] standard-bindings SYMBOL ...)
Declares that all given standard procedures (or all if no symbols are specified) are never globally redefined. If not is specified, then all but the given standard bindings are assumed to be never redefined.

[declaration specifier] ([not] extended-bindings SYMBOL ...)
Declares that all given non-standard and Chicken-specific procedures (or all if no symbols are specified) are never globally redefined. If not is specified, then all but the given extended bindings are assumed to be never redefined.

[declaration specifier] ([not] usual-integrations SYMBOL ...)
Declares that all given standard and extended bindings (or all if no symbols are specified) are never globally redefined. If not is specified, then all but the given standard and extended bindings are assumed to be never redefined.

[declaration specifier] (unit SYMBOL)
Specify compilation unit-name (if this is a library)

[declaration specifier] (unsafe)
[declaration specifier] (not safe)
Do not generate safety-checks. This is the same as specifying the -unsafe option. Also implies

(declare (no-bound-checks) (no-procedure-checks) (no-argc-checks))

[declaration specifier] (uses SYMBOL ...)
Gives a list of used library-units. Before the toplevel-expressions of the main-module are executed, all used units evaluate their toplevel-expressions in the order in which they appear in this declaration. If a library unit A uses another unit B, then B's toplevel expressions are evaluated before A's. Furthermore, the used symbols are registered as features during compile-time, so cond-expand knows about them.