Function: byte-compile-defvar

byte-compile-defvar is a byte-compiled function defined in bytecomp.el.gz.

Signature

(byte-compile-defvar FORM)

Source Code

;; Defined in /usr/src/emacs/lisp/emacs-lisp/bytecomp.el.gz
(defun byte-compile-defvar (form)
  ;; This is not used for file-level defvar/consts.
  (when (and (symbolp (nth 1 form))
             (not (string-match "[-*/:$]" (symbol-name (nth 1 form))))
             (byte-compile-warning-enabled-p 'lexical (nth 1 form)))
    (byte-compile-warn-x
     (nth 1 form)
     "global/dynamic var `%s' lacks a prefix"
     (nth 1 form)))
  (byte-compile-docstring-style-warn form)
  (let ((fun (nth 0 form))
	(var (nth 1 form))
	(value (nth 2 form))
	(string (nth 3 form)))
    (when (or (> (length form) 4)
	      (and (eq fun 'defconst) (null (cddr form))))
      (let ((ncall (length (cdr form))))
	(byte-compile-warn-x
         fun
	 "`%s' called with %d argument%s, but %s %s"
	 fun ncall
	 (if (= 1 ncall) "" "s")
	 (if (< ncall 2) "requires" "accepts only")
	 "2-3")))
    (push var byte-compile-bound-variables)
    (if (eq fun 'defconst)
	(push var byte-compile-const-variables))
    (when (and string (not (stringp string)))
      (byte-compile-warn-x
       string
       "third arg to `%s %s' is not a string: %s"
       fun var string))
    ;; Delegate the actual work to the function version of the
    ;; special form, named with a "-1" suffix.
    (byte-compile-form-do-effect
     (cond
      ((eq fun 'defconst) `(defconst-1 ',var ,@(nthcdr 2 form)))
      ((not (cddr form)) `',var) ; A simple (defvar foo) just returns foo.
      (t `(defvar-1 ',var
                    ;; Don't eval `value' if `defvar' wouldn't eval it either.
                    ,(if (macroexp-const-p value) value
                       `(if (boundp ',var) nil ,value))
                    ,@(nthcdr 3 form)))))))