GNU bug report logs -
#9463
24.0.50; Errors should not be continuable
Previous Next
Reported by: Helmut Eller <eller.helmut <at> gmail.com>
Date: Thu, 8 Sep 2011 12:07:02 UTC
Severity: normal
Tags: notabug, wontfix
Found in version 24.0.50
Done: Glenn Morris <rgm <at> gnu.org>
Bug is archived. No further changes may be made.
Full log
View this message in rfc822 format
* Stefan Monnier [2011-09-09 21:44] writes:
>> Specifically, I'm saying that c should not unwind the stack after
>> errors.
>
> I understand that's what you want. The fixes I installed in the C side
> were done to make it possible for "c" to continue after an error, which
> is a very useful behavior in several cases. So I'm definitely not going
> to revert this change.
>
> What I can offer is to provide more flexibility so you could for
> instance rebind "c" to some command that simulates the behavior you used
> to get with "c". We could also consider changing "c" so it asks for
> confirmation before continuing from an error.
>
> But for any of that, we first have to change the code so that "c" can
> know whether we were called because of an error or not: currently "c"
> doesn't known that (and it didn't know that either in earlier Emacsen).
The patch below is what I think that the debugger should do.
Incidentally, C-M-c does pretty much the same as what c does currently.
So, no new command to get the current behavior would be needed.
=== modified file 'lisp/emacs-lisp/debug.el'
--- lisp/emacs-lisp/debug.el 2011-08-22 21:16:46 +0000
+++ lisp/emacs-lisp/debug.el 2011-09-10 18:23:13 +0000
@@ -98,6 +98,9 @@
(defvar inhibit-trace) ;Not yet implemented.
+(defvar debugger-args nil
+ "Arguments passed to `debug'.")
+
;;;###autoload
(setq debugger 'debug)
;;;###autoload
@@ -419,15 +422,27 @@
(message "Proceeding, will debug on next eval or call.")
(exit-recursive-edit))
+(defun debugger-continuable-p ()
+ "Can we reasonably continue from the current situation?"
+ (and debugger-may-continue
+ (not (eq (car debugger-args)
+ 'error))))
+
(defun debugger-continue ()
"Continue, evaluating this expression without stopping."
(interactive)
- (unless debugger-may-continue
- (error "Cannot continue"))
- (message "Continuing.")
+ (cond ((debugger-condition-continuable-p)
+ (message "Continuing.")
+ (debugger-exit-recursive-edit))
+ (t
+ (message "Cannot continue")
+ (ding))))
+
+(defun debugger-exit-recursive-edit ()
+ ;; Exit but first check if we've flagged some frame for
+ ;; debug-on-exit, in which case we'll probably come back to the
+ ;; debugger soon.
(save-excursion
- ;; Check to see if we've flagged some frame for debug-on-exit, in which
- ;; case we'll probably come back to the debugger soon.
(goto-char (point-min))
(if (re-search-forward "^\\* " nil t)
(setq debugger-will-be-back t)))
@@ -438,16 +453,14 @@
This is only useful when the value returned from the debugger
will be used, such as in a debug on exit from a frame."
(interactive "XReturn value (evaluated): ")
- (setq debugger-value val)
- (princ "Returning " t)
- (prin1 debugger-value)
- (save-excursion
- ;; Check to see if we've flagged some frame for debug-on-exit, in which
- ;; case we'll probably come back to the debugger soon.
- (goto-char (point-min))
- (if (re-search-forward "^\\* " nil t)
- (setq debugger-will-be-back t)))
- (exit-recursive-edit))
+ (cond ((debugger-condition-continuable-p)
+ (setq debugger-value val)
+ (princ "Returning " t)
+ (prin1 debugger-value)
+ (debugger-exit-recursive-edit))
+ (t
+ (message "Cannot return")
+ (ding))))
(defun debugger-jump ()
"Continue to exit from this frame, with all debug-on-entry suspended."
This bug report was last modified 13 years and 151 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.