From: William Harold Newman <william.newman@ai...> - 2004-05-24 16:42:16
Oh, the fun one can have when one uses *PRINT-CIRCLE* in the debugger
and has errors (or just breakpoints) in one's PRINT-OBJECT methods!
To see the problem, load this
(defmethod print-object ((boggle boggle) stream)
(break "From here, BACKTRACE might look pretty bizarre.")
(print-unreadable-object (boggle stream)))
(setf *print-circle* t
(list* (cons '*print-circle* *print-circle*)
(cons '*print-pretty* *print-pretty*)
;; To make the BACKTRACE behavior more like what might
;; naively be expected instead of inscrutably bizarre,
;; uncomment these two lines.
#+nil (cons 'sb-impl::*circularity-hash-table* nil)
#+nil (cons 'sb-impl::*circularity-counter* nil)
and type BACKTRACE at the BREAK prompt.
As noted in the comments, rebinding the *CIRCULARITY-foo* variables on
entry to the debugger solves the problem. If I don't think of anything
better I'll probably put that fix in CVS sometime in the next few
days. But there's a lot of stuff going on here (handling signals and
whatnot) besides the aforecomplainedabout nastiness of global tables
for local properties, so it seems possible there's some issue I'm
overlooking. I don't particularly want either to overlook a nicer fix
or to find that the quick fix of rebinding introduces some other
problem I have overlooked, so I'll sit on my hands for a bit, and if
anyone has any clever suggestions or observations, please speak up.
William Harold Newman <william.newman@...>
"It takes two to lie, Marge -- one to lie and one to listen." -- Homer Simpson
PGP key fingerprint 85 CE 1C BA 79 8D 51 8C B9 25 FB EE E0 C3 E5 7C