]> git.donarmstrong.com Git - lilypond.git/blobdiff - guile18/ice-9/debugging/steps.scm
Import guile-1.8 as multiple upstream tarball component
[lilypond.git] / guile18 / ice-9 / debugging / steps.scm
diff --git a/guile18/ice-9/debugging/steps.scm b/guile18/ice-9/debugging/steps.scm
new file mode 100644 (file)
index 0000000..fedbc6a
--- /dev/null
@@ -0,0 +1,106 @@
+;;;; (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.