elisp: Variables with Restricted Values

 
 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’.  SeeWriting Emacs Primitives Defining Lisp variables
 in C, 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