Next: Generalized Variables, Previous: Variable Aliases, Up: Variables [Contents][Index]

### 11.14 Variables with Restricted Values

Ordinary Lisp variables can be assigned any value that is a valid Lisp object. However, certain Lisp variables are not defined in Lisp, but in C. Most of these variables are defined in the C code using `DEFVAR_LISP`. Like variables defined in Lisp, these can take on any value. However, some variables are defined using `DEFVAR_INT` or `DEFVAR_BOOL`. See Writing Emacs Primitives, in particular the description of functions of the type `syms_of_filename`, for a brief discussion of the C implementation.

Variables of type `DEFVAR_BOOL` can only take on the values `nil` or `t`. Attempting to assign them any other value will set them to `t`:

    (let ((display-hourglass 5))
      display-hourglass)
         ⇒ t

Variable: byte-boolean-vars

  This variable holds a list of all variables of type `DEFVAR_BOOL`.

Variables of type `DEFVAR_INT` can take on only integer values. Attempting to assign them any other value will result in an error:

    (setq undo-limit 1000.0)
    error→ Wrong type argument: integerp, 1000.0