annotate lisp/emacs-lisp/edebug.el @ 32946:930b48afeedf

*** empty log message ***
author Gerd Moellmann <gerd@gnu.org>
date Fri, 27 Oct 2000 10:59:20 +0000
parents d22ae991ac5f
children bfee926318b1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1 ;;; edebug.el --- a source-level debugger for Emacs Lisp
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
2
24024
2981304f5015 (edebug-eval-defun): Deal with defcustom
Dave Love <fx@gnu.org>
parents: 23587
diff changeset
3 ;; Copyright (C) 1988, 89, 90, 91, 92, 93, 94, 95, 97, 1999
20832
d953c9628570 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 20078
diff changeset
4 ;; Free Software Foundation, Inc.
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
5
30805
3cfd3dc474b8 Change authors' mail address.
Gerd Moellmann <gerd@gnu.org>
parents: 30054
diff changeset
6 ;; Author: Daniel LaLiberte <liberte@holonexus.org>
20832
d953c9628570 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 20078
diff changeset
7 ;; Maintainer: FSF
2247
2c7997f249eb Add or correct keywords
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1821
diff changeset
8 ;; Keywords: lisp, tools, maint
846
20674ae6bf52 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 778
diff changeset
9
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
10 ;; This file is part of GNU Emacs.
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
11
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
12 ;; GNU Emacs is free software; you can redistribute it and/or modify
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
13 ;; it under the terms of the GNU General Public License as published by
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
14 ;; the Free Software Foundation; either version 2, or (at your option)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
15 ;; any later version.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
16
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
17 ;; GNU Emacs is distributed in the hope that it will be useful,
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
18 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
19 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
20 ;; GNU General Public License for more details.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
21
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
22 ;; You should have received a copy of the GNU General Public License
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
23 ;; along with GNU Emacs; see the file COPYING. If not, write to the
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
24 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
25 ;; Boston, MA 02111-1307, USA.
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
26
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
27 ;;; Commentary:
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
28
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
29 ;; This minor mode allows programmers to step through Emacs Lisp
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
30 ;; source code while executing functions. You can also set
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
31 ;; breakpoints, trace (stopping at each expression), evaluate
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
32 ;; expressions as if outside Edebug, reevaluate and display a list of
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
33 ;; expressions, trap errors normally caught by debug, and display a
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
34 ;; debug style backtrace.
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
35
20078
0fc1437e7427 (edebug-eval-mode): Nicer mode-name value.
Karl Heuer <kwzh@gnu.org>
parents: 19930
diff changeset
36 ;;; Minimal Instructions
0fc1437e7427 (edebug-eval-mode): Nicer mode-name value.
Karl Heuer <kwzh@gnu.org>
parents: 19930
diff changeset
37 ;; =====================
0fc1437e7427 (edebug-eval-mode): Nicer mode-name value.
Karl Heuer <kwzh@gnu.org>
parents: 19930
diff changeset
38
0fc1437e7427 (edebug-eval-mode): Nicer mode-name value.
Karl Heuer <kwzh@gnu.org>
parents: 19930
diff changeset
39 ;; First evaluate a defun with C-M-x, then run the function. Step
0fc1437e7427 (edebug-eval-mode): Nicer mode-name value.
Karl Heuer <kwzh@gnu.org>
parents: 19930
diff changeset
40 ;; through the code with SPC, mark breakpoints with b, go until a
0fc1437e7427 (edebug-eval-mode): Nicer mode-name value.
Karl Heuer <kwzh@gnu.org>
parents: 19930
diff changeset
41 ;; breakpoint is reached with g, and quit execution with q. Use the
0fc1437e7427 (edebug-eval-mode): Nicer mode-name value.
Karl Heuer <kwzh@gnu.org>
parents: 19930
diff changeset
42 ;; "?" command in edebug to describe other commands.
20832
d953c9628570 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 20078
diff changeset
43 ;; See the Emacs Lisp Reference Manual for more details.
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
44
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
45 ;; If you wish to change the default edebug global command prefix, change:
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
46 ;; (setq edebug-global-prefix "\C-xX")
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
47
20832
d953c9628570 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 20078
diff changeset
48 ;; Edebug was written by
d953c9628570 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 20078
diff changeset
49 ;; Daniel LaLiberte
20078
0fc1437e7427 (edebug-eval-mode): Nicer mode-name value.
Karl Heuer <kwzh@gnu.org>
parents: 19930
diff changeset
50 ;; GTE Labs
0fc1437e7427 (edebug-eval-mode): Nicer mode-name value.
Karl Heuer <kwzh@gnu.org>
parents: 19930
diff changeset
51 ;; 40 Sylvan Rd
0fc1437e7427 (edebug-eval-mode): Nicer mode-name value.
Karl Heuer <kwzh@gnu.org>
parents: 19930
diff changeset
52 ;; Waltham, MA 02254
30805
3cfd3dc474b8 Change authors' mail address.
Gerd Moellmann <gerd@gnu.org>
parents: 30054
diff changeset
53 ;; liberte@holonexus.org
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
54
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
55 ;;; Code:
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
56
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
57 (defconst edebug-version
18399
feed0e356d1b (edebug-version): Use the Emacs version.
Richard M. Stallman <rms@gnu.org>
parents: 18376
diff changeset
58 (concat "In Emacs version " emacs-version))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
59
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
60 ;;; Bug reporting
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
61
20832
d953c9628570 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 20078
diff changeset
62 (defconst edebug-maintainer-address "bug-gnu-emacs@gnu.org")
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
63
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
64 (defun edebug-submit-bug-report ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
65 "Submit, via mail, a bug report on edebug."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
66 (interactive)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
67 (require 'reporter)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
68 (and (y-or-n-p "Do you really want to submit a report on edebug? ")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
69 (reporter-submit-bug-report
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
70 edebug-maintainer-address
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
71 (concat "edebug.el " edebug-version)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
72 (list 'edebug-setup-hook
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
73 'edebug-all-defs
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
74 'edebug-all-forms
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
75 'edebug-eval-macro-args
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
76 'edebug-save-windows
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
77 'edebug-save-displayed-buffer-points
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
78 'edebug-initial-mode
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
79 'edebug-trace
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
80 'edebug-test-coverage
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
81 'edebug-continue-kbd-macro
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
82 'edebug-print-length
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
83 'edebug-print-level
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
84 'edebug-print-circle
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
85 ))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
86
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
87 ;;; Options
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
88
17414
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
89 (defgroup edebug nil
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
90 "A source-level debugger for Emacs Lisp"
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
91 :group 'lisp)
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
92
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
93
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
94 (defcustom edebug-setup-hook nil
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
95 "*Functions to call before edebug is used.
6761
f1d73d12436e checked in with -k by liberte at 1994/04/09 20:57:56
Daniel LaLiberte <liberte@gnu.org>
parents: 6732
diff changeset
96 Each time it is set to a new value, Edebug will call those functions
f1d73d12436e checked in with -k by liberte at 1994/04/09 20:57:56
Daniel LaLiberte <liberte@gnu.org>
parents: 6732
diff changeset
97 once and then `edebug-setup-hook' is reset to nil. You could use this
f1d73d12436e checked in with -k by liberte at 1994/04/09 20:57:56
Daniel LaLiberte <liberte@gnu.org>
parents: 6732
diff changeset
98 to load up Edebug specifications associated with a package you are
17414
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
99 using but only when you also use Edebug."
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
100 :type 'hook
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
101 :group 'edebug)
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
102
21990
02b32ae7e637 (edebug-all-forms): Add autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents: 21643
diff changeset
103 ;; edebug-all-defs and edebug-all-forms need to be autoloaded
02b32ae7e637 (edebug-all-forms): Add autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents: 21643
diff changeset
104 ;; because the byte compiler binds them; as a result, if edebug
02b32ae7e637 (edebug-all-forms): Add autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents: 21643
diff changeset
105 ;; is first loaded for a require in a compilation, they will be left unbound.
02b32ae7e637 (edebug-all-forms): Add autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents: 21643
diff changeset
106
02b32ae7e637 (edebug-all-forms): Add autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents: 21643
diff changeset
107 ;;;###autoload
17414
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
108 (defcustom edebug-all-defs nil
6761
f1d73d12436e checked in with -k by liberte at 1994/04/09 20:57:56
Daniel LaLiberte <liberte@gnu.org>
parents: 6732
diff changeset
109 "*If non-nil, evaluation of any defining forms will instrument for Edebug.
f1d73d12436e checked in with -k by liberte at 1994/04/09 20:57:56
Daniel LaLiberte <liberte@gnu.org>
parents: 6732
diff changeset
110 This applies to `eval-defun', `eval-region', `eval-buffer', and
f1d73d12436e checked in with -k by liberte at 1994/04/09 20:57:56
Daniel LaLiberte <liberte@gnu.org>
parents: 6732
diff changeset
111 `eval-current-buffer'. `eval-region' is also called by
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
112 `eval-last-sexp', and `eval-print-last-sexp'.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
113
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
114 You can use the command `edebug-all-defs' to toggle the value of this
6761
f1d73d12436e checked in with -k by liberte at 1994/04/09 20:57:56
Daniel LaLiberte <liberte@gnu.org>
parents: 6732
diff changeset
115 variable. You may wish to make it local to each buffer with
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
116 \(make-local-variable 'edebug-all-defs) in your
17414
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
117 `emacs-lisp-mode-hook'."
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
118 :type 'boolean
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
119 :group 'edebug)
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
120
21990
02b32ae7e637 (edebug-all-forms): Add autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents: 21643
diff changeset
121 ;; edebug-all-defs and edebug-all-forms need to be autoloaded
02b32ae7e637 (edebug-all-forms): Add autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents: 21643
diff changeset
122 ;; because the byte compiler binds them; as a result, if edebug
02b32ae7e637 (edebug-all-forms): Add autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents: 21643
diff changeset
123 ;; is first loaded for a require in a compilation, they will be left unbound.
02b32ae7e637 (edebug-all-forms): Add autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents: 21643
diff changeset
124
02b32ae7e637 (edebug-all-forms): Add autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents: 21643
diff changeset
125 ;;;###autoload
17414
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
126 (defcustom edebug-all-forms nil
6761
f1d73d12436e checked in with -k by liberte at 1994/04/09 20:57:56
Daniel LaLiberte <liberte@gnu.org>
parents: 6732
diff changeset
127 "*Non-nil evaluation of all forms will instrument for Edebug.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
128 This doesn't apply to loading or evaluations in the minibuffer.
17414
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
129 Use the command `edebug-all-forms' to toggle the value of this option."
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
130 :type 'boolean
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
131 :group 'edebug)
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
132
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
133 (defcustom edebug-eval-macro-args nil
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
134 "*Non-nil means all macro call arguments may be evaluated.
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
135 If this variable is nil, the default, Edebug will *not* wrap
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
136 macro call arguments as if they will be evaluated.
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
137 For each macro, a `edebug-form-spec' overrides this option.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
138 So to specify exceptions for macros that have some arguments evaluated
20832
d953c9628570 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 20078
diff changeset
139 and some not, you should specify an `edebug-form-spec'."
17414
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
140 :type 'boolean
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
141 :group 'edebug)
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
142
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
143 (defcustom edebug-save-windows t
6761
f1d73d12436e checked in with -k by liberte at 1994/04/09 20:57:56
Daniel LaLiberte <liberte@gnu.org>
parents: 6732
diff changeset
144 "*If non-nil, Edebug saves and restores the window configuration.
f1d73d12436e checked in with -k by liberte at 1994/04/09 20:57:56
Daniel LaLiberte <liberte@gnu.org>
parents: 6732
diff changeset
145 That takes some time, so if your program does not care what happens to
f1d73d12436e checked in with -k by liberte at 1994/04/09 20:57:56
Daniel LaLiberte <liberte@gnu.org>
parents: 6732
diff changeset
146 the window configurations, it is better to set this variable to nil.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
147
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
148 If the value is a list, only the listed windows are saved and
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
149 restored.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
150
17414
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
151 `edebug-toggle-save-windows' may be used to change this variable."
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
152 :type '(choice boolean (repeat string))
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
153 :group 'edebug)
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
154
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
155 (defcustom edebug-save-displayed-buffer-points nil
6761
f1d73d12436e checked in with -k by liberte at 1994/04/09 20:57:56
Daniel LaLiberte <liberte@gnu.org>
parents: 6732
diff changeset
156 "*If non-nil, save and restore point in all displayed buffers.
f1d73d12436e checked in with -k by liberte at 1994/04/09 20:57:56
Daniel LaLiberte <liberte@gnu.org>
parents: 6732
diff changeset
157
f1d73d12436e checked in with -k by liberte at 1994/04/09 20:57:56
Daniel LaLiberte <liberte@gnu.org>
parents: 6732
diff changeset
158 Saving and restoring point in other buffers is necessary if you are
f1d73d12436e checked in with -k by liberte at 1994/04/09 20:57:56
Daniel LaLiberte <liberte@gnu.org>
parents: 6732
diff changeset
159 debugging code that changes the point of a buffer which is displayed
f1d73d12436e checked in with -k by liberte at 1994/04/09 20:57:56
Daniel LaLiberte <liberte@gnu.org>
parents: 6732
diff changeset
160 in a non-selected window. If Edebug or the user then selects the
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
161 window, the buffer's point will be changed to the window's point.
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
162
6761
f1d73d12436e checked in with -k by liberte at 1994/04/09 20:57:56
Daniel LaLiberte <liberte@gnu.org>
parents: 6732
diff changeset
163 Saving and restoring point in all buffers is expensive, since it
f1d73d12436e checked in with -k by liberte at 1994/04/09 20:57:56
Daniel LaLiberte <liberte@gnu.org>
parents: 6732
diff changeset
164 requires selecting each window twice, so enable this only if you need
17414
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
165 it."
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
166 :type 'boolean
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
167 :group 'edebug)
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
168
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
169 (defcustom edebug-initial-mode 'step
6761
f1d73d12436e checked in with -k by liberte at 1994/04/09 20:57:56
Daniel LaLiberte <liberte@gnu.org>
parents: 6732
diff changeset
170 "*Initial execution mode for Edebug, if non-nil. If this variable
f1d73d12436e checked in with -k by liberte at 1994/04/09 20:57:56
Daniel LaLiberte <liberte@gnu.org>
parents: 6732
diff changeset
171 is non-@code{nil}, it specifies the initial execution mode for Edebug
f1d73d12436e checked in with -k by liberte at 1994/04/09 20:57:56
Daniel LaLiberte <liberte@gnu.org>
parents: 6732
diff changeset
172 when it is first activated. Possible values are step, next, go,
17414
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
173 Go-nonstop, trace, Trace-fast, continue, and Continue-fast."
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
174 :type '(choice (const step) (const next) (const go)
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
175 (const Go-nonstop) (const trace)
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
176 (const Trace-fast) (const continue)
23587
26749ef98f6c (edebug-initial-mode): Fix customize type.
Andreas Schwab <schwab@suse.de>
parents: 21990
diff changeset
177 (const Continue-fast))
17414
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
178 :group 'edebug)
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
179
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
180 (defcustom edebug-trace nil
6761
f1d73d12436e checked in with -k by liberte at 1994/04/09 20:57:56
Daniel LaLiberte <liberte@gnu.org>
parents: 6732
diff changeset
181 "*Non-nil means display a trace of function entry and exit.
f1d73d12436e checked in with -k by liberte at 1994/04/09 20:57:56
Daniel LaLiberte <liberte@gnu.org>
parents: 6732
diff changeset
182 Tracing output is displayed in a buffer named `*edebug-trace*', one
f1d73d12436e checked in with -k by liberte at 1994/04/09 20:57:56
Daniel LaLiberte <liberte@gnu.org>
parents: 6732
diff changeset
183 function entry or exit per line, indented by the recursion level.
f1d73d12436e checked in with -k by liberte at 1994/04/09 20:57:56
Daniel LaLiberte <liberte@gnu.org>
parents: 6732
diff changeset
184
f1d73d12436e checked in with -k by liberte at 1994/04/09 20:57:56
Daniel LaLiberte <liberte@gnu.org>
parents: 6732
diff changeset
185 You can customize by replacing functions `edebug-print-trace-before'
17414
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
186 and `edebug-print-trace-after'."
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
187 :type 'boolean
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
188 :group 'edebug)
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
189
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
190 (defcustom edebug-test-coverage nil
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
191 "*If non-nil, Edebug tests coverage of all expressions debugged.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
192 This is done by comparing the result of each expression
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
193 with the previous result. Coverage is considered OK if two different
6761
f1d73d12436e checked in with -k by liberte at 1994/04/09 20:57:56
Daniel LaLiberte <liberte@gnu.org>
parents: 6732
diff changeset
194 results are found.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
195
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
196 Use `edebug-display-freq-count' to display the frequency count and
17414
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
197 coverage information for a definition."
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
198 :type 'boolean
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
199 :group 'edebug)
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
200
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
201 (defcustom edebug-continue-kbd-macro nil
6761
f1d73d12436e checked in with -k by liberte at 1994/04/09 20:57:56
Daniel LaLiberte <liberte@gnu.org>
parents: 6732
diff changeset
202 "*If non-nil, continue defining or executing any keyboard macro.
17414
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
203 Use this with caution since it is not debugged."
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
204 :type 'boolean
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
205 :group 'edebug)
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
206
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
207
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
208 (defcustom edebug-print-length 50
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
209 "*Default value of `print-length' to use while printing results in Edebug."
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
210 :type 'integer
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
211 :group 'edebug)
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
212 (defcustom edebug-print-level 50
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
213 "*Default value of `print-level' to use while printing results in Edebug."
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
214 :type 'integer
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
215 :group 'edebug)
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
216 (defcustom edebug-print-circle t
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
217 "*Default value of `print-circle' to use while printing results in Edebug."
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
218 :type 'boolean
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
219 :group 'edebug)
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
220
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
221 (defcustom edebug-unwrap-results nil
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
222 "*Non-nil if Edebug should unwrap results of expressions.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
223 This is useful when debugging macros where the results of expressions
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
224 are instrumented expressions. But don't do this when results might be
17414
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
225 circular or an infinite loop will result."
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
226 :type 'boolean
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
227 :group 'edebug)
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
228
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
229 (defcustom edebug-on-error t
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
230 "*Value bound to `debug-on-error' while Edebug is active.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
231
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
232 If `debug-on-error' is non-nil, that value is still used.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
233
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
234 If the value is a list of signal names, Edebug will stop when any of
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
235 these errors are signaled from Lisp code whether or not the signal is
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
236 handled by a `condition-case'. This option is useful for debugging
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
237 signals that *are* handled since they would otherwise be missed.
17414
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
238 After execution is resumed, the error is signaled again."
23587
26749ef98f6c (edebug-initial-mode): Fix customize type.
Andreas Schwab <schwab@suse.de>
parents: 21990
diff changeset
239 :type '(choice (const :tag "off")
26749ef98f6c (edebug-initial-mode): Fix customize type.
Andreas Schwab <schwab@suse.de>
parents: 21990
diff changeset
240 (repeat :menu-tag "When"
26749ef98f6c (edebug-initial-mode): Fix customize type.
Andreas Schwab <schwab@suse.de>
parents: 21990
diff changeset
241 :value (nil)
26749ef98f6c (edebug-initial-mode): Fix customize type.
Andreas Schwab <schwab@suse.de>
parents: 21990
diff changeset
242 (symbol :format "%v"))
26749ef98f6c (edebug-initial-mode): Fix customize type.
Andreas Schwab <schwab@suse.de>
parents: 21990
diff changeset
243 (const :tag "always" t))
17414
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
244 :group 'edebug)
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
245
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
246 (defcustom edebug-on-quit t
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
247 "*Value bound to `debug-on-quit' while Edebug is active."
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
248 :type 'boolean
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
249 :group 'edebug)
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
250
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
251 (defcustom edebug-global-break-condition nil
6761
f1d73d12436e checked in with -k by liberte at 1994/04/09 20:57:56
Daniel LaLiberte <liberte@gnu.org>
parents: 6732
diff changeset
252 "*If non-nil, an expression to test for at every stop point.
17414
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
253 If the result is non-nil, then break. Errors are ignored."
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
254 :type 'sexp
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
255 :group 'edebug)
6761
f1d73d12436e checked in with -k by liberte at 1994/04/09 20:57:56
Daniel LaLiberte <liberte@gnu.org>
parents: 6732
diff changeset
256
18376
9ae76ef113f6 (edebug-sit-for-seconds): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 18017
diff changeset
257 (defcustom edebug-sit-for-seconds 1
9ae76ef113f6 (edebug-sit-for-seconds): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 18017
diff changeset
258 "*Number of seconds to pause when execution mode is `trace'."
9ae76ef113f6 (edebug-sit-for-seconds): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 18017
diff changeset
259 :type 'number
9ae76ef113f6 (edebug-sit-for-seconds): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 18017
diff changeset
260 :group 'edebug)
9ae76ef113f6 (edebug-sit-for-seconds): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 18017
diff changeset
261
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
262 ;;; Form spec utilities.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
263
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
264 ;;;###autoload
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
265 (defmacro def-edebug-spec (symbol spec)
27296
6a6b75706812 (with-syntax-table): Add a def-edebug-spec.
Richard M. Stallman <rms@gnu.org>
parents: 26648
diff changeset
266 "Set the `edebug-form-spec' property of SYMBOL according to SPEC.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
267 Both SYMBOL and SPEC are unevaluated. The SPEC can be 0, t, a symbol
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
268 \(naming a function), or a list."
26519
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
269 `(put (quote ,symbol) 'edebug-form-spec (quote ,spec)))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
270
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
271 (defmacro def-edebug-form-spec (symbol spec-form)
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
272 "For compatibility with old version. Use `def-edebug-spec' instead."
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
273 (message "Obsolete: use def-edebug-spec instead.")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
274 (def-edebug-spec symbol (eval spec-form)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
275
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
276 (defun get-edebug-spec (symbol)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
277 ;; Get the spec of symbol resolving all indirection.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
278 (let ((edebug-form-spec (get symbol 'edebug-form-spec))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
279 indirect)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
280 (while (and (symbolp edebug-form-spec)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
281 (setq indirect (get edebug-form-spec 'edebug-form-spec)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
282 ;; (edebug-trace "indirection: %s" edebug-form-spec)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
283 (setq edebug-form-spec indirect))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
284 edebug-form-spec
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
285 ))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
286
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
287 ;;; Utilities
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
288
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
289 ;; Define edebug-gensym - from old cl.el
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
290 (defvar edebug-gensym-index 0
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
291 "Integer used by `edebug-gensym' to produce new names.")
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
292
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
293 (defun edebug-gensym (&optional prefix)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
294 "Generate a fresh uninterned symbol.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
295 There is an optional argument, PREFIX. PREFIX is the
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
296 string that begins the new name. Most people take just the default,
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
297 except when debugging needs suggest otherwise."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
298 (if (null prefix)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
299 (setq prefix "G"))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
300 (let ((newsymbol nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
301 (newname ""))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
302 (while (not newsymbol)
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
303 (setq newname (concat prefix (int-to-string edebug-gensym-index)))
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
304 (setq edebug-gensym-index (+ edebug-gensym-index 1))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
305 (if (not (intern-soft newname))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
306 (setq newsymbol (make-symbol newname))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
307 newsymbol))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
308
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
309 (defun edebug-lambda-list-keywordp (object)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
310 "Return t if OBJECT is a lambda list keyword.
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
311 A lambda list keyword is a symbol that starts with `&'."
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
312 (and (symbolp object)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
313 (= ?& (aref (symbol-name object) 0))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
314
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
315
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
316 (defun edebug-last-sexp ()
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
317 ;; Return the last sexp before point in current buffer.
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
318 ;; Assumes Emacs Lisp syntax is active.
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
319 (car
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
320 (read-from-string
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
321 (buffer-substring
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
322 (save-excursion
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
323 (forward-sexp -1)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
324 (point))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
325 (point)))))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
326
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
327 (defun edebug-window-list ()
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
328 "Return a list of windows, in order of `next-window'."
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
329 ;; This doesn't work for epoch.
30000
323c0e2c2032 (edebug-window-live-p, edebug-window-list)
Gerd Moellmann <gerd@gnu.org>
parents: 29202
diff changeset
330 (let (window-list)
323c0e2c2032 (edebug-window-live-p, edebug-window-list)
Gerd Moellmann <gerd@gnu.org>
parents: 29202
diff changeset
331 (walk-windows (lambda (w) (setq window-list (cons w window-list))))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
332 (nreverse window-list)))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
333
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
334 (defun edebug-window-live-p (window)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
335 "Return non-nil if WINDOW is visible."
30000
323c0e2c2032 (edebug-window-live-p, edebug-window-list)
Gerd Moellmann <gerd@gnu.org>
parents: 29202
diff changeset
336 (some-window (lambda (w) (eq w window))))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
337
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
338 ;; Not used.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
339 '(defun edebug-two-window-p ()
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
340 "Return t if there are two windows."
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
341 (and (not (one-window-p))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
342 (eq (selected-window)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
343 (next-window (next-window (selected-window))))))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
344
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
345 (defsubst edebug-lookup-function (object)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
346 (while (and (symbolp object) (fboundp object))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
347 (setq object (symbol-function object)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
348 object)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
349
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
350 (defun edebug-macrop (object)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
351 "Return the macro named by OBJECT, or nil if it is not a macro."
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
352 (setq object (edebug-lookup-function object))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
353 (if (and (listp object)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
354 (eq 'macro (car object))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
355 (edebug-functionp (cdr object)))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
356 object))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
357
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
358 (defun edebug-functionp (object)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
359 "Returns the function named by OBJECT, or nil if it is not a function."
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
360 (setq object (edebug-lookup-function object))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
361 (if (or (subrp object)
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
362 (byte-code-function-p object)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
363 (and (listp object)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
364 (eq (car object) 'lambda)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
365 (listp (car (cdr object)))))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
366 object))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
367
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
368 (defun edebug-sort-alist (alist function)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
369 ;; Return the ALIST sorted with comparison function FUNCTION.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
370 ;; This uses 'sort so the sorting is destructive.
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
371 (sort alist (function
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
372 (lambda (e1 e2)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
373 (funcall function (car e1) (car e2))))))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
374
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
375 ;;(def-edebug-spec edebug-save-restriction t)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
376
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
377 ;; Not used. If it is used, def-edebug-spec must be defined before use.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
378 '(defmacro edebug-save-restriction (&rest body)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
379 "Evaluate BODY while saving the current buffers restriction.
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
380 BODY may change buffer outside of current restriction, unlike
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
381 save-restriction. BODY may change the current buffer,
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
382 and the restriction will be restored to the original buffer,
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
383 and the current buffer remains current.
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
384 Return the result of the last expression in BODY."
26519
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
385 `(let ((edebug:s-r-beg (point-min-marker))
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
386 (edebug:s-r-end (point-max-marker)))
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
387 (unwind-protect
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
388 (progn ,@body)
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
389 (save-excursion
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
390 (set-buffer (marker-buffer edebug:s-r-beg))
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
391 (narrow-to-region edebug:s-r-beg edebug:s-r-end)))))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
392
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
393 ;;; Display
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
394
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
395 (defconst edebug-trace-buffer "*edebug-trace*"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
396 "Name of the buffer to put trace info in.")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
397
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
398 (defun edebug-pop-to-buffer (buffer &optional window)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
399 ;; Like pop-to-buffer, but select window where BUFFER was last shown.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
400 ;; Select WINDOW if it provided and it still exists. Otherwise,
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
401 ;; if buffer is currently shown in several windows, choose one.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
402 ;; Otherwise, find a new window, possibly splitting one.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
403 (setq window (if (and (windowp window) (edebug-window-live-p window)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
404 (eq (window-buffer window) buffer))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
405 window
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
406 (if (eq (window-buffer (selected-window)) buffer)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
407 (selected-window)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
408 (edebug-get-buffer-window buffer))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
409 (if window
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
410 (select-window window)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
411 (if (one-window-p)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
412 (split-window))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
413 ;; (message "next window: %s" (next-window)) (sit-for 1)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
414 (if (eq (get-buffer-window edebug-trace-buffer) (next-window))
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
415 ;; Don't select trace window
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
416 nil
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
417 (select-window (next-window))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
418 (set-window-buffer (selected-window) buffer)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
419 (set-window-hscroll (selected-window) 0);; should this be??
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
420 ;; Selecting the window does not set the buffer until command loop.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
421 ;;(set-buffer buffer)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
422 )
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
423
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
424
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
425 (defun edebug-get-displayed-buffer-points ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
426 ;; Return a list of buffer point pairs, for all displayed buffers.
30000
323c0e2c2032 (edebug-window-live-p, edebug-window-list)
Gerd Moellmann <gerd@gnu.org>
parents: 29202
diff changeset
427 (let (list)
323c0e2c2032 (edebug-window-live-p, edebug-window-list)
Gerd Moellmann <gerd@gnu.org>
parents: 29202
diff changeset
428 (walk-windows (lambda (w)
323c0e2c2032 (edebug-window-live-p, edebug-window-list)
Gerd Moellmann <gerd@gnu.org>
parents: 29202
diff changeset
429 (unless (eq w (selected-window))
323c0e2c2032 (edebug-window-live-p, edebug-window-list)
Gerd Moellmann <gerd@gnu.org>
parents: 29202
diff changeset
430 (setq list (cons (cons (window-buffer w)
323c0e2c2032 (edebug-window-live-p, edebug-window-list)
Gerd Moellmann <gerd@gnu.org>
parents: 29202
diff changeset
431 (window-point w))
323c0e2c2032 (edebug-window-live-p, edebug-window-list)
Gerd Moellmann <gerd@gnu.org>
parents: 29202
diff changeset
432 list)))))
323c0e2c2032 (edebug-window-live-p, edebug-window-list)
Gerd Moellmann <gerd@gnu.org>
parents: 29202
diff changeset
433 list))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
434
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
435
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
436 (defun edebug-set-buffer-points (buffer-points)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
437 ;; Restore the buffer-points created by edebug-get-displayed-buffer-points.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
438 (let ((current-buffer (current-buffer)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
439 (mapcar (function (lambda (buf-point)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
440 (if (buffer-name (car buf-point)) ; still exists
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
441 (progn
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
442 (set-buffer (car buf-point))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
443 (goto-char (cdr buf-point))))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
444 buffer-points)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
445 (set-buffer current-buffer)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
446
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
447 (defun edebug-current-windows (which-windows)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
448 ;; Get either a full window configuration or some window information.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
449 (if (listp which-windows)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
450 (mapcar (function (lambda (window)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
451 (if (edebug-window-live-p window)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
452 (list window
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
453 (window-buffer window)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
454 (window-point window)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
455 (window-start window)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
456 (window-hscroll window)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
457 which-windows)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
458 (current-window-configuration)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
459
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
460 (defun edebug-set-windows (window-info)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
461 ;; Set either a full window configuration or some window information.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
462 (if (listp window-info)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
463 (mapcar (function
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
464 (lambda (one-window-info)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
465 (if one-window-info
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
466 (apply (function
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
467 (lambda (window buffer point start hscroll)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
468 (if (edebug-window-live-p window)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
469 (progn
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
470 (set-window-buffer window buffer)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
471 (set-window-point window point)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
472 (set-window-start window start)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
473 (set-window-hscroll window hscroll)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
474 one-window-info))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
475 window-info)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
476 (set-window-configuration window-info)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
477
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
478 (defalias 'edebug-get-buffer-window 'get-buffer-window)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
479 (defalias 'edebug-sit-for 'sit-for)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
480 (defalias 'edebug-input-pending-p 'input-pending-p)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
481
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
482
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
483 ;;; Redefine read and eval functions
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
484 ;; read is redefined to maybe instrument forms.
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
485 ;; eval-defun is redefined to check edebug-all-forms and edebug-all-defs.
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
486
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
487 ;; Save the original read function
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
488 (or (fboundp 'edebug-original-read)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
489 (defalias 'edebug-original-read (symbol-function 'read)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
490
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
491 (defun edebug-read (&optional stream)
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
492 "Read one Lisp expression as text from STREAM, return as Lisp object.
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
493 If STREAM is nil, use the value of `standard-input' (which see).
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
494 STREAM or the value of `standard-input' may be:
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
495 a buffer (read from point and advance it)
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
496 a marker (read from where it points and advance it)
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
497 a function (call it with no arguments for each character,
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
498 call it with a char as argument to push a char back)
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
499 a string (takes text from string, starting at the beginning)
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
500 t (read text line using minibuffer and use it).
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
501
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
502 This version, from Edebug, maybe instruments the expression. But the
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
503 STREAM must be the current buffer to do so. Whether it instruments is
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
504 also dependent on the values of `edebug-all-defs' and
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
505 `edebug-all-forms'."
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
506 (or stream (setq stream standard-input))
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
507 (if (eq stream (current-buffer))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
508 (edebug-read-and-maybe-wrap-form)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
509 (edebug-original-read stream)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
510
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
511 (or (fboundp 'edebug-original-eval-defun)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
512 (defalias 'edebug-original-eval-defun (symbol-function 'eval-defun)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
513
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
514 ;; We should somehow arrange to be able to do this
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
515 ;; without actually replacing the eval-defun command.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
516 (defun edebug-eval-defun (edebug-it)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
517 "Evaluate the top-level form containing point, or after point.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
518
30054
72640301c1fe (edebug-eval-defun): Make doc string
Gerd Moellmann <gerd@gnu.org>
parents: 30000
diff changeset
519 If the current defun is actually a call to `defvar', then reset the
72640301c1fe (edebug-eval-defun): Make doc string
Gerd Moellmann <gerd@gnu.org>
parents: 30000
diff changeset
520 variable using its initial value expression even if the variable
72640301c1fe (edebug-eval-defun): Make doc string
Gerd Moellmann <gerd@gnu.org>
parents: 30000
diff changeset
521 already has some other value. (Normally `defvar' does not change the
72640301c1fe (edebug-eval-defun): Make doc string
Gerd Moellmann <gerd@gnu.org>
parents: 30000
diff changeset
522 variable's value if it already has a value.)
72640301c1fe (edebug-eval-defun): Make doc string
Gerd Moellmann <gerd@gnu.org>
parents: 30000
diff changeset
523
72640301c1fe (edebug-eval-defun): Make doc string
Gerd Moellmann <gerd@gnu.org>
parents: 30000
diff changeset
524 With a prefix argument, instrument the code for Edebug.
72640301c1fe (edebug-eval-defun): Make doc string
Gerd Moellmann <gerd@gnu.org>
parents: 30000
diff changeset
525
72640301c1fe (edebug-eval-defun): Make doc string
Gerd Moellmann <gerd@gnu.org>
parents: 30000
diff changeset
526 Setting `edebug-all-defs' to a non-nil value reverses the meaning of
72640301c1fe (edebug-eval-defun): Make doc string
Gerd Moellmann <gerd@gnu.org>
parents: 30000
diff changeset
527 the prefix argument. Code is then instrumented when this function is
72640301c1fe (edebug-eval-defun): Make doc string
Gerd Moellmann <gerd@gnu.org>
parents: 30000
diff changeset
528 invoked without a prefix argument
72640301c1fe (edebug-eval-defun): Make doc string
Gerd Moellmann <gerd@gnu.org>
parents: 30000
diff changeset
529
72640301c1fe (edebug-eval-defun): Make doc string
Gerd Moellmann <gerd@gnu.org>
parents: 30000
diff changeset
530 If acting on a `defun' for FUNCTION, and the function was
72640301c1fe (edebug-eval-defun): Make doc string
Gerd Moellmann <gerd@gnu.org>
parents: 30000
diff changeset
531 instrumented, `Edebug: FUNCTION' is printed in the minibuffer. If not
72640301c1fe (edebug-eval-defun): Make doc string
Gerd Moellmann <gerd@gnu.org>
parents: 30000
diff changeset
532 instrumented, just FUNCTION is printed.
72640301c1fe (edebug-eval-defun): Make doc string
Gerd Moellmann <gerd@gnu.org>
parents: 30000
diff changeset
533
72640301c1fe (edebug-eval-defun): Make doc string
Gerd Moellmann <gerd@gnu.org>
parents: 30000
diff changeset
534 If not acting on a `defun', the result of evaluation is displayed in
72640301c1fe (edebug-eval-defun): Make doc string
Gerd Moellmann <gerd@gnu.org>
parents: 30000
diff changeset
535 the minibuffer."
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
536 (interactive "P")
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
537 (let* ((edebugging (not (eq (not edebug-it) (not edebug-all-defs))))
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
538 (edebug-result)
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
539 (form
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
540 (let ((edebug-all-forms edebugging)
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
541 (edebug-all-defs (eq edebug-all-defs (not edebug-it))))
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
542 (edebug-read-top-level-form))))
32227
d22ae991ac5f Comment.
Dave Love <fx@gnu.org>
parents: 30805
diff changeset
543 ;; This should be consistent with `eval-defun-1', but not the
d22ae991ac5f Comment.
Dave Love <fx@gnu.org>
parents: 30805
diff changeset
544 ;; same, since that gets a macroexpended form.
24024
2981304f5015 (edebug-eval-defun): Deal with defcustom
Dave Love <fx@gnu.org>
parents: 23587
diff changeset
545 (cond ((and (eq (car form) 'defvar)
2981304f5015 (edebug-eval-defun): Deal with defcustom
Dave Love <fx@gnu.org>
parents: 23587
diff changeset
546 (cdr-safe (cdr-safe form)))
2981304f5015 (edebug-eval-defun): Deal with defcustom
Dave Love <fx@gnu.org>
parents: 23587
diff changeset
547 ;; Force variable to be bound.
2981304f5015 (edebug-eval-defun): Deal with defcustom
Dave Love <fx@gnu.org>
parents: 23587
diff changeset
548 (setq form (cons 'defconst (cdr form))))
2981304f5015 (edebug-eval-defun): Deal with defcustom
Dave Love <fx@gnu.org>
parents: 23587
diff changeset
549 ((and (eq (car form) 'defcustom)
2981304f5015 (edebug-eval-defun): Deal with defcustom
Dave Love <fx@gnu.org>
parents: 23587
diff changeset
550 (default-boundp (nth 1 form)))
2981304f5015 (edebug-eval-defun): Deal with defcustom
Dave Love <fx@gnu.org>
parents: 23587
diff changeset
551 ;; Force variable to be bound.
2981304f5015 (edebug-eval-defun): Deal with defcustom
Dave Love <fx@gnu.org>
parents: 23587
diff changeset
552 (set-default (nth 1 form) (eval (nth 2 form)))))
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
553 (setq edebug-result (eval form))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
554 (if (not edebugging)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
555 (princ edebug-result)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
556 edebug-result)))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
557
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
558
727
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 661
diff changeset
559 ;;;###autoload
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
560 (defalias 'edebug-defun 'edebug-eval-top-level-form)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
561
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
562 ;;;###autoload
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
563 (defun edebug-eval-top-level-form ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
564 "Evaluate a top level form, such as a defun or defmacro.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
565 This is like `eval-defun', but the code is always instrumented for Edebug.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
566 Print its name in the minibuffer and leave point where it is,
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
567 or if an error occurs, leave point after it with mark at the original point."
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
568 (interactive)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
569 (eval
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
570 ;; Bind edebug-all-forms only while reading, not while evalling
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
571 ;; but this causes problems while edebugging edebug.
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
572 (let ((edebug-all-forms t)
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
573 (edebug-all-defs t))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
574 (edebug-read-top-level-form))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
575
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
576
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
577 (defun edebug-read-top-level-form ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
578 (let ((starting-point (point)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
579 (end-of-defun)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
580 (beginning-of-defun)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
581 (prog1
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
582 (edebug-read-and-maybe-wrap-form)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
583 ;; Recover point, but only if no error occurred.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
584 (goto-char starting-point))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
585
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
586
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
587 ;; Compatibility with old versions.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
588 (defalias 'edebug-all-defuns 'edebug-all-defs)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
589
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
590 (defun edebug-all-defs ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
591 "Toggle edebugging of all definitions."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
592 (interactive)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
593 (setq edebug-all-defs (not edebug-all-defs))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
594 (message "Edebugging all definitions is %s."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
595 (if edebug-all-defs "on" "off")))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
596
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
597
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
598 (defun edebug-all-forms ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
599 "Toggle edebugging of all forms."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
600 (interactive)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
601 (setq edebug-all-forms (not edebug-all-forms))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
602 (message "Edebugging all forms is %s."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
603 (if edebug-all-forms "on" "off")))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
604
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
605
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
606 (defun edebug-install-read-eval-functions ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
607 (interactive)
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
608 ;; Don't install if already installed.
26049
e7c4cf80a64a (edebug-install-read-eval-functions)
Dave Love <fx@gnu.org>
parents: 25812
diff changeset
609 (unless load-read-function
e7c4cf80a64a (edebug-install-read-eval-functions)
Dave Love <fx@gnu.org>
parents: 25812
diff changeset
610 (setq load-read-function 'edebug-read)
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
611 (defalias 'eval-defun 'edebug-eval-defun)))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
612
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
613 (defun edebug-uninstall-read-eval-functions ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
614 (interactive)
26049
e7c4cf80a64a (edebug-install-read-eval-functions)
Dave Love <fx@gnu.org>
parents: 25812
diff changeset
615 (setq load-read-function nil)
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
616 (defalias 'eval-defun (symbol-function 'edebug-original-eval-defun)))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
617
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
618
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
619 ;;; Edebug internal data
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
620
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
621 ;; The internal data that is needed for edebugging is kept in the
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
622 ;; buffer-local variable `edebug-form-data'.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
623
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
624 (make-variable-buffer-local 'edebug-form-data)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
625
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
626 (defconst edebug-form-data nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
627 ;; A list of entries associating symbols with buffer regions.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
628 ;; This is an automatic buffer local variable. Each entry looks like:
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
629 ;; @code{(@var{symbol} @var{begin-marker} @var{end-marker}). The markers
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
630 ;; are at the beginning and end of an entry level form and @var{symbol} is
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
631 ;; a symbol that holds all edebug related information for the form on its
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
632 ;; property list.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
633
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
634 ;; In the future, the symbol will be irrelevant and edebug data will
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
635 ;; be stored in the definitions themselves rather than in the property
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
636 ;; list of a symbol.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
637
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
638 (defun edebug-make-form-data-entry (symbol begin end)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
639 (list symbol begin end))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
640
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
641 (defsubst edebug-form-data-name (entry)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
642 (car entry))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
643
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
644 (defsubst edebug-form-data-begin (entry)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
645 (nth 1 entry))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
646
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
647 (defsubst edebug-form-data-end (entry)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
648 (nth 2 entry))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
649
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
650 (defsubst edebug-set-form-data-entry (entry name begin end)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
651 (setcar entry name);; in case name is changed
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
652 (set-marker (nth 1 entry) begin)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
653 (set-marker (nth 2 entry) end))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
654
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
655 (defun edebug-get-form-data-entry (pnt &optional end-point)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
656 ;; Find the edebug form data entry which is closest to PNT.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
657 ;; If END-POINT is supplied, match must be exact.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
658 ;; Return `nil' if none found.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
659 (let ((rest edebug-form-data)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
660 closest-entry
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
661 (closest-dist 999999)) ;; need maxint here
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
662 (while (and rest (< 0 closest-dist))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
663 (let* ((entry (car rest))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
664 (begin (edebug-form-data-begin entry))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
665 (dist (- pnt begin)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
666 (setq rest (cdr rest))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
667 (if (and (<= 0 dist)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
668 (< dist closest-dist)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
669 (or (not end-point)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
670 (= end-point (edebug-form-data-end entry)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
671 (<= pnt (edebug-form-data-end entry)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
672 (setq closest-dist dist
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
673 closest-entry entry))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
674 closest-entry))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
675
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
676 ;; Also need to find all contained entries,
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
677 ;; and find an entry given a symbol, which should be just assq.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
678
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
679 (defun edebug-form-data-symbol ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
680 ;; Return the edebug data symbol of the form where point is in.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
681 ;; If point is not inside a edebuggable form, cause error.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
682 (or (edebug-form-data-name (edebug-get-form-data-entry (point)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
683 (error "Not inside instrumented form")))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
684
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
685 (defun edebug-make-top-form-data-entry (new-entry)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
686 ;; Make NEW-ENTRY the first element in the `edebug-form-data' list.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
687 (edebug-clear-form-data-entry new-entry)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
688 (setq edebug-form-data (cons new-entry edebug-form-data)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
689
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
690 (defun edebug-clear-form-data-entry (entry)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
691 ;; If non-nil, clear ENTRY out of the form data.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
692 ;; Maybe clear the markers and delete the symbol's edebug property?
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
693 (if entry
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
694 (progn
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
695 ;; Instead of this, we could just find all contained forms.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
696 ;; (put (car entry) 'edebug nil) ;
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
697 ;; (mapcar 'edebug-clear-form-data-entry ; dangerous
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
698 ;; (get (car entry) 'edebug-dependents))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
699 ;; (set-marker (nth 1 entry) nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
700 ;; (set-marker (nth 2 entry) nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
701 (setq edebug-form-data (delq entry edebug-form-data)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
702
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
703 ;;; Parser utilities
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
704
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
705 (defun edebug-syntax-error (&rest args)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
706 ;; Signal an invalid-read-syntax with ARGS.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
707 (signal 'invalid-read-syntax args))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
708
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
709
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
710 (defconst edebug-read-syntax-table
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
711 ;; Lookup table for significant characters indicating the class of the
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
712 ;; token that follows. This is not a \"real\" syntax table.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
713 (let ((table (make-vector 256 'symbol))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
714 (i 0))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
715 (while (< i ?!)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
716 (aset table i 'space)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
717 (setq i (1+ i)))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
718 (aset table ?\( 'lparen)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
719 (aset table ?\) 'rparen)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
720 (aset table ?\' 'quote)
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
721 (aset table ?\` 'backquote)
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
722 (aset table ?\, 'comma)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
723 (aset table ?\" 'string)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
724 (aset table ?\? 'char)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
725 (aset table ?\[ 'lbracket)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
726 (aset table ?\] 'rbracket)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
727 (aset table ?\. 'dot)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
728 (aset table ?\# 'hash)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
729 ;; We treat numbers as symbols, because of confusion with -, -1, and 1-.
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
730 ;; We don't care about any other chars since they won't be seen.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
731 table))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
732
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
733 (defun edebug-next-token-class ()
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
734 ;; Move to the next token and return its class. We only care about
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
735 ;; lparen, rparen, dot, quote, backquote, comma, string, char, vector,
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
736 ;; or symbol.
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
737 (edebug-skip-whitespace)
25056
d29c2ded5971 Delete compatibility code.
Karl Heuer <kwzh@gnu.org>
parents: 24122
diff changeset
738 (if (and (eq (following-char) ?.)
d29c2ded5971 Delete compatibility code.
Karl Heuer <kwzh@gnu.org>
parents: 24122
diff changeset
739 (save-excursion
d29c2ded5971 Delete compatibility code.
Karl Heuer <kwzh@gnu.org>
parents: 24122
diff changeset
740 (forward-char 1)
d29c2ded5971 Delete compatibility code.
Karl Heuer <kwzh@gnu.org>
parents: 24122
diff changeset
741 (and (>= (following-char) ?0)
d29c2ded5971 Delete compatibility code.
Karl Heuer <kwzh@gnu.org>
parents: 24122
diff changeset
742 (<= (following-char) ?9))))
d29c2ded5971 Delete compatibility code.
Karl Heuer <kwzh@gnu.org>
parents: 24122
diff changeset
743 'symbol
d29c2ded5971 Delete compatibility code.
Karl Heuer <kwzh@gnu.org>
parents: 24122
diff changeset
744 (aref edebug-read-syntax-table (following-char))))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
745
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
746
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
747 (defun edebug-skip-whitespace ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
748 ;; Leave point before the next token, skipping white space and comments.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
749 (skip-chars-forward " \t\r\n\f")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
750 (while (= (following-char) ?\;)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
751 ;; \r is counted as a comment terminator to support selective display.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
752 (skip-chars-forward "^\n\r") ; skip the comment
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
753 (skip-chars-forward " \t\r\n\f")))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
754
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
755
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
756 ;; Mostly obsolete reader; still used in one case.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
757
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
758 (defun edebug-read-sexp ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
759 ;; Read one sexp from the current buffer starting at point.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
760 ;; Leave point immediately after it. A sexp can be a list or atom.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
761 ;; An atom is a symbol (or number), character, string, or vector.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
762 ;; This works for reading anything legitimate, but it
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
763 ;; is gummed up by parser inconsistencies (bugs?)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
764 (let ((class (edebug-next-token-class)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
765 (cond
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
766 ;; read goes one too far if a (possibly quoted) string or symbol
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
767 ;; is immediately followed by non-whitespace.
16744
b91256aecd79 (edebug-read-symbol, edebug-read-string): Don't back up after reading.
Richard M. Stallman <rms@gnu.org>
parents: 16550
diff changeset
768 ((eq class 'symbol) (edebug-original-read (current-buffer)))
b91256aecd79 (edebug-read-symbol, edebug-read-string): Don't back up after reading.
Richard M. Stallman <rms@gnu.org>
parents: 16550
diff changeset
769 ((eq class 'string) (edebug-original-read (current-buffer)))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
770 ((eq class 'quote) (forward-char 1)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
771 (list 'quote (edebug-read-sexp)))
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
772 ((eq class 'backquote)
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
773 (list '\` (edebug-read-sexp)))
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
774 ((eq class 'comma)
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
775 (list '\, (edebug-read-sexp)))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
776 (t ; anything else, just read it.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
777 (edebug-original-read (current-buffer))))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
778
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
779 ;;; Offsets for reader
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
780
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
781 ;; Define a structure to represent offset positions of expressions.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
782 ;; Each offset structure looks like: (before . after) for constituents,
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
783 ;; or for structures that have elements: (before <subexpressions> . after)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
784 ;; where the <subexpressions> are the offset structures for subexpressions
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
785 ;; including the head of a list.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
786 (defconst edebug-offsets nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
787
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
788 ;; Stack of offset structures in reverse order of the nesting.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
789 ;; This is used to get back to previous levels.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
790 (defconst edebug-offsets-stack nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
791 (defconst edebug-current-offset nil) ; Top of the stack, for convenience.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
792
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
793 ;; We must store whether we just read a list with a dotted form that
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
794 ;; is itself a list. This structure will be condensed, so the offsets
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
795 ;; must also be condensed.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
796 (defconst edebug-read-dotted-list nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
797
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
798 (defsubst edebug-initialize-offsets ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
799 ;; Reinitialize offset recording.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
800 (setq edebug-current-offset nil))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
801
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
802 (defun edebug-store-before-offset (point)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
803 ;; Add a new offset pair with POINT as the before offset.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
804 (let ((new-offset (list point)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
805 (if edebug-current-offset
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
806 (setcdr edebug-current-offset
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
807 (cons new-offset (cdr edebug-current-offset)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
808 ;; Otherwise, we are at the top level, so initialize.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
809 (setq edebug-offsets new-offset
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
810 edebug-offsets-stack nil
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
811 edebug-read-dotted-list nil))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
812 ;; Cons the new offset to the front of the stack.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
813 (setq edebug-offsets-stack (cons new-offset edebug-offsets-stack)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
814 edebug-current-offset new-offset)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
815 ))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
816
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
817 (defun edebug-store-after-offset (point)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
818 ;; Finalize the current offset struct by reversing it and
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
819 ;; store POINT as the after offset.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
820 (if (not edebug-read-dotted-list)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
821 ;; Just reverse the offsets of all subexpressions.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
822 (setcdr edebug-current-offset (nreverse (cdr edebug-current-offset)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
823
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
824 ;; We just read a list after a dot, which will be abbreviated out.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
825 (setq edebug-read-dotted-list nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
826 ;; Drop the corresponding offset pair.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
827 ;; That is, nconc the reverse of the rest of the offsets
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
828 ;; with the cdr of last offset.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
829 (setcdr edebug-current-offset
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
830 (nconc (nreverse (cdr (cdr edebug-current-offset)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
831 (cdr (car (cdr edebug-current-offset))))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
832
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
833 ;; Now append the point using nconc.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
834 (setq edebug-current-offset (nconc edebug-current-offset point))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
835 ;; Pop the stack.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
836 (setq edebug-offsets-stack (cdr edebug-offsets-stack)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
837 edebug-current-offset (car edebug-offsets-stack)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
838
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
839 (defun edebug-ignore-offset ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
840 ;; Ignore the last created offset pair.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
841 (setcdr edebug-current-offset (cdr (cdr edebug-current-offset))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
842
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
843 (def-edebug-spec edebug-storing-offsets (form body))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
844 (put 'edebug-storing-offsets 'lisp-indent-hook 1)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
845
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
846 (defmacro edebug-storing-offsets (point &rest body)
26519
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
847 `(unwind-protect
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
848 (progn
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
849 (edebug-store-before-offset ,point)
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
850 ,@body)
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
851 (edebug-store-after-offset (point))))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
852
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
853
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
854 ;;; Reader for Emacs Lisp.
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
855
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
856 ;; Uses edebug-next-token-class (and edebug-skip-whitespace) above.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
857
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
858 (defconst edebug-read-alist
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
859 '((symbol . edebug-read-symbol)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
860 (lparen . edebug-read-list)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
861 (string . edebug-read-string)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
862 (quote . edebug-read-quote)
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
863 (backquote . edebug-read-backquote)
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
864 (comma . edebug-read-comma)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
865 (lbracket . edebug-read-vector)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
866 (hash . edebug-read-function)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
867 ))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
868
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
869 (defun edebug-read-storing-offsets (stream)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
870 (let ((class (edebug-next-token-class))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
871 func
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
872 edebug-read-dotted-list) ; see edebug-store-after-offset
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
873 (edebug-storing-offsets (point)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
874 (if (setq func (assq class edebug-read-alist))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
875 (funcall (cdr func) stream)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
876 ;; anything else, just read it.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
877 (edebug-original-read stream))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
878 )))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
879
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
880 (defun edebug-read-symbol (stream)
16744
b91256aecd79 (edebug-read-symbol, edebug-read-string): Don't back up after reading.
Richard M. Stallman <rms@gnu.org>
parents: 16550
diff changeset
881 (edebug-original-read stream))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
882
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
883 (defun edebug-read-string (stream)
16744
b91256aecd79 (edebug-read-symbol, edebug-read-string): Don't back up after reading.
Richard M. Stallman <rms@gnu.org>
parents: 16550
diff changeset
884 (edebug-original-read stream))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
885
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
886 (defun edebug-read-quote (stream)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
887 ;; Turn 'thing into (quote thing)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
888 (forward-char 1)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
889 (list
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
890 (edebug-storing-offsets (point) 'quote)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
891 (edebug-read-storing-offsets stream)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
892
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
893 (defun edebug-read-backquote (stream)
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
894 ;; Turn `thing into (\` thing)
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
895 (let ((opoint (point)))
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
896 (forward-char 1)
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
897 ;; Generate the same structure of offsets we would have
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
898 ;; if the resulting list appeared verbatim in the input text.
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
899 (edebug-storing-offsets opoint
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
900 (list
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
901 (edebug-storing-offsets opoint '\`)
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
902 (edebug-read-storing-offsets stream)))))
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
903
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
904 (defvar edebug-read-backquote-new nil
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
905 "Non-nil if reading the inside of a new-style backquote with no parens around it.
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
906 Value of nil means reading the inside of an old-style backquote construct
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
907 which is surrounded by an extra set of parentheses.
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
908 This controls how we read comma constructs.")
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
909
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
910 (defun edebug-read-comma (stream)
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
911 ;; Turn ,thing into (\, thing). Handle ,@ and ,. also.
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
912 (let ((opoint (point)))
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
913 (forward-char 1)
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
914 (let ((symbol '\,))
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
915 (cond ((eq (following-char) ?\.)
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
916 (setq symbol '\,\.)
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
917 (forward-char 1))
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
918 ((eq (following-char) ?\@)
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
919 (setq symbol '\,@)
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
920 (forward-char 1)))
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
921 ;; Generate the same structure of offsets we would have
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
922 ;; if the resulting list appeared verbatim in the input text.
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
923 (if edebug-read-backquote-new
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
924 (list
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
925 (edebug-storing-offsets opoint symbol)
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
926 (edebug-read-storing-offsets stream))
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
927 (edebug-storing-offsets opoint symbol)))))
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
928
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
929 (defun edebug-read-function (stream)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
930 ;; Turn #'thing into (function thing)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
931 (forward-char 1)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
932 (if (/= ?\' (following-char)) (edebug-syntax-error "Bad char"))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
933 (forward-char 1)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
934 (list
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
935 (edebug-storing-offsets (point)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
936 (if (featurep 'cl) 'function* 'function))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
937 (edebug-read-storing-offsets stream)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
938
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
939 (defun edebug-read-list (stream)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
940 (forward-char 1) ; skip \(
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
941 (prog1
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
942 (let ((elements))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
943 (while (not (memq (edebug-next-token-class) '(rparen dot)))
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
944 (if (eq (edebug-next-token-class) 'backquote)
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
945 (let ((edebug-read-backquote-new (not (null elements)))
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
946 (opoint (point)))
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
947 (if edebug-read-backquote-new
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
948 (setq elements (cons (edebug-read-backquote stream) elements))
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
949 (forward-char 1) ; Skip backquote.
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
950 ;; Call edebug-storing-offsets here so that we
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
951 ;; produce the same offsets we would have had
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
952 ;; if the backquote were an ordinary symbol.
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
953 (setq elements (cons (edebug-storing-offsets opoint '\`)
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
954 elements))))
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
955 (setq elements (cons (edebug-read-storing-offsets stream) elements))))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
956 (setq elements (nreverse elements))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
957 (if (eq 'dot (edebug-next-token-class))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
958 (let (dotted-form)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
959 (forward-char 1) ; skip \.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
960 (setq dotted-form (edebug-read-storing-offsets stream))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
961 elements (nconc elements dotted-form)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
962 (if (not (eq (edebug-next-token-class) 'rparen))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
963 (edebug-syntax-error "Expected `)'"))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
964 (setq edebug-read-dotted-list (listp dotted-form))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
965 ))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
966 elements)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
967 (forward-char 1) ; skip \)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
968 ))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
969
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
970 (defun edebug-read-vector (stream)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
971 (forward-char 1) ; skip \[
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
972 (prog1
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
973 (let ((elements))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
974 (while (not (eq 'rbracket (edebug-next-token-class)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
975 (setq elements (cons (edebug-read-storing-offsets stream) elements)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
976 (apply 'vector (nreverse elements)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
977 (forward-char 1) ; skip \]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
978 ))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
979
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
980 ;;; Cursors for traversal of list and vector elements with offsets.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
981
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
982 (defvar edebug-dotted-spec nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
983
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
984 (defun edebug-new-cursor (expressions offsets)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
985 ;; Return a new cursor for EXPRESSIONS with OFFSETS.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
986 (if (vectorp expressions)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
987 (setq expressions (append expressions nil)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
988 (cons expressions offsets))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
989
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
990 (defsubst edebug-set-cursor (cursor expressions offsets)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
991 ;; Set the CURSOR's EXPRESSIONS and OFFSETS to the given.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
992 ;; Return the cursor.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
993 (setcar cursor expressions)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
994 (setcdr cursor offsets)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
995 cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
996
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
997 '(defun edebug-copy-cursor (cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
998 ;; Copy the cursor using the same object and offsets.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
999 (cons (car cursor) (cdr cursor)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1000
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1001 (defsubst edebug-cursor-expressions (cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1002 (car cursor))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1003 (defsubst edebug-cursor-offsets (cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1004 (cdr cursor))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1005
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1006 (defsubst edebug-empty-cursor (cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1007 ;; Return non-nil if CURSOR is empty - meaning no more elements.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1008 (null (car cursor)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1009
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1010 (defsubst edebug-top-element (cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1011 ;; Return the top element at the cursor.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1012 ;; Assumes not empty.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1013 (car (car cursor)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1014
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1015 (defun edebug-top-element-required (cursor &rest error)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1016 ;; Check if a dotted form is required.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1017 (if edebug-dotted-spec (edebug-no-match cursor "Dot expected."))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1018 ;; Check if there is at least one more argument.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1019 (if (edebug-empty-cursor cursor) (apply 'edebug-no-match cursor error))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1020 ;; Return that top element.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1021 (edebug-top-element cursor))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1022
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1023 (defsubst edebug-top-offset (cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1024 ;; Return the top offset pair corresponding to the top element.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1025 (car (cdr cursor)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1026
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1027 (defun edebug-move-cursor (cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1028 ;; Advance and return the cursor to the next element and offset.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1029 ;; throw no-match if empty before moving.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1030 ;; This is a violation of the cursor encapsulation, but
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1031 ;; there is plenty of that going on while matching.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1032 ;; The following test should always fail.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1033 (if (edebug-empty-cursor cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1034 (edebug-no-match cursor "Not enough arguments."))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1035 (setcar cursor (cdr (car cursor)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1036 (setcdr cursor (cdr (cdr cursor)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1037 cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1038
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1039
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1040 (defun edebug-before-offset (cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1041 ;; Return the before offset of the cursor.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1042 ;; If there is nothing left in the offsets,
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1043 ;; return one less than the offset itself,
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1044 ;; which is the after offset for a list.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1045 (let ((offset (edebug-cursor-offsets cursor)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1046 (if (consp offset)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1047 (car (car offset))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1048 (1- offset))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1049
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1050 (defun edebug-after-offset (cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1051 ;; Return the after offset of the cursor object.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1052 (let ((offset (edebug-top-offset cursor)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1053 (while (consp offset)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1054 (setq offset (cdr offset)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1055 offset))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1056
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1057 ;;; The Parser
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1058
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1059 ;; The top level function for parsing forms is
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1060 ;; edebug-read-and-maybe-wrap-form; it calls all the rest. It checks the
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1061 ;; syntax a bit and leaves point at any error it finds, but otherwise
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1062 ;; should appear to work like eval-defun.
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1063
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1064 ;; The basic plan is to surround each expression with a call to
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1065 ;; the edebug debugger together with indexes into a table of positions of
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1066 ;; all expressions. Thus an expression "exp" becomes:
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1067
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1068 ;; (edebug-after (edebug-before 1) 2 exp)
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1069
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1070 ;; When this is evaluated, first point is moved to the beginning of
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1071 ;; exp at offset 1 of the current function. The expression is
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1072 ;; evaluated, which may cause more edebug calls, and then point is
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1073 ;; moved to offset 2 after the end of exp.
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1074
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1075 ;; The highest level expressions of the function are wrapped in a call to
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1076 ;; edebug-enter, which supplies the function name and the actual
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1077 ;; arguments to the function. See functions edebug-enter, edebug-before,
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1078 ;; and edebug-after for more details.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1079
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1080 ;; Dynamically bound vars, left unbound, but globally declared.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1081 ;; This is to quiet the byte compiler.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1082
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1083 ;; Window data of the highest definition being wrapped.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1084 ;; This data is shared by all embedded definitions.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1085 (defvar edebug-top-window-data)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1086
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1087 (defvar edebug-&optional)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1088 (defvar edebug-&rest)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1089 (defvar edebug-gate nil) ;; whether no-match forces an error.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1090
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1091 (defconst edebug-def-name nil) ; name of definition, used by interactive-form
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1092 (defconst edebug-old-def-name nil) ; previous name of containing definition.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1093
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1094 (defconst edebug-error-point nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1095 (defconst edebug-best-error nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1096
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1097
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1098 (defun edebug-read-and-maybe-wrap-form ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1099 ;; Read a form and wrap it with edebug calls, if the conditions are right.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1100 ;; Here we just catch any no-match not caught below and signal an error.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1101
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1102 ;; Run the setup hook.
17458
eeff371bfe78 (edebug-read-and-maybe-wrap-form): Protect
Richard M. Stallman <rms@gnu.org>
parents: 17414
diff changeset
1103 ;; If it gets an error, make it nil.
eeff371bfe78 (edebug-read-and-maybe-wrap-form): Protect
Richard M. Stallman <rms@gnu.org>
parents: 17414
diff changeset
1104 (let ((temp-hook edebug-setup-hook))
eeff371bfe78 (edebug-read-and-maybe-wrap-form): Protect
Richard M. Stallman <rms@gnu.org>
parents: 17414
diff changeset
1105 (setq edebug-setup-hook nil)
eeff371bfe78 (edebug-read-and-maybe-wrap-form): Protect
Richard M. Stallman <rms@gnu.org>
parents: 17414
diff changeset
1106 (run-hooks 'temp-hook))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1107
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1108 (let (result
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1109 edebug-top-window-data
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1110 edebug-def-name;; make sure it is locally nil
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1111 ;; I don't like these here!!
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1112 edebug-&optional
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1113 edebug-&rest
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1114 edebug-gate
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1115 edebug-best-error
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1116 edebug-error-point
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1117 no-match
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1118 ;; Do this once here instead of several times.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1119 (max-lisp-eval-depth (+ 800 max-lisp-eval-depth))
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1120 (max-specpdl-size (+ 2000 max-specpdl-size)))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1121 (setq no-match
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1122 (catch 'no-match
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1123 (setq result (edebug-read-and-maybe-wrap-form1))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1124 nil))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1125 (if no-match
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1126 (apply 'edebug-syntax-error no-match))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1127 result))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1128
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1129
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1130 (defun edebug-read-and-maybe-wrap-form1 ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1131 (let (spec
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1132 def-kind
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1133 defining-form-p
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1134 def-name
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1135 ;; These offset things don't belong here, but to support recursive
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1136 ;; calls to edebug-read, they need to be here.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1137 edebug-offsets
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1138 edebug-offsets-stack
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1139 edebug-current-offset ; reset to nil
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1140 )
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1141 (save-excursion
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1142 (if (and (eq 'lparen (edebug-next-token-class))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1143 (eq 'symbol (progn (forward-char 1) (edebug-next-token-class))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1144 ;; Find out if this is a defining form from first symbol
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
1145 (setq def-kind (edebug-original-read (current-buffer))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1146 spec (and (symbolp def-kind) (get-edebug-spec def-kind))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1147 defining-form-p (and (listp spec)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1148 (eq '&define (car spec)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1149 ;; This is incorrect in general!! But OK most of the time.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1150 def-name (if (and defining-form-p
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1151 (eq 'name (car (cdr spec)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1152 (eq 'symbol (edebug-next-token-class)))
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
1153 (edebug-original-read (current-buffer))))))
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
1154 ;;;(message "all defs: %s all forms: %s" edebug-all-defs edebug-all-forms)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1155 (cond
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1156 (defining-form-p
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1157 (if (or edebug-all-defs edebug-all-forms)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1158 ;; If it is a defining form and we are edebugging defs,
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1159 ;; then let edebug-list-form start it.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1160 (let ((cursor (edebug-new-cursor
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1161 (list (edebug-read-storing-offsets (current-buffer)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1162 (list edebug-offsets))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1163 (car
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1164 (edebug-make-form-wrapper
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1165 cursor
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1166 (edebug-before-offset cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1167 (1- (edebug-after-offset cursor))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1168 (list (cons (symbol-name def-kind) (cdr spec))))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1169
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1170 ;; Not edebugging this form, so reset the symbol's edebug
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1171 ;; property to be just a marker at the definition's source code.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1172 ;; This only works for defs with simple names.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1173 (put def-name 'edebug (point-marker))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1174 ;; Also nil out dependent defs.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1175 '(mapcar (function
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1176 (lambda (def)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1177 (put def-name 'edebug nil)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1178 (get def-name 'edebug-dependents))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1179 (edebug-read-sexp)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1180
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1181 ;; If all forms are being edebugged, explicitly wrap it.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1182 (edebug-all-forms
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1183 (let ((cursor (edebug-new-cursor
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1184 (list (edebug-read-storing-offsets (current-buffer)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1185 (list edebug-offsets))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1186 (edebug-make-form-wrapper
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1187 cursor
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1188 (edebug-before-offset cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1189 (edebug-after-offset cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1190 nil)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1191
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1192 ;; Not a defining form, and not edebugging.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1193 (t (edebug-read-sexp)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1194 ))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1195
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1196
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1197 (defvar edebug-def-args) ; args of defining form.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1198 (defvar edebug-def-interactive) ; is it an emacs interactive function?
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1199 (defvar edebug-inside-func) ;; whether code is inside function context.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1200 ;; Currently def-form sets this to nil; def-body sets it to t.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1201
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1202 (defun edebug-interactive-p-name ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1203 ;; Return a unique symbol for the variable used to store the
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1204 ;; status of interactive-p for this function.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1205 (intern (format "edebug-%s-interactive-p" edebug-def-name)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1206
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1207
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1208 (defun edebug-wrap-def-body (forms)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1209 "Wrap the FORMS of a definition body."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1210 (if edebug-def-interactive
26519
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
1211 `(let ((,(edebug-interactive-p-name)
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
1212 (interactive-p)))
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
1213 ,(edebug-make-enter-wrapper forms))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1214 (edebug-make-enter-wrapper forms)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1215
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1216
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1217 (defun edebug-make-enter-wrapper (forms)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1218 ;; Generate the enter wrapper for some forms of a definition.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1219 ;; This is not to be used for the body of other forms, e.g. `while',
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1220 ;; since it wraps the list of forms with a call to `edebug-enter'.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1221 ;; Uses the dynamically bound vars edebug-def-name and edebug-def-args.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1222 ;; Do this after parsing since that may find a name.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1223 (setq edebug-def-name
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1224 (or edebug-def-name edebug-old-def-name (edebug-gensym "edebug-anon")))
26519
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
1225 `(edebug-enter
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
1226 (quote ,edebug-def-name)
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
1227 ,(if edebug-inside-func
26648
2cca1ed12a51 (edebug-make-enter-wrapper): Correct
Gerd Moellmann <gerd@gnu.org>
parents: 26519
diff changeset
1228 `(list
2cca1ed12a51 (edebug-make-enter-wrapper): Correct
Gerd Moellmann <gerd@gnu.org>
parents: 26519
diff changeset
1229 ;; Doesn't work with more than one def-body!!
2cca1ed12a51 (edebug-make-enter-wrapper): Correct
Gerd Moellmann <gerd@gnu.org>
parents: 26519
diff changeset
1230 ;; But the list will just be reversed.
2cca1ed12a51 (edebug-make-enter-wrapper): Correct
Gerd Moellmann <gerd@gnu.org>
parents: 26519
diff changeset
1231 ,@(nreverse edebug-def-args))
26519
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
1232 'nil)
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
1233 (function (lambda () ,@forms))
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
1234 ))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1235
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1236
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1237 (defvar edebug-form-begin-marker) ; the mark for def being instrumented
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1238
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1239 (defvar edebug-offset-index) ; the next available offset index.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1240 (defvar edebug-offset-list) ; the list of offset positions.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1241
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1242 (defun edebug-inc-offset (offset)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1243 ;; modifies edebug-offset-index and edebug-offset-list
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1244 ;; accesses edebug-func-marc and buffer point
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1245 (prog1
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1246 edebug-offset-index
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1247 (setq edebug-offset-list (cons (- offset edebug-form-begin-marker)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1248 edebug-offset-list)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1249 edebug-offset-index (1+ edebug-offset-index))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1250
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1251
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1252 (defun edebug-make-before-and-after-form (before-index form after-index)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1253 ;; Return the edebug form for the current function at offset BEFORE-INDEX
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1254 ;; given FORM. Looks like:
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1255 ;; (edebug-after (edebug-before BEFORE-INDEX) AFTER-INDEX FORM)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1256 ;; Also increment the offset index for subsequent use.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1257 (list 'edebug-after
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1258 (list 'edebug-before before-index)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1259 after-index form))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1260
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1261 (defun edebug-make-after-form (form after-index)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1262 ;; Like edebug-make-before-and-after-form, but only after.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1263 (list 'edebug-after 0 after-index form))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1264
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1265
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1266 (defun edebug-unwrap (sexp)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1267 "Return the unwrapped SEXP or return it as is if it is not wrapped.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1268 The SEXP might be the result of wrapping a body, which is a list of
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1269 expressions; a `progn' form will be returned enclosing these forms."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1270 (if (consp sexp)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1271 (cond
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1272 ((eq 'edebug-after (car sexp))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1273 (nth 3 sexp))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1274 ((eq 'edebug-enter (car sexp))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1275 (let ((forms (nthcdr 2 (nth 1 (nth 3 sexp)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1276 (if (> (length forms) 1)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1277 (cons 'progn forms) ;; could return (values forms) instead.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1278 (car forms))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1279 (t sexp);; otherwise it is not wrapped, so just return it.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1280 )
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1281 sexp))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1282
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1283 (defun edebug-unwrap* (sexp)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1284 "Return the sexp recursively unwrapped."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1285 (let ((new-sexp (edebug-unwrap sexp)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1286 (while (not (eq sexp new-sexp))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1287 (setq sexp new-sexp
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1288 new-sexp (edebug-unwrap sexp)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1289 (if (consp new-sexp)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1290 (mapcar 'edebug-unwrap* new-sexp)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1291 new-sexp)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1292
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1293
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1294 (defun edebug-defining-form (cursor form-begin form-end speclist)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1295 ;; Process the defining form, starting outside the form.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1296 ;; The speclist is a generated list spec that looks like:
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1297 ;; (("def-symbol" defining-form-spec-sans-&define))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1298 ;; Skip the first offset.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1299 (edebug-set-cursor cursor (edebug-cursor-expressions cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1300 (cdr (edebug-cursor-offsets cursor)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1301 (edebug-make-form-wrapper
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1302 cursor
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1303 form-begin (1- form-end)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1304 speclist))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1305
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1306 (defun edebug-make-form-wrapper (cursor form-begin form-end
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1307 &optional speclist)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1308 ;; Wrap a form, usually a defining form, but any evaluated one.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1309 ;; If speclist is non-nil, this is being called by edebug-defining-form.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1310 ;; Otherwise it is being called from edebug-read-and-maybe-wrap-form1.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1311 ;; This is a hack, but I havent figured out a simpler way yet.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1312 (let* ((form-data-entry (edebug-get-form-data-entry form-begin form-end))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1313 ;; Set this marker before parsing.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1314 (edebug-form-begin-marker
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1315 (if form-data-entry
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1316 (edebug-form-data-begin form-data-entry)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1317 ;; Buffer must be current-buffer for this to work:
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1318 (set-marker (make-marker) form-begin))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1319
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1320 (let (edebug-offset-list
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1321 (edebug-offset-index 0)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1322 result
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1323 ;; For definitions.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1324 ;; (edebug-containing-def-name edebug-def-name)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1325 ;; Get name from form-data, if any.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1326 (edebug-old-def-name (edebug-form-data-name form-data-entry))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1327 edebug-def-name
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1328 edebug-def-args
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1329 edebug-def-interactive
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1330 edebug-inside-func;; whether wrapped code executes inside a function.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1331 )
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1332
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1333 (setq result
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1334 (if speclist
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1335 (edebug-match cursor speclist)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1336
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1337 ;; else wrap as an enter-form.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1338 (edebug-make-enter-wrapper (list (edebug-form cursor)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1339
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1340 ;; Set the name here if it was not set by edebug-make-enter-wrapper.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1341 (setq edebug-def-name
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1342 (or edebug-def-name edebug-old-def-name (edebug-gensym "edebug-anon")))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1343
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1344 ;; Add this def as a dependent of containing def. Buggy.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1345 '(if (and edebug-containing-def-name
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1346 (not (get edebug-containing-def-name 'edebug-dependents)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1347 (put edebug-containing-def-name 'edebug-dependents
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1348 (cons edebug-def-name
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1349 (get edebug-containing-def-name
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1350 'edebug-dependents))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1351
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1352 ;; Create a form-data-entry or modify existing entry's markers.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1353 ;; In the latter case, pointers to the entry remain eq.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1354 (if (not form-data-entry)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1355 (setq form-data-entry
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1356 (edebug-make-form-data-entry
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1357 edebug-def-name
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1358 edebug-form-begin-marker
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1359 ;; Buffer must be current-buffer.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1360 (set-marker (make-marker) form-end)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1361 ))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1362 (edebug-set-form-data-entry
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1363 form-data-entry edebug-def-name ;; in case name is changed
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1364 form-begin form-end))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1365
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1366 ;; (message "defining: %s" edebug-def-name) (sit-for 2)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1367 (edebug-make-top-form-data-entry form-data-entry)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1368 (message "Edebug: %s" edebug-def-name)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1369 ;;(debug edebug-def-name)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1370
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1371 ;; Destructively reverse edebug-offset-list and make vector from it.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1372 (setq edebug-offset-list (vconcat (nreverse edebug-offset-list)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1373
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1374 ;; Side effects on the property list of edebug-def-name.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1375 (edebug-clear-frequency-count edebug-def-name)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1376 (edebug-clear-coverage edebug-def-name)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1377
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1378 ;; Set up the initial window data.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1379 (if (not edebug-top-window-data) ;; if not already set, do it now.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1380 (let ((window ;; Find the best window for this buffer.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1381 (or (get-buffer-window (current-buffer))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1382 (selected-window))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1383 (setq edebug-top-window-data
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1384 (cons window (window-start window)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1385
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1386 ;; Store the edebug data in symbol's property list.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1387 (put edebug-def-name 'edebug
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1388 ;; A struct or vector would be better here!!
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1389 (list edebug-form-begin-marker
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1390 nil ; clear breakpoints
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1391 edebug-offset-list
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1392 edebug-top-window-data
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1393 ))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1394 result
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1395 )))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1396
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1397
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1398 (defun edebug-clear-frequency-count (name)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1399 ;; Create initial frequency count vector.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1400 ;; For each stop point, the counter is incremented each time it is visited.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1401 (put name 'edebug-freq-count
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1402 (make-vector (length edebug-offset-list) 0)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1403
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1404
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1405 (defun edebug-clear-coverage (name)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1406 ;; Create initial coverage vector.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1407 ;; Only need one per expression, but it is simpler to use stop points.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1408 (put name 'edebug-coverage
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1409 (make-vector (length edebug-offset-list) 'unknown)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1410
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1411
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1412 (defun edebug-form (cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1413 ;; Return the instrumented form for the following form.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1414 ;; Add the point offsets to the edebug-offset-list for the form.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1415 (let* ((form (edebug-top-element-required cursor "Expected form"))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1416 (offset (edebug-top-offset cursor)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1417 (prog1
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1418 (cond
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1419 ((consp form)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1420 ;; The first offset for a list form is for the list form itself.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1421 (if (eq 'quote (car form))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1422 form
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1423 (let* ((head (car form))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1424 (spec (and (symbolp head) (get-edebug-spec head)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1425 (new-cursor (edebug-new-cursor form offset)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1426 ;; Find out if this is a defining form from first symbol.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1427 ;; An indirect spec would not work here, yet.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1428 (if (and (consp spec) (eq '&define (car spec)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1429 (edebug-defining-form
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1430 new-cursor
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1431 (car offset);; before the form
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1432 (edebug-after-offset cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1433 (cons (symbol-name head) (cdr spec)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1434 ;; Wrap a regular form.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1435 (edebug-make-before-and-after-form
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1436 (edebug-inc-offset (car offset))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1437 (edebug-list-form new-cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1438 ;; After processing the list form, the new-cursor is left
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1439 ;; with the offset after the form.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1440 (edebug-inc-offset (edebug-cursor-offsets new-cursor))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1441 )))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1442
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1443 ((symbolp form)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1444 (cond
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1445 ;; Check for constant symbols that don't get wrapped.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1446 ((or (memq form '(t nil))
28567
3ed20cb4c9b3 (edebug-keywordp): Remove. Change callers
Dave Love <fx@gnu.org>
parents: 28516
diff changeset
1447 (keywordp form))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1448 form)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1449
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1450 (t ;; just a variable
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1451 (edebug-make-after-form form (edebug-inc-offset (cdr offset))))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1452
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1453 ;; Anything else is self-evaluating.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1454 (t form))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1455 (edebug-move-cursor cursor))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1456
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1457
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1458 (defsubst edebug-forms (cursor) (edebug-match cursor '(&rest form)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1459 (defsubst edebug-sexps (cursor) (edebug-match cursor '(&rest sexp)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1460
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1461 (defsubst edebug-list-form-args (head cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1462 ;; Process the arguments of a list form given that head of form is a symbol.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1463 ;; Helper for edebug-list-form
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1464 (let ((spec (get-edebug-spec head)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1465 (cond
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1466 (spec
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1467 (cond
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1468 ((consp spec)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1469 ;; It is a speclist.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1470 (let (edebug-best-error
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1471 edebug-error-point);; This may not be needed.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1472 (edebug-match-sublist cursor spec)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1473 ((eq t spec) (edebug-forms cursor))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1474 ((eq 0 spec) (edebug-sexps cursor))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1475 ((symbolp spec) (funcall spec cursor));; Not used by edebug,
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1476 ; but leave it in for compatibility.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1477 ))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1478 ;; No edebug-form-spec provided.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1479 ((edebug-macrop head)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1480 (if edebug-eval-macro-args
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1481 (edebug-forms cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1482 (edebug-sexps cursor)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1483 (t ;; Otherwise it is a function call.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1484 (edebug-forms cursor)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1485
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1486
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1487 (defun edebug-list-form (cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1488 ;; Return an instrumented form built from the list form.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1489 ;; The after offset will be left in the cursor after processing the form.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1490 (let ((head (edebug-top-element-required cursor "Expected elements"))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1491 ;; Prevent backtracking whenever instrumenting.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1492 (edebug-gate t)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1493 ;; A list form is never optional because it matches anything.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1494 (edebug-&optional nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1495 (edebug-&rest nil))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1496 ;; Skip the first offset.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1497 (edebug-set-cursor cursor (edebug-cursor-expressions cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1498 (cdr (edebug-cursor-offsets cursor)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1499 (cond
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1500 ((null head) nil) ; () is legal.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1501
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1502 ((symbolp head)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1503 (cond
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1504 ((null head)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1505 (edebug-syntax-error "nil head"))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1506 ((eq head 'interactive-p)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1507 ;; Special case: replace (interactive-p) with variable
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1508 (setq edebug-def-interactive 'check-it)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1509 (edebug-move-cursor cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1510 (edebug-interactive-p-name))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1511 (t
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1512 (cons head (edebug-list-form-args
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1513 head (edebug-move-cursor cursor))))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1514
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1515 ((consp head)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1516 (if (and (listp head) (eq (car head) ',))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1517 (edebug-match cursor '(("," def-form) body))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1518 ;; Process anonymous function and args.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1519 ;; This assumes no anonymous macros.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1520 (edebug-match-specs cursor '(lambda-expr body) 'edebug-match-specs)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1521
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1522 (t (edebug-syntax-error
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1523 "Head of list form must be a symbol or lambda expression.")))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1524 ))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1525
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1526 ;;; Matching of specs.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1527
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1528 (defvar edebug-after-dotted-spec nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1529
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1530 (defvar edebug-matching-depth 0) ;; initial value
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1531 (defconst edebug-max-depth 150) ;; maximum number of matching recursions.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1532
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1533
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1534 ;;; Failure to match
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1535
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1536 ;; This throws to no-match, if there are higher alternatives.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1537 ;; Otherwise it signals an error. The place of the error is found
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1538 ;; with the two before- and after-offset functions.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1539
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1540 (defun edebug-no-match (cursor &rest edebug-args)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1541 ;; Throw a no-match, or signal an error immediately if gate is active.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1542 ;; Remember this point in case we need to report this error.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1543 (setq edebug-error-point (or edebug-error-point
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1544 (edebug-before-offset cursor))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1545 edebug-best-error (or edebug-best-error edebug-args))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1546 (if (and edebug-gate (not edebug-&optional))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1547 (progn
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1548 (if edebug-error-point
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1549 (goto-char edebug-error-point))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1550 (apply 'edebug-syntax-error edebug-args))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1551 (funcall 'throw 'no-match edebug-args)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1552
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1553
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1554 (defun edebug-match (cursor specs)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1555 ;; Top level spec matching function.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1556 ;; Used also at each lower level of specs.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1557 (let (edebug-&optional
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1558 edebug-&rest
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1559 edebug-best-error
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1560 edebug-error-point
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1561 (edebug-gate edebug-gate) ;; locally bound to limit effect
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1562 )
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1563 (edebug-match-specs cursor specs 'edebug-match-specs)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1564
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1565
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1566 (defun edebug-match-one-spec (cursor spec)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1567 ;; Match one spec, which is not a keyword &-spec.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1568 (cond
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1569 ((symbolp spec) (edebug-match-symbol cursor spec))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1570 ((vectorp spec) (edebug-match cursor (append spec nil)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1571 ((stringp spec) (edebug-match-string cursor spec))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1572 ((listp spec) (edebug-match-list cursor spec))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1573 ))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1574
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1575
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1576 (defun edebug-match-specs (cursor specs remainder-handler)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1577 ;; Append results of matching the list of specs.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1578 ;; The first spec is handled and the remainder-handler handles the rest.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1579 (let ((edebug-matching-depth
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1580 (if (> edebug-matching-depth edebug-max-depth)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1581 (error "too deep - perhaps infinite loop in spec?")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1582 (1+ edebug-matching-depth))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1583 (cond
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1584 ((null specs) nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1585
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1586 ;; Is the spec dotted?
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1587 ((atom specs)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1588 (let ((edebug-dotted-spec t));; Containing spec list was dotted.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1589 (edebug-match-specs cursor (list specs) remainder-handler)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1590
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1591 ;; Is the form dotted?
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1592 ((not (listp (edebug-cursor-expressions cursor)));; allow nil
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1593 (if (not edebug-dotted-spec)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1594 (edebug-no-match cursor "Dotted spec required."))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1595 ;; Cancel dotted spec and dotted form.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1596 (let ((edebug-dotted-spec)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1597 (this-form (edebug-cursor-expressions cursor))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1598 (this-offset (edebug-cursor-offsets cursor)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1599 ;; Wrap the form in a list, (by changing the cursor??)...
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1600 (edebug-set-cursor cursor (list this-form) this-offset)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1601 ;; and process normally, then unwrap the result.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1602 (car (edebug-match-specs cursor specs remainder-handler))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1603
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1604 (t;; Process normally.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1605 (let* ((spec (car specs))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1606 (rest)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1607 (first-char (and (symbolp spec) (aref (symbol-name spec) 0))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1608 ;;(message "spec = %s first char = %s" spec first-char) (sit-for 1)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1609 (nconc
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1610 (cond
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1611 ((eq ?& first-char);; "&" symbols take all following specs.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1612 (funcall (get-edebug-spec spec) cursor (cdr specs)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1613 ((eq ?: first-char);; ":" symbols take one following spec.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1614 (setq rest (cdr (cdr specs)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1615 (funcall (get-edebug-spec spec) cursor (car (cdr specs))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1616 (t;; Any other normal spec.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1617 (setq rest (cdr specs))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1618 (edebug-match-one-spec cursor spec)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1619 (funcall remainder-handler cursor rest remainder-handler)))))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1620
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1621
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1622 ;; Define specs for all the symbol specs with functions used to process them.
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1623 ;; Perhaps we shouldn't be doing this with edebug-form-specs since the
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1624 ;; user may want to define macros or functions with the same names.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1625 ;; We could use an internal obarray for these primitive specs.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1626
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1627 (mapcar
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1628 (function (lambda (pair)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1629 (put (car pair) 'edebug-form-spec (cdr pair))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1630 '((&optional . edebug-match-&optional)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1631 (&rest . edebug-match-&rest)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1632 (&or . edebug-match-&or)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1633 (form . edebug-match-form)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1634 (sexp . edebug-match-sexp)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1635 (body . edebug-match-body)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1636 (&define . edebug-match-&define)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1637 (name . edebug-match-name)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1638 (:name . edebug-match-colon-name)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1639 (arg . edebug-match-arg)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1640 (def-body . edebug-match-def-body)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1641 (def-form . edebug-match-def-form)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1642 ;; Less frequently used:
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1643 ;; (function . edebug-match-function)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1644 (lambda-expr . edebug-match-lambda-expr)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1645 (&not . edebug-match-&not)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1646 (&key . edebug-match-&key)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1647 (place . edebug-match-place)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1648 (gate . edebug-match-gate)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1649 ;; (nil . edebug-match-nil) not this one - special case it.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1650 ))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1651
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1652 (defun edebug-match-symbol (cursor symbol)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1653 ;; Match a symbol spec.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1654 (let* ((spec (get-edebug-spec symbol)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1655 (cond
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1656 (spec
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1657 (if (consp spec)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1658 ;; It is an indirect spec.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1659 (edebug-match cursor spec)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1660 ;; Otherwise it should be the symbol name of a function.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1661 ;; There could be a bug here - maybe need to do edebug-match bindings.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1662 (funcall spec cursor)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1663
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1664 ((null symbol) ;; special case this.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1665 (edebug-match-nil cursor))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1666
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1667 ((fboundp symbol) ; is it a predicate?
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1668 (let ((sexp (edebug-top-element-required cursor "Expected" symbol)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1669 ;; Special case for edebug-`.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1670 (if (and (listp sexp) (eq (car sexp) ',))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1671 (edebug-match cursor '(("," def-form)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1672 (if (not (funcall symbol sexp))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1673 (edebug-no-match cursor symbol "failed"))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1674 (edebug-move-cursor cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1675 (list sexp))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1676 (t (error "%s is not a form-spec or function" symbol))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1677 )))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1678
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1679
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1680 (defun edebug-match-sexp (cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1681 (list (prog1 (edebug-top-element-required cursor "Expected sexp")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1682 (edebug-move-cursor cursor))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1683
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1684 (defun edebug-match-form (cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1685 (list (edebug-form cursor)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1686
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1687 (defalias 'edebug-match-place 'edebug-match-form)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1688 ;; Currently identical to edebug-match-form.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1689 ;; This is for common lisp setf-style place arguments.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1690
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1691 (defsubst edebug-match-body (cursor) (edebug-forms cursor))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1692
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1693 (defun edebug-match-&optional (cursor specs)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1694 ;; Keep matching until one spec fails.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1695 (edebug-&optional-wrapper cursor specs 'edebug-&optional-wrapper))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1696
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1697 (defun edebug-&optional-wrapper (cursor specs remainder-handler)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1698 (let (result
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1699 (edebug-&optional specs)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1700 (edebug-gate nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1701 (this-form (edebug-cursor-expressions cursor))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1702 (this-offset (edebug-cursor-offsets cursor)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1703 (if (null (catch 'no-match
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1704 (setq result
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1705 (edebug-match-specs cursor specs remainder-handler))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1706 ;; Returning nil means no no-match was thrown.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1707 nil))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1708 result
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1709 ;; no-match, but don't fail; just reset cursor and return nil.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1710 (edebug-set-cursor cursor this-form this-offset)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1711 nil)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1712
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1713
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1714 (defun edebug-&rest-wrapper (cursor specs remainder-handler)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1715 (if (null specs) (setq specs edebug-&rest))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1716 ;; Reuse the &optional handler with this as the remainder handler.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1717 (edebug-&optional-wrapper cursor specs remainder-handler))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1718
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1719 (defun edebug-match-&rest (cursor specs)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1720 ;; Repeatedly use specs until failure.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1721 (let ((edebug-&rest specs) ;; remember these
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1722 edebug-best-error
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1723 edebug-error-point)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1724 (edebug-&rest-wrapper cursor specs 'edebug-&rest-wrapper)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1725
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1726
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1727 (defun edebug-match-&or (cursor specs)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1728 ;; Keep matching until one spec succeeds, and return its results.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1729 ;; If none match, fail.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1730 ;; This needs to be optimized since most specs spend time here.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1731 (let ((original-specs specs)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1732 (this-form (edebug-cursor-expressions cursor))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1733 (this-offset (edebug-cursor-offsets cursor)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1734 (catch 'matched
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1735 (while specs
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1736 (catch 'no-match
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1737 (throw 'matched
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1738 (let (edebug-gate ;; only while matching each spec
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1739 edebug-best-error
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1740 edebug-error-point)
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1741 ;; Doesn't support e.g. &or symbolp &rest form
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1742 (edebug-match-one-spec cursor (car specs)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1743 ;; Match failed, so reset and try again.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1744 (setq specs (cdr specs))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1745 ;; Reset the cursor for the next match.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1746 (edebug-set-cursor cursor this-form this-offset))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1747 ;; All failed.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1748 (apply 'edebug-no-match cursor "Expected one of" original-specs))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1749 ))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1750
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1751
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1752 (defun edebug-match-&not (cursor specs)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1753 ;; If any specs match, then fail
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1754 (if (null (catch 'no-match
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1755 (let ((edebug-gate nil))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1756 (save-excursion
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1757 (edebug-match-&or cursor specs)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1758 nil))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1759 ;; This means something matched, so it is a no match.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1760 (edebug-no-match cursor "Unexpected"))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1761 ;; This means nothing matched, so it is OK.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1762 nil) ;; So, return nothing
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1763
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1764
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1765 (def-edebug-spec &key edebug-match-&key)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1766
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1767 (defun edebug-match-&key (cursor specs)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1768 ;; Following specs must look like (<name> <spec>) ...
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1769 ;; where <name> is the name of a keyword, and spec is its spec.
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1770 ;; This really doesn't save much over the expanded form and takes time.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1771 (edebug-match-&rest
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1772 cursor
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1773 (cons '&or
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1774 (mapcar (function (lambda (pair)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1775 (vector (format ":%s" (car pair))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1776 (car (cdr pair)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1777 specs))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1778
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1779
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1780 (defun edebug-match-gate (cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1781 ;; Simply set the gate to prevent backtracking at this level.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1782 (setq edebug-gate t)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1783 nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1784
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1785
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1786 (defun edebug-match-list (cursor specs)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1787 ;; The spec is a list, but what kind of list, and what context?
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1788 (if edebug-dotted-spec
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1789 ;; After dotted spec but form did not contain dot,
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1790 ;; so match list spec elements as if spliced in.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1791 (prog1
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1792 (let ((edebug-dotted-spec))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1793 (edebug-match-specs cursor specs 'edebug-match-specs))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1794 ;; If it matched, really clear the dotted-spec flag.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1795 (setq edebug-dotted-spec nil))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1796 (let ((spec (car specs))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1797 (form (edebug-top-element-required cursor "Expected" specs)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1798 (cond
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1799 ((eq 'quote spec)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1800 (let ((spec (car (cdr specs))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1801 (cond
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1802 ((symbolp spec)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1803 ;; Special case: spec quotes a symbol to match.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1804 ;; Change in future. Use "..." instead.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1805 (if (not (eq spec form))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1806 (edebug-no-match cursor "Expected" spec))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1807 (edebug-move-cursor cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1808 (setq edebug-gate t)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1809 form)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1810 (t
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1811 (error "Bad spec: %s" specs)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1812
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1813 ((listp form)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1814 (prog1
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1815 (list (edebug-match-sublist
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1816 ;; First offset is for the list form itself.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1817 ;; Treat nil as empty list.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1818 (edebug-new-cursor form (cdr (edebug-top-offset cursor)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1819 specs))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1820 (edebug-move-cursor cursor)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1821
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1822 ((and (eq 'vector spec) (vectorp form))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1823 ;; Special case: match a vector with the specs.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1824 (let ((result (edebug-match-sublist
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1825 (edebug-new-cursor
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1826 form (cdr (edebug-top-offset cursor)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1827 (cdr specs))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1828 (edebug-move-cursor cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1829 (list (apply 'vector result))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1830
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1831 (t (edebug-no-match cursor "Expected" specs)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1832 )))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1833
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1834
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1835 (defun edebug-match-sublist (cursor specs)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1836 ;; Match a sublist of specs.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1837 (let (edebug-&optional
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1838 ;;edebug-best-error
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1839 ;;edebug-error-point
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1840 )
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1841 (prog1
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1842 ;; match with edebug-match-specs so edebug-best-error is not bound.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1843 (edebug-match-specs cursor specs 'edebug-match-specs)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1844 (if (not (edebug-empty-cursor cursor))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1845 (if edebug-best-error
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1846 (apply 'edebug-no-match cursor edebug-best-error)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1847 ;; A failed &rest or &optional spec may leave some args.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1848 (edebug-no-match cursor "Failed matching" specs)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1849 )))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1850
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1851
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1852 (defun edebug-match-string (cursor spec)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1853 (let ((sexp (edebug-top-element-required cursor "Expected" spec)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1854 (if (not (eq (intern spec) sexp))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1855 (edebug-no-match cursor "Expected" spec)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1856 ;; Since it matched, failure means immediate error, unless &optional.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1857 (setq edebug-gate t)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1858 (edebug-move-cursor cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1859 (list sexp)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1860 )))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1861
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1862 (defun edebug-match-nil (cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1863 ;; There must be nothing left to match a nil.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1864 (if (not (edebug-empty-cursor cursor))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1865 (edebug-no-match cursor "Unmatched argument(s)")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1866 nil))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1867
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1868
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1869 (defun edebug-match-function (cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1870 (error "Use function-form instead of function in edebug spec"))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1871
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1872 (defun edebug-match-&define (cursor specs)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1873 ;; Match a defining form.
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1874 ;; Normally, &define is interpreted specially other places.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1875 ;; This should only be called inside of a spec list to match the remainder
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1876 ;; of the current list. e.g. ("lambda" &define args def-body)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1877 (edebug-make-form-wrapper
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1878 cursor
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1879 (edebug-before-offset cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1880 ;; Find the last offset in the list.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1881 (let ((offsets (edebug-cursor-offsets cursor)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1882 (while (consp offsets) (setq offsets (cdr offsets)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1883 offsets)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1884 specs))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1885
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1886 (defun edebug-match-lambda-expr (cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1887 ;; The expression must be a function.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1888 ;; This will match any list form that begins with a symbol
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1889 ;; that has an edebug-form-spec beginning with &define. In
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1890 ;; practice, only lambda expressions should be used.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1891 ;; I could add a &lambda specification to avoid confusion.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1892 (let* ((sexp (edebug-top-element-required
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1893 cursor "Expected lambda expression"))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1894 (offset (edebug-top-offset cursor))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1895 (head (and (consp sexp) (car sexp)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1896 (spec (and (symbolp head) (get-edebug-spec head)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1897 (edebug-inside-func nil))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1898 ;; Find out if this is a defining form from first symbol.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1899 (if (and (consp spec) (eq '&define (car spec)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1900 (prog1
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1901 (list
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1902 (edebug-defining-form
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1903 (edebug-new-cursor sexp offset)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1904 (car offset);; before the sexp
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1905 (edebug-after-offset cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1906 (cons (symbol-name head) (cdr spec))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1907 (edebug-move-cursor cursor))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1908 (edebug-no-match cursor "Expected lambda expression")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1909 )))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1910
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1911
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1912 (defun edebug-match-name (cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1913 ;; Set the edebug-def-name bound in edebug-defining-form.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1914 (let ((name (edebug-top-element-required cursor "Expected name")))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1915 ;; Maybe strings and numbers could be used.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1916 (if (not (symbolp name))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1917 (edebug-no-match cursor "Symbol expected for name of definition"))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1918 (setq edebug-def-name
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1919 (if edebug-def-name
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1920 ;; Construct a new name by appending to previous name.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1921 (intern (format "%s@%s" edebug-def-name name))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1922 name))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1923 (edebug-move-cursor cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1924 (list name)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1925
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1926 (defun edebug-match-colon-name (cursor spec)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1927 ;; Set the edebug-def-name to the spec.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1928 (setq edebug-def-name
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1929 (if edebug-def-name
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1930 ;; Construct a new name by appending to previous name.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1931 (intern (format "%s@%s" edebug-def-name spec))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1932 spec))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1933 nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1934
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1935 (defun edebug-match-arg (cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1936 ;; set the def-args bound in edebug-defining-form
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1937 (let ((edebug-arg (edebug-top-element-required cursor "Expected arg")))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1938 (if (or (not (symbolp edebug-arg))
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1939 (edebug-lambda-list-keywordp edebug-arg))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1940 (edebug-no-match cursor "Bad argument:" edebug-arg))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1941 (edebug-move-cursor cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1942 (setq edebug-def-args (cons edebug-arg edebug-def-args))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1943 (list edebug-arg)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1944
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1945 (defun edebug-match-def-form (cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1946 ;; Like form but the form is wrapped in edebug-enter form.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1947 ;; The form is assumed to be executing outside of the function context.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1948 ;; This is a hack for now, since a def-form might execute inside as well.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1949 ;; Not to be used otherwise.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1950 (let ((edebug-inside-func nil))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1951 (list (edebug-make-enter-wrapper (list (edebug-form cursor))))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1952
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1953 (defun edebug-match-def-body (cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1954 ;; Like body but body is wrapped in edebug-enter form.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1955 ;; The body is assumed to be executing inside of the function context.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1956 ;; Not to be used otherwise.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1957 (let ((edebug-inside-func t))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1958 (list (edebug-wrap-def-body (edebug-forms cursor)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1959
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1960
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1961 ;;;; Edebug Form Specs
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1962 ;;; ==========================================================
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1963 ;;; See cl-specs.el for common lisp specs.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1964
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1965 ;;;;* Spec for def-edebug-spec
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1966 ;;; Out of date.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1967
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1968 (defun edebug-spec-p (object)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1969 "Return non-nil if OBJECT is a symbol with an edebug-form-spec property."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1970 (and (symbolp object)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1971 (get object 'edebug-form-spec)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1972
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1973 (def-edebug-spec def-edebug-spec
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1974 ;; Top level is different from lower levels.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1975 (&define :name edebug-spec name
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1976 &or "nil" edebug-spec-p "t" "0" (&rest edebug-spec)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1977
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1978 (def-edebug-spec edebug-spec-list
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1979 ;; A list must have something in it, or it is nil, a symbolp
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1980 ((edebug-spec . [&or nil edebug-spec])))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1981
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1982 (def-edebug-spec edebug-spec
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1983 (&or
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1984 (vector &rest edebug-spec) ; matches a vector
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1985 ("vector" &rest edebug-spec) ; matches a vector spec
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1986 ("quote" symbolp)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1987 edebug-spec-list
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1988 stringp
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1989 [edebug-lambda-list-keywordp &rest edebug-spec]
28567
3ed20cb4c9b3 (edebug-keywordp): Remove. Change callers
Dave Love <fx@gnu.org>
parents: 28516
diff changeset
1990 [keywordp gate edebug-spec]
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1991 edebug-spec-p ;; Including all the special ones e.g. form.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1992 symbolp;; a predicate
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1993 ))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1994
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1995
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1996 ;;;* Emacs special forms and some functions.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1997
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1998 ;; quote expects only one argument, although it allows any number.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1999 (def-edebug-spec quote sexp)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2000
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2001 ;; The standard defining forms.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2002 (def-edebug-spec defconst defvar)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2003 (def-edebug-spec defvar (symbolp &optional form stringp))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2004
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2005 (def-edebug-spec defun
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2006 (&define name lambda-list
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2007 [&optional stringp]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2008 [&optional ("interactive" interactive)]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2009 def-body))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2010 (def-edebug-spec defmacro
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2011 (&define name lambda-list def-body))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2012
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
2013 (def-edebug-spec arglist lambda-list) ;; deprecated - use lambda-list.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2014
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2015 (def-edebug-spec lambda-list
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2016 (([&rest arg]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2017 [&optional ["&optional" arg &rest arg]]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2018 &optional ["&rest" arg]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2019 )))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2020
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2021 (def-edebug-spec interactive
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2022 (&optional &or stringp def-form))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2023
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2024 ;; A function-form is for an argument that may be a function or a form.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2025 ;; This specially recognizes anonymous functions quoted with quote.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2026 (def-edebug-spec function-form
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2027 ;; form at the end could also handle "function",
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2028 ;; but recognize it specially to avoid wrapping function forms.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2029 (&or ([&or "quote" "function"] &or symbolp lambda-expr) form))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2030
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2031 ;; function expects a symbol or a lambda or macro expression
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2032 ;; A macro is allowed by Emacs.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2033 (def-edebug-spec function (&or symbolp lambda-expr))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2034
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2035 ;; lambda is a macro in emacs 19.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2036 (def-edebug-spec lambda (&define lambda-list
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2037 [&optional stringp]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2038 [&optional ("interactive" interactive)]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2039 def-body))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2040
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2041 ;; A macro expression is a lambda expression with "macro" prepended.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2042 (def-edebug-spec macro (&define "lambda" lambda-list def-body))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2043
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2044 ;; (def-edebug-spec anonymous-form ((&or ["lambda" lambda] ["macro" macro])))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2045
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2046 ;; Standard functions that take function-forms arguments.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2047 (def-edebug-spec mapcar (function-form form))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2048 (def-edebug-spec mapconcat (function-form form form))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2049 (def-edebug-spec mapatoms (function-form &optional form))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2050 (def-edebug-spec apply (function-form &rest form))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2051 (def-edebug-spec funcall (function-form &rest form))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2052
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2053 (def-edebug-spec let
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2054 ((&rest &or (symbolp &optional form) symbolp)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2055 body))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2056
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2057 (def-edebug-spec let* let)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2058
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2059 (def-edebug-spec setq (&rest symbolp form))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2060 (def-edebug-spec setq-default setq)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2061
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2062 (def-edebug-spec cond (&rest (&rest form)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2063
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2064 (def-edebug-spec condition-case
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2065 (symbolp
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2066 form
18729
43149745d126 (condition-case): Fix edebug-form-spec to
Richard M. Stallman <rms@gnu.org>
parents: 18399
diff changeset
2067 &rest ([&or symbolp (&rest symbolp)] body)))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2068
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2069
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
2070 (def-edebug-spec \` (backquote-form))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2071
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2072 ;; Supports quotes inside backquotes,
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2073 ;; but only at the top level inside unquotes.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2074 (def-edebug-spec backquote-form
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2075 (&or
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2076 ([&or "," ",@"] &or ("quote" backquote-form) form)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2077 (backquote-form &rest backquote-form)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2078 ;; If you use dotted forms in backquotes, replace the previous line
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2079 ;; with the following. This takes quite a bit more stack space, however.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2080 ;; (backquote-form . [&or nil backquote-form])
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2081 (vector &rest backquote-form)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2082 sexp))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2083
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2084 ;; Special version of backquote that instruments backquoted forms
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2085 ;; destined to be evaluated, usually as the result of a
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2086 ;; macroexpansion. Backquoted code can only have unquotes (, and ,@)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2087 ;; in places where list forms are allowed, and predicates. If the
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2088 ;; backquote is used in a macro, unquoted code that come from
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2089 ;; arguments must be instrumented, if at all, with def-form not def-body.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2090
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2091 ;; We could assume that all forms (not nested in other forms)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2092 ;; in arguments of macros should be def-forms, whether or not the macros
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2093 ;; are defined with edebug-` but this would be expensive.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2094
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2095 ;; ,@ might have some problems.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2096
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
2097 (defalias 'edebug-\` '\`) ;; same macro as regular backquote.
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
2098 (def-edebug-spec edebug-\` (def-form))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2099
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2100 ;; Assume immediate quote in unquotes mean backquote at next higher level.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2101 (def-edebug-spec , (&or ("quote" edebug-`) def-form))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2102 (def-edebug-spec ,@ (&define ;; so (,@ form) is never wrapped.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2103 &or ("quote" edebug-`) def-form))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2104
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2105 ;; New byte compiler.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2106 (def-edebug-spec defsubst defun)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2107 (def-edebug-spec dont-compile t)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2108 (def-edebug-spec eval-when-compile t)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2109 (def-edebug-spec eval-and-compile t)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2110
16374
b3b88a1ee6aa (save-selected-window, save-current-buffer)
Richard M. Stallman <rms@gnu.org>
parents: 16308
diff changeset
2111 (def-edebug-spec save-selected-window t)
b3b88a1ee6aa (save-selected-window, save-current-buffer)
Richard M. Stallman <rms@gnu.org>
parents: 16308
diff changeset
2112 (def-edebug-spec save-current-buffer t)
b3b88a1ee6aa (save-selected-window, save-current-buffer)
Richard M. Stallman <rms@gnu.org>
parents: 16308
diff changeset
2113 (def-edebug-spec save-match-data t)
b3b88a1ee6aa (save-selected-window, save-current-buffer)
Richard M. Stallman <rms@gnu.org>
parents: 16308
diff changeset
2114 (def-edebug-spec with-output-to-string t)
b3b88a1ee6aa (save-selected-window, save-current-buffer)
Richard M. Stallman <rms@gnu.org>
parents: 16308
diff changeset
2115 (def-edebug-spec with-current-buffer t)
16550
158dd5ed6ae8 (combine-after-change-calls): New def-edebug-spec.
Richard M. Stallman <rms@gnu.org>
parents: 16374
diff changeset
2116 (def-edebug-spec combine-after-change-calls t)
16374
b3b88a1ee6aa (save-selected-window, save-current-buffer)
Richard M. Stallman <rms@gnu.org>
parents: 16308
diff changeset
2117 (def-edebug-spec with-temp-file t)
b3b88a1ee6aa (save-selected-window, save-current-buffer)
Richard M. Stallman <rms@gnu.org>
parents: 16308
diff changeset
2118 (def-edebug-spec with-temp-buffer t)
24122
73346cd4a77e (with-temp-message): Add def-edebug-spec call.
Richard M. Stallman <rms@gnu.org>
parents: 24024
diff changeset
2119 (def-edebug-spec with-temp-message t)
27296
6a6b75706812 (with-syntax-table): Add a def-edebug-spec.
Richard M. Stallman <rms@gnu.org>
parents: 26648
diff changeset
2120 (def-edebug-spec with-syntax-table t)
28516
b393b2d78c62 Fix specs for dolist, dotimes, push, pop, unless, when.
Dave Love <fx@gnu.org>
parents: 27483
diff changeset
2121 (def-edebug-spec dolist ((symbolp form &rest form) &rest form))
b393b2d78c62 Fix specs for dolist, dotimes, push, pop, unless, when.
Dave Love <fx@gnu.org>
parents: 27483
diff changeset
2122 (def-edebug-spec dotimes ((symbolp form &rest form) &rest form))
b393b2d78c62 Fix specs for dolist, dotimes, push, pop, unless, when.
Dave Love <fx@gnu.org>
parents: 27483
diff changeset
2123 (def-edebug-spec push (form sexp))
b393b2d78c62 Fix specs for dolist, dotimes, push, pop, unless, when.
Dave Love <fx@gnu.org>
parents: 27483
diff changeset
2124 (def-edebug-spec pop (sexp))
b393b2d78c62 Fix specs for dolist, dotimes, push, pop, unless, when.
Dave Love <fx@gnu.org>
parents: 27483
diff changeset
2125 (def-edebug-spec unless t)
b393b2d78c62 Fix specs for dolist, dotimes, push, pop, unless, when.
Dave Love <fx@gnu.org>
parents: 27483
diff changeset
2126 (def-edebug-spec when t)
16374
b3b88a1ee6aa (save-selected-window, save-current-buffer)
Richard M. Stallman <rms@gnu.org>
parents: 16308
diff changeset
2127
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2128 ;; Anything else?
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2129
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2130
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2131 ;; Some miscellaneous specs for macros in public packages.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2132 ;; Send me yours.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2133
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2134 ;; advice.el by Hans Chalupsky (hans@cs.buffalo.edu)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2135
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2136 (def-edebug-spec ad-dolist ((symbolp form &optional form) body))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2137 (def-edebug-spec defadvice
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2138 (&define name ;; thing being advised.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2139 (name ;; class is [&or "before" "around" "after"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2140 ;; "activation" "deactivation"]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2141 name ;; name of advice
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2142 &rest sexp ;; optional position and flags
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2143 )
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2144 [&optional stringp]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2145 [&optional ("interactive" interactive)]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2146 def-body))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2147
28567
3ed20cb4c9b3 (edebug-keywordp): Remove. Change callers
Dave Love <fx@gnu.org>
parents: 28516
diff changeset
2148 (def-edebug-spec easy-menu-define (symbolp body))
3ed20cb4c9b3 (edebug-keywordp): Remove. Change callers
Dave Love <fx@gnu.org>
parents: 28516
diff changeset
2149
3ed20cb4c9b3 (edebug-keywordp): Remove. Change callers
Dave Love <fx@gnu.org>
parents: 28516
diff changeset
2150 (def-edebug-spec with-custom-print body)
3ed20cb4c9b3 (edebug-keywordp): Remove. Change callers
Dave Love <fx@gnu.org>
parents: 28516
diff changeset
2151
3ed20cb4c9b3 (edebug-keywordp): Remove. Change callers
Dave Love <fx@gnu.org>
parents: 28516
diff changeset
2152 (def-edebug-spec sregexq (&rest sexp))
3ed20cb4c9b3 (edebug-keywordp): Remove. Change callers
Dave Love <fx@gnu.org>
parents: 28516
diff changeset
2153
3ed20cb4c9b3 (edebug-keywordp): Remove. Change callers
Dave Love <fx@gnu.org>
parents: 28516
diff changeset
2154 (def-edebug-spec define-minor-mode (symbolp stringp body))
3ed20cb4c9b3 (edebug-keywordp): Remove. Change callers
Dave Love <fx@gnu.org>
parents: 28516
diff changeset
2155
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
2156 ;;; The debugger itself
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2157
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2158 (defvar edebug-active nil) ;; Non-nil when edebug is active
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2159
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2160 ;;; add minor-mode-alist entry
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2161 (or (assq 'edebug-active minor-mode-alist)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2162 (setq minor-mode-alist (cons (list 'edebug-active " *Debugging*")
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2163 minor-mode-alist)))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2164
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2165 (defvar edebug-stack nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2166 ;; Stack of active functions evaluated via edebug.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2167 ;; Should be nil at the top level.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2168
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2169 (defvar edebug-stack-depth -1)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2170 ;; Index of last edebug-stack item.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2171
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2172 (defvar edebug-offset-indices nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2173 ;; Stack of offset indices of visited edebug sexps.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2174 ;; Should be nil at the top level.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2175 ;; Each function adds one cons. Top is modified with setcar.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2176
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2177
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2178 (defvar edebug-entered nil
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2179 ;; Non-nil if edebug has already been entered at this recursive edit level.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2180 ;; This should stay nil at the top level.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2181 )
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2182
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2183 ;; Should these be options?
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2184 (defconst edebug-debugger 'edebug
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2185 ;; Name of function to use for debugging when error or quit occurs.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2186 ;; Set this to 'debug if you want to debug edebug.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2187 )
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2188
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2189
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2190 ;; Dynamically bound variables, declared globally but left unbound.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2191 (defvar edebug-function) ; the function being executed. change name!!
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2192 (defvar edebug-args) ; the arguments of the function
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2193 (defvar edebug-data) ; the edebug data for the function
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2194 (defvar edebug-value) ; the result of the expression
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2195 (defvar edebug-after-index)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2196 (defvar edebug-def-mark) ; the mark for the definition
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2197 (defvar edebug-freq-count) ; the count of expression visits.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2198 (defvar edebug-coverage) ; the coverage results of each expression of function.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2199
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2200 (defvar edebug-buffer) ; which buffer the function is in.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2201 (defvar edebug-result) ; the result of the function call returned by body
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2202 (defvar edebug-outside-executing-macro)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2203 (defvar edebug-outside-defining-kbd-macro)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2204
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2205 (defvar edebug-execution-mode 'step) ; Current edebug mode set by user.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2206 (defvar edebug-next-execution-mode nil) ; Use once instead of initial mode.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2207
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2208 (defvar edebug-outside-debug-on-error) ; the value of debug-on-error outside
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2209 (defvar edebug-outside-debug-on-quit) ; the value of debug-on-quit outside
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2210
19930
1e0f347ee021 (edebug-enter): Save, and bind to nil,
Richard M. Stallman <rms@gnu.org>
parents: 18729
diff changeset
2211 (defvar edebug-outside-overriding-local-map)
1e0f347ee021 (edebug-enter): Save, and bind to nil,
Richard M. Stallman <rms@gnu.org>
parents: 18729
diff changeset
2212 (defvar edebug-outside-overriding-terminal-local-map)
1e0f347ee021 (edebug-enter): Save, and bind to nil,
Richard M. Stallman <rms@gnu.org>
parents: 18729
diff changeset
2213
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2214 (defvar edebug-outside-pre-command-hook)
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2215 (defvar edebug-outside-post-command-hook)
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2216
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2217 (defvar cl-lexical-debug) ;; Defined in cl.el
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2218
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2219 ;;; Handling signals
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2220
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2221 (defun edebug-signal (edebug-signal-name edebug-signal-data)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2222 "Signal an error. Args are SIGNAL-NAME, and associated DATA.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2223 A signal name is a symbol with an `error-conditions' property
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2224 that is a list of condition names.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2225 A handler for any of those names will get to handle this signal.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2226 The symbol `error' should always be one of them.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2227
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2228 DATA should be a list. Its elements are printed as part of the error message.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2229 If the signal is handled, DATA is made available to the handler.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2230 See `condition-case'.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2231
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2232 This is the Edebug replacement for the standard `signal'. It should
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2233 only be active while Edebug is. It checks `debug-on-error' to see
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2234 whether it should call the debugger. When execution is resumed, the
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2235 error is signaled again."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2236 (if (and (listp debug-on-error) (memq edebug-signal-name debug-on-error))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2237 (edebug 'error (cons edebug-signal-name edebug-signal-data)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2238 ;; If we reach here without another non-local exit, then send signal again.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2239 ;; i.e. the signal is not continuable, yet.
18017
4c3a2b58fd72 (edebug-signal): Avoid infinite recursion.
Richard M. Stallman <rms@gnu.org>
parents: 17650
diff changeset
2240 ;; Avoid infinite recursion.
4c3a2b58fd72 (edebug-signal): Avoid infinite recursion.
Richard M. Stallman <rms@gnu.org>
parents: 17650
diff changeset
2241 (let ((signal-hook-function nil))
4c3a2b58fd72 (edebug-signal): Avoid infinite recursion.
Richard M. Stallman <rms@gnu.org>
parents: 17650
diff changeset
2242 (signal edebug-signal-name edebug-signal-data)))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2243
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2244 ;;; Entering Edebug
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2245
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2246 (defun edebug-enter (edebug-function edebug-args edebug-body)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2247 ;; Entering FUNC. The arguments are ARGS, and the body is BODY.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2248 ;; Setup edebug variables and evaluate BODY. This function is called
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2249 ;; when a function evaluated with edebug-eval-top-level-form is entered.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2250 ;; Return the result of BODY.
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2251
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2252 ;; Is this the first time we are entering edebug since
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2253 ;; lower-level recursive-edit command?
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2254 ;; More precisely, this tests whether Edebug is currently active.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2255 (if (not edebug-entered)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2256 (let ((edebug-entered t)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2257 ;; Binding max-lisp-eval-depth here is OK,
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2258 ;; but not inside an unwind-protect.
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2259 ;; Doing it here also keeps it from growing too large.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2260 (max-lisp-eval-depth (+ 100 max-lisp-eval-depth)) ; too much??
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2261 (max-specpdl-size (+ 200 max-specpdl-size))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2262
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2263 (debugger edebug-debugger) ; only while edebug is active.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2264 (edebug-outside-debug-on-error debug-on-error)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2265 (edebug-outside-debug-on-quit debug-on-quit)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2266 ;; Binding these may not be the right thing to do.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2267 ;; We want to allow the global values to be changed.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2268 (debug-on-error (or debug-on-error edebug-on-error))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2269 (debug-on-quit edebug-on-quit)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2270
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2271 ;; Lexical bindings must be uncompiled for this to work.
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2272 (cl-lexical-debug t)
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2273
19930
1e0f347ee021 (edebug-enter): Save, and bind to nil,
Richard M. Stallman <rms@gnu.org>
parents: 18729
diff changeset
2274 (edebug-outside-overriding-local-map overriding-local-map)
1e0f347ee021 (edebug-enter): Save, and bind to nil,
Richard M. Stallman <rms@gnu.org>
parents: 18729
diff changeset
2275 (edebug-outside-overriding-terminal-local-map
1e0f347ee021 (edebug-enter): Save, and bind to nil,
Richard M. Stallman <rms@gnu.org>
parents: 18729
diff changeset
2276 overriding-terminal-local-map)
1e0f347ee021 (edebug-enter): Save, and bind to nil,
Richard M. Stallman <rms@gnu.org>
parents: 18729
diff changeset
2277
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2278 ;; Save the outside value of executing macro. (here??)
15302
c23c9712ef5c Use executing-kbd-macro, not executing-macro.
Karl Heuer <kwzh@gnu.org>
parents: 14846
diff changeset
2279 (edebug-outside-executing-macro executing-kbd-macro)
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2280 (edebug-outside-pre-command-hook pre-command-hook)
16299
0e4f99bad2ec (pre-command-hook, post-command-hook): Defvars deleted.
Richard M. Stallman <rms@gnu.org>
parents: 15782
diff changeset
2281 (edebug-outside-post-command-hook post-command-hook))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2282 (unwind-protect
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2283 (let (;; Don't keep reading from an executing kbd macro
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2284 ;; within edebug unless edebug-continue-kbd-macro is
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2285 ;; non-nil. Again, local binding may not be best.
15302
c23c9712ef5c Use executing-kbd-macro, not executing-macro.
Karl Heuer <kwzh@gnu.org>
parents: 14846
diff changeset
2286 (executing-kbd-macro
c23c9712ef5c Use executing-kbd-macro, not executing-macro.
Karl Heuer <kwzh@gnu.org>
parents: 14846
diff changeset
2287 (if edebug-continue-kbd-macro executing-kbd-macro))
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2288
19930
1e0f347ee021 (edebug-enter): Save, and bind to nil,
Richard M. Stallman <rms@gnu.org>
parents: 18729
diff changeset
2289 ;; Don't get confused by the user's keymap changes.
1e0f347ee021 (edebug-enter): Save, and bind to nil,
Richard M. Stallman <rms@gnu.org>
parents: 18729
diff changeset
2290 (overriding-local-map nil)
1e0f347ee021 (edebug-enter): Save, and bind to nil,
Richard M. Stallman <rms@gnu.org>
parents: 18729
diff changeset
2291 (overriding-terminal-local-map nil)
1e0f347ee021 (edebug-enter): Save, and bind to nil,
Richard M. Stallman <rms@gnu.org>
parents: 18729
diff changeset
2292
16308
2334a3d634c0 (edebug-original-signal): Don't define it.
Richard M. Stallman <rms@gnu.org>
parents: 16299
diff changeset
2293 (signal-hook-function 'edebug-signal)
2334a3d634c0 (edebug-original-signal): Don't define it.
Richard M. Stallman <rms@gnu.org>
parents: 16299
diff changeset
2294
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2295 ;; Disable command hooks. This is essential when
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2296 ;; a hook function is instrumented - to avoid infinite loop.
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2297 ;; This may be more than we need, however.
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2298 (pre-command-hook nil)
16299
0e4f99bad2ec (pre-command-hook, post-command-hook): Defvars deleted.
Richard M. Stallman <rms@gnu.org>
parents: 15782
diff changeset
2299 (post-command-hook nil))
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2300 (setq edebug-execution-mode (or edebug-next-execution-mode
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2301 edebug-initial-mode
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2302 edebug-execution-mode)
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2303 edebug-next-execution-mode nil)
16308
2334a3d634c0 (edebug-original-signal): Don't define it.
Richard M. Stallman <rms@gnu.org>
parents: 16299
diff changeset
2304 (edebug-enter edebug-function edebug-args edebug-body))
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2305 ;; Reset global variables in case outside value was changed.
15302
c23c9712ef5c Use executing-kbd-macro, not executing-macro.
Karl Heuer <kwzh@gnu.org>
parents: 14846
diff changeset
2306 (setq executing-kbd-macro edebug-outside-executing-macro
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
2307 pre-command-hook edebug-outside-pre-command-hook
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
2308 post-command-hook edebug-outside-post-command-hook
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2309 )))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2310
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2311 (let* ((edebug-data (get edebug-function 'edebug))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2312 (edebug-def-mark (car edebug-data)) ; mark at def start
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2313 (edebug-freq-count (get edebug-function 'edebug-freq-count))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2314 (edebug-coverage (get edebug-function 'edebug-coverage))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2315 (edebug-buffer (marker-buffer edebug-def-mark))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2316
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2317 (edebug-stack (cons edebug-function edebug-stack))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2318 (edebug-offset-indices (cons 0 edebug-offset-indices))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2319 )
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2320 (if (get edebug-function 'edebug-on-entry)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2321 (progn
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2322 (setq edebug-execution-mode 'step)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2323 (if (eq (get edebug-function 'edebug-on-entry) 'temp)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2324 (put edebug-function 'edebug-on-entry nil))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2325 (if edebug-trace
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2326 (edebug-enter-trace edebug-body)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2327 (funcall edebug-body))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2328 )))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2329
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2330
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2331 (defun edebug-enter-trace (edebug-body)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2332 (let ((edebug-stack-depth (1+ edebug-stack-depth))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2333 edebug-result)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2334 (edebug-print-trace-before
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2335 (format "%s args: %s" edebug-function edebug-args))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2336 (prog1 (setq edebug-result (funcall edebug-body))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2337 (edebug-print-trace-after
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2338 (format "%s result: %s" edebug-function edebug-result)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2339
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2340 (def-edebug-spec edebug-tracing (form body))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2341
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2342 (defmacro edebug-tracing (msg &rest body)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2343 "Print MSG in *edebug-trace* before and after evaluating BODY.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2344 The result of BODY is also printed."
26519
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
2345 `(let ((edebug-stack-depth (1+ edebug-stack-depth))
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
2346 edebug-result)
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
2347 (edebug-print-trace-before ,msg)
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
2348 (prog1 (setq edebug-result (progn ,@body))
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
2349 (edebug-print-trace-after
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
2350 (format "%s result: %s" ,msg edebug-result)))))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2351
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2352 (defun edebug-print-trace-before (msg)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2353 "Function called to print trace info before expression evaluation.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2354 MSG is printed after `::::{ '."
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2355 (edebug-trace-display
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2356 edebug-trace-buffer "%s{ %s" (make-string edebug-stack-depth ?\:) msg))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2357
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2358 (defun edebug-print-trace-after (msg)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2359 "Function called to print trace info after expression evaluation.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2360 MSG is printed after `::::} '."
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2361 (edebug-trace-display
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2362 edebug-trace-buffer "%s} %s" (make-string edebug-stack-depth ?\:) msg))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2363
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2364
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2365
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2366 (defun edebug-slow-before (edebug-before-index)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2367 ;; Debug current function given BEFORE position.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2368 ;; Called from functions compiled with edebug-eval-top-level-form.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2369 ;; Return the before index.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2370 (setcar edebug-offset-indices edebug-before-index)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2371
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2372 ;; Increment frequency count
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2373 (aset edebug-freq-count edebug-before-index
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2374 (1+ (aref edebug-freq-count edebug-before-index)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2375
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2376 (if (or (not (memq edebug-execution-mode '(Go-nonstop next)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2377 (edebug-input-pending-p))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2378 (edebug-debugger edebug-before-index 'before nil))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2379 edebug-before-index)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2380
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2381 (defun edebug-fast-before (edebug-before-index)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2382 ;; Do nothing.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2383 )
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2384
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2385 (defun edebug-slow-after (edebug-before-index edebug-after-index edebug-value)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2386 ;; Debug current function given AFTER position and VALUE.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2387 ;; Called from functions compiled with edebug-eval-top-level-form.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2388 ;; Return VALUE.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2389 (setcar edebug-offset-indices edebug-after-index)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2390
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2391 ;; Increment frequency count
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2392 (aset edebug-freq-count edebug-after-index
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2393 (1+ (aref edebug-freq-count edebug-after-index)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2394 (if edebug-test-coverage (edebug-update-coverage))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2395
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2396 (if (and (eq edebug-execution-mode 'Go-nonstop)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2397 (not (edebug-input-pending-p)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2398 ;; Just return result.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2399 edebug-value
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2400 (edebug-debugger edebug-after-index 'after edebug-value)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2401 ))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2402
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2403 (defun edebug-fast-after (edebug-before-index edebug-after-index edebug-value)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2404 ;; Do nothing but return the value.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2405 edebug-value)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2406
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2407 (defun edebug-run-slow ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2408 (defalias 'edebug-before 'edebug-slow-before)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2409 (defalias 'edebug-after 'edebug-slow-after))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2410
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2411 ;; This is not used, yet.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2412 (defun edebug-run-fast ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2413 (defalias 'edebug-before 'edebug-fast-before)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2414 (defalias 'edebug-after 'edebug-fast-after))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2415
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2416 (edebug-run-slow)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2417
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2418
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2419 (defun edebug-update-coverage ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2420 (let ((old-result (aref edebug-coverage edebug-after-index)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2421 (cond
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2422 ((eq 'ok-coverage old-result))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2423 ((eq 'unknown old-result)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2424 (aset edebug-coverage edebug-after-index edebug-value))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2425 ;; Test if a different result.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2426 ((not (eq edebug-value old-result))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2427 (aset edebug-coverage edebug-after-index 'ok-coverage)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2428
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2429
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2430 ;; Dynamically declared unbound variables.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2431 (defvar edebug-arg-mode) ; the mode, either before, after, or error
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2432 (defvar edebug-breakpoints)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2433 (defvar edebug-break-data) ; break data for current function.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2434 (defvar edebug-break) ; whether a break occurred.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2435 (defvar edebug-global-break) ; whether a global break occurred.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2436 (defvar edebug-break-condition) ; whether the breakpoint is conditional.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2437
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2438 (defvar edebug-break-result nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2439 (defvar edebug-global-break-result nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2440
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2441
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2442 (defun edebug-debugger (edebug-offset-index edebug-arg-mode edebug-value)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2443 ;; Check breakpoints and pending input.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2444 ;; If edebug display should be updated, call edebug-display.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2445 ;; Return edebug-value.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2446 (let* (;; This needs to be here since breakpoints may be changed.
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2447 (edebug-breakpoints (car (cdr edebug-data))) ; list of breakpoints
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2448 (edebug-break-data (assq edebug-offset-index edebug-breakpoints))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2449 (edebug-break-condition (car (cdr edebug-break-data)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2450 (edebug-global-break
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2451 (if edebug-global-break-condition
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2452 (condition-case nil
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2453 (setq edebug-global-break-result
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2454 (eval edebug-global-break-condition))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2455 (error nil))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2456 (edebug-break))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2457
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2458 ;;; (edebug-trace "exp: %s" edebug-value)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2459 ;; Test whether we should break.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2460 (setq edebug-break
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2461 (or edebug-global-break
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2462 (and edebug-break-data
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2463 (or (not edebug-break-condition)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2464 (setq edebug-break-result
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2465 (eval edebug-break-condition))))))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2466 (if (and edebug-break
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2467 (nth 2 edebug-break-data)) ; is it temporary?
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2468 ;; Delete the breakpoint.
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2469 (setcdr edebug-data
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2470 (cons (delq edebug-break-data edebug-breakpoints)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2471 (cdr (cdr edebug-data)))))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2472
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2473 ;; Display if mode is not go, continue, or Continue-fast
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2474 ;; or break, or input is pending,
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2475 (if (or (not (memq edebug-execution-mode '(go continue Continue-fast)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2476 edebug-break
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2477 (edebug-input-pending-p))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2478 (edebug-display)) ; <--------------- display
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2479
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2480 edebug-value
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2481 ))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2482
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2483
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2484 ;; window-start now stored with each function.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2485 ;;(defvar edebug-window-start nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2486 ;; Remember where each buffers' window starts between edebug calls.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2487 ;; This is to avoid spurious recentering.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2488 ;; Does this still need to be buffer-local??
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2489 ;;(setq-default edebug-window-start nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2490 ;;(make-variable-buffer-local 'edebug-window-start)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2491
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2492
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2493 ;; Dynamically declared unbound vars
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2494 (defvar edebug-point) ; the point in edebug buffer
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2495 (defvar edebug-outside-buffer) ; the current-buffer outside of edebug
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2496 (defvar edebug-outside-point) ; the point outside of edebug
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2497 (defvar edebug-outside-mark) ; the mark outside of edebug
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2498 (defvar edebug-window-data) ; window and window-start for current function
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2499 (defvar edebug-outside-windows) ; outside window configuration
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2500 (defvar edebug-eval-buffer) ; for the evaluation list.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2501 (defvar edebug-outside-o-a-p) ; outside overlay-arrow-position
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2502 (defvar edebug-outside-o-a-s) ; outside overlay-arrow-string
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2503 (defvar edebug-outside-c-i-e-a) ; outside cursor-in-echo-area
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2504
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2505 (defvar edebug-eval-list nil) ;; List of expressions to evaluate.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2506
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2507 (defvar edebug-previous-result nil) ;; Last result returned.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2508
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2509 ;; Emacs 19 adds an arg to mark and mark-marker.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2510 (defalias 'edebug-mark 'mark)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2511 (defalias 'edebug-mark-marker 'mark-marker)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2512
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2513
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2514 (defun edebug-display ()
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2515 ;; Setup windows for edebug, determine mode, maybe enter recursive-edit.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2516 ;; Uses local variables of edebug-enter, edebug-before, edebug-after
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2517 ;; and edebug-debugger.
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2518 (let ((edebug-active t) ; for minor mode alist
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2519 edebug-stop ; should we enter recursive-edit
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2520 (edebug-point (+ edebug-def-mark
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2521 (aref (nth 2 edebug-data) edebug-offset-index)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2522 edebug-buffer-outside-point ; current point in edebug-buffer
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2523 ;; window displaying edebug-buffer
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2524 (edebug-window-data (nth 3 edebug-data))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2525 (edebug-outside-window (selected-window))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2526 (edebug-outside-buffer (current-buffer))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2527 (edebug-outside-point (point))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2528 (edebug-outside-mark (edebug-mark))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2529 edebug-outside-windows ; window or screen configuration
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2530 edebug-buffer-points
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2531
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2532 edebug-eval-buffer ; declared here so we can kill it below
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2533 (edebug-eval-result-list (and edebug-eval-list
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2534 (edebug-eval-result-list)))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2535 edebug-trace-window
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2536 edebug-trace-window-start
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2537
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2538 (edebug-outside-o-a-p overlay-arrow-position)
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2539 (edebug-outside-o-a-s overlay-arrow-string)
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2540 (edebug-outside-c-i-e-a cursor-in-echo-area))
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2541 (unwind-protect
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2542 (let ((overlay-arrow-position overlay-arrow-position)
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2543 (overlay-arrow-string overlay-arrow-string)
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2544 (cursor-in-echo-area nil)
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2545 ;; any others??
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2546 )
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2547 (if (not (buffer-name edebug-buffer))
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2548 (let ((debug-on-error nil))
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2549 (error "Buffer defining %s not found" edebug-function)))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2550
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2551 (if (eq 'after edebug-arg-mode)
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2552 ;; Compute result string now before windows are modified.
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2553 (edebug-compute-previous-result edebug-value))
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2554
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2555 (if edebug-save-windows
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2556 ;; Save windows now before we modify them.
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2557 (setq edebug-outside-windows
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2558 (edebug-current-windows edebug-save-windows)))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2559
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2560 (if edebug-save-displayed-buffer-points
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2561 (setq edebug-buffer-points (edebug-get-displayed-buffer-points)))
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2562
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2563 ;; First move the edebug buffer point to edebug-point
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
2564 ;; so that window start doesn't get changed when we display it.
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
2565 ;; I don't know if this is going to help.
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2566 ;;(set-buffer edebug-buffer)
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2567 ;;(goto-char edebug-point)
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2568
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2569 ;; If edebug-buffer is not currently displayed,
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2570 ;; first find a window for it.
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2571 (edebug-pop-to-buffer edebug-buffer (car edebug-window-data))
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2572 (setcar edebug-window-data (selected-window))
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2573
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2574 ;; Now display eval list, if any.
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2575 ;; This is done after the pop to edebug-buffer
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2576 ;; so that buffer-window correspondence is correct after quitting.
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2577 (edebug-eval-display edebug-eval-result-list)
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2578 ;; The evaluation list better not have deleted edebug-window-data.
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2579 (select-window (car edebug-window-data))
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2580 (set-buffer edebug-buffer)
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2581
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2582 (setq edebug-buffer-outside-point (point))
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2583 (goto-char edebug-point)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2584
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2585 (if (eq 'before edebug-arg-mode)
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2586 ;; Check whether positions are up-to-date.
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2587 ;; This assumes point is never before symbol.
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2588 (if (not (memq (following-char) '(?\( ?\# ?\` )))
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2589 (let ((debug-on-error nil))
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2590 (error "Source has changed - reevaluate definition of %s"
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2591 edebug-function)
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2592 )))
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2593
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2594 (setcdr edebug-window-data
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2595 (edebug-adjust-window (cdr edebug-window-data)))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2596
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2597 ;; Test if there is input, not including keyboard macros.
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2598 (if (edebug-input-pending-p)
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2599 (progn
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2600 (setq edebug-execution-mode 'step
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2601 edebug-stop t)
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2602 (edebug-stop)
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2603 ;; (discard-input) ; is this unfriendly??
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2604 ))
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2605 ;; Now display arrow based on mode.
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2606 (edebug-overlay-arrow)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2607
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2608 (cond
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2609 ((eq 'error edebug-arg-mode)
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2610 ;; Display error message
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2611 (setq edebug-execution-mode 'step)
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2612 (edebug-overlay-arrow)
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2613 (beep)
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2614 (if (eq 'quit (car edebug-value))
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2615 (message "Quit")
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2616 (edebug-report-error edebug-value)))
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2617 (edebug-break
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2618 (cond
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2619 (edebug-global-break
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2620 (message "Global Break: %s => %s"
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2621 edebug-global-break-condition
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2622 edebug-global-break-result))
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2623 (edebug-break-condition
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2624 (message "Break: %s => %s"
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2625 edebug-break-condition
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2626 edebug-break-result))
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2627 ((not (eq edebug-execution-mode 'Continue-fast))
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2628 (message "Break"))
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2629 (t)))
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2630
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2631 (t (message "")))
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2632
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2633 (if (eq 'after edebug-arg-mode)
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2634 (progn
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2635 ;; Display result of previous evaluation.
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2636 (if (and edebug-break
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2637 (not (eq edebug-execution-mode 'Continue-fast)))
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2638 (sit-for 1)) ; Show break message.
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2639 (edebug-previous-result)))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2640
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2641 (cond
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2642 (edebug-break
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2643 (cond
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2644 ((eq edebug-execution-mode 'continue) (edebug-sit-for 1))
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2645 ((eq edebug-execution-mode 'Continue-fast) (edebug-sit-for 0))
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2646 (t (setq edebug-stop t))))
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2647 ;; not edebug-break
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2648 ((eq edebug-execution-mode 'trace)
18376
9ae76ef113f6 (edebug-sit-for-seconds): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 18017
diff changeset
2649 (edebug-sit-for edebug-sit-for-seconds)) ; Force update and pause.
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2650 ((eq edebug-execution-mode 'Trace-fast)
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2651 (edebug-sit-for 0)) ; Force update and continue.
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2652 )
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2653
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2654 (unwind-protect
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2655 (if (or edebug-stop
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2656 (memq edebug-execution-mode '(step next))
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2657 (eq edebug-arg-mode 'error))
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2658 (progn
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2659 ;; (setq edebug-execution-mode 'step)
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
2660 ;; (edebug-overlay-arrow) ; This doesn't always show up.
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2661 (edebug-recursive-edit))) ; <---------- Recursive edit
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2662
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2663 ;; Reset the edebug-window-data to whatever it is now.
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2664 (let ((window (if (eq (window-buffer) edebug-buffer)
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2665 (selected-window)
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2666 (edebug-get-buffer-window edebug-buffer))))
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2667 ;; Remember window-start for edebug-buffer, if still displayed.
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2668 (if window
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2669 (progn
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2670 (setcar edebug-window-data window)
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2671 (setcdr edebug-window-data (window-start window)))))
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2672
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2673 ;; Save trace window point before restoring outside windows.
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2674 ;; Could generalize this for other buffers.
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2675 (setq edebug-trace-window (get-buffer-window edebug-trace-buffer))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2676 (if edebug-trace-window
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2677 (setq edebug-trace-window-start
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2678 (and edebug-trace-window
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2679 (window-start edebug-trace-window))))
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2680
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2681 ;; Restore windows before continuing.
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2682 (if edebug-save-windows
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2683 (progn
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2684 (edebug-set-windows edebug-outside-windows)
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2685
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2686 ;; Restore displayed buffer points.
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2687 ;; Needed even if restoring windows because
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2688 ;; window-points are not restored. (should they be??)
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2689 (if edebug-save-displayed-buffer-points
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2690 (edebug-set-buffer-points edebug-buffer-points))
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2691
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2692 ;; Unrestore trace window's window-point.
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2693 (if edebug-trace-window
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2694 (set-window-start edebug-trace-window
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2695 edebug-trace-window-start))
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2696
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2697 ;; Unrestore edebug-buffer's window-start, if displayed.
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2698 (let ((window (car edebug-window-data)))
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2699 (if (and window (edebug-window-live-p window)
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2700 (eq (window-buffer) edebug-buffer))
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2701 (progn
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2702 (set-window-start window (cdr edebug-window-data)
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2703 'no-force)
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2704 ;; Unrestore edebug-buffer's window-point.
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2705 ;; Needed in addition to setting the buffer point
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
2706 ;; - otherwise quitting doesn't leave point as is.
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2707 ;; But this causes point to not be restored at times.
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2708 ;; Also, it may not be a visible window.
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2709 ;; (set-window-point window edebug-point)
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2710 )))
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2711
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2712 ;; Unrestore edebug-buffer's point. Rerestored below.
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2713 ;; (goto-char edebug-point) ;; in edebug-buffer
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2714 )
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2715 ;; Since we may be in a save-excursion, in case of quit,
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2716 ;; reselect the outside window only.
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2717 ;; Only needed if we are not recovering windows??
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2718 (if (edebug-window-live-p edebug-outside-window)
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2719 (select-window edebug-outside-window))
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2720 ) ; if edebug-save-windows
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2721
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2722 ;; Restore current buffer always, in case application needs it.
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2723 (set-buffer edebug-outside-buffer)
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2724 ;; Restore point, and mark.
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2725 ;; Needed even if restoring windows because
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
2726 ;; that doesn't restore point and mark in the current buffer.
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
2727 ;; But don't restore point if edebug-buffer is current buffer.
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2728 (if (not (eq edebug-buffer edebug-outside-buffer))
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2729 (goto-char edebug-outside-point))
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2730 (if (marker-buffer (edebug-mark-marker))
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2731 ;; Does zmacs-regions need to be nil while doing set-marker?
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2732 (set-marker (edebug-mark-marker) edebug-outside-mark))
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2733 ) ; unwind-protect
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2734 ;; None of the following is done if quit or signal occurs.
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2735
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2736 ;; Restore edebug-buffer's outside point.
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2737 ;; (edebug-trace "restore edebug-buffer point: %s"
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2738 ;; edebug-buffer-outside-point)
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2739 (let ((current-buffer (current-buffer)))
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2740 (set-buffer edebug-buffer)
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2741 (goto-char edebug-buffer-outside-point)
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2742 (set-buffer current-buffer))
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2743 ;; ... nothing more.
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2744 )
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2745 ;; Reset global variables to outside values in case they were changed.
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2746 (setq
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2747 overlay-arrow-position edebug-outside-o-a-p
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2748 overlay-arrow-string edebug-outside-o-a-s
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2749 cursor-in-echo-area edebug-outside-c-i-e-a)
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2750 )))
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2751
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2752
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2753 (defvar edebug-number-of-recursions 0)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2754 ;; Number of recursive edits started by edebug.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2755 ;; Should be 0 at the top level.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2756
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2757 (defvar edebug-recursion-depth 0)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2758 ;; Value of recursion-depth when edebug was called.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2759
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2760 ;; Dynamically declared unbound vars
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2761 (defvar edebug-outside-match-data) ; match data outside of edebug
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2762 (defvar edebug-backtrace-buffer) ; each recursive edit gets its own
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2763 (defvar edebug-inside-windows)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2764 (defvar edebug-interactive-p)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2765
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2766 (defvar edebug-outside-map)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2767 (defvar edebug-outside-standard-output)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2768 (defvar edebug-outside-standard-input)
25812
edf16534a337 (edebug-outside-current-prefix-arg):
Phillip Rulon <pjr@gnu.org>
parents: 25056
diff changeset
2769 (defvar edebug-outside-current-prefix-arg)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2770 (defvar edebug-outside-last-command-char)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2771 (defvar edebug-outside-last-command)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2772 (defvar edebug-outside-this-command)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2773 (defvar edebug-outside-last-input-char)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2774
6671
5b26038687ed (edebug-emacs-19-specific): Renamed from edebug-fsf19-specific.
Richard M. Stallman <rms@gnu.org>
parents: 6666
diff changeset
2775 ;; Note: here we have defvars for variables that are
5b26038687ed (edebug-emacs-19-specific): Renamed from edebug-fsf19-specific.
Richard M. Stallman <rms@gnu.org>
parents: 6666
diff changeset
2776 ;; built-in in certain versions.
5b26038687ed (edebug-emacs-19-specific): Renamed from edebug-fsf19-specific.
Richard M. Stallman <rms@gnu.org>
parents: 6666
diff changeset
2777 ;; Each defvar makes a difference
5b26038687ed (edebug-emacs-19-specific): Renamed from edebug-fsf19-specific.
Richard M. Stallman <rms@gnu.org>
parents: 6666
diff changeset
2778 ;; in versions where the variable is *not* built-in.
5b26038687ed (edebug-emacs-19-specific): Renamed from edebug-fsf19-specific.
Richard M. Stallman <rms@gnu.org>
parents: 6666
diff changeset
2779
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2780 ;; Emacs 18
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2781 (defvar edebug-outside-unread-command-char)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2782
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2783 ;; Lucid Emacs
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2784 (defvar edebug-outside-unread-command-event) ;; like unread-command-events
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2785 (defvar unread-command-event nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2786
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2787 ;; Emacs 19.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2788 (defvar edebug-outside-last-command-event)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2789 (defvar edebug-outside-unread-command-events)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2790 (defvar edebug-outside-last-input-event)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2791 (defvar edebug-outside-last-event-frame)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2792 (defvar edebug-outside-last-nonmenu-event)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2793 (defvar edebug-outside-track-mouse)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2794
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2795 ;; Disable byte compiler warnings about unread-command-char and -event
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2796 ;; (maybe works with byte-compile-version 2.22 at least)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2797 (defvar edebug-unread-command-char-warning)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2798 (defvar edebug-unread-command-event-warning)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2799 (eval-when-compile
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2800 (setq edebug-unread-command-char-warning
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2801 (get 'unread-command-char 'byte-obsolete-variable))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2802 (put 'unread-command-char 'byte-obsolete-variable nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2803 (setq edebug-unread-command-event-warning
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2804 (get 'unread-command-event 'byte-obsolete-variable))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2805 (put 'unread-command-event 'byte-obsolete-variable nil))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2806
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2807 (defun edebug-recursive-edit ()
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2808 ;; Start up a recursive edit inside of edebug.
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2809 ;; The current buffer is the edebug-buffer, which is put into edebug-mode.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2810 ;; Assume that none of the variables below are buffer-local.
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2811 (let ((edebug-buffer-read-only buffer-read-only)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2812 ;; match-data must be done in the outside buffer
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2813 (edebug-outside-match-data
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2814 (save-excursion ; might be unnecessary now??
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2815 (set-buffer edebug-outside-buffer) ; in case match buffer different
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2816 (match-data)))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2817
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2818 ;;(edebug-number-of-recursions (1+ edebug-number-of-recursions))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2819 (edebug-recursion-depth (recursion-depth))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2820 edebug-entered ; bind locally to nil
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2821 (edebug-interactive-p nil) ; again non-interactive
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2822 edebug-backtrace-buffer ; each recursive edit gets its own
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2823 ;; The window configuration may be saved and restored
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2824 ;; during a recursive-edit
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2825 edebug-inside-windows
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2826
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2827 (edebug-outside-map (current-local-map))
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2828
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2829 (edebug-outside-standard-output standard-output)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2830 (edebug-outside-standard-input standard-input)
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2831 (edebug-outside-defining-kbd-macro defining-kbd-macro)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2832
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2833 (edebug-outside-last-command-char last-command-char)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2834 (edebug-outside-last-command last-command)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2835 (edebug-outside-this-command this-command)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2836 (edebug-outside-last-input-char last-input-char)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2837
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2838 (edebug-outside-unread-command-char unread-command-char)
25812
edf16534a337 (edebug-outside-current-prefix-arg):
Phillip Rulon <pjr@gnu.org>
parents: 25056
diff changeset
2839 (edebug-outside-current-prefix-arg current-prefix-arg)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2840
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2841 (edebug-outside-last-input-event last-input-event)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2842 (edebug-outside-last-command-event last-command-event)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2843 (edebug-outside-unread-command-event unread-command-event)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2844 (edebug-outside-unread-command-events unread-command-events)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2845 (edebug-outside-last-event-frame last-event-frame)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2846 (edebug-outside-last-nonmenu-event last-nonmenu-event)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2847 (edebug-outside-track-mouse track-mouse)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2848 )
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2849
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2850 (unwind-protect
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2851 (let (
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2852 ;; Declare global values local but using the same global value.
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2853 ;; We could set these to the values for previous edebug call.
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2854 (last-command-char last-command-char)
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2855 (last-command last-command)
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2856 (this-command this-command)
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2857 (last-input-char last-input-char)
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2858
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2859 ;; Assume no edebug command sets unread-command-char.
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2860 (unread-command-char -1)
25812
edf16534a337 (edebug-outside-current-prefix-arg):
Phillip Rulon <pjr@gnu.org>
parents: 25056
diff changeset
2861 (current-prefix-arg nil)
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2862
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2863 ;; More for Emacs 19
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2864 (last-input-event nil)
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2865 (last-command-event nil)
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2866 (unread-command-event nil);; lemacs
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2867 (unread-command-events nil)
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2868 (last-event-frame nil)
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2869 (last-nonmenu-event nil)
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2870 (track-mouse nil)
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2871
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2872 ;; Bind again to outside values.
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2873 (debug-on-error edebug-outside-debug-on-error)
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2874 (debug-on-quit edebug-outside-debug-on-quit)
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2875
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2876 ;; Don't keep defining a kbd macro.
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2877 (defining-kbd-macro
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2878 (if edebug-continue-kbd-macro defining-kbd-macro))
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2879
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2880 ;; others??
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2881 )
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2882
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2883 (if (fboundp 'zmacs-deactivate-region);; for lemacs
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2884 (zmacs-deactivate-region))
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2885 (if (and (eq edebug-execution-mode 'go)
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2886 (not (memq edebug-arg-mode '(after error))))
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2887 (message "Break"))
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2888
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2889 (setq buffer-read-only t)
16308
2334a3d634c0 (edebug-original-signal): Don't define it.
Richard M. Stallman <rms@gnu.org>
parents: 16299
diff changeset
2890 (setq signal-hook-function nil)
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2891
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2892 (edebug-mode)
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2893 (unwind-protect
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2894 (recursive-edit) ; <<<<<<<<<< Recursive edit
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2895
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2896 ;; Do the following, even if quit occurs.
16308
2334a3d634c0 (edebug-original-signal): Don't define it.
Richard M. Stallman <rms@gnu.org>
parents: 16299
diff changeset
2897 (setq signal-hook-function 'edebug-signal)
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2898 (if edebug-backtrace-buffer
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2899 (kill-buffer edebug-backtrace-buffer))
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2900 ;; Could be an option to keep eval display up.
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2901 (if edebug-eval-buffer (kill-buffer edebug-eval-buffer))
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2902
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2903 ;; Remember selected-window after recursive-edit.
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2904 ;; (setq edebug-inside-window (selected-window))
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2905
21162
6c70fa8e1a5d (edebug-recursive-edit)
Richard M. Stallman <rms@gnu.org>
parents: 20832
diff changeset
2906 (set-match-data edebug-outside-match-data)
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2907
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2908 ;; Recursive edit may have changed buffers,
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2909 ;; so set it back before exiting let.
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2910 (if (buffer-name edebug-buffer) ; if it still exists
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2911 (progn
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2912 (set-buffer edebug-buffer)
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2913 (if (memq edebug-execution-mode '(go Go-nonstop))
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2914 (edebug-overlay-arrow))
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2915 (setq buffer-read-only edebug-buffer-read-only)
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2916 (use-local-map edebug-outside-map)
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2917 )
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2918 ;; gotta have a buffer to let its buffer local variables be set
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2919 (get-buffer-create " bogus edebug buffer"))
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2920 ));; inner let
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2921
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2922 ;; Reset global vars to outside values, in case they have been changed.
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2923 (setq
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2924 last-command-char edebug-outside-last-command-char
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2925 last-command-event edebug-outside-last-command-event
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2926 last-command edebug-outside-last-command
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2927 this-command edebug-outside-this-command
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2928 unread-command-char edebug-outside-unread-command-char
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2929 unread-command-event edebug-outside-unread-command-event
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2930 unread-command-events edebug-outside-unread-command-events
25812
edf16534a337 (edebug-outside-current-prefix-arg):
Phillip Rulon <pjr@gnu.org>
parents: 25056
diff changeset
2931 current-prefix-arg edebug-outside-current-prefix-arg
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2932 last-input-char edebug-outside-last-input-char
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2933 last-input-event edebug-outside-last-input-event
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2934 last-event-frame edebug-outside-last-event-frame
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2935 last-nonmenu-event edebug-outside-last-nonmenu-event
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2936 track-mouse edebug-outside-track-mouse
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2937
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2938 standard-output edebug-outside-standard-output
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2939 standard-input edebug-outside-standard-input
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2940 defining-kbd-macro edebug-outside-defining-kbd-macro
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2941 ))
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2942 ))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2943
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2944
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2945 ;;; Display related functions
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2946
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2947 (defun edebug-adjust-window (old-start)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2948 ;; If pos is not visible, adjust current window to fit following context.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2949 ;;; (message "window: %s old-start: %s window-start: %s pos: %s"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2950 ;;; (selected-window) old-start (window-start) (point)) (sit-for 5)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2951 (if (not (pos-visible-in-window-p))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2952 (progn
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2953 ;; First try old-start
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2954 (if old-start
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2955 (set-window-start (selected-window) old-start))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2956 (if (not (pos-visible-in-window-p))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2957 (progn
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2958 ;; (message "resetting window start") (sit-for 2)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2959 (set-window-start
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2960 (selected-window)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2961 (save-excursion
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2962 (forward-line
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2963 (if (< (point) (window-start)) -1 ; one line before if in back
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2964 (- (/ (window-height) 2)) ; center the line moving forward
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2965 ))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2966 (beginning-of-line)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2967 (point)))))))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2968 (window-start))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2969
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2970
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2971
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2972 (defconst edebug-arrow-alist
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2973 '((Continue-fast . "=")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2974 (Trace-fast . "-")
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2975 (continue . ">")
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2976 (trace . "->")
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2977 (step . "=>")
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2978 (next . "=>")
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2979 (go . "<>")
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2980 (Go-nonstop . "..") ; not used
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2981 )
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2982 "Association list of arrows for each edebug mode.")
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2983
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2984 (defun edebug-overlay-arrow ()
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2985 ;; Set up the overlay arrow at beginning-of-line in current buffer.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2986 ;; The arrow string is derived from edebug-arrow-alist and
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2987 ;; edebug-execution-mode.
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2988 (let ((pos (save-excursion (beginning-of-line) (point))))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2989 (setq overlay-arrow-string
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2990 (cdr (assq edebug-execution-mode edebug-arrow-alist)))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2991 (setq overlay-arrow-position (make-marker))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2992 (set-marker overlay-arrow-position pos (current-buffer))))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2993
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2994
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2995 (defun edebug-toggle-save-all-windows ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2996 "Toggle the saving and restoring of all windows.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2997 Also, each time you toggle it on, the inside and outside window
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2998 configurations become the same as the current configuration."
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2999 (interactive)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3000 (setq edebug-save-windows (not edebug-save-windows))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3001 (if edebug-save-windows
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3002 (setq edebug-inside-windows
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3003 (setq edebug-outside-windows
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3004 (edebug-current-windows
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3005 edebug-save-windows))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3006 (message "Window saving is %s for all windows."
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3007 (if edebug-save-windows "on" "off")))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3008
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3009 (defmacro edebug-changing-windows (&rest body)
26519
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3010 `(let ((window (selected-window)))
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3011 (setq edebug-inside-windows (edebug-current-windows t))
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3012 (edebug-set-windows edebug-outside-windows)
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3013 ,@body;; Code to change edebug-save-windows
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3014 (setq edebug-outside-windows (edebug-current-windows
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3015 edebug-save-windows))
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3016 ;; Problem: what about outside windows that are deleted inside?
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3017 (edebug-set-windows edebug-inside-windows)))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3018
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3019 (defun edebug-toggle-save-selected-window ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3020 "Toggle the saving and restoring of the selected window.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3021 Also, each time you toggle it on, the inside and outside window
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3022 configurations become the same as the current configuration."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3023 (interactive)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3024 (cond
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3025 ((eq t edebug-save-windows)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3026 ;; Save all outside windows except the selected one.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3027 ;; Remove (selected-window) from outside-windows.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3028 (edebug-changing-windows
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3029 (setq edebug-save-windows (delq window (edebug-window-list)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3030
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3031 ((memq (selected-window) edebug-save-windows)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3032 (setq edebug-outside-windows
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3033 (delq (assq (selected-window) edebug-outside-windows)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3034 edebug-outside-windows))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3035 (setq edebug-save-windows
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3036 (delq (selected-window) edebug-save-windows)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3037 (t ; Save a new window.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3038 (edebug-changing-windows
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3039 (setq edebug-save-windows (cons window edebug-save-windows)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3040
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3041 (message "Window saving is %s for %s."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3042 (if (memq (selected-window) edebug-save-windows)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3043 "on" "off")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3044 (selected-window)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3045
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3046 (defun edebug-toggle-save-windows (arg)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3047 "Toggle the saving and restoring of windows.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3048 With prefix, toggle for just the selected window.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3049 Otherwise, toggle for all windows."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3050 (interactive "P")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3051 (if arg
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3052 (edebug-toggle-save-selected-window)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3053 (edebug-toggle-save-all-windows)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3054
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3055
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3056 (defun edebug-where ()
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3057 "Show the debug windows and where we stopped in the program."
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3058 (interactive)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3059 (if (not edebug-active)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3060 (error "Edebug is not active"))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3061 ;; Restore the window configuration to what it last was inside.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3062 ;; But it is not always set. - experiment
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3063 ;;(if edebug-inside-windows
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3064 ;; (edebug-set-windows edebug-inside-windows))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3065 (edebug-pop-to-buffer edebug-buffer)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3066 (goto-char edebug-point))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3067
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3068 (defun edebug-view-outside ()
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3069 "Change to the outside window configuration."
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3070 (interactive)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3071 (if (not edebug-active)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3072 (error "Edebug is not active"))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3073 (setq edebug-inside-windows
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3074 (edebug-current-windows edebug-save-windows))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3075 (edebug-set-windows edebug-outside-windows)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3076 (goto-char edebug-outside-point)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3077 (message "Window configuration outside of Edebug. Return with %s"
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3078 (substitute-command-keys "\\<global-map>\\[edebug-where]")))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3079
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3080
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3081 (defun edebug-bounce-point (arg)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3082 "Bounce the point in the outside current buffer.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3083 If prefix arg is supplied, sit for that many seconds before returning.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3084 The default is one second."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3085 (interactive "p")
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3086 (if (not edebug-active)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3087 (error "Edebug is not active"))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3088 (save-excursion
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3089 ;; If the buffer's currently displayed, avoid set-window-configuration.
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3090 (save-window-excursion
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3091 (edebug-pop-to-buffer edebug-outside-buffer)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3092 (goto-char edebug-outside-point)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3093 (message "Current buffer: %s Point: %s Mark: %s"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3094 (current-buffer) (point)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3095 (if (marker-buffer (edebug-mark-marker))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3096 (marker-position (edebug-mark-marker)) "<not set>"))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3097 (edebug-sit-for arg)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3098 (edebug-pop-to-buffer edebug-buffer (car edebug-window-data)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3099
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3100
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3101 ;; Joe Wells, here is a start at your idea of adding a buffer to the internal
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3102 ;; display list. Still need to use this list in edebug-display.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3103
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3104 '(defvar edebug-display-buffer-list nil
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3105 "List of buffers that edebug will display when it is active.")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3106
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3107 '(defun edebug-display-buffer (buffer)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3108 "Toggle display of a buffer inside of edebug."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3109 (interactive "bBuffer: ")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3110 (let ((already-displaying (memq buffer edebug-display-buffer-list)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3111 (setq edebug-display-buffer-list
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3112 (if already-displaying
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3113 (delq buffer edebug-display-buffer-list)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3114 (cons buffer edebug-display-buffer-list)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3115 (message "Displaying %s %s" buffer
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3116 (if already-displaying "off" "on"))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3117
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3118 ;;; Breakpoint related functions
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3119
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3120 (defun edebug-find-stop-point ()
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3121 ;; Return (function . index) of the nearest edebug stop point.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3122 (let* ((edebug-def-name (edebug-form-data-symbol))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3123 (edebug-data
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3124 (let ((data (get edebug-def-name 'edebug)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3125 (if (or (null data) (markerp data))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3126 (error "%s is not instrumented for Edebug" edebug-def-name))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3127 data)) ; we could do it automatically, if data is a marker.
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3128 ;; pull out parts of edebug-data.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3129 (edebug-def-mark (car edebug-data))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3130 ;; (edebug-breakpoints (car (cdr edebug-data)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3131
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3132 (offset-vector (nth 2 edebug-data))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3133 (offset (- (save-excursion
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3134 (if (looking-at "[ \t]")
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3135 ;; skip backwards until non-whitespace, or bol
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3136 (skip-chars-backward " \t"))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3137 (point))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3138 edebug-def-mark))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3139 len i)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3140 ;; the offsets are in order so we can do a linear search
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3141 (setq len (length offset-vector))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3142 (setq i 0)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3143 (while (and (< i len) (> offset (aref offset-vector i)))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3144 (setq i (1+ i)))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3145 (if (and (< i len)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3146 (<= offset (aref offset-vector i)))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3147 ;; return the relevant info
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3148 (cons edebug-def-name i)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3149 (message "Point is not on an expression in %s."
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3150 edebug-def-name)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3151 )))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3152
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3153
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3154 (defun edebug-next-breakpoint ()
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3155 "Move point to the next breakpoint, or first if none past point."
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3156 (interactive)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3157 (let ((edebug-stop-point (edebug-find-stop-point)))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3158 (if edebug-stop-point
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3159 (let* ((edebug-def-name (car edebug-stop-point))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3160 (index (cdr edebug-stop-point))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3161 (edebug-data (get edebug-def-name 'edebug))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3162
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3163 ;; pull out parts of edebug-data
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3164 (edebug-def-mark (car edebug-data))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3165 (edebug-breakpoints (car (cdr edebug-data)))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3166 (offset-vector (nth 2 edebug-data))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3167 breakpoint)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3168 (if (not edebug-breakpoints)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3169 (message "No breakpoints in this function.")
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3170 (let ((breaks edebug-breakpoints))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3171 (while (and breaks
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3172 (<= (car (car breaks)) index))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3173 (setq breaks (cdr breaks)))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3174 (setq breakpoint
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3175 (if breaks
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3176 (car breaks)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3177 ;; goto the first breakpoint
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3178 (car edebug-breakpoints)))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3179 (goto-char (+ edebug-def-mark
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3180 (aref offset-vector (car breakpoint))))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3181
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
3182 (message "%s"
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
3183 (concat (if (nth 2 breakpoint)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3184 "Temporary " "")
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3185 (if (car (cdr breakpoint))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3186 (format "Condition: %s"
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3187 (edebug-safe-prin1-to-string
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3188 (car (cdr breakpoint))))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3189 "")))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3190 ))))))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3191
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3192
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3193 (defun edebug-modify-breakpoint (flag &optional condition temporary)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3194 "Modify the breakpoint for the form at point or after it according
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3195 to FLAG: set if t, clear if nil. Then move to that point.
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3196 If CONDITION or TEMPORARY are non-nil, add those attributes to
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3197 the breakpoint. "
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3198 (let ((edebug-stop-point (edebug-find-stop-point)))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3199 (if edebug-stop-point
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3200 (let* ((edebug-def-name (car edebug-stop-point))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3201 (index (cdr edebug-stop-point))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3202 (edebug-data (get edebug-def-name 'edebug))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3203
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3204 ;; pull out parts of edebug-data
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3205 (edebug-def-mark (car edebug-data))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3206 (edebug-breakpoints (car (cdr edebug-data)))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3207 (offset-vector (nth 2 edebug-data))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3208 present)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3209 ;; delete it either way
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3210 (setq present (assq index edebug-breakpoints))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3211 (setq edebug-breakpoints (delq present edebug-breakpoints))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3212 (if flag
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3213 (progn
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3214 ;; add it to the list and resort
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3215 (setq edebug-breakpoints
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3216 (edebug-sort-alist
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3217 (cons
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3218 (list index condition temporary)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3219 edebug-breakpoints) '<))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3220 (if condition
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3221 (message "Breakpoint set in %s with condition: %s"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3222 edebug-def-name condition)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3223 (message "Breakpoint set in %s" edebug-def-name)))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3224 (if present
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3225 (message "Breakpoint unset in %s" edebug-def-name)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3226 (message "No breakpoint here")))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3227
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3228 (setcar (cdr edebug-data) edebug-breakpoints)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3229 (goto-char (+ edebug-def-mark (aref offset-vector index)))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3230 ))))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3231
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3232 (defun edebug-set-breakpoint (arg)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3233 "Set the breakpoint of nearest sexp.
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3234 With prefix argument, make it a temporary breakpoint."
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3235 (interactive "P")
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3236 (edebug-modify-breakpoint t nil arg))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3237
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3238 (defun edebug-unset-breakpoint ()
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3239 "Clear the breakpoint of nearest sexp."
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3240 (interactive)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3241 (edebug-modify-breakpoint nil))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3242
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3243
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3244 ;; For emacs 18, no read-expression-history
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3245 (defun edebug-set-conditional-breakpoint (arg condition)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3246 "Set a conditional breakpoint at nearest sexp.
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3247 The condition is evaluated in the outside context.
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3248 With prefix argument, make it a temporary breakpoint."
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3249 ;; (interactive "P\nxCondition: ")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3250 (interactive
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3251 (list
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3252 current-prefix-arg
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3253 ;; Edit previous condition as follows, but it is cumbersome:
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3254 (let ((edebug-stop-point (edebug-find-stop-point)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3255 (if edebug-stop-point
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3256 (let* ((edebug-def-name (car edebug-stop-point))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3257 (index (cdr edebug-stop-point))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3258 (edebug-data (get edebug-def-name 'edebug))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3259 (edebug-breakpoints (car (cdr edebug-data)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3260 (edebug-break-data (assq index edebug-breakpoints))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3261 (edebug-break-condition (car (cdr edebug-break-data))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3262 (read-minibuffer
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3263 (format "Condition in %s: " edebug-def-name)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3264 (if edebug-break-condition
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3265 (format "%s" edebug-break-condition)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3266 (format ""))))))))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3267 (edebug-modify-breakpoint t condition arg))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3268
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3269
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3270 (defun edebug-set-global-break-condition (expression)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3271 (interactive (list (read-minibuffer
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3272 "Global Condition: "
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3273 (format "%s" edebug-global-break-condition))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3274 (setq edebug-global-break-condition expression))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3275
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3276
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3277 ;;; Mode switching functions
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3278
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3279 (defun edebug-set-mode (mode shortmsg msg)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3280 ;; Set the edebug mode to MODE.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3281 ;; Display SHORTMSG, or MSG if not within edebug.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3282 (if (eq (1+ edebug-recursion-depth) (recursion-depth))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3283 (progn
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3284 (setq edebug-execution-mode mode)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3285 (message shortmsg)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3286 ;; Continue execution
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3287 (exit-recursive-edit))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3288 ;; This is not terribly useful!!
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3289 (setq edebug-next-execution-mode mode)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3290 (message msg)))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3291
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3292
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3293 (defalias 'edebug-step-through-mode 'edebug-step-mode)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3294
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3295 (defun edebug-step-mode ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3296 "Proceed to next stop point."
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3297 (interactive)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3298 (edebug-set-mode 'step "" "Edebug will stop at next stop point."))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3299
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3300 (defun edebug-next-mode ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3301 "Proceed to next `after' stop point."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3302 (interactive)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3303 (edebug-set-mode 'next "" "Edebug will stop after next eval."))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3304
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3305 (defun edebug-go-mode (arg)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3306 "Go, evaluating until break.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3307 With prefix ARG, set temporary break at current point and go."
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3308 (interactive "P")
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3309 (if arg
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3310 (edebug-set-breakpoint t))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3311 (edebug-set-mode 'go "Go..." "Edebug will go until break."))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3312
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3313 (defun edebug-Go-nonstop-mode ()
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3314 "Go, evaluating without debugging."
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3315 (interactive)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3316 (edebug-set-mode 'Go-nonstop "Go-Nonstop..."
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3317 "Edebug will not stop at breaks."))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3318
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3319
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3320 (defun edebug-trace-mode ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3321 "Begin trace mode."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3322 (interactive)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3323 (edebug-set-mode 'trace "Tracing..." "Edebug will trace with pause."))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3324
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3325 (defun edebug-Trace-fast-mode ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3326 "Trace with no wait at each step."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3327 (interactive)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3328 (edebug-set-mode 'Trace-fast
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3329 "Trace fast..." "Edebug will trace without pause."))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3330
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3331 (defun edebug-continue-mode ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3332 "Begin continue mode."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3333 (interactive)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3334 (edebug-set-mode 'continue "Continue..."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3335 "Edebug will pause at breakpoints."))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3336
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3337 (defun edebug-Continue-fast-mode ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3338 "Trace with no wait at each step."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3339 (interactive)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3340 (edebug-set-mode 'Continue-fast "Continue fast..."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3341 "Edebug will stop and go at breakpoints."))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3342
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3343 ;; ------------------------------------------------------------
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3344 ;; The following use the mode changing commands and breakpoints.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3345
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3346
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3347 (defun edebug-goto-here ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3348 "Proceed to this stop point."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3349 (interactive)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3350 (edebug-go-mode t))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3351
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3352
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3353 (defun edebug-stop ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3354 "Stop execution and do not continue.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3355 Useful for exiting from trace or continue loop."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3356 (interactive)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3357 (message "Stop"))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3358
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3359
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3360 '(defun edebug-forward ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3361 "Proceed to the exit of the next expression to be evaluated."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3362 (interactive)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3363 (edebug-set-mode
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3364 'forward "Forward"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3365 "Edebug will stop after exiting the next expression."))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3366
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3367
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3368 (defun edebug-forward-sexp (arg)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3369 "Proceed from the current point to the end of the ARGth sexp ahead.
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3370 If there are not ARG sexps ahead, then do edebug-step-out."
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3371 (interactive "p")
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3372 (condition-case nil
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3373 (let ((parse-sexp-ignore-comments t))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3374 ;; Call forward-sexp repeatedly until done or failure.
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3375 (forward-sexp arg)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3376 (edebug-go-mode t))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3377 (error
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3378 (edebug-step-out)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3379 )))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3380
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3381 (defun edebug-step-out ()
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3382 "Proceed from the current point to the end of the containing sexp.
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3383 If there is no containing sexp that is not the top level defun,
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3384 go to the end of the last sexp, or if that is the same point, then step."
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3385 (interactive)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3386 (condition-case nil
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3387 (let ((parse-sexp-ignore-comments t))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3388 (up-list 1)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3389 (save-excursion
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3390 ;; Is there still a containing expression?
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3391 (up-list 1))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3392 (edebug-go-mode t))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3393 (error
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3394 ;; At top level - 1, so first check if there are more sexps at this level.
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3395 (let ((start-point (point)))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3396 ;; (up-list 1)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3397 (down-list -1)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3398 (if (= (point) start-point)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3399 (edebug-step-mode) ; No more at this level, so step.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3400 (edebug-go-mode t)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3401 )))))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3402
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3403 (defun edebug-instrument-function (func)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3404 ;; Func should be a function symbol.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3405 ;; Return the function symbol, or nil if not instrumented.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3406 (let ((func-marker))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3407 (setq func-marker (get func 'edebug))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3408 (cond
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3409 ((markerp func-marker)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3410 ;; It is uninstrumented, so instrument it.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3411 (save-excursion
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3412 (set-buffer (marker-buffer func-marker))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3413 (goto-char func-marker)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3414 (edebug-eval-top-level-form)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3415 func))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3416 ((consp func-marker)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3417 (message "%s is already instrumented." func)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3418 func)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3419 (t
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3420 ;; We could try harder, e.g. do a tags search.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3421 (error "Don't know where %s is defined" func)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3422 nil))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3423
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3424 (defun edebug-instrument-callee ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3425 "Instrument the definition of the function or macro about to be called.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3426 Do this when stopped before the form or it will be too late.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3427 One side effect of using this command is that the next time the
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3428 function or macro is called, Edebug will be called there as well."
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3429 (interactive)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3430 (if (not (looking-at "\("))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3431 (error "You must be before a list form")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3432 (let ((func
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3433 (save-excursion
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3434 (down-list 1)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3435 (if (looking-at "\(")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3436 (edebug-form-data-name
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3437 (edebug-get-form-data-entry (point)))
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
3438 (edebug-original-read (current-buffer))))))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3439 (edebug-instrument-function func))))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3440
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3441
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3442 (defun edebug-step-in ()
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3443 "Step into the definition of the function or macro about to be called.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3444 This first does `edebug-instrument-callee' to ensure that it is
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3445 instrumented. Then it does `edebug-on-entry' and switches to `go' mode."
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3446 (interactive)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3447 (let ((func (edebug-instrument-callee)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3448 (if func
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3449 (progn
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3450 (edebug-on-entry func 'temp)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3451 (edebug-go-mode nil)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3452
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3453 (defun edebug-on-entry (function &optional flag)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3454 "Cause Edebug to stop when FUNCTION is called.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3455 With prefix argument, make this temporary so it is automatically
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3456 cancelled the first time the function is entered."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3457 (interactive "aEdebug on entry to: \nP")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3458 ;; Could store this in the edebug data instead.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3459 (put function 'edebug-on-entry (if flag 'temp t)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3460
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3461 (defun cancel-edebug-on-entry (function)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3462 (interactive "aEdebug on entry to: ")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3463 (put function 'edebug-on-entry nil))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3464
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3465
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
3466 (if (not (fboundp 'edebug-original-debug-on-entry))
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
3467 (fset 'edebug-original-debug-on-entry (symbol-function 'debug-on-entry)))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3468 '(fset 'debug-on-entry 'edebug-debug-on-entry) ;; Should we do this?
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3469 ;; Also need edebug-cancel-debug-on-entry
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3470
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3471 '(defun edebug-debug-on-entry (function)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3472 "Request FUNCTION to invoke debugger each time it is called.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3473 If the user continues, FUNCTION's execution proceeds.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3474 Works by modifying the definition of FUNCTION,
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3475 which must be written in Lisp, not predefined.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3476 Use `cancel-debug-on-entry' to cancel the effect of this command.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3477 Redefining FUNCTION also does that.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3478
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3479 This version is from Edebug. If the function is instrumented for
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3480 Edebug, it calls `edebug-on-entry'"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3481 (interactive "aDebug on entry (to function): ")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3482 (let ((func-data (get function 'edebug)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3483 (if (or (null func-data) (markerp func-data))
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
3484 (edebug-original-debug-on-entry function)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3485 (edebug-on-entry function))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3486
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3487
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3488 (defun edebug-top-level-nonstop ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3489 "Set mode to Go-nonstop, and exit to top-level.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3490 This is useful for exiting even if unwind-protect code may be executed."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3491 (interactive)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3492 (setq edebug-execution-mode 'Go-nonstop)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3493 (top-level))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3494
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3495
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3496 ;;(defun edebug-exit-out ()
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3497 ;; "Go until the current function exits."
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3498 ;; (interactive)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3499 ;; (edebug-set-mode 'exiting "Exit..."))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3500
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3501
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3502 ;;; The following initial mode setting definitions are not used yet.
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3503
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3504 '(defconst edebug-initial-mode-alist
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3505 '((edebug-Continue-fast . Continue-fast)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3506 (edebug-Trace-fast . Trace-fast)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3507 (edebug-continue . continue)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3508 (edebug-trace . trace)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3509 (edebug-go . go)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3510 (edebug-step-through . step)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3511 (edebug-Go-nonstop . Go-nonstop)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3512 )
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3513 "Association list between commands and the modes they set.")
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3514
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3515
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3516 '(defun edebug-set-initial-mode ()
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3517 "Ask for the initial mode of the enclosing function.
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3518 The mode is requested via the key that would be used to set the mode in
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3519 edebug-mode."
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3520 (interactive)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3521 (let* ((this-function (edebug-which-function))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3522 (keymap (if (eq edebug-mode-map (current-local-map))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3523 edebug-mode-map))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3524 (old-mode (or (get this-function 'edebug-initial-mode)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3525 edebug-initial-mode))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3526 (key (read-key-sequence
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3527 (format
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3528 "Change initial edebug mode for %s from %s (%s) to (enter key): "
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3529 this-function
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3530 old-mode
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3531 (where-is-internal
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3532 (car (rassq old-mode edebug-initial-mode-alist))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3533 keymap 'firstonly
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3534 ))))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3535 (mode (cdr (assq (key-binding key) edebug-initial-mode-alist)))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3536 )
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3537 (if (and mode
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3538 (or (get this-function 'edebug-initial-mode)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3539 (not (eq mode edebug-initial-mode))))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3540 (progn
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3541 (put this-function 'edebug-initial-mode mode)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3542 (message "Initial mode for %s is now: %s"
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3543 this-function mode))
5126
30682388c4cf Delete periods from error messages.
Richard M. Stallman <rms@gnu.org>
parents: 5125
diff changeset
3544 (error "Key must map to one of the mode changing commands")
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3545 )))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3546
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3547 ;;; Evaluation of expressions
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3548
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3549 (def-edebug-spec edebug-outside-excursion t)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3550
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3551 (defmacro edebug-outside-excursion (&rest body)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3552 "Evaluate an expression list in the outside context.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3553 Return the result of the last expression."
26519
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3554 `(save-excursion ; of current-buffer
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3555 (if edebug-save-windows
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3556 (progn
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3557 ;; After excursion, we will
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3558 ;; restore to current window configuration.
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3559 (setq edebug-inside-windows
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3560 (edebug-current-windows edebug-save-windows))
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3561 ;; Restore outside windows.
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3562 (edebug-set-windows edebug-outside-windows)))
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3563
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3564 (set-buffer edebug-buffer) ; why?
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3565 ;; (use-local-map edebug-outside-map)
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3566 (set-match-data edebug-outside-match-data)
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3567 ;; Restore outside context.
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3568 (let (;; (edebug-inside-map (current-local-map)) ;; restore map??
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3569 (last-command-char edebug-outside-last-command-char)
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3570 (last-command-event edebug-outside-last-command-event)
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3571 (last-command edebug-outside-last-command)
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3572 (this-command edebug-outside-this-command)
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3573 (unread-command-char edebug-outside-unread-command-char)
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3574 (unread-command-event edebug-outside-unread-command-event)
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3575 (unread-command-events edebug-outside-unread-command-events)
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3576 (current-prefix-arg edebug-outside-current-prefix-arg)
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3577 (last-input-char edebug-outside-last-input-char)
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3578 (last-input-event edebug-outside-last-input-event)
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3579 (last-event-frame edebug-outside-last-event-frame)
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3580 (last-nonmenu-event edebug-outside-last-nonmenu-event)
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3581 (track-mouse edebug-outside-track-mouse)
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3582 (standard-output edebug-outside-standard-output)
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3583 (standard-input edebug-outside-standard-input)
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3584
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3585 (executing-kbd-macro edebug-outside-executing-macro)
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3586 (defining-kbd-macro edebug-outside-defining-kbd-macro)
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3587 (pre-command-hook edebug-outside-pre-command-hook)
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3588 (post-command-hook edebug-outside-post-command-hook)
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3589
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3590 ;; See edebug-display
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3591 (overlay-arrow-position edebug-outside-o-a-p)
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3592 (overlay-arrow-string edebug-outside-o-a-s)
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3593 (cursor-in-echo-area edebug-outside-c-i-e-a)
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3594 )
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3595 (unwind-protect
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3596 (save-excursion ; of edebug-buffer
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3597 (set-buffer edebug-outside-buffer)
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3598 (goto-char edebug-outside-point)
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3599 (if (marker-buffer (edebug-mark-marker))
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3600 (set-marker (edebug-mark-marker) edebug-outside-mark))
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3601 ,@body)
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3602
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3603 ;; Back to edebug-buffer. Restore rest of inside context.
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3604 ;; (use-local-map edebug-inside-map)
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3605 (if edebug-save-windows
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3606 ;; Restore inside windows.
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3607 (edebug-set-windows edebug-inside-windows))
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3608
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3609 ;; Save values that may have been changed.
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3610 (setq
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3611 edebug-outside-last-command-char last-command-char
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3612 edebug-outside-last-command-event last-command-event
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3613 edebug-outside-last-command last-command
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3614 edebug-outside-this-command this-command
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3615 edebug-outside-unread-command-char unread-command-char
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3616 edebug-outside-unread-command-event unread-command-event
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3617 edebug-outside-unread-command-events unread-command-events
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3618 edebug-outside-current-prefix-arg current-prefix-arg
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3619 edebug-outside-last-input-char last-input-char
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3620 edebug-outside-last-input-event last-input-event
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3621 edebug-outside-last-event-frame last-event-frame
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3622 edebug-outside-last-nonmenu-event last-nonmenu-event
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3623 edebug-outside-track-mouse track-mouse
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3624 edebug-outside-standard-output standard-output
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3625 edebug-outside-standard-input standard-input
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3626
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3627 edebug-outside-executing-macro executing-kbd-macro
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3628 edebug-outside-defining-kbd-macro defining-kbd-macro
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3629 edebug-outside-pre-command-hook pre-command-hook
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3630 edebug-outside-post-command-hook post-command-hook
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3631
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3632 edebug-outside-o-a-p overlay-arrow-position
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3633 edebug-outside-o-a-s overlay-arrow-string
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3634 edebug-outside-c-i-e-a cursor-in-echo-area
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3635 ))) ; let
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3636 ))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3637
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3638 (defvar cl-debug-env nil) ;; defined in cl; non-nil when lexical env used.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3639
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3640 (defun edebug-eval (edebug-expr)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3641 ;; Are there cl lexical variables active?
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3642 (if cl-debug-env
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3643 (eval (cl-macroexpand-all edebug-expr cl-debug-env))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3644 (eval edebug-expr)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3645
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3646 (defun edebug-safe-eval (edebug-expr)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3647 ;; Evaluate EXPR safely.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3648 ;; If there is an error, a string is returned describing the error.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3649 (condition-case edebug-err
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3650 (edebug-eval edebug-expr)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3651 (error (edebug-format "%s: %s" ;; could
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3652 (get (car edebug-err) 'error-message)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3653 (car (cdr edebug-err))))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3654
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
3655 ;;; Printing
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
3656
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3657 ;; Replace printing functions.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3658
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3659 ;; obsolete names
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3660 (defalias 'edebug-install-custom-print-funcs 'edebug-install-custom-print)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3661 (defalias 'edebug-reset-print-funcs 'edebug-uninstall-custom-print)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3662 (defalias 'edebug-uninstall-custom-print-funcs 'edebug-uninstall-custom-print)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3663
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3664 (defun edebug-install-custom-print ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3665 "Replace print functions used by Edebug with custom versions."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3666 ;; Modifying the custom print functions, or changing print-length,
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3667 ;; print-level, print-circle, custom-print-list or custom-print-vector
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3668 ;; have immediate effect.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3669 (interactive)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3670 (require 'cust-print)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3671 (defalias 'edebug-prin1 'custom-prin1)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3672 (defalias 'edebug-print 'custom-print)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3673 (defalias 'edebug-prin1-to-string 'custom-prin1-to-string)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3674 (defalias 'edebug-format 'custom-format)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3675 (defalias 'edebug-message 'custom-message)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3676 "Installed")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3677
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3678 (eval-and-compile
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3679 (defun edebug-uninstall-custom-print ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3680 "Replace edebug custom print functions with internal versions."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3681 (interactive)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3682 (defalias 'edebug-prin1 'prin1)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3683 (defalias 'edebug-print 'print)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3684 (defalias 'edebug-prin1-to-string 'prin1-to-string)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3685 (defalias 'edebug-format 'format)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3686 (defalias 'edebug-message 'message)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3687 "Uninstalled")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3688
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3689 ;; Default print functions are the same as Emacs'.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3690 (edebug-uninstall-custom-print))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3691
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3692
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3693 (defun edebug-report-error (edebug-value)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3694 ;; Print an error message like command level does.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3695 ;; This also prints the error name if it has no error-message.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3696 (message "%s: %s"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3697 (or (get (car edebug-value) 'error-message)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3698 (format "peculiar error (%s)" (car edebug-value)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3699 (mapconcat (function (lambda (edebug-arg)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3700 ;; continuing after an error may
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3701 ;; complain about edebug-arg. why??
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3702 (prin1-to-string edebug-arg)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3703 (cdr edebug-value) ", ")))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3704
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3705 ;; Define here in case they are not already defined.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3706 (defvar print-level nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3707 (defvar print-circle nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3708 (defvar print-readably) ;; defined by lemacs
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3709 ;; Alternatively, we could change the definition of
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
3710 ;; edebug-safe-prin1-to-string to only use these if defined.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3711
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3712 (defun edebug-safe-prin1-to-string (value)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3713 (let ((print-escape-newlines t)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3714 (print-length (or edebug-print-length print-length))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3715 (print-level (or edebug-print-level print-level))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3716 (print-circle (or edebug-print-circle print-circle))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3717 (print-readably nil)) ;; lemacs uses this.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3718 (edebug-prin1-to-string value)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3719
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3720 (defun edebug-compute-previous-result (edebug-previous-value)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3721 (setq edebug-previous-result
21643
475d7e2df534 (edebug-compute-previous-result):
Richard M. Stallman <rms@gnu.org>
parents: 21162
diff changeset
3722 (if (and (integerp edebug-previous-value)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3723 (< edebug-previous-value 256)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3724 (>= edebug-previous-value 0))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3725 (format "Result: %s = %s" edebug-previous-value
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3726 (single-key-description edebug-previous-value))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3727 (if edebug-unwrap-results
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3728 (setq edebug-previous-value
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3729 (edebug-unwrap* edebug-previous-value)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3730 (concat "Result: "
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3731 (edebug-safe-prin1-to-string edebug-previous-value)))))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3732
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3733 (defun edebug-previous-result ()
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3734 "Print the previous result."
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3735 (interactive)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3736 (message "%s" edebug-previous-result))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3737
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
3738 ;;; Read, Eval and Print
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3739
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3740 (defun edebug-eval-expression (edebug-expr)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3741 "Evaluate an expression in the outside environment.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3742 If interactive, prompt for the expression.
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3743 Print result in minibuffer."
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3744 (interactive "xEval: ")
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3745 (princ
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3746 (edebug-outside-excursion
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3747 (setq values (cons (edebug-eval edebug-expr) values))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3748 (edebug-safe-prin1-to-string (car values)))))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3749
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3750 (defun edebug-eval-last-sexp ()
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3751 "Evaluate sexp before point in the outside environment;
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3752 print value in minibuffer."
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3753 (interactive)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3754 (edebug-eval-expression (edebug-last-sexp)))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3755
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3756 (defun edebug-eval-print-last-sexp ()
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3757 "Evaluate sexp before point in the outside environment;
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3758 print value into current buffer."
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3759 (interactive)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3760 (let* ((edebug-form (edebug-last-sexp))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3761 (edebug-result-string
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3762 (edebug-outside-excursion
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3763 (edebug-safe-prin1-to-string (edebug-safe-eval edebug-form))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3764 (standard-output (current-buffer)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3765 (princ "\n")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3766 ;; princ the string to get rid of quotes.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3767 (princ edebug-result-string)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3768 (princ "\n")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3769 ))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3770
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
3771 ;;; Edebug Minor Mode
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3772
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3773 ;; Global GUD bindings for all emacs-lisp-mode buffers.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3774 (define-key emacs-lisp-mode-map "\C-x\C-a\C-s" 'edebug-step-mode)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3775 (define-key emacs-lisp-mode-map "\C-x\C-a\C-n" 'edebug-next-mode)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3776 (define-key emacs-lisp-mode-map "\C-x\C-a\C-c" 'edebug-go-mode)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3777 (define-key emacs-lisp-mode-map "\C-x\C-a\C-l" 'edebug-where)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3778
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3779
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3780 (defvar edebug-mode-map nil)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3781 (if edebug-mode-map
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3782 nil
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3783 (progn
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3784 (setq edebug-mode-map (copy-keymap emacs-lisp-mode-map))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3785 ;; control
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3786 (define-key edebug-mode-map " " 'edebug-step-mode)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3787 (define-key edebug-mode-map "n" 'edebug-next-mode)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3788 (define-key edebug-mode-map "g" 'edebug-go-mode)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3789 (define-key edebug-mode-map "G" 'edebug-Go-nonstop-mode)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3790 (define-key edebug-mode-map "t" 'edebug-trace-mode)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3791 (define-key edebug-mode-map "T" 'edebug-Trace-fast-mode)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3792 (define-key edebug-mode-map "c" 'edebug-continue-mode)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3793 (define-key edebug-mode-map "C" 'edebug-Continue-fast-mode)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3794
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3795 ;;(define-key edebug-mode-map "f" 'edebug-forward) not implemented
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3796 (define-key edebug-mode-map "f" 'edebug-forward-sexp)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3797 (define-key edebug-mode-map "h" 'edebug-goto-here)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3798
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3799 (define-key edebug-mode-map "I" 'edebug-instrument-callee)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3800 (define-key edebug-mode-map "i" 'edebug-step-in)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3801 (define-key edebug-mode-map "o" 'edebug-step-out)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3802
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3803 ;; quitting and stopping
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3804 (define-key edebug-mode-map "q" 'top-level)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3805 (define-key edebug-mode-map "Q" 'edebug-top-level-nonstop)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3806 (define-key edebug-mode-map "a" 'abort-recursive-edit)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3807 (define-key edebug-mode-map "S" 'edebug-stop)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3808
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3809 ;; breakpoints
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3810 (define-key edebug-mode-map "b" 'edebug-set-breakpoint)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3811 (define-key edebug-mode-map "u" 'edebug-unset-breakpoint)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3812 (define-key edebug-mode-map "B" 'edebug-next-breakpoint)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3813 (define-key edebug-mode-map "x" 'edebug-set-conditional-breakpoint)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3814 (define-key edebug-mode-map "X" 'edebug-set-global-break-condition)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3815
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3816 ;; evaluation
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3817 (define-key edebug-mode-map "r" 'edebug-previous-result)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3818 (define-key edebug-mode-map "e" 'edebug-eval-expression)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3819 (define-key edebug-mode-map "\C-x\C-e" 'edebug-eval-last-sexp)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3820 (define-key edebug-mode-map "E" 'edebug-visit-eval-list)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3821
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3822 ;; views
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3823 (define-key edebug-mode-map "w" 'edebug-where)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3824 (define-key edebug-mode-map "v" 'edebug-view-outside) ;; maybe obsolete??
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3825 (define-key edebug-mode-map "p" 'edebug-bounce-point)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3826 (define-key edebug-mode-map "P" 'edebug-view-outside) ;; same as v
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3827 (define-key edebug-mode-map "W" 'edebug-toggle-save-windows)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3828
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3829 ;; misc
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3830 (define-key edebug-mode-map "?" 'edebug-help)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3831 (define-key edebug-mode-map "d" 'edebug-backtrace)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3832
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3833 (define-key edebug-mode-map "-" 'negative-argument)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3834
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3835 ;; statistics
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3836 (define-key edebug-mode-map "=" 'edebug-temp-display-freq-count)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3837
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3838 ;; GUD bindings
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3839 (define-key edebug-mode-map "\C-c\C-s" 'edebug-step-mode)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3840 (define-key edebug-mode-map "\C-c\C-n" 'edebug-next-mode)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3841 (define-key edebug-mode-map "\C-c\C-c" 'edebug-go-mode)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3842
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3843 (define-key edebug-mode-map "\C-x " 'edebug-set-breakpoint)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3844 (define-key edebug-mode-map "\C-c\C-d" 'edebug-unset-breakpoint)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3845 (define-key edebug-mode-map "\C-c\C-t"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3846 (function (lambda () (edebug-set-breakpoint t))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3847 (define-key edebug-mode-map "\C-c\C-l" 'edebug-where)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3848 ))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3849
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3850 ;; Autoloading these global bindings doesn't make sense because
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3851 ;; they cannot be used anyway unless Edebug is already loaded and active.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3852
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3853 (defvar global-edebug-prefix "\^XX"
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3854 "Prefix key for global edebug commands, available from any buffer.")
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3855
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3856 (defvar global-edebug-map nil
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3857 "Global map of edebug commands, available from any buffer.")
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3858
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3859 (if global-edebug-map
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3860 nil
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3861 (setq global-edebug-map (make-sparse-keymap))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3862
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3863 (global-unset-key global-edebug-prefix)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3864 (global-set-key global-edebug-prefix global-edebug-map)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3865
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3866 (define-key global-edebug-map " " 'edebug-step-mode)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3867 (define-key global-edebug-map "g" 'edebug-go-mode)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3868 (define-key global-edebug-map "G" 'edebug-Go-nonstop-mode)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3869 (define-key global-edebug-map "t" 'edebug-trace-mode)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3870 (define-key global-edebug-map "T" 'edebug-Trace-fast-mode)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3871 (define-key global-edebug-map "c" 'edebug-continue-mode)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3872 (define-key global-edebug-map "C" 'edebug-Continue-fast-mode)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3873
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3874 ;; breakpoints
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3875 (define-key global-edebug-map "b" 'edebug-set-breakpoint)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3876 (define-key global-edebug-map "u" 'edebug-unset-breakpoint)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3877 (define-key global-edebug-map "x" 'edebug-set-conditional-breakpoint)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3878 (define-key global-edebug-map "X" 'edebug-set-global-break-condition)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3879
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3880 ;; views
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3881 (define-key global-edebug-map "w" 'edebug-where)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3882 (define-key global-edebug-map "W" 'edebug-toggle-save-windows)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3883
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3884 ;; quitting
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3885 (define-key global-edebug-map "q" 'top-level)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3886 (define-key global-edebug-map "Q" 'edebug-top-level-nonstop)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3887 (define-key global-edebug-map "a" 'abort-recursive-edit)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3888
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3889 ;; statistics
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3890 (define-key global-edebug-map "=" 'edebug-display-freq-count)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3891 )
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3892
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3893 (defun edebug-help ()
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3894 (interactive)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3895 (describe-function 'edebug-mode))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3896
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3897 (defun edebug-mode ()
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3898 "Mode for Emacs Lisp buffers while in Edebug.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3899
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3900 In addition to all Emacs Lisp commands (except those that modify the
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3901 buffer) there are local and global key bindings to several Edebug
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3902 specific commands. E.g. `edebug-step-mode' is bound to \\[edebug-step-mode]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3903 in the Edebug buffer and \\<global-map>\\[edebug-step-mode] in any buffer.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3904
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3905 Also see bindings for the eval list buffer, *edebug*.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3906
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3907 The edebug buffer commands:
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3908 \\{edebug-mode-map}
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3909
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3910 Global commands prefixed by `global-edebug-prefix':
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3911 \\{global-edebug-map}
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3912
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3913 Options:
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3914 edebug-setup-hook
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3915 edebug-all-defs
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3916 edebug-all-forms
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3917 edebug-save-windows
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3918 edebug-save-displayed-buffer-points
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3919 edebug-initial-mode
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3920 edebug-trace
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3921 edebug-test-coverage
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3922 edebug-continue-kbd-macro
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3923 edebug-print-length
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3924 edebug-print-level
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3925 edebug-print-circle
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3926 edebug-on-error
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3927 edebug-on-quit
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3928 edebug-on-signal
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3929 edebug-unwrap-results
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3930 edebug-global-break-condition
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3931 "
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3932 (use-local-map edebug-mode-map))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3933
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
3934 ;;; edebug eval list mode
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
3935
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3936 ;; A list of expressions and their evaluations is displayed in *edebug*.
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3937
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3938 (defun edebug-eval-result-list ()
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3939 "Return a list of evaluations of edebug-eval-list"
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3940 ;; Assumes in outside environment.
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
3941 ;; Don't do any edebug things now.
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
3942 (let ((edebug-execution-mode 'Go-nonstop)
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
3943 (edebug-trace nil))
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
3944 (mapcar 'edebug-safe-eval edebug-eval-list)))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3945
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3946 (defun edebug-eval-display-list (edebug-eval-result-list)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3947 ;; Assumes edebug-eval-buffer exists.
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3948 (let ((edebug-eval-list-temp edebug-eval-list)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3949 (standard-output edebug-eval-buffer)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3950 (edebug-comment-line
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3951 (format ";%s\n" (make-string (- (window-width) 2) ?-))))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3952 (set-buffer edebug-eval-buffer)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3953 (erase-buffer)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3954 (while edebug-eval-list-temp
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3955 (prin1 (car edebug-eval-list-temp)) (terpri)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3956 (prin1 (car edebug-eval-result-list)) (terpri)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3957 (princ edebug-comment-line)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3958 (setq edebug-eval-list-temp (cdr edebug-eval-list-temp))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3959 (setq edebug-eval-result-list (cdr edebug-eval-result-list)))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3960 (edebug-pop-to-buffer edebug-eval-buffer)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3961 ))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3962
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3963 (defun edebug-create-eval-buffer ()
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3964 (if (not (and edebug-eval-buffer (buffer-name edebug-eval-buffer)))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3965 (progn
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3966 (set-buffer (setq edebug-eval-buffer (get-buffer-create "*edebug*")))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3967 (edebug-eval-mode))))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3968
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3969 ;; Should generalize this to be callable outside of edebug
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3970 ;; with calls in user functions, e.g. (edebug-eval-display)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3971
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3972 (defun edebug-eval-display (edebug-eval-result-list)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3973 "Display expressions and evaluations in EVAL-LIST.
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3974 It modifies the context by popping up the eval display."
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3975 (if edebug-eval-result-list
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3976 (progn
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3977 (edebug-create-eval-buffer)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3978 (edebug-eval-display-list edebug-eval-result-list)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3979 )))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3980
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3981 (defun edebug-eval-redisplay ()
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3982 "Redisplay eval list in outside environment.
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3983 May only be called from within edebug-recursive-edit."
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3984 (edebug-create-eval-buffer)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3985 (edebug-outside-excursion
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3986 (edebug-eval-display-list (edebug-eval-result-list))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3987 ))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3988
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3989 (defun edebug-visit-eval-list ()
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3990 (interactive)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3991 (edebug-eval-redisplay)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3992 (edebug-pop-to-buffer edebug-eval-buffer))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3993
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3994
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3995 (defun edebug-update-eval-list ()
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3996 "Replace the evaluation list with the sexps now in the eval buffer."
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3997 (interactive)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3998 (let ((starting-point (point))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3999 new-list)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4000 (goto-char (point-min))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4001 ;; get the first expression
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4002 (edebug-skip-whitespace)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4003 (if (not (eobp))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4004 (progn
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4005 (forward-sexp 1)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4006 (setq new-list (cons (edebug-last-sexp) new-list))))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4007
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4008 (while (re-search-forward "^;" nil t)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4009 (forward-line 1)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4010 (skip-chars-forward " \t\n\r")
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4011 (if (and (/= ?\; (following-char))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4012 (not (eobp)))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4013 (progn
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4014 (forward-sexp 1)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4015 (setq new-list (cons (edebug-last-sexp) new-list)))))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4016
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4017 (setq edebug-eval-list (nreverse new-list))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4018 (edebug-eval-redisplay)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4019 (goto-char starting-point)))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4020
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4021
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4022 (defun edebug-delete-eval-item ()
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4023 "Delete the item under point and redisplay."
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4024 ;; could add arg to do repeatedly
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4025 (interactive)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4026 (if (re-search-backward "^;" nil 'nofail)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4027 (forward-line 1))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4028 (delete-region
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4029 (point) (progn (re-search-forward "^;" nil 'nofail)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4030 (beginning-of-line)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4031 (point)))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4032 (edebug-update-eval-list))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4033
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4034
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4035
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4036 (defvar edebug-eval-mode-map nil
20078
0fc1437e7427 (edebug-eval-mode): Nicer mode-name value.
Karl Heuer <kwzh@gnu.org>
parents: 19930
diff changeset
4037 "Keymap for Edebug Eval mode. Superset of Lisp Interaction mode.")
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4038
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4039 (if edebug-eval-mode-map
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4040 nil
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4041 (setq edebug-eval-mode-map (copy-keymap lisp-interaction-mode-map))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4042
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4043 (define-key edebug-eval-mode-map "\C-c\C-w" 'edebug-where)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4044 (define-key edebug-eval-mode-map "\C-c\C-d" 'edebug-delete-eval-item)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4045 (define-key edebug-eval-mode-map "\C-c\C-u" 'edebug-update-eval-list)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4046 (define-key edebug-eval-mode-map "\C-x\C-e" 'edebug-eval-last-sexp)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4047 (define-key edebug-eval-mode-map "\C-j" 'edebug-eval-print-last-sexp)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4048 )
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4049
17650
dbcf0b5d5265 (edebug-eval-mode): Add a mode-class property.
Richard M. Stallman <rms@gnu.org>
parents: 17458
diff changeset
4050 (put 'edebug-eval-mode 'mode-class 'special)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4051
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4052 (defun edebug-eval-mode ()
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4053 "Mode for evaluation list buffer while in Edebug.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4054
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4055 In addition to all Interactive Emacs Lisp commands there are local and
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4056 global key bindings to several Edebug specific commands. E.g.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4057 `edebug-step-mode' is bound to \\[edebug-step-mode] in the Edebug
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4058 buffer and \\<global-map>\\[edebug-step-mode] in any buffer.
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4059
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4060 Eval list buffer commands:
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4061 \\{edebug-eval-mode-map}
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4062
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4063 Global commands prefixed by global-edebug-prefix:
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4064 \\{global-edebug-map}
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4065 "
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4066 (lisp-interaction-mode)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4067 (setq major-mode 'edebug-eval-mode)
20078
0fc1437e7427 (edebug-eval-mode): Nicer mode-name value.
Karl Heuer <kwzh@gnu.org>
parents: 19930
diff changeset
4068 (setq mode-name "Edebug Eval")
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4069 (use-local-map edebug-eval-mode-map))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4070
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
4071 ;;; Interface with standard debugger.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4072
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4073 ;; (setq debugger 'edebug) ; to use the edebug debugger
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4074 ;; (setq debugger 'debug) ; use the standard debugger
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4075
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4076 ;; Note that debug and its utilities must be byte-compiled to work,
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4077 ;; since they depend on the backtrace looking a certain way. But
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4078 ;; edebug is not dependent on this, yet.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4079
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4080 (defun edebug (&optional edebug-arg-mode &rest debugger-args)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4081 "Replacement for debug.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4082 If we are running an edebugged function,
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4083 show where we last were. Otherwise call debug normally."
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4084 ;; (message "entered: %s depth: %s edebug-recursion-depth: %s"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4085 ;; edebug-entered (recursion-depth) edebug-recursion-depth) (sit-for 1)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4086 (if (and edebug-entered ; anything active?
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4087 (eq (recursion-depth) edebug-recursion-depth))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4088 (let (;; Where were we before the error occurred?
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4089 (edebug-offset-index (car edebug-offset-indices))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4090 ;; Bind variables required by edebug-display
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4091 (edebug-value (car debugger-args))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4092 edebug-breakpoints
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4093 edebug-break-data
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4094 edebug-break-condition
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4095 edebug-global-break
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4096 (edebug-break (null edebug-arg-mode)) ;; if called explicitly
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4097 )
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4098 (edebug-display)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4099 (if (eq edebug-arg-mode 'error)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4100 nil
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4101 edebug-value))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4102
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4103 ;; Otherwise call debug normally.
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4104 ;; Still need to remove extraneous edebug calls from stack.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4105 (apply 'debug edebug-arg-mode debugger-args)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4106 ))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4107
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4108
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4109 (defun edebug-backtrace ()
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4110 "Display a non-working backtrace. Better than nothing..."
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4111 (interactive)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4112 (if (or (not edebug-backtrace-buffer)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4113 (null (buffer-name edebug-backtrace-buffer)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4114 (setq edebug-backtrace-buffer
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4115 (generate-new-buffer "*Backtrace*"))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4116 ;; else, could just display edebug-backtrace-buffer
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4117 )
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4118 (with-output-to-temp-buffer (buffer-name edebug-backtrace-buffer)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4119 (setq edebug-backtrace-buffer standard-output)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4120 (let ((print-escape-newlines t)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4121 (print-length 50)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4122 last-ok-point)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4123 (backtrace)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4124
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4125 ;; Clean up the backtrace.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4126 ;; Not quite right for current edebug scheme.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4127 (set-buffer edebug-backtrace-buffer)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4128 (setq truncate-lines t)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4129 (goto-char (point-min))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4130 (setq last-ok-point (point))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4131 (if t (progn
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4132
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4133 ;; Delete interspersed edebug internals.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4134 (while (re-search-forward "^ \(?edebug" nil t)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4135 (beginning-of-line)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4136 (cond
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4137 ((looking-at "^ \(edebug-after")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4138 ;; Previous lines may contain code, so just delete this line
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4139 (setq last-ok-point (point))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4140 (forward-line 1)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4141 (delete-region last-ok-point (point)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4142
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4143 ((looking-at "^ edebug")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4144 (forward-line 1)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4145 (delete-region last-ok-point (point))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4146 )))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4147 )))))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4148
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4149
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
4150 ;;; Trace display
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4151
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4152 (defun edebug-trace-display (buf-name fmt &rest args)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4153 "In buffer BUF-NAME, display FMT and ARGS at the end and make it visible.
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4154 The buffer is created if it does not exist.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4155 You must include newlines in FMT to break lines, but one newline is appended."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4156 ;; e.g.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4157 ;; (edebug-trace-display "*trace-point*"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4158 ;; "saving: point = %s window-start = %s"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4159 ;; (point) (window-start))
15782
096142df0b36 (edebug-trace-display): Save and restore current buffer.
Richard M. Stallman <rms@gnu.org>
parents: 15302
diff changeset
4160 (let* ((oldbuf (current-buffer))
096142df0b36 (edebug-trace-display): Save and restore current buffer.
Richard M. Stallman <rms@gnu.org>
parents: 15302
diff changeset
4161 (selected-window (selected-window))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4162 (buffer (get-buffer-create buf-name))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4163 buf-window)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4164 ;; (message "before pop-to-buffer") (sit-for 1)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4165 (edebug-pop-to-buffer buffer)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4166 (setq truncate-lines t)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4167 (setq buf-window (selected-window))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4168 (goto-char (point-max))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4169 (insert (apply 'edebug-format fmt args) "\n")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4170 ;; Make it visible.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4171 (vertical-motion (- 1 (window-height)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4172 (set-window-start buf-window (point))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4173 (goto-char (point-max))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4174 ;; (set-window-point buf-window (point))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4175 ;; (edebug-sit-for 0)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4176 (bury-buffer buffer)
15782
096142df0b36 (edebug-trace-display): Save and restore current buffer.
Richard M. Stallman <rms@gnu.org>
parents: 15302
diff changeset
4177 (select-window selected-window)
096142df0b36 (edebug-trace-display): Save and restore current buffer.
Richard M. Stallman <rms@gnu.org>
parents: 15302
diff changeset
4178 (set-buffer oldbuf))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4179 buf-name)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4180
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4181
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4182 (defun edebug-trace (fmt &rest args)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4183 "Convenience call to edebug-trace-display using edebug-trace-buffer"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4184 (apply 'edebug-trace-display edebug-trace-buffer fmt args))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4185
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4186
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
4187 ;;; Frequency count and coverage
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4188
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4189 (defun edebug-display-freq-count ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4190 "Display the frequency count data for each line of the current
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4191 definition. The frequency counts are inserted as comment lines after
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4192 each line, and you can undo all insertions with one `undo' command.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4193
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4194 The counts are inserted starting under the `(' before an expression
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4195 or the `)' after an expression, or on the last char of a symbol.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4196 The counts are only displayed when they differ from previous counts on
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4197 the same line.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4198
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4199 If coverage is being tested, whenever all known results of an expression
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4200 are `eq', the char `=' will be appended after the count
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4201 for that expression. Note that this is always the case for an
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4202 expression only evaluated once.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4203
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4204 To clear the frequency count and coverage data for a definition,
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4205 reinstrument it."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4206 (interactive)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4207 (let* ((function (edebug-form-data-symbol))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4208 (counts (get function 'edebug-freq-count))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4209 (coverages (get function 'edebug-coverage))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4210 (data (get function 'edebug))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4211 (def-mark (car data)) ; mark at def start
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4212 (edebug-points (nth 2 data))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4213 (i (1- (length edebug-points)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4214 (last-index)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4215 (first-index)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4216 (start-of-line)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4217 (start-of-count-line)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4218 (last-count)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4219 )
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4220 (save-excursion
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4221 ;; Traverse in reverse order so offsets are correct.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4222 (while (<= 0 i)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4223 ;; Start at last expression in line.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4224 (goto-char (+ def-mark (aref edebug-points i)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4225 (beginning-of-line)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4226 (setq start-of-line (- (point) def-mark)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4227 last-index i)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4228
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4229 ;; Find all indexes on same line.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4230 (while (and (<= 0 (setq i (1- i)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4231 (<= start-of-line (aref edebug-points i))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4232 ;; Insert all the indices for this line.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4233 (forward-line 1)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4234 (setq start-of-count-line (point)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4235 first-index i ; really last index for line above this one.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4236 last-count -1) ; cause first count to always appear.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4237 (insert ";#")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4238 ;; i == first-index still
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4239 (while (<= (setq i (1+ i)) last-index)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4240 (let ((count (aref counts i))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4241 (coverage (aref coverages i))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4242 (col (save-excursion
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4243 (goto-char (+ (aref edebug-points i) def-mark))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4244 (- (current-column)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4245 (if (= ?\( (following-char)) 0 1)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4246 (insert (make-string
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4247 (max 0 (- col (- (point) start-of-count-line))) ?\ )
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4248 (if (and (< 0 count)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4249 (not (memq coverage
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4250 '(unknown ok-coverage))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4251 "=" "")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4252 (if (= count last-count) "" (int-to-string count))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4253 " ")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4254 (setq last-count count)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4255 (insert "\n")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4256 (setq i first-index)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4257
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4258 (defun edebug-temp-display-freq-count ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4259 "Temporarily display the frequency count data for the current definition.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4260 It is removed when you hit any char."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4261 ;; This seems not to work with Emacs 18.59. It undoes too far.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4262 (interactive)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4263 (let ((buffer-read-only nil))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4264 (undo-boundary)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4265 (edebug-display-freq-count)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4266 (setq unread-command-char (read-char))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4267 (undo)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4268
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4269
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
4270 ;;; Menus
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4271
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4272 (defun edebug-toggle (variable)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4273 (set variable (not (eval variable)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4274 (message "%s: %s" variable (eval variable)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4275
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4276 ;; We have to require easymenu (even for Emacs 18) just so
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4277 ;; the easy-menu-define macro call is compiled correctly.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4278 (require 'easymenu)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4279
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4280 (defconst edebug-mode-menus
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4281 '("Edebug"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4282 "----"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4283 ["Stop" edebug-stop t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4284 ["Step" edebug-step-mode t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4285 ["Next" edebug-next-mode t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4286 ["Trace" edebug-trace-mode t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4287 ["Trace Fast" edebug-Trace-fast-mode t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4288 ["Continue" edebug-continue-mode t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4289 ["Continue Fast" edebug-Continue-fast-mode t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4290 ["Go" edebug-go-mode t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4291 ["Go Nonstop" edebug-Go-nonstop-mode t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4292 "----"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4293 ["Help" edebug-help t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4294 ["Abort" abort-recursive-edit t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4295 ["Quit to Top Level" top-level t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4296 ["Quit Nonstop" edebug-top-level-nonstop t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4297 "----"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4298 ("Jumps"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4299 ["Forward Sexp" edebug-forward-sexp t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4300 ["Step In" edebug-step-in t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4301 ["Step Out" edebug-step-out t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4302 ["Goto Here" edebug-goto-here t])
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4303
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4304 ("Breaks"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4305 ["Set Breakpoint" edebug-set-breakpoint t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4306 ["Unset Breakpoint" edebug-unset-breakpoint t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4307 ["Set Conditional Breakpoint" edebug-set-conditional-breakpoint t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4308 ["Set Global Break Condition" edebug-set-global-break-condition t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4309 ["Show Next Breakpoint" edebug-next-breakpoint t])
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4310
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4311 ("Views"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4312 ["Where am I?" edebug-where t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4313 ["Bounce to Current Point" edebug-bounce-point t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4314 ["View Outside Windows" edebug-view-outside t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4315 ["Previous Result" edebug-previous-result t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4316 ["Show Backtrace" edebug-backtrace t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4317 ["Display Freq Count" edebug-display-freq-count t])
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4318
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4319 ("Eval"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4320 ["Expression" edebug-eval-expression t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4321 ["Last Sexp" edebug-eval-last-sexp t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4322 ["Visit Eval List" edebug-visit-eval-list t])
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4323
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4324 ("Options"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4325 ["Edebug All Defs" edebug-all-defs t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4326 ["Edebug All Forms" edebug-all-forms t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4327 "----"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4328 ["Toggle Tracing" (edebug-toggle 'edebug-trace) t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4329 ["Toggle Coverage Testing" (edebug-toggle 'edebug-test-coverage) t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4330 ["Toggle Window Saving" edebug-toggle-save-windows t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4331 ["Toggle Point Saving"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4332 (edebug-toggle 'edebug-save-displayed-buffer-points) t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4333 ))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4334 "Lemacs style menus for Edebug.")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4335
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4336
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
4337 ;;; Emacs version specific code
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
4338
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4339 ;;; The default for all above is Emacs 18, because it is easier to compile
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4340 ;;; Emacs 18 code in Emacs 19 than vice versa. This default will
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4341 ;;; change once most people are using Emacs 19 or derivatives.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4342
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4343 ;; Epoch specific code is in a separate file: edebug-epoch.el.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4344
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4345 ;; The byte-compiler will complain about changes in number of arguments
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4346 ;; to functions like mark and read-from-minibuffer. These warnings
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4347 ;; may be ignored because the right call should always be made.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4348
6671
5b26038687ed (edebug-emacs-19-specific): Renamed from edebug-fsf19-specific.
Richard M. Stallman <rms@gnu.org>
parents: 6666
diff changeset
4349 (defun edebug-emacs-19-specific ()
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4350
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4351 (defalias 'edebug-window-live-p 'window-live-p)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4352
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4353 ;; Mark takes an argument in Emacs 19.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4354 (defun edebug-mark ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4355 (mark t));; Does this work for lemacs too?
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4356
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4357 (defun edebug-set-conditional-breakpoint (arg condition)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4358 "Set a conditional breakpoint at nearest sexp.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4359 The condition is evaluated in the outside context.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4360 With prefix argument, make it a temporary breakpoint."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4361 ;; (interactive "P\nxCondition: ")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4362 (interactive
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4363 (list
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4364 current-prefix-arg
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4365 ;; Read condition as follows; getting previous condition is cumbersome:
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4366 (let ((edebug-stop-point (edebug-find-stop-point)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4367 (if edebug-stop-point
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4368 (let* ((edebug-def-name (car edebug-stop-point))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4369 (index (cdr edebug-stop-point))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4370 (edebug-data (get edebug-def-name 'edebug))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4371 (edebug-breakpoints (car (cdr edebug-data)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4372 (edebug-break-data (assq index edebug-breakpoints))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4373 (edebug-break-condition (car (cdr edebug-break-data)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4374 (edebug-expression-history
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4375 ;; Prepend the current condition, if any.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4376 (if edebug-break-condition
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4377 (cons edebug-break-condition read-expression-history)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4378 read-expression-history)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4379 (prog1
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4380 (read-from-minibuffer
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4381 "Condition: " nil read-expression-map t
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4382 'edebug-expression-history)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4383 (setq read-expression-history edebug-expression-history)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4384 ))))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4385 (edebug-modify-breakpoint t condition arg))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4386
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4387 (defun edebug-eval-expression (edebug-expr)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4388 "Evaluate an expression in the outside environment.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4389 If interactive, prompt for the expression.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4390 Print result in minibuffer."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4391 (interactive (list (read-from-minibuffer
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4392 "Eval: " nil read-expression-map t
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4393 'read-expression-history)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4394 (princ
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4395 (edebug-outside-excursion
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4396 (setq values (cons (edebug-eval edebug-expr) values))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4397 (edebug-safe-prin1-to-string (car values)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4398
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
4399 (easy-menu-define edebug-menu edebug-mode-map "Edebug menus" edebug-mode-menus)
29202
a1854f8baf0c (edebug-emacs-19-specific): Call
Eli Zaretskii <eliz@gnu.org>
parents: 28567
diff changeset
4400 (if (display-popup-menus-p)
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
4401 (x-popup-menu nil (lookup-key edebug-mode-map [menu-bar Edebug])))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4402 )
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4403
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4404
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4405 (defun edebug-lemacs-specific ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4406
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4407 ;; We need to bind zmacs-regions to nil around all calls to `mark' and
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4408 ;; `mark-marker' but don't bind it to nil before entering a recursive edit,
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4409 ;; that is, don't interfere with the binding the user might see while
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4410 ;; executing a command.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4411
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4412 (defvar zmacs-regions)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4413
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4414 (defun edebug-mark ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4415 (let ((zmacs-regions nil))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4416 (mark)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4417
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4418 (defun edebug-mark-marker ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4419 (let ((zmacs-regions nil));; for lemacs
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4420 (mark-marker)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4421
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4422
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4423 (defun edebug-mode-menu (event)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4424 (interactive "@event")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4425 (popup-menu edebug-mode-menus))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4426
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4427 (define-key edebug-mode-map 'button3 'edebug-mode-menu)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4428 )
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4429
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4430 (defun edebug-emacs-version-specific ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4431 (cond
6671
5b26038687ed (edebug-emacs-19-specific): Renamed from edebug-fsf19-specific.
Richard M. Stallman <rms@gnu.org>
parents: 6666
diff changeset
4432 ((string-match "Lucid" emacs-version);; Lucid Emacs
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4433 (edebug-lemacs-specific))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4434
6671
5b26038687ed (edebug-emacs-19-specific): Renamed from edebug-fsf19-specific.
Richard M. Stallman <rms@gnu.org>
parents: 6666
diff changeset
4435 ((not (string-match "^18" emacs-version))
5b26038687ed (edebug-emacs-19-specific): Renamed from edebug-fsf19-specific.
Richard M. Stallman <rms@gnu.org>
parents: 6666
diff changeset
4436 (edebug-emacs-19-specific))))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4437
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4438 (edebug-emacs-version-specific)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4439
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4440
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
4441 ;;; Byte-compiler
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
4442
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4443 ;; Extension for bytecomp to resolve undefined function references.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4444 ;; Requires new byte compiler.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4445
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4446 ;; Reenable byte compiler warnings about unread-command-char and -event.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4447 ;; Disabled before edebug-recursive-edit.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4448 (eval-when-compile
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4449 (if edebug-unread-command-char-warning
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4450 (put 'unread-command-char 'byte-obsolete-variable
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4451 edebug-unread-command-char-warning))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4452 (if edebug-unread-command-event-warning
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4453 (put 'unread-command-event 'byte-obsolete-variable
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4454 edebug-unread-command-event-warning)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4455
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4456 (eval-when-compile
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4457 ;; The body of eval-when-compile seems to get evaluated with eval-defun.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4458 ;; We only want to evaluate when actually byte compiling.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4459 ;; But it is OK to evaluate as long as byte-compiler has been loaded.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4460 (if (featurep 'byte-compile) (progn
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4461
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4462 (defun byte-compile-resolve-functions (funcs)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4463 "Say it is OK for the named functions to be unresolved."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4464 (mapcar
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4465 (function
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4466 (lambda (func)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4467 (setq byte-compile-unresolved-functions
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4468 (delq (assq func byte-compile-unresolved-functions)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4469 byte-compile-unresolved-functions))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4470 funcs)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4471 nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4472
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4473 '(defun byte-compile-resolve-free-references (vars)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4474 "Say it is OK for the named variables to be referenced."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4475 (mapcar
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4476 (function
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4477 (lambda (var)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4478 (setq byte-compile-free-references
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4479 (delq var byte-compile-free-references))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4480 vars)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4481 nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4482
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4483 '(defun byte-compile-resolve-free-assignments (vars)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4484 "Say it is OK for the named variables to be assigned."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4485 (mapcar
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4486 (function
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4487 (lambda (var)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4488 (setq byte-compile-free-assignments
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4489 (delq var byte-compile-free-assignments))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4490 vars)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4491 nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4492
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4493 (byte-compile-resolve-functions
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4494 '(reporter-submit-bug-report
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
4495 edebug-gensym ;; also in cl.el
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4496 ;; Interfaces to standard functions.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4497 edebug-original-eval-defun
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4498 edebug-original-read
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4499 edebug-get-buffer-window
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4500 edebug-mark
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4501 edebug-mark-marker
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4502 edebug-input-pending-p
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4503 edebug-sit-for
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4504 edebug-prin1-to-string
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4505 edebug-format
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4506 ;; lemacs
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4507 zmacs-deactivate-region
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4508 popup-menu
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4509 ;; CL
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4510 cl-macroexpand-all
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
4511 ;; And believe it or not, the byte compiler doesn't know about:
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4512 byte-compile-resolve-functions
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4513 ))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4514
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4515 '(byte-compile-resolve-free-references
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4516 '(read-expression-history
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4517 read-expression-map))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4518
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4519 '(byte-compile-resolve-free-assignments
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4520 '(read-expression-history))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4521
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4522 )))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4523
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4524
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
4525 ;;; Autoloading of Edebug accessories
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4526
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4527 (if (featurep 'cl)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4528 (add-hook 'edebug-setup-hook
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4529 (function (lambda () (require 'cl-specs))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4530 ;; The following causes cl-specs to be loaded if you load cl.el.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4531 (add-hook 'cl-load-hook
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4532 (function (lambda () (require 'cl-specs)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4533
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
4534 ;;; edebug-cl-read and cl-read are available from liberte@cs.uiuc.edu
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4535 (if (featurep 'cl-read)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4536 (add-hook 'edebug-setup-hook
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4537 (function (lambda () (require 'edebug-cl-read))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4538 ;; The following causes edebug-cl-read to be loaded when you load cl-read.el.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4539 (add-hook 'cl-read-load-hooks
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4540 (function (lambda () (require 'edebug-cl-read)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4541
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4542
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
4543 ;;; Finalize Loading
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4544
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4545 ;;; Finally, hook edebug into the rest of Emacs.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4546 ;;; There are probably some other things that could go here.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4547
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4548 ;; Install edebug read and eval functions.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4549 (edebug-install-read-eval-functions)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4550
3350
c9689f8d0574 Provide edebug.
Richard M. Stallman <rms@gnu.org>
parents: 2629
diff changeset
4551 (provide 'edebug)
c9689f8d0574 Provide edebug.
Richard M. Stallman <rms@gnu.org>
parents: 2629
diff changeset
4552
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4553 ;;; edebug.el ends here