Mirko Vukovic wrote:
2008/2/8 Mark Harig <idirectscm@aim.com>:
  
Jean-Claude Beaudoin wrote:
 >
 > Hello everyone,
 >
 > It seems that version 2.44 of clisp broke slime 2.0.
 >
 > Here is my quick and dirty fix for it:
 >
 According to the ChangeLog for CLISP version 2.44, both FRAME-UP-1 and
 FRAME-DOWN-1 have been removed:

 2008-01-15  Sam Steingold  <sds@gnu.org>

  * debug.d (climb_stack_once, climb_stack_repeat): merge into climb_stack
  (FRAME-UP-1, FRAME-DOWN-1): remove
  (FRAME-UP, FRAME-DOWN): accept an additional REPEAT argument
  * reploop.lisp (frame-limit-down, frame-limit-up, debug-up)
  (debug-top, debug-down, debug-bottom, frame-up-down):
  use (frame-up 1 ...) instead of (frame-up-1 ...)
  and (frame-down 1 ...) instead of (frame-down-1 ...)
  and (frame-up t ...) instead of (frame-up ...)
  and (frame-down t ...) instead of (frame-down ...)
  (print-backtrace): use ~:P in message
  * constsym.d, subr.d (frame_up_1, frame_down_1): remove

 Here is a patch file for the latest revision of swank-clisp.lisp (1.65)
 that adds the
 implementation-specific code suggested by Jean-Claude Beaudoin, but with
 additional code for FRAME-DOWN/FRAME-DOWN-1.  It also moves
 the function definition for SLDB-BACKTRACE before the first reference to
 it to
 eliminate a compiler warning.


--- swank-clisp.lisp-1.65   2008-02-08 15:15:33.375000000 -0500
 +++ swank-clisp.lisp    2008-02-08 15:21:20.609375000 -0500
 @@ -249,6 +249,21 @@

  (defvar *sldb-backtrace*)

 +(eval-when (:compile-toplevel :load-toplevel :execute)
 +  (when (string< "2.44" (lisp-implementation-version))
 +    (pushnew :clisp-2.44+ *features*)))
 +
 +(defun sldb-backtrace ()
 +  "Return a list ((ADDRESS . DESCRIPTION) ...) of frames."
 +  (do ((frames '())
 +       (last nil frame)
 +       (frame (sys::the-frame)
 +              #+clisp-2.44+ (sys::frame-up 1 frame 1)
 +              #-clisp-2.44+ (sys::frame-up-1 frame 1))) ; 1 = "all frames"
 +      ((eq frame last) (nreverse frames))
 +    (unless (boring-frame-p frame)
 +      (push frame frames))))
 +
  (defimplementation call-with-debugging-environment (debugger-loop-fn)
   (let* (;;(sys::*break-count* (1+ sys::*break-count*))
          ;;(sys::*driver* debugger-loop-fn)
 @@ -260,15 +275,6 @@
  (defun nth-frame (index)
   (nth index *sldb-backtrace*))

 -(defun sldb-backtrace ()
 -  "Return a list ((ADDRESS . DESCRIPTION) ...) of frames."
 -  (do ((frames '())
 -       (last nil frame)
 -       (frame (sys::the-frame) (sys::frame-up-1 frame 1))) ; 1 = "all frames"
 -      ((eq frame last) (nreverse frames))
 -    (unless (boring-frame-p frame)
 -      (push frame frames))))
 -
  (defun boring-frame-p (frame)
   (member (frame-type frame) '(stack-value bind-var bind-env)))

 @@ -418,7 +424,9 @@
         (venv-ref (next-venv env) (- i (/ (1- (length env)) 2))))))

  (defun %parse-stack-values (frame)
 -  (labels ((next (fp) (sys::frame-down-1 fp 1))
 +  (labels ((next (fp)
 +             #+clisp-2.44+ (sys::frame-down 1 fp 1)
 +             #-clisp-2.44+ (sys::frame-down-1 fp 1))
            (parse (fp accu)
              (let ((str (frame-to-string fp)))
                (cond ((is-prefix-p "- " str)
 @@ -433,6 +441,8 @@
                      (t (parse (next fp) accu))))))
     (parse (next frame) '())))

 +(setq *features* (remove :clisp-2.44+ *features*))
 +
  (defun is-prefix-p (pattern string)
   (not (mismatch pattern string :end2 (min (length pattern)
                                            (length string)))))

_______________________________________________
 slime-devel site list
 slime-devel@common-lisp.net
 http://common-lisp.net/mailman/listinfo/slime-devel

    

Mark,

Could you please clarify to what version of slime I should apply this
patch?  2.0 or the latest CVS?

Thank you,

Mirko
  
It was applied to revision 1.65 of swank-clisp.lisp, i.e., the latest revision
in the CVS repository at that time.  Since then, two revisions have been
added.  Here is a new patch file that can be applied to the latest revision
in the CVS repository, i.e., revision 1.67.