From: William H. N. <wil...@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 (in-package :cl-user) (defstruct boggle) (defmethod print-object ((boggle boggle) stream) (break "From here, BACKTRACE might look pretty bizarre.") (print-unreadable-object (boggle stream))) (setf *print-circle* t *print-pretty* t) (setf sb-debug:*debug-print-variable-alist* (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) sb-debug:*debug-print-variable-alist*)) (print (make-boggle)) 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 <wil...@ai...> "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 |