Merge commit 'feccd2d3100fd2964d4c2df58ab3da7ce4949a66' into vm-check
[bpt/guile.git] / module / ice-9 / debugging / steps.scm
CommitLineData
8746959c
NJ
1;;;; (ice-9 debugging steps) -- stepping through code from the debugger
2
3;;; Copyright (C) 2002, 2004 Free Software Foundation, Inc.
4;;;
5;; This library is free software; you can redistribute it and/or
6;; modify it under the terms of the GNU Lesser General Public
7;; License as published by the Free Software Foundation; either
8;; version 2.1 of the License, or (at your option) any later version.
9;;
10;; This library is distributed in the hope that it will be useful,
11;; but WITHOUT ANY WARRANTY; without even the implied warranty of
12;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13;; Lesser General Public License for more details.
14;;
15;; You should have received a copy of the GNU Lesser General Public
16;; License along with this library; if not, write to the Free Software
17;; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18
19(define-module (ice-9 debugging steps)
20 #:use-module (ice-9 debugging traps)
21 #:use-module (ice-9 and-let-star)
22 #:use-module (ice-9 debugger)
23 #:use-module (ice-9 optargs)
24 #:export (at-exit
25 at-entry
26 at-apply
27 at-step
28 at-next))
29
30;;; at-exit DEPTH BEHAVIOUR
31;;;
32;;; Install a behaviour to run when we exit the current frame.
33
34(define (at-exit depth behaviour)
35 (install-trap (make <exit-trap>
36 #:depth depth
37 #:single-shot #t
38 #:behaviour behaviour)))
39
40;;; at-entry BEHAVIOUR [COUNT]
41;;;
42;;; Install a behaviour to run when we get to the COUNT'th next frame
43;;; entry. COUNT defaults to 1.
44
45(define* (at-entry behaviour #:optional (count 1))
46 (install-trap (make <entry-trap>
47 #:skip-count (- count 1)
48 #:single-shot #t
49 #:behaviour behaviour)))
50
51;;; at-apply BEHAVIOUR [COUNT]
52;;;
53;;; Install a behaviour to run when we get to the COUNT'th next
54;;; application. COUNT defaults to 1.
55
56(define* (at-apply behaviour #:optional (count 1))
57 (install-trap (make <apply-trap>
58 #:skip-count (- count 1)
59 #:single-shot #t
60 #:behaviour behaviour)))
61
62;;; at-step BEHAVIOUR [COUNT [FILENAME [DEPTH]]
63;;;
64;;; Install BEHAVIOUR to run on the COUNT'th next application, frame
65;;; entry or frame exit. COUNT defaults to 1. If FILENAME is
66;;; specified and not #f, only frames that begin in the named file are
67;;; counted.
68
69(define* (at-step behaviour #:optional (count 1) filename (depth 1000))
70 (install-trap (make <step-trap>
71 #:file-name filename
72 #:exit-depth depth
73 #:skip-count (- count 1)
74 #:single-shot #t
75 #:behaviour behaviour)))
76
77;; (or count (set! count 1))
78;; (letrec ((proc (lambda (trap-context)
79;; ;; Behaviour whenever we enter or exit a frame.
80;; (set! count (- count 1))
81;; (if (= count 0)
82;; (begin
83;; (remove-enter-frame-hook! step)
84;; (remove-apply-frame-hook! step)
85;; (behaviour trap-context)))))
86;; (step (lambda (trap-context)
87;; ;; Behaviour on frame entry: both execute the above
88;; ;; and install it as an exit hook.
89;; (if (or (not filename)
90;; (equal? (frame-file-name (tc:frame trap-context))
91;; filename))
92;; (begin
93;; (proc trap-context)
94;; (at-exit (tc:depth trap-context) proc))))))
95;; (at-exit depth proc)
96;; (add-enter-frame-hook! step)
97;; (add-apply-frame-hook! step)))
98
99;;; at-next BEHAVIOUR [COUNT]
100;;;
101;;; Install a behaviour to run when we get to the COUNT'th next frame
102;;; entry in the same source file as the current location. COUNT
103;;; defaults to 1. If the current location has no filename, fall back
104;;; silently to `at-entry' behaviour.
105
106;;; (ice-9 debugging steps) ends here.