Function: edebug-eval-expression

edebug-eval-expression is an interactive and byte-compiled function defined in edebug.el.gz.

Signature

(edebug-eval-expression EXPR &optional PP)

Documentation

Evaluate an expression in the outside environment.

If interactive, prompt for the expression.

Print result in minibuffer by default, but if PP is non-nil open a new window and pretty-print the result there. (Interactively, this is the prefix key.)

View in manual

Key Bindings

Source Code

;; Defined in /usr/src/emacs/lisp/emacs-lisp/edebug.el.gz
(defun edebug-eval-expression (expr &optional pp)
  "Evaluate an expression in the outside environment.
If interactive, prompt for the expression.

Print result in minibuffer by default, but if PP is non-nil open
a new window and pretty-print the result there.  (Interactively,
this is the prefix key.)"
  (interactive (list (read--expression "Edebug eval: ")
                     current-prefix-arg))
  (let* ((errored nil)
         (value
          (edebug-outside-excursion
           (if debug-allow-recursive-debug
               (edebug-eval expr)
             (condition-case err
                 (edebug-eval expr)
               (error
                (setq errored
                      (format "%s: %s"
                              (get (car err) 'error-message)
                              (car (cdr err)))))))))
         (result
          (unless errored
            (values--store-value value)
            (concat (edebug-safe-prin1-to-string value)
                    (eval-expression-print-format value)))))
    ;; Provide a defined previous value also in case of an error.
    (setq edebug-previous-value (if errored nil value))
    (cond
     (errored
      (message "Error: %s" errored))
     (pp
      (save-selected-window
        (pop-to-buffer "*Edebug Results*")
        (erase-buffer)
        (pp value (current-buffer))
        (goto-char (point-min))
        (lisp-data-mode)))
     (t
      (princ result)))))