mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-04-30 03:40:34 +02:00
Moved ice-9/ and oop/ under module/, with the idea being that we have only scheme under module/. Adjusted configure.in and Makefile.am appropriately. Put oop/ at the end of the compilation order.
106 lines
3.5 KiB
Scheme
106 lines
3.5 KiB
Scheme
;;;; (ice-9 debugging steps) -- stepping through code from the debugger
|
|
|
|
;;; Copyright (C) 2002, 2004 Free Software Foundation, Inc.
|
|
;;;
|
|
;; This library is free software; you can redistribute it and/or
|
|
;; modify it under the terms of the GNU Lesser General Public
|
|
;; License as published by the Free Software Foundation; either
|
|
;; version 2.1 of the License, or (at your option) any later version.
|
|
;;
|
|
;; This library is distributed in the hope that it will be useful,
|
|
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
;; Lesser General Public License for more details.
|
|
;;
|
|
;; You should have received a copy of the GNU Lesser General Public
|
|
;; License along with this library; if not, write to the Free Software
|
|
;; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
|
|
(define-module (ice-9 debugging steps)
|
|
#:use-module (ice-9 debugging traps)
|
|
#:use-module (ice-9 and-let-star)
|
|
#:use-module (ice-9 debugger)
|
|
#:use-module (ice-9 optargs)
|
|
#:export (at-exit
|
|
at-entry
|
|
at-apply
|
|
at-step
|
|
at-next))
|
|
|
|
;;; at-exit DEPTH BEHAVIOUR
|
|
;;;
|
|
;;; Install a behaviour to run when we exit the current frame.
|
|
|
|
(define (at-exit depth behaviour)
|
|
(install-trap (make <exit-trap>
|
|
#:depth depth
|
|
#:single-shot #t
|
|
#:behaviour behaviour)))
|
|
|
|
;;; at-entry BEHAVIOUR [COUNT]
|
|
;;;
|
|
;;; Install a behaviour to run when we get to the COUNT'th next frame
|
|
;;; entry. COUNT defaults to 1.
|
|
|
|
(define* (at-entry behaviour #:optional (count 1))
|
|
(install-trap (make <entry-trap>
|
|
#:skip-count (- count 1)
|
|
#:single-shot #t
|
|
#:behaviour behaviour)))
|
|
|
|
;;; at-apply BEHAVIOUR [COUNT]
|
|
;;;
|
|
;;; Install a behaviour to run when we get to the COUNT'th next
|
|
;;; application. COUNT defaults to 1.
|
|
|
|
(define* (at-apply behaviour #:optional (count 1))
|
|
(install-trap (make <apply-trap>
|
|
#:skip-count (- count 1)
|
|
#:single-shot #t
|
|
#:behaviour behaviour)))
|
|
|
|
;;; at-step BEHAVIOUR [COUNT [FILENAME [DEPTH]]
|
|
;;;
|
|
;;; Install BEHAVIOUR to run on the COUNT'th next application, frame
|
|
;;; entry or frame exit. COUNT defaults to 1. If FILENAME is
|
|
;;; specified and not #f, only frames that begin in the named file are
|
|
;;; counted.
|
|
|
|
(define* (at-step behaviour #:optional (count 1) filename (depth 1000))
|
|
(install-trap (make <step-trap>
|
|
#:file-name filename
|
|
#:exit-depth depth
|
|
#:skip-count (- count 1)
|
|
#:single-shot #t
|
|
#:behaviour behaviour)))
|
|
|
|
;; (or count (set! count 1))
|
|
;; (letrec ((proc (lambda (trap-context)
|
|
;; ;; Behaviour whenever we enter or exit a frame.
|
|
;; (set! count (- count 1))
|
|
;; (if (= count 0)
|
|
;; (begin
|
|
;; (remove-enter-frame-hook! step)
|
|
;; (remove-apply-frame-hook! step)
|
|
;; (behaviour trap-context)))))
|
|
;; (step (lambda (trap-context)
|
|
;; ;; Behaviour on frame entry: both execute the above
|
|
;; ;; and install it as an exit hook.
|
|
;; (if (or (not filename)
|
|
;; (equal? (frame-file-name (tc:frame trap-context))
|
|
;; filename))
|
|
;; (begin
|
|
;; (proc trap-context)
|
|
;; (at-exit (tc:depth trap-context) proc))))))
|
|
;; (at-exit depth proc)
|
|
;; (add-enter-frame-hook! step)
|
|
;; (add-apply-frame-hook! step)))
|
|
|
|
;;; at-next BEHAVIOUR [COUNT]
|
|
;;;
|
|
;;; Install a behaviour to run when we get to the COUNT'th next frame
|
|
;;; entry in the same source file as the current location. COUNT
|
|
;;; defaults to 1. If the current location has no filename, fall back
|
|
;;; silently to `at-entry' behaviour.
|
|
|
|
;;; (ice-9 debugging steps) ends here.
|