"WITH-TIMEOUT" "TIMEOUT"
;; stepping interface
- "STEP-CONDITION" "STEP-FORM-CONDITION"
+ "STEP-CONDITION" "STEP-FORM-CONDITION" "STEP-FINISHED-CONDITION"
"STEP-VALUES-CONDITION" "STEP-VARIABLE-CONDITION"
"STEP-CONDITION-FORM" "STEP-CONDITION-RESULT"
"STEP-CONTINUE" "STEP-NEXT" "STEP-INTO"
STEP-CONDITION-FORM holds the form, and STEP-CONDITION-RESULT holds
the values returned by the form as a list. No associated restarts."))
+(define-condition step-finished-condition (step-condition)
+ ()
+ (:report
+ (lambda (condition stream)
+ (declare (ignore condition))
+ (format stream "Returning from STEP")))
+ #!+sb-doc
+ (:documentation "Condition signaled when STEP returns."))
+
\f
;;;; restart definitions
(signal 'step-values-condition :form form :result values)
(values-list values))
+(defun step-finished ()
+ (restart-case
+ (signal 'step-finished-condition)
+ (continue ())))
+
(defvar *step-help* "The following commands are available at the single
stepper's prompt:
(let ((*stack-top-hint* (sb-di::find-stepped-frame)))
(invoke-debugger condition))))
+;;; In the TTY debugger we're not interested in STEP returning
+(defmethod single-step ((condition step-finished-condition))
+ (values))
+
(defvar *stepper-hook* 'single-step
#+sb-doc "Customization hook for alternative single-steppers.
*STEPPER-HOOK* is bound to NIL prior to calling the bound function
(defun invoke-stepper (condition)
(when (and (stepping-enabled-p)
*stepper-hook*)
- (let ((hook *stepper-hook*)
- (*stepper-hook* nil))
- (funcall hook condition))))
+ (with-stepping-disabled
+ (let ((hook *stepper-hook*)
+ (*stepper-hook* nil))
+ (funcall hook condition)))))
(defmacro step (form)
#+sb-doc
functions in question have been compiled with sufficient DEBUG policy
to be at least partially steppable."
`(locally
- (declare (optimize (sb-c:insert-step-conditions 0)))
+ (declare (optimize debug (sb-c:insert-step-conditions 0)))
(format t "Single stepping. Type ? for help.~%")
(let ((*step-out* :maybe))
- (with-stepping-enabled
- (locally (declare (optimize (sb-c:insert-step-conditions 3)))
- ,form)))))
+ (unwind-protect
+ (with-stepping-enabled
+ (multiple-value-prog1
+ (locally (declare (optimize (sb-c:insert-step-conditions 3)))
+ ,form)
+ (step-finished)))))))
+
;;; checkins which aren't released. (And occasionally for internal
;;; versions, especially for internal versions off the main CVS
;;; branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".)
-"0.9.16.43"
+"0.9.16.44"