[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

["R. Shapiro": CLOS in 7.2]



    Date: Tue, 19 Apr 88 21:32:13 -0400
    From: kanderso@wilma.bbn.com

    ------- Forwarded Message

    Date: Tue 19 Apr 88 17:38:22-EDT
    From: "R. Shapiro" <RSHAPIRO@g.bbn.com>
    Subject: CLOS in 7.2
    To: 3600-users@g.bbn.com
    cc: kanderson@g.bbn.com, mthome@g.bbn.com

    If you're using CLOS in 7.2, you should be aware of the following:
    a CLOS bug causes any entry into the debugger to generate
    recursive errors (resulting eventually in a stack overflow &
    leaving you in the unfriendly Emergency Debugger). You can fix
    this by loading the file CLOS:CLOS;DEBUGGER-FIX. It will be made
    a patch shortly, but until then you probably want to load this
    file [an announcement will be made when the patch is made].
    - -------

I don't understand what this fixes.  How exactly is it that you manage
to get into FRAME-INTERESTING-P before BOOTSTRAP-*UNINTERESTING-FUNCTIONS*
ever gets run (since that is the only way *UNINTERESTING-FUNCTIONS* can
be a list instead of a hash-table)?

    ------- End of Forwarded Message

    Here is clos:clos;debugger-fix.lisp:

    ;;; -*- Mode: LISP; Package: DEBUGGER; Patch-File: Yes; Syntax: Zetalisp -*-


In any event, the supplied fix is incorrect.  For 7.2, it should at
least be this (changes in capital letters):

(defun (LFRAME-INTERESTING-P LISP-LANGUAGE-DEBUGGING-INSTANCE)
       (frame &optional (censor-invisible-frames *censor-invisible-frames*))
  (labels ((uninternalize-fspec (fspec)
	     ;; Internal functions of uninteresting functions are uninteresting
	     (if (and (listp fspec) (eq (first fspec) :internal))
		 (if (and (or (eq (fourth fspec) 'si:with-process-interactive-priority-body)
			      (eq (fourth fspec) 'si:with-process-non-interactive-priority-body))
			  (not (memq :process-priority *invisible-frame-types-to-show*)))
		     ;; These things aren't interesting
		     (return-from frame-interesting-p nil)
		   (uninternalize-fspec (second fspec)))
	       fspec))
	   (uninteresting-function-p (fspec)
	     (cond ((cl:hash-table-p *uninteresting-functions*)
		    (gethash fspec *uninteresting-functions*))
		   ((or (listp *uninteresting-functions*)
			(cl:vectorp *uninteresting-functions*))
		    (CL:MEMBER fspec *uninteresting-functions*)))))
    (if (and censor-invisible-frames
	     (frame-invisible-p frame))
	nil
      (let* ((function (frame-function frame))
	     (fspec (uninternalize-fspec (function-name-for-debugger frame))))
	(and (neq fspec function)		;Not an unnamed LAMBDA expression
	     (not (uninteresting-function-p fspec))
	     (not (member fspec si:*digested-special-forms*)))))))

    ;; True if frame is not just an internal frame of an interpreted function
    (defun frame-interesting-p (...)
      ...)