Function: eval-defun

eval-defun is an interactive and byte-compiled function defined in elisp-mode.el.gz.

Signature

(eval-defun EDEBUG-IT)

Documentation

Evaluate the top-level form containing point, or after point.

If the current defun is actually a call to defvar or defcustom, evaluating it this way resets the variable using its initial value expression (using the defcustom's :set function if there is one), even if the variable already has some other value. (Normally defvar and
defcustom do not alter the value if there already is one.) In an
analogous way, evaluating a defface overrides any customizations of the face, so that it becomes defined exactly as the defface expression says.

If eval-expression-debug-on-error is non-nil, which is the default, this command arranges for all errors to enter the debugger.

With a prefix argument, instrument the code for Edebug.

If acting on a defun for FUNCTION, and the function was instrumented, Edebug: FUNCTION is printed in the echo area. If not instrumented, just FUNCTION is printed.

If not acting on a defun, the result of evaluation is displayed in the echo area. This display is controlled by the variables eval-expression-print-length and eval-expression-print-level, which see.

This function has :around advice: edebug--eval-defun.

Probably introduced at or before Emacs version 18.

Key Bindings

Source Code

;; Defined in /usr/src/emacs/lisp/progmodes/elisp-mode.el.gz
(defun eval-defun (edebug-it)
  "Evaluate the top-level form containing point, or after point.

If the current defun is actually a call to `defvar' or `defcustom',
evaluating it this way resets the variable using its initial value
expression (using the defcustom's :set function if there is one), even
if the variable already has some other value.  \(Normally `defvar' and
`defcustom' do not alter the value if there already is one.)  In an
analogous way, evaluating a `defface' overrides any customizations of
the face, so that it becomes defined exactly as the `defface' expression
says.

If `eval-expression-debug-on-error' is non-nil, which is the default,
this command arranges for all errors to enter the debugger.

With a prefix argument, instrument the code for Edebug.

If acting on a `defun' for FUNCTION, and the function was
instrumented, `Edebug: FUNCTION' is printed in the echo area.  If not
instrumented, just FUNCTION is printed.

If not acting on a `defun', the result of evaluation is displayed in
the echo area.  This display is controlled by the variables
`eval-expression-print-length' and `eval-expression-print-level',
which see."
  (interactive "P")
  (cond (edebug-it
	 (require 'edebug)
	 (defvar edebug-all-defs)
	 (eval-defun (not edebug-all-defs)))
	(t
	 (if (null eval-expression-debug-on-error)
	     (elisp--eval-defun)
	   (let (new-value value)
	     (let ((debug-on-error elisp--eval-last-sexp-fake-value))
	       (setq value (elisp--eval-defun))
	       (setq new-value debug-on-error))
	     (unless (eq elisp--eval-last-sexp-fake-value new-value)
	       (setq debug-on-error new-value))
	     value)))))