+2000-01-12 Gerd Moellmann <gerd@gnu.org>
+
+ * emacs-lisp/lisp-mode.el (eval-last-sexp-1): Renamed from
+ eval-last-sexp. Don't bind debug-on-error here.
+ (eval-last-sexp): New function. Bind debug-on-error if
+ eval-expression-debug-on-error is non-nil.
+ (eval-defun-2, eval-defun): Likewise.
+
+ * simple.el (eval-expression): Don't bind debug-on-error if
+ eval-expression-debug-on-error is nil. Detect changed
+ debug-on-error, and propagate new value to global binding, if
+ eval-expression-debug-on-error is non-nil,
+ (eval-expression-debug-on-error): Change doc string.
+
2000-01-11 Richard M. Stallman <rms@caffeine.ai.mit.edu>
* emacs-lisp/edebug.el (with-syntax-table): Add a def-edebug-spec.
(eval-last-sexp t)
(terpri)))
\f
-(defun eval-last-sexp (eval-last-sexp-arg-internal)
+(defun eval-last-sexp-1 (eval-last-sexp-arg-internal)
"Evaluate sexp before point; print value in minibuffer.
With argument, print output into current buffer."
- (interactive "P")
- (let ((standard-output (if eval-last-sexp-arg-internal (current-buffer) t))
- (debug-on-error eval-expression-debug-on-error))
+ (let ((standard-output (if eval-last-sexp-arg-internal (current-buffer) t)))
(let ((value
(eval (let ((stab (syntax-table))
(opoint (point))
(print-level eval-expression-print-level))
(prin1 value)))))
+(defun eval-last-sexp (eval-last-sexp-arg-internal)
+ "Evaluate sexp before point; print value in minibuffer.
+With argument, print output into current buffer."
+ (interactive "P")
+ (if (null eval-expression-debug-on-error)
+ (eval-last-sexp-1 eval-last-sexp-arg-internal)
+ (let ((old-value (make-symbol "t")) new-value value)
+ (let ((debug-on-error old-value))
+ (setq value (eval-last-sexp-1 eval-last-sexp-arg-internal))
+ (setq new-value debug-on-error))
+ (unless (eq old-value new-value)
+ (setq debug-on-error new-value))
+ value)))
+
;; Change defvar into defconst within FORM,
;; and likewise for other constructs as necessary.
(defun eval-defun-1 (form)
(cons 'progn (mapcar 'eval-defun-1 (cdr form))))
(t form)))
-(defun eval-defun (eval-defun-arg-internal)
+(defun eval-defun-2 (eval-defun-arg-internal)
"Evaluate defun that point is in or before.
The value is displayed in the minibuffer.
If the current defun is actually a call to `defvar',
',form))))))
;; The result of evaluation has been put onto VALUES. So return it.
(car values))
+
+(defun eval-defun (eval-defun-arg-internal)
+ "Evaluate defun that point is in or before.
+The value is displayed in the minibuffer.
+If the current defun is actually a call to `defvar',
+then reset the variable using the initial value expression
+even if the variable already has some other value.
+\(Normally `defvar' does not change the variable's value
+if it already has a value.\)
+
+With argument, insert value in current buffer after the defun.
+Return the result of evaluation."
+ (interactive "P")
+ (if (null eval-expression-debug-on-error)
+ (eval-defun-2 eval-defun-arg-internal)
+ (let ((old-value (make-symbol "t")) new-value value)
+ (let ((debug-on-error old-value))
+ (setq value (eval-defun-2 eval-defun-arg-internal))
+ (setq new-value debug-on-error))
+ (unless (eq old-value new-value)
+ (setq debug-on-error new-value))
+ value)))
+
\f
(defun lisp-comment-indent ()
(if (looking-at "\\s<\\s<\\s<")