Merge enhanced debugging features from `guile-debugger' package.
[bpt/guile.git] / ice-9 / debugger / state.scm
1 ;;;; (ice-9 debugger state) -- debugger state representation
2
3 ;;; Copyright (C) 2002 Free Software Foundation, Inc.
4 ;;;
5 ;;; This program is free software; you can redistribute it and/or
6 ;;; modify it under the terms of the GNU General Public License as
7 ;;; published by the Free Software Foundation; either version 2, or
8 ;;; (at your option) any later version.
9 ;;;
10 ;;; This program 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 ;;; General Public License for more details.
14 ;;;
15 ;;; You should have received a copy of the GNU General Public License
16 ;;; along with this software; see the file COPYING. If not, write to
17 ;;; the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
18 ;;; Boston, MA 02111-1307 USA
19 ;;;
20 ;;; As a special exception, the Free Software Foundation gives permission
21 ;;; for additional uses of the text contained in its release of GUILE.
22 ;;;
23 ;;; The exception is that, if you link the GUILE library with other files
24 ;;; to produce an executable, this does not by itself cause the
25 ;;; resulting executable to be covered by the GNU General Public License.
26 ;;; Your use of that executable is in no way restricted on account of
27 ;;; linking the GUILE library code into it.
28 ;;;
29 ;;; This exception does not however invalidate any other reasons why
30 ;;; the executable file might be covered by the GNU General Public License.
31 ;;;
32 ;;; This exception applies only to the code released by the
33 ;;; Free Software Foundation under the name GUILE. If you copy
34 ;;; code from other Free Software Foundation releases into a copy of
35 ;;; GUILE, as the General Public License permits, the exception does
36 ;;; not apply to the code that you add in this way. To avoid misleading
37 ;;; anyone as to the status of such modified files, you must delete
38 ;;; this exception notice from them.
39 ;;;
40 ;;; If you write modifications of your own for GUILE, it is your choice
41 ;;; whether to permit this exception to apply to your modifications.
42 ;;; If you do not wish that, delete this exception notice.
43
44 (define-module (ice-9 debugger state)
45 #:export (make-state
46 state-stack
47 state-index
48 state-flags
49 set-stack-index!))
50
51 (define state-rtd (make-record-type "debugger-state" '(stack index flags)))
52 (define state? (record-predicate state-rtd))
53 (define make-state
54 (let ((make-state-internal (record-constructor state-rtd
55 '(stack index flags))))
56 (lambda (stack index . flags)
57 (make-state-internal stack index flags))))
58 (define state-stack (record-accessor state-rtd 'stack))
59 (define state-index (record-accessor state-rtd 'index))
60 (define state-flags (record-accessor state-rtd 'flags))
61
62 (define set-state-index! (record-modifier state-rtd 'index))
63
64 (define (set-stack-index! state index)
65 (let* ((stack (state-stack state))
66 (ssize (stack-length stack)))
67 (set-state-index! state
68 (cond ((< index 0) 0)
69 ((>= index ssize) (- ssize 1))
70 (else index)))))
71
72 ;;; (ice-9 debugger state) ends here.