Function: byte-compile-top-level

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

Signature

(byte-compile-top-level FORM &optional FOR-EFFECT OUTPUT-TYPE LEXENV RESERVED-CSTS)

Source Code

;; Defined in /usr/src/emacs/lisp/emacs-lisp/bytecomp.el.gz
;; Given an expression FORM, compile it and return an equivalent byte-code
;; expression (a call to the function byte-code).
(defun byte-compile-top-level (form &optional for-effect output-type
                                    lexenv reserved-csts)
  ;; OUTPUT-TYPE advises about how form is expected to be used:
  ;;	'eval or nil	-> a single form,
  ;;	'lambda		-> body of a lambda,
  ;;	'file		-> used at file-level.
  (let ((byte-compile--for-effect for-effect)
        (byte-compile-constants nil)
	(byte-compile-variables nil)
	(byte-compile-tag-number 0)
	(byte-compile-depth 0)
	(byte-compile-maxdepth 0)
        (byte-compile--lexical-environment lexenv)
        (byte-compile-reserved-constants (or reserved-csts 0))
	(byte-compile-output nil)
        (byte-compile-jump-tables nil))
    (if (memq byte-optimize '(t source))
	(setq form (byte-optimize-one-form form byte-compile--for-effect)))
    (while (and (eq (car-safe form) 'progn) (null (cdr (cdr form))))
      (setq form (nth 1 form)))
    ;; Set up things for a lexically-bound function.
    (when (and lexical-binding (eq output-type 'lambda))
      ;; See how many arguments there are, and set the current stack depth
      ;; accordingly.
      (setq byte-compile-depth (length byte-compile--lexical-environment))
      ;; If there are args, output a tag to record the initial
      ;; stack-depth for the optimizer.
      (when (> byte-compile-depth 0)
        (byte-compile-out-tag (byte-compile-make-tag))))
    ;; Now compile FORM
    (byte-compile-form form byte-compile--for-effect)
    (byte-compile-out-toplevel byte-compile--for-effect output-type)))