X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcode%2Ferror-error.lisp;h=cefeab5e3ed58bc30b8fb0b13cd18deb6157c8d2;hb=f69e89d31d95c15469110ba75ae1da8ac7cf3f32;hp=5a0873a94ac65b22f3c10f0babd01dbab53792ab;hpb=ba7659c92f2b7fac7e9532a3db9114c5bdc4ab55;p=sbcl.git diff --git a/src/code/error-error.lisp b/src/code/error-error.lisp index 5a0873a..cefeab5 100644 --- a/src/code/error-error.lisp +++ b/src/code/error-error.lisp @@ -12,34 +12,33 @@ ;;; These specials are used by ERROR-ERROR to track the success of recovery ;;; attempts. (defvar *error-error-depth* 0) -(defvar *error-throw-up-count* 0) ;;; ERROR-ERROR can be called when the error system is in trouble and needs to ;;; punt fast. It prints a message without using FORMAT. If we get into this ;;; recursively, then we halt. (defun error-error (&rest messages) (let ((*error-error-depth* (1+ *error-error-depth*))) - (when (> *error-throw-up-count* 50) - (/show0 "*ERROR-THROW-UP-COUNT* too big, trying HALT") - (%primitive sb!c:halt) - (/show0 "*ERROR-THROW-UP-COUNT* too big, trying THROW") - (throw 'sb!impl::toplevel-catcher nil)) (case *error-error-depth* (1) (2 (stream-cold-init-or-reset)) (3 - (incf *error-throw-up-count*) (/show0 "*ERROR-ERROR-DEPTH* too big, trying THROW") - (throw 'sb!impl::toplevel-catcher nil)) + (throw 'toplevel-catcher nil)) (t (/show0 "*ERROR-ERROR-DEPTH* too big, trying HALT") (%primitive sb!c:halt) (/show0 "*ERROR-ERROR-DEPTH* too big, trying THROW") - (throw 'sb!impl::toplevel-catcher nil))) + (throw 'toplevel-catcher nil))) (with-standard-io-syntax (let ((*print-readably* nil)) - (dolist (item messages) - (princ item *terminal-io*)) - (sb!debug:internal-debug))))) + (dolist (item messages) + (princ item *terminal-io*)) + (terpri *terminal-io*) + (sb!debug:backtrace :stream *terminal-io*) + (force-output *terminal-io*) + (invoke-debugger + (coerce-to-condition "Maximum error nesting depth exceeded" nil + 'simple-error + 'error))))))