Mercurial > emacs
annotate lisp/emacs-lisp/edebug.el @ 77447:9ce8bfb2f686
* display.texi (Highlight Interactively): Correct description of
hi-lock-file-patterns-policy.
author | Chong Yidong <cyd@stupidchicken.com> |
---|---|
date | Mon, 23 Apr 2007 14:39:16 +0000 |
parents | 4ae89136374d |
children | 935157c0b596 0842cee3ad33 e6fdae9180d4 |
rev | line source |
---|---|
14846 | 1 ;;; edebug.el --- a source-level debugger for Emacs Lisp |
2 | |
64751
5b1a238fcbb4
Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
64406
diff
changeset
|
3 ;; Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1997, 1999, |
75346 | 4 ;; 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. |
661 | 5 |
30805
3cfd3dc474b8
Change authors' mail address.
Gerd Moellmann <gerd@gnu.org>
parents:
30054
diff
changeset
|
6 ;; Author: Daniel LaLiberte <liberte@holonexus.org> |
20832 | 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 | 10 ;; This file is part of GNU Emacs. |
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 | 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 | 23 ;; along with GNU Emacs; see the file COPYING. If not, write to the |
64085 | 24 ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, |
25 ;; Boston, MA 02110-1301, USA. | |
14846 | 26 |
27 ;;; Commentary: | |
28 | |
29 ;; This minor mode allows programmers to step through Emacs Lisp | |
30 ;; source code while executing functions. You can also set | |
31 ;; breakpoints, trace (stopping at each expression), evaluate | |
32 ;; expressions as if outside Edebug, reevaluate and display a list of | |
33 ;; expressions, trap errors normally caught by debug, and display a | |
34 ;; debug style backtrace. | |
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 |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
42 ;; "?" command in edebug to describe other commands. |
20832 | 43 ;; See the Emacs Lisp Reference Manual for more details. |
14846 | 44 |
45 ;; If you wish to change the default edebug global command prefix, change: | |
46 ;; (setq edebug-global-prefix "\C-xX") | |
47 | |
20832 | 48 ;; Edebug was written by |
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 | 54 |
55 ;;; Code: | |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
56 |
14846 | 57 ;;; Bug reporting |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
58 |
33758 | 59 (defalias 'edebug-submit-bug-report 'report-emacs-bug) |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
60 |
14846 | 61 ;;; Options |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
62 |
17414
f967f12c8ec8
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16744
diff
changeset
|
63 (defgroup edebug nil |
64029
d4866c35bebd
(edebug): Finish `defgroup' description with period.
Juanma Barranquero <lekktu@gmail.com>
parents:
63989
diff
changeset
|
64 "A source-level debugger for Emacs Lisp." |
17414
f967f12c8ec8
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16744
diff
changeset
|
65 :group 'lisp) |
f967f12c8ec8
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16744
diff
changeset
|
66 |
f967f12c8ec8
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16744
diff
changeset
|
67 |
f967f12c8ec8
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16744
diff
changeset
|
68 (defcustom edebug-setup-hook nil |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
69 "*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
|
70 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
|
71 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
|
72 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
|
73 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
|
74 :type 'hook |
f967f12c8ec8
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16744
diff
changeset
|
75 :group 'edebug) |
f967f12c8ec8
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16744
diff
changeset
|
76 |
21990
02b32ae7e637
(edebug-all-forms): Add autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents:
21643
diff
changeset
|
77 ;; 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
|
78 ;; 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
|
79 ;; 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
|
80 |
02b32ae7e637
(edebug-all-forms): Add autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents:
21643
diff
changeset
|
81 ;;;###autoload |
17414
f967f12c8ec8
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16744
diff
changeset
|
82 (defcustom edebug-all-defs nil |
63439
de8468617bbf
(edebug-all-defs, edebug-initial-mode, edebug-print-length)
Luc Teirlinck <teirllm@auburn.edu>
parents:
63303
diff
changeset
|
83 "*If non-nil, evaluating defining forms instruments for 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
|
84 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
|
85 `eval-current-buffer'. `eval-region' is also called by |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
86 `eval-last-sexp', and `eval-print-last-sexp'. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
87 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
88 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
|
89 variable. You may wish to make it local to each buffer with |
14846 | 90 \(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
|
91 `emacs-lisp-mode-hook'." |
f967f12c8ec8
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16744
diff
changeset
|
92 :type 'boolean |
f967f12c8ec8
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16744
diff
changeset
|
93 :group 'edebug) |
f967f12c8ec8
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16744
diff
changeset
|
94 |
21990
02b32ae7e637
(edebug-all-forms): Add autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents:
21643
diff
changeset
|
95 ;; 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
|
96 ;; 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
|
97 ;; 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
|
98 |
02b32ae7e637
(edebug-all-forms): Add autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents:
21643
diff
changeset
|
99 ;;;###autoload |
17414
f967f12c8ec8
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16744
diff
changeset
|
100 (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
|
101 "*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
|
102 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
|
103 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
|
104 :type 'boolean |
f967f12c8ec8
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16744
diff
changeset
|
105 :group 'edebug) |
f967f12c8ec8
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16744
diff
changeset
|
106 |
f967f12c8ec8
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16744
diff
changeset
|
107 (defcustom edebug-eval-macro-args nil |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
108 "*Non-nil means all macro call arguments may be evaluated. |
14846 | 109 If this variable is nil, the default, Edebug will *not* wrap |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
110 macro call arguments as if they will be evaluated. |
14846 | 111 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
|
112 So to specify exceptions for macros that have some arguments evaluated |
20832 | 113 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
|
114 :type 'boolean |
f967f12c8ec8
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16744
diff
changeset
|
115 :group 'edebug) |
f967f12c8ec8
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16744
diff
changeset
|
116 |
f967f12c8ec8
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16744
diff
changeset
|
117 (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
|
118 "*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
|
119 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
|
120 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
|
121 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
122 If the value is a list, only the listed windows are saved and |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
123 restored. |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
124 |
17414
f967f12c8ec8
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16744
diff
changeset
|
125 `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
|
126 :type '(choice boolean (repeat string)) |
f967f12c8ec8
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16744
diff
changeset
|
127 :group 'edebug) |
f967f12c8ec8
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16744
diff
changeset
|
128 |
f967f12c8ec8
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16744
diff
changeset
|
129 (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
|
130 "*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
|
131 |
f1d73d12436e
checked in with -k by liberte at 1994/04/09 20:57:56
Daniel LaLiberte <liberte@gnu.org>
parents:
6732
diff
changeset
|
132 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
|
133 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
|
134 in a non-selected window. If Edebug or the user then selects the |
661 | 135 window, the buffer's point will be changed to the window's point. |
136 | |
6761
f1d73d12436e
checked in with -k by liberte at 1994/04/09 20:57:56
Daniel LaLiberte <liberte@gnu.org>
parents:
6732
diff
changeset
|
137 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
|
138 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
|
139 it." |
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-initial-mode 'step |
63439
de8468617bbf
(edebug-all-defs, edebug-initial-mode, edebug-print-length)
Luc Teirlinck <teirllm@auburn.edu>
parents:
63303
diff
changeset
|
144 "*Initial execution mode for Edebug, if non-nil. |
de8468617bbf
(edebug-all-defs, edebug-initial-mode, edebug-print-length)
Luc Teirlinck <teirllm@auburn.edu>
parents:
63303
diff
changeset
|
145 If this variable is non-nil, it specifies the initial execution mode |
de8468617bbf
(edebug-all-defs, edebug-initial-mode, edebug-print-length)
Luc Teirlinck <teirllm@auburn.edu>
parents:
63303
diff
changeset
|
146 for Edebug when it is first activated. Possible values are step, next, |
de8468617bbf
(edebug-all-defs, edebug-initial-mode, edebug-print-length)
Luc Teirlinck <teirllm@auburn.edu>
parents:
63303
diff
changeset
|
147 go, Go-nonstop, trace, Trace-fast, continue, and Continue-fast." |
17414
f967f12c8ec8
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16744
diff
changeset
|
148 :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
|
149 (const Go-nonstop) (const trace) |
f967f12c8ec8
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16744
diff
changeset
|
150 (const Trace-fast) (const continue) |
23587
26749ef98f6c
(edebug-initial-mode): Fix customize type.
Andreas Schwab <schwab@suse.de>
parents:
21990
diff
changeset
|
151 (const Continue-fast)) |
17414
f967f12c8ec8
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16744
diff
changeset
|
152 :group 'edebug) |
f967f12c8ec8
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16744
diff
changeset
|
153 |
f967f12c8ec8
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16744
diff
changeset
|
154 (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
|
155 "*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
|
156 Tracing output is displayed in a buffer named `*edebug-trace*', one |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
157 function entry or exit per line, indented by the recursion level. |
6761
f1d73d12436e
checked in with -k by liberte at 1994/04/09 20:57:56
Daniel LaLiberte <liberte@gnu.org>
parents:
6732
diff
changeset
|
158 |
f1d73d12436e
checked in with -k by liberte at 1994/04/09 20:57:56
Daniel LaLiberte <liberte@gnu.org>
parents:
6732
diff
changeset
|
159 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
|
160 and `edebug-print-trace-after'." |
f967f12c8ec8
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16744
diff
changeset
|
161 :type 'boolean |
f967f12c8ec8
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16744
diff
changeset
|
162 :group 'edebug) |
f967f12c8ec8
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16744
diff
changeset
|
163 |
f967f12c8ec8
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16744
diff
changeset
|
164 (defcustom edebug-test-coverage nil |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
165 "*If non-nil, Edebug tests coverage of all expressions debugged. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
166 This is done by comparing the result of each expression |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
167 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
|
168 results are found. |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
169 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
170 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
|
171 coverage information for a definition." |
f967f12c8ec8
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16744
diff
changeset
|
172 :type 'boolean |
f967f12c8ec8
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16744
diff
changeset
|
173 :group 'edebug) |
f967f12c8ec8
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16744
diff
changeset
|
174 |
f967f12c8ec8
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16744
diff
changeset
|
175 (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
|
176 "*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
|
177 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
|
178 :type 'boolean |
f967f12c8ec8
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16744
diff
changeset
|
179 :group 'edebug) |
f967f12c8ec8
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16744
diff
changeset
|
180 |
f967f12c8ec8
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16744
diff
changeset
|
181 |
f967f12c8ec8
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16744
diff
changeset
|
182 (defcustom edebug-print-length 50 |
63439
de8468617bbf
(edebug-all-defs, edebug-initial-mode, edebug-print-length)
Luc Teirlinck <teirllm@auburn.edu>
parents:
63303
diff
changeset
|
183 "*Default value of `print-length' for printing results in Edebug." |
17414
f967f12c8ec8
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16744
diff
changeset
|
184 :type 'integer |
f967f12c8ec8
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16744
diff
changeset
|
185 :group 'edebug) |
f967f12c8ec8
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16744
diff
changeset
|
186 (defcustom edebug-print-level 50 |
63439
de8468617bbf
(edebug-all-defs, edebug-initial-mode, edebug-print-length)
Luc Teirlinck <teirllm@auburn.edu>
parents:
63303
diff
changeset
|
187 "*Default value of `print-level' for printing results in Edebug." |
17414
f967f12c8ec8
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16744
diff
changeset
|
188 :type 'integer |
f967f12c8ec8
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16744
diff
changeset
|
189 :group 'edebug) |
f967f12c8ec8
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16744
diff
changeset
|
190 (defcustom edebug-print-circle t |
63439
de8468617bbf
(edebug-all-defs, edebug-initial-mode, edebug-print-length)
Luc Teirlinck <teirllm@auburn.edu>
parents:
63303
diff
changeset
|
191 "*Default value of `print-circle' for printing results in Edebug." |
17414
f967f12c8ec8
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16744
diff
changeset
|
192 :type 'boolean |
f967f12c8ec8
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16744
diff
changeset
|
193 :group 'edebug) |
f967f12c8ec8
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16744
diff
changeset
|
194 |
f967f12c8ec8
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16744
diff
changeset
|
195 (defcustom edebug-unwrap-results nil |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
196 "*Non-nil if Edebug should unwrap results of expressions. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
197 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
|
198 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
|
199 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
|
200 :type 'boolean |
f967f12c8ec8
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16744
diff
changeset
|
201 :group 'edebug) |
f967f12c8ec8
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16744
diff
changeset
|
202 |
f967f12c8ec8
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16744
diff
changeset
|
203 (defcustom edebug-on-error t |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
204 "*Value bound to `debug-on-error' while Edebug is active. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
205 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
206 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
|
207 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
208 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
|
209 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
|
210 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
|
211 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
|
212 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
|
213 :type '(choice (const :tag "off") |
26749ef98f6c
(edebug-initial-mode): Fix customize type.
Andreas Schwab <schwab@suse.de>
parents:
21990
diff
changeset
|
214 (repeat :menu-tag "When" |
26749ef98f6c
(edebug-initial-mode): Fix customize type.
Andreas Schwab <schwab@suse.de>
parents:
21990
diff
changeset
|
215 :value (nil) |
26749ef98f6c
(edebug-initial-mode): Fix customize type.
Andreas Schwab <schwab@suse.de>
parents:
21990
diff
changeset
|
216 (symbol :format "%v")) |
26749ef98f6c
(edebug-initial-mode): Fix customize type.
Andreas Schwab <schwab@suse.de>
parents:
21990
diff
changeset
|
217 (const :tag "always" t)) |
17414
f967f12c8ec8
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16744
diff
changeset
|
218 :group 'edebug) |
f967f12c8ec8
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16744
diff
changeset
|
219 |
f967f12c8ec8
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16744
diff
changeset
|
220 (defcustom edebug-on-quit t |
f967f12c8ec8
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16744
diff
changeset
|
221 "*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
|
222 :type 'boolean |
f967f12c8ec8
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16744
diff
changeset
|
223 :group 'edebug) |
f967f12c8ec8
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16744
diff
changeset
|
224 |
f967f12c8ec8
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16744
diff
changeset
|
225 (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
|
226 "*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
|
227 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
|
228 :type 'sexp |
f967f12c8ec8
Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16744
diff
changeset
|
229 :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
|
230 |
18376
9ae76ef113f6
(edebug-sit-for-seconds): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
18017
diff
changeset
|
231 (defcustom edebug-sit-for-seconds 1 |
9ae76ef113f6
(edebug-sit-for-seconds): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
18017
diff
changeset
|
232 "*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
|
233 :type 'number |
9ae76ef113f6
(edebug-sit-for-seconds): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
18017
diff
changeset
|
234 :group 'edebug) |
9ae76ef113f6
(edebug-sit-for-seconds): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
18017
diff
changeset
|
235 |
14846 | 236 ;;; Form spec utilities. |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
237 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
238 (defmacro def-edebug-form-spec (symbol spec-form) |
64406
3b29f20942e2
(def-edebug-form-spec): Add obsolescence info and delete redundant message. Doc
Juanma Barranquero <lekktu@gmail.com>
parents:
64222
diff
changeset
|
239 "For compatibility with old version." |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
240 (def-edebug-spec symbol (eval spec-form))) |
64406
3b29f20942e2
(def-edebug-form-spec): Add obsolescence info and delete redundant message. Doc
Juanma Barranquero <lekktu@gmail.com>
parents:
64222
diff
changeset
|
241 (make-obsolete 'def-edebug-form-spec 'def-edebug-spec "22.1") |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
242 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
243 (defun get-edebug-spec (symbol) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
244 ;; Get the spec of symbol resolving all indirection. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
245 (let ((edebug-form-spec (get symbol 'edebug-form-spec)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
246 indirect) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
247 (while (and (symbolp edebug-form-spec) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
248 (setq indirect (get edebug-form-spec 'edebug-form-spec))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
249 ;; (edebug-trace "indirection: %s" edebug-form-spec) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
250 (setq edebug-form-spec indirect)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
251 edebug-form-spec |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
252 )) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
253 |
70003
5fd1441a60f9
(edebug-basic-spec): New function for vetting file-local form specs.
Eli Zaretskii <eliz@gnu.org>
parents:
69255
diff
changeset
|
254 ;;;###autoload |
5fd1441a60f9
(edebug-basic-spec): New function for vetting file-local form specs.
Eli Zaretskii <eliz@gnu.org>
parents:
69255
diff
changeset
|
255 (defun edebug-basic-spec (spec) |
5fd1441a60f9
(edebug-basic-spec): New function for vetting file-local form specs.
Eli Zaretskii <eliz@gnu.org>
parents:
69255
diff
changeset
|
256 "Return t if SPEC uses only extant spec symbols. |
5fd1441a60f9
(edebug-basic-spec): New function for vetting file-local form specs.
Eli Zaretskii <eliz@gnu.org>
parents:
69255
diff
changeset
|
257 An extant spec symbol is a symbol that is not a function and has a |
5fd1441a60f9
(edebug-basic-spec): New function for vetting file-local form specs.
Eli Zaretskii <eliz@gnu.org>
parents:
69255
diff
changeset
|
258 `edebug-form-spec' property." |
5fd1441a60f9
(edebug-basic-spec): New function for vetting file-local form specs.
Eli Zaretskii <eliz@gnu.org>
parents:
69255
diff
changeset
|
259 (cond ((listp spec) |
5fd1441a60f9
(edebug-basic-spec): New function for vetting file-local form specs.
Eli Zaretskii <eliz@gnu.org>
parents:
69255
diff
changeset
|
260 (catch 'basic |
5fd1441a60f9
(edebug-basic-spec): New function for vetting file-local form specs.
Eli Zaretskii <eliz@gnu.org>
parents:
69255
diff
changeset
|
261 (while spec |
5fd1441a60f9
(edebug-basic-spec): New function for vetting file-local form specs.
Eli Zaretskii <eliz@gnu.org>
parents:
69255
diff
changeset
|
262 (unless (edebug-basic-spec (car spec)) (throw 'basic nil)) |
5fd1441a60f9
(edebug-basic-spec): New function for vetting file-local form specs.
Eli Zaretskii <eliz@gnu.org>
parents:
69255
diff
changeset
|
263 (setq spec (cdr spec))) |
5fd1441a60f9
(edebug-basic-spec): New function for vetting file-local form specs.
Eli Zaretskii <eliz@gnu.org>
parents:
69255
diff
changeset
|
264 t)) |
5fd1441a60f9
(edebug-basic-spec): New function for vetting file-local form specs.
Eli Zaretskii <eliz@gnu.org>
parents:
69255
diff
changeset
|
265 ((symbolp spec) |
5fd1441a60f9
(edebug-basic-spec): New function for vetting file-local form specs.
Eli Zaretskii <eliz@gnu.org>
parents:
69255
diff
changeset
|
266 (unless (functionp spec) (get spec 'edebug-form-spec))))) |
5fd1441a60f9
(edebug-basic-spec): New function for vetting file-local form specs.
Eli Zaretskii <eliz@gnu.org>
parents:
69255
diff
changeset
|
267 |
14846 | 268 ;;; Utilities |
269 | |
270 ;; Define edebug-gensym - from old cl.el | |
271 (defvar edebug-gensym-index 0 | |
272 "Integer used by `edebug-gensym' to produce new names.") | |
273 | |
274 (defun edebug-gensym (&optional prefix) | |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
275 "Generate a fresh uninterned symbol. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
276 There is an optional argument, PREFIX. PREFIX is the |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
277 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
|
278 except when debugging needs suggest otherwise." |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
279 (if (null prefix) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
280 (setq prefix "G")) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
281 (let ((newsymbol nil) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
282 (newname "")) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
283 (while (not newsymbol) |
14846 | 284 (setq newname (concat prefix (int-to-string edebug-gensym-index))) |
285 (setq edebug-gensym-index (+ edebug-gensym-index 1)) | |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
286 (if (not (intern-soft newname)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
287 (setq newsymbol (make-symbol newname)))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
288 newsymbol)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
289 |
14846 | 290 (defun edebug-lambda-list-keywordp (object) |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
291 "Return t if OBJECT is a lambda list keyword. |
14846 | 292 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
|
293 (and (symbolp object) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
294 (= ?& (aref (symbol-name object) 0)))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
295 |
661 | 296 |
297 (defun edebug-last-sexp () | |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
298 ;; Return the last sexp before point in current buffer. |
14846 | 299 ;; Assumes Emacs Lisp syntax is active. |
661 | 300 (car |
301 (read-from-string | |
302 (buffer-substring | |
303 (save-excursion | |
304 (forward-sexp -1) | |
305 (point)) | |
306 (point))))) | |
307 | |
308 (defun edebug-window-list () | |
14846 | 309 "Return a list of windows, in order of `next-window'." |
310 ;; This doesn't work for epoch. | |
30000
323c0e2c2032
(edebug-window-live-p, edebug-window-list)
Gerd Moellmann <gerd@gnu.org>
parents:
29202
diff
changeset
|
311 (let (window-list) |
51321
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
312 (walk-windows (lambda (w) (push w window-list))) |
661 | 313 (nreverse window-list))) |
314 | |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
315 ;; Not used. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
316 '(defun edebug-two-window-p () |
661 | 317 "Return t if there are two windows." |
318 (and (not (one-window-p)) | |
319 (eq (selected-window) | |
320 (next-window (next-window (selected-window)))))) | |
321 | |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
322 (defsubst edebug-lookup-function (object) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
323 (while (and (symbolp object) (fboundp object)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
324 (setq object (symbol-function object))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
325 object) |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
326 |
661 | 327 (defun edebug-macrop (object) |
328 "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
|
329 (setq object (edebug-lookup-function object)) |
661 | 330 (if (and (listp object) |
331 (eq 'macro (car object)) | |
51321
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
332 (functionp (cdr object))) |
661 | 333 object)) |
334 | |
335 (defun edebug-sort-alist (alist function) | |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
336 ;; Return the ALIST sorted with comparison function FUNCTION. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
337 ;; This uses 'sort so the sorting is destructive. |
661 | 338 (sort alist (function |
339 (lambda (e1 e2) | |
340 (funcall function (car e1) (car e2)))))) | |
341 | |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
342 ;;(def-edebug-spec edebug-save-restriction t) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
343 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
344 ;; 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
|
345 '(defmacro edebug-save-restriction (&rest body) |
661 | 346 "Evaluate BODY while saving the current buffers restriction. |
347 BODY may change buffer outside of current restriction, unlike | |
348 save-restriction. BODY may change the current buffer, | |
349 and the restriction will be restored to the original buffer, | |
350 and the current buffer remains current. | |
351 Return the result of the last expression in BODY." | |
26519 | 352 `(let ((edebug:s-r-beg (point-min-marker)) |
353 (edebug:s-r-end (point-max-marker))) | |
354 (unwind-protect | |
355 (progn ,@body) | |
356 (save-excursion | |
357 (set-buffer (marker-buffer edebug:s-r-beg)) | |
358 (narrow-to-region edebug:s-r-beg edebug:s-r-end))))) | |
661 | 359 |
14846 | 360 ;;; Display |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
361 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
362 (defconst edebug-trace-buffer "*edebug-trace*" |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
363 "Name of the buffer to put trace info in.") |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
364 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
365 (defun edebug-pop-to-buffer (buffer &optional window) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
366 ;; Like pop-to-buffer, but select window where BUFFER was last shown. |
77165
4ae89136374d
(edebug-pop-to-buffer): Don't select window marked as dedicated.
Martin Rudalics <rudalics@gmx.at>
parents:
76782
diff
changeset
|
367 ;; Select WINDOW if it is provided and still exists. Otherwise, |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
368 ;; if buffer is currently shown in several windows, choose one. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
369 ;; Otherwise, find a new window, possibly splitting one. |
77165
4ae89136374d
(edebug-pop-to-buffer): Don't select window marked as dedicated.
Martin Rudalics <rudalics@gmx.at>
parents:
76782
diff
changeset
|
370 (setq window |
4ae89136374d
(edebug-pop-to-buffer): Don't select window marked as dedicated.
Martin Rudalics <rudalics@gmx.at>
parents:
76782
diff
changeset
|
371 (cond |
4ae89136374d
(edebug-pop-to-buffer): Don't select window marked as dedicated.
Martin Rudalics <rudalics@gmx.at>
parents:
76782
diff
changeset
|
372 ((and (windowp window) (edebug-window-live-p window) |
4ae89136374d
(edebug-pop-to-buffer): Don't select window marked as dedicated.
Martin Rudalics <rudalics@gmx.at>
parents:
76782
diff
changeset
|
373 (eq (window-buffer window) buffer)) |
4ae89136374d
(edebug-pop-to-buffer): Don't select window marked as dedicated.
Martin Rudalics <rudalics@gmx.at>
parents:
76782
diff
changeset
|
374 window) |
4ae89136374d
(edebug-pop-to-buffer): Don't select window marked as dedicated.
Martin Rudalics <rudalics@gmx.at>
parents:
76782
diff
changeset
|
375 ((eq (window-buffer (selected-window)) buffer) |
4ae89136374d
(edebug-pop-to-buffer): Don't select window marked as dedicated.
Martin Rudalics <rudalics@gmx.at>
parents:
76782
diff
changeset
|
376 ;; Selected window already displays BUFFER. |
4ae89136374d
(edebug-pop-to-buffer): Don't select window marked as dedicated.
Martin Rudalics <rudalics@gmx.at>
parents:
76782
diff
changeset
|
377 (selected-window)) |
4ae89136374d
(edebug-pop-to-buffer): Don't select window marked as dedicated.
Martin Rudalics <rudalics@gmx.at>
parents:
76782
diff
changeset
|
378 ((edebug-get-buffer-window buffer)) |
4ae89136374d
(edebug-pop-to-buffer): Don't select window marked as dedicated.
Martin Rudalics <rudalics@gmx.at>
parents:
76782
diff
changeset
|
379 ((one-window-p 'nomini) |
4ae89136374d
(edebug-pop-to-buffer): Don't select window marked as dedicated.
Martin Rudalics <rudalics@gmx.at>
parents:
76782
diff
changeset
|
380 ;; When there's one window only, split it. |
4ae89136374d
(edebug-pop-to-buffer): Don't select window marked as dedicated.
Martin Rudalics <rudalics@gmx.at>
parents:
76782
diff
changeset
|
381 (split-window)) |
4ae89136374d
(edebug-pop-to-buffer): Don't select window marked as dedicated.
Martin Rudalics <rudalics@gmx.at>
parents:
76782
diff
changeset
|
382 ((let ((trace-window (get-buffer-window edebug-trace-buffer))) |
4ae89136374d
(edebug-pop-to-buffer): Don't select window marked as dedicated.
Martin Rudalics <rudalics@gmx.at>
parents:
76782
diff
changeset
|
383 (catch 'found |
4ae89136374d
(edebug-pop-to-buffer): Don't select window marked as dedicated.
Martin Rudalics <rudalics@gmx.at>
parents:
76782
diff
changeset
|
384 (dolist (elt (window-list nil 'nomini)) |
4ae89136374d
(edebug-pop-to-buffer): Don't select window marked as dedicated.
Martin Rudalics <rudalics@gmx.at>
parents:
76782
diff
changeset
|
385 (unless (or (eq elt (selected-window)) (eq elt trace-window) |
4ae89136374d
(edebug-pop-to-buffer): Don't select window marked as dedicated.
Martin Rudalics <rudalics@gmx.at>
parents:
76782
diff
changeset
|
386 (window-dedicated-p elt)) |
4ae89136374d
(edebug-pop-to-buffer): Don't select window marked as dedicated.
Martin Rudalics <rudalics@gmx.at>
parents:
76782
diff
changeset
|
387 ;; Found a non-dedicated window not showing |
4ae89136374d
(edebug-pop-to-buffer): Don't select window marked as dedicated.
Martin Rudalics <rudalics@gmx.at>
parents:
76782
diff
changeset
|
388 ;; `edebug-trace-buffer', use it. |
4ae89136374d
(edebug-pop-to-buffer): Don't select window marked as dedicated.
Martin Rudalics <rudalics@gmx.at>
parents:
76782
diff
changeset
|
389 (throw 'found elt)))))) |
4ae89136374d
(edebug-pop-to-buffer): Don't select window marked as dedicated.
Martin Rudalics <rudalics@gmx.at>
parents:
76782
diff
changeset
|
390 ;; All windows are dedicated or show `edebug-trace-buffer', split |
4ae89136374d
(edebug-pop-to-buffer): Don't select window marked as dedicated.
Martin Rudalics <rudalics@gmx.at>
parents:
76782
diff
changeset
|
391 ;; selected one. |
4ae89136374d
(edebug-pop-to-buffer): Don't select window marked as dedicated.
Martin Rudalics <rudalics@gmx.at>
parents:
76782
diff
changeset
|
392 (t (split-window)))) |
4ae89136374d
(edebug-pop-to-buffer): Don't select window marked as dedicated.
Martin Rudalics <rudalics@gmx.at>
parents:
76782
diff
changeset
|
393 (select-window window) |
4ae89136374d
(edebug-pop-to-buffer): Don't select window marked as dedicated.
Martin Rudalics <rudalics@gmx.at>
parents:
76782
diff
changeset
|
394 (set-window-buffer window buffer) |
4ae89136374d
(edebug-pop-to-buffer): Don't select window marked as dedicated.
Martin Rudalics <rudalics@gmx.at>
parents:
76782
diff
changeset
|
395 (set-window-hscroll window 0);; should this be?? |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
396 ;; 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
|
397 ;;(set-buffer buffer) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
398 ) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
399 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
400 (defun edebug-get-displayed-buffer-points () |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
401 ;; 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
|
402 (let (list) |
323c0e2c2032
(edebug-window-live-p, edebug-window-list)
Gerd Moellmann <gerd@gnu.org>
parents:
29202
diff
changeset
|
403 (walk-windows (lambda (w) |
323c0e2c2032
(edebug-window-live-p, edebug-window-list)
Gerd Moellmann <gerd@gnu.org>
parents:
29202
diff
changeset
|
404 (unless (eq w (selected-window)) |
51321
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
405 (push (cons (window-buffer w) |
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
406 (window-point w)) |
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
407 list)))) |
30000
323c0e2c2032
(edebug-window-live-p, edebug-window-list)
Gerd Moellmann <gerd@gnu.org>
parents:
29202
diff
changeset
|
408 list)) |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
409 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
410 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
411 (defun edebug-set-buffer-points (buffer-points) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
412 ;; Restore the buffer-points created by edebug-get-displayed-buffer-points. |
51321
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
413 (save-current-buffer |
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
414 (mapcar (lambda (buf-point) |
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
415 (when (buffer-live-p (car buf-point)) |
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
416 (set-buffer (car buf-point)) |
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
417 (goto-char (cdr buf-point)))) |
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
418 buffer-points))) |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
419 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
420 (defun edebug-current-windows (which-windows) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
421 ;; Get either a full window configuration or some window information. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
422 (if (listp which-windows) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
423 (mapcar (function (lambda (window) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
424 (if (edebug-window-live-p window) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
425 (list window |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
426 (window-buffer window) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
427 (window-point window) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
428 (window-start window) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
429 (window-hscroll window))))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
430 which-windows) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
431 (current-window-configuration))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
432 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
433 (defun edebug-set-windows (window-info) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
434 ;; Set either a full window configuration or some window information. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
435 (if (listp window-info) |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
436 (mapcar (function |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
437 (lambda (one-window-info) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
438 (if one-window-info |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
439 (apply (function |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
440 (lambda (window buffer point start hscroll) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
441 (if (edebug-window-live-p window) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
442 (progn |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
443 (set-window-buffer window buffer) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
444 (set-window-point window point) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
445 (set-window-start window start) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
446 (set-window-hscroll window hscroll))))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
447 one-window-info)))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
448 window-info) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
449 (set-window-configuration window-info))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
450 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
451 (defalias 'edebug-get-buffer-window 'get-buffer-window) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
452 (defalias 'edebug-sit-for 'sit-for) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
453 (defalias 'edebug-input-pending-p 'input-pending-p) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
454 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
455 |
14846 | 456 ;;; Redefine read and eval functions |
457 ;; read is redefined to maybe instrument forms. | |
458 ;; eval-defun is redefined to check edebug-all-forms and edebug-all-defs. | |
459 | |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
460 ;; Save the original read function |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
461 (or (fboundp 'edebug-original-read) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
462 (defalias 'edebug-original-read (symbol-function 'read))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
463 |
6666
c6430bc570f9
Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents:
6512
diff
changeset
|
464 (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
|
465 "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
|
466 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
|
467 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
|
468 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
|
469 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
|
470 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
|
471 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
|
472 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
|
473 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
|
474 |
c6430bc570f9
Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents:
6512
diff
changeset
|
475 This version, from Edebug, maybe instruments the expression. But the |
14846 | 476 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
|
477 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
|
478 `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
|
479 (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
|
480 (if (eq stream (current-buffer)) |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
481 (edebug-read-and-maybe-wrap-form) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
482 (edebug-original-read stream))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
483 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
484 (or (fboundp 'edebug-original-eval-defun) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
485 (defalias 'edebug-original-eval-defun (symbol-function 'eval-defun))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
486 |
14846 | 487 ;; We should somehow arrange to be able to do this |
488 ;; without actually replacing the eval-defun command. | |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
489 (defun edebug-eval-defun (edebug-it) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
490 "Evaluate the top-level form containing point, or after point. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
491 |
30054
72640301c1fe
(edebug-eval-defun): Make doc string
Gerd Moellmann <gerd@gnu.org>
parents:
30000
diff
changeset
|
492 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
|
493 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
|
494 already has some other value. (Normally `defvar' does not change the |
56004
397f87132b70
(edebug-eval-defun): Add `defface'. Fix docstring.
Juri Linkov <juri@jurta.org>
parents:
55800
diff
changeset
|
495 variable's value if it already has a value.) Treat `defcustom' |
397f87132b70
(edebug-eval-defun): Add `defface'. Fix docstring.
Juri Linkov <juri@jurta.org>
parents:
55800
diff
changeset
|
496 similarly. Reinitialize the face according to `defface' specification. |
30054
72640301c1fe
(edebug-eval-defun): Make doc string
Gerd Moellmann <gerd@gnu.org>
parents:
30000
diff
changeset
|
497 |
72640301c1fe
(edebug-eval-defun): Make doc string
Gerd Moellmann <gerd@gnu.org>
parents:
30000
diff
changeset
|
498 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
|
499 |
72640301c1fe
(edebug-eval-defun): Make doc string
Gerd Moellmann <gerd@gnu.org>
parents:
30000
diff
changeset
|
500 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
|
501 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
|
502 invoked without a prefix argument |
72640301c1fe
(edebug-eval-defun): Make doc string
Gerd Moellmann <gerd@gnu.org>
parents:
30000
diff
changeset
|
503 |
72640301c1fe
(edebug-eval-defun): Make doc string
Gerd Moellmann <gerd@gnu.org>
parents:
30000
diff
changeset
|
504 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
|
505 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
|
506 instrumented, just FUNCTION is printed. |
72640301c1fe
(edebug-eval-defun): Make doc string
Gerd Moellmann <gerd@gnu.org>
parents:
30000
diff
changeset
|
507 |
72640301c1fe
(edebug-eval-defun): Make doc string
Gerd Moellmann <gerd@gnu.org>
parents:
30000
diff
changeset
|
508 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
|
509 the minibuffer." |
661 | 510 (interactive "P") |
14846 | 511 (let* ((edebugging (not (eq (not edebug-it) (not edebug-all-defs)))) |
512 (edebug-result) | |
513 (form | |
514 (let ((edebug-all-forms edebugging) | |
515 (edebug-all-defs (eq edebug-all-defs (not edebug-it)))) | |
516 (edebug-read-top-level-form)))) | |
32227 | 517 ;; This should be consistent with `eval-defun-1', but not the |
44518
952fba35f036
(edebug-eval-defun): Don't use defconst on variables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41175
diff
changeset
|
518 ;; same, since that gets a macroexpanded form. |
24024
2981304f5015
(edebug-eval-defun): Deal with defcustom
Dave Love <fx@gnu.org>
parents:
23587
diff
changeset
|
519 (cond ((and (eq (car form) 'defvar) |
2981304f5015
(edebug-eval-defun): Deal with defcustom
Dave Love <fx@gnu.org>
parents:
23587
diff
changeset
|
520 (cdr-safe (cdr-safe form))) |
2981304f5015
(edebug-eval-defun): Deal with defcustom
Dave Love <fx@gnu.org>
parents:
23587
diff
changeset
|
521 ;; Force variable to be bound. |
44518
952fba35f036
(edebug-eval-defun): Don't use defconst on variables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41175
diff
changeset
|
522 (makunbound (nth 1 form))) |
24024
2981304f5015
(edebug-eval-defun): Deal with defcustom
Dave Love <fx@gnu.org>
parents:
23587
diff
changeset
|
523 ((and (eq (car form) 'defcustom) |
2981304f5015
(edebug-eval-defun): Deal with defcustom
Dave Love <fx@gnu.org>
parents:
23587
diff
changeset
|
524 (default-boundp (nth 1 form))) |
2981304f5015
(edebug-eval-defun): Deal with defcustom
Dave Love <fx@gnu.org>
parents:
23587
diff
changeset
|
525 ;; Force variable to be bound. |
56004
397f87132b70
(edebug-eval-defun): Add `defface'. Fix docstring.
Juri Linkov <juri@jurta.org>
parents:
55800
diff
changeset
|
526 (set-default (nth 1 form) (eval (nth 2 form)))) |
397f87132b70
(edebug-eval-defun): Add `defface'. Fix docstring.
Juri Linkov <juri@jurta.org>
parents:
55800
diff
changeset
|
527 ((eq (car form) 'defface) |
397f87132b70
(edebug-eval-defun): Add `defface'. Fix docstring.
Juri Linkov <juri@jurta.org>
parents:
55800
diff
changeset
|
528 ;; Reset the face. |
63639 | 529 (setq face-new-frame-defaults |
530 (assq-delete-all (nth 1 form) face-new-frame-defaults)) | |
56004
397f87132b70
(edebug-eval-defun): Add `defface'. Fix docstring.
Juri Linkov <juri@jurta.org>
parents:
55800
diff
changeset
|
531 (put (nth 1 form) 'face-defface-spec nil) |
63639 | 532 ;; See comments in `eval-defun-1' for purpose of code below |
533 (setq form (prog1 `(prog1 ,form | |
534 (put ',(nth 1 form) 'saved-face | |
535 ',(get (nth 1 form) 'saved-face)) | |
536 (put ',(nth 1 form) 'customized-face | |
63989
a1d03660a223
(edebug-eval-defun): Remove unnecessary quotes.
Juri Linkov <juri@jurta.org>
parents:
63639
diff
changeset
|
537 ,(nth 2 form))) |
63639 | 538 (put (nth 1 form) 'saved-face nil))))) |
14846 | 539 (setq edebug-result (eval form)) |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
540 (if (not edebugging) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
541 (princ edebug-result) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
542 edebug-result))) |
661 | 543 |
544 | |
727 | 545 ;;;###autoload |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
546 (defalias 'edebug-defun 'edebug-eval-top-level-form) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
547 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
548 ;;;###autoload |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
549 (defun edebug-eval-top-level-form () |
46784
546f1e0c46c9
(edebug-eval-top-level-form): Use eval-expression.
Richard M. Stallman <rms@gnu.org>
parents:
46716
diff
changeset
|
550 "Evaluate the top level form point is in, stepping through with Edebug. |
546f1e0c46c9
(edebug-eval-top-level-form): Use eval-expression.
Richard M. Stallman <rms@gnu.org>
parents:
46716
diff
changeset
|
551 This is like `eval-defun' except that it steps the code for Edebug |
546f1e0c46c9
(edebug-eval-top-level-form): Use eval-expression.
Richard M. Stallman <rms@gnu.org>
parents:
46716
diff
changeset
|
552 before evaluating it. It displays the value in the echo area |
546f1e0c46c9
(edebug-eval-top-level-form): Use eval-expression.
Richard M. Stallman <rms@gnu.org>
parents:
46716
diff
changeset
|
553 using `eval-expression' (which see). |
546f1e0c46c9
(edebug-eval-top-level-form): Use eval-expression.
Richard M. Stallman <rms@gnu.org>
parents:
46716
diff
changeset
|
554 |
546f1e0c46c9
(edebug-eval-top-level-form): Use eval-expression.
Richard M. Stallman <rms@gnu.org>
parents:
46716
diff
changeset
|
555 If you do this on a function definition |
546f1e0c46c9
(edebug-eval-top-level-form): Use eval-expression.
Richard M. Stallman <rms@gnu.org>
parents:
46716
diff
changeset
|
556 such as a defun or defmacro, it defines the function and instruments |
546f1e0c46c9
(edebug-eval-top-level-form): Use eval-expression.
Richard M. Stallman <rms@gnu.org>
parents:
46716
diff
changeset
|
557 its definition for Edebug, so it will do Edebug stepping when called |
546f1e0c46c9
(edebug-eval-top-level-form): Use eval-expression.
Richard M. Stallman <rms@gnu.org>
parents:
46716
diff
changeset
|
558 later. It displays `Edebug: FUNCTION' in the echo area to indicate |
546f1e0c46c9
(edebug-eval-top-level-form): Use eval-expression.
Richard M. Stallman <rms@gnu.org>
parents:
46716
diff
changeset
|
559 that FUNCTION is now instrumented for Edebug. |
546f1e0c46c9
(edebug-eval-top-level-form): Use eval-expression.
Richard M. Stallman <rms@gnu.org>
parents:
46716
diff
changeset
|
560 |
546f1e0c46c9
(edebug-eval-top-level-form): Use eval-expression.
Richard M. Stallman <rms@gnu.org>
parents:
46716
diff
changeset
|
561 If the current defun is actually a call to `defvar' or `defcustom', |
546f1e0c46c9
(edebug-eval-top-level-form): Use eval-expression.
Richard M. Stallman <rms@gnu.org>
parents:
46716
diff
changeset
|
562 evaluating it this way resets the variable using its initial value |
546f1e0c46c9
(edebug-eval-top-level-form): Use eval-expression.
Richard M. Stallman <rms@gnu.org>
parents:
46716
diff
changeset
|
563 expression even if the variable already has some other value. |
546f1e0c46c9
(edebug-eval-top-level-form): Use eval-expression.
Richard M. Stallman <rms@gnu.org>
parents:
46716
diff
changeset
|
564 \(Normally `defvar' and `defcustom' do not alter the value if there |
546f1e0c46c9
(edebug-eval-top-level-form): Use eval-expression.
Richard M. Stallman <rms@gnu.org>
parents:
46716
diff
changeset
|
565 already is one.)" |
661 | 566 (interactive) |
46784
546f1e0c46c9
(edebug-eval-top-level-form): Use eval-expression.
Richard M. Stallman <rms@gnu.org>
parents:
46716
diff
changeset
|
567 (eval-expression |
14846 | 568 ;; 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
|
569 ;; 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
|
570 (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
|
571 (edebug-all-defs t)) |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
572 (edebug-read-top-level-form)))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
573 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
574 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
575 (defun edebug-read-top-level-form () |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
576 (let ((starting-point (point))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
577 (end-of-defun) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
578 (beginning-of-defun) |
661 | 579 (prog1 |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
580 (edebug-read-and-maybe-wrap-form) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
581 ;; Recover point, but only if no error occurred. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
582 (goto-char starting-point)))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
583 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
584 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
585 ;; Compatibility with old versions. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
586 (defalias 'edebug-all-defuns 'edebug-all-defs) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
587 |
67780
6f62623c8c61
(edebug-all-defs, edebug-all-forms): Add autoload cookies.
Juri Linkov <juri@jurta.org>
parents:
67635
diff
changeset
|
588 ;;;###autoload |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
589 (defun edebug-all-defs () |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
590 "Toggle edebugging of all definitions." |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
591 (interactive) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
592 (setq edebug-all-defs (not edebug-all-defs)) |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
593 (message "Edebugging all definitions is %s." |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
594 (if edebug-all-defs "on" "off"))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
595 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
596 |
67780
6f62623c8c61
(edebug-all-defs, edebug-all-forms): Add autoload cookies.
Juri Linkov <juri@jurta.org>
parents:
67635
diff
changeset
|
597 ;;;###autoload |
6512
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)) |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
602 (message "Edebugging all forms is %s." |
6512
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 | 619 ;;; Edebug internal data |
620 | |
621 ;; The internal data that is needed for edebugging is kept in the | |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
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 |
41175
7a8a9f274e2c
(edebug-form-data, edebug-offsets)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40475
diff
changeset
|
626 (defvar edebug-form-data nil) |
6512
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) |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
691 ;; If non-nil, clear ENTRY out of the form data. |
6512
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 |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
695 ;; Instead of this, we could just find all contained forms. |
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
696 ;; (put (car entry) 'edebug nil) ; |
6512
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 | 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. |
41175
7a8a9f274e2c
(edebug-form-data, edebug-offsets)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40475
diff
changeset
|
713 (let ((table (make-char-table 'syntax-table 'symbol)) |
6512
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 | 718 (aset table ?\( 'lparen) |
719 (aset table ?\) 'rparen) | |
720 (aset table ?\' 'quote) | |
14846 | 721 (aset table ?\` 'backquote) |
722 (aset table ?\, 'comma) | |
661 | 723 (aset table ?\" 'string) |
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 | 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 | 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 | 732 |
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 | 735 ;; lparen, rparen, dot, quote, backquote, comma, string, char, vector, |
736 ;; or symbol. | |
661 | 737 (edebug-skip-whitespace) |
25056 | 738 (if (and (eq (following-char) ?.) |
739 (save-excursion | |
740 (forward-char 1) | |
57959
47b64fe4daa8
(edebug-next-token-class): Allow all symbol-constituent characters
Juri Linkov <juri@jurta.org>
parents:
56004
diff
changeset
|
741 (or (and (eq (aref edebug-read-syntax-table (following-char)) |
47b64fe4daa8
(edebug-next-token-class): Allow all symbol-constituent characters
Juri Linkov <juri@jurta.org>
parents:
56004
diff
changeset
|
742 'symbol) |
47b64fe4daa8
(edebug-next-token-class): Allow all symbol-constituent characters
Juri Linkov <juri@jurta.org>
parents:
56004
diff
changeset
|
743 (not (= (following-char) ?\;))) |
47b64fe4daa8
(edebug-next-token-class): Allow all symbol-constituent characters
Juri Linkov <juri@jurta.org>
parents:
56004
diff
changeset
|
744 (memq (following-char) '(?\, ?\.))))) |
25056 | 745 'symbol |
746 (aref edebug-read-syntax-table (following-char)))) | |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
747 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
748 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
749 (defun edebug-skip-whitespace () |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
750 ;; 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
|
751 (skip-chars-forward " \t\r\n\f") |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
752 (while (= (following-char) ?\;) |
67357
ad09fcb8cef5
(edebug-skip-whitespace): read1:lread.c says
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64751
diff
changeset
|
753 (skip-chars-forward "^\n") ; skip the comment |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
754 (skip-chars-forward " \t\r\n\f"))) |
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 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
757 ;; Mostly obsolete reader; still used in one case. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
758 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
759 (defun edebug-read-sexp () |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
760 ;; Read one sexp from the current buffer starting at point. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
761 ;; 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
|
762 ;; 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
|
763 ;; This works for reading anything legitimate, but it |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
764 ;; is gummed up by parser inconsistencies (bugs?) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
765 (let ((class (edebug-next-token-class))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
766 (cond |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
767 ;; 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
|
768 ;; 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
|
769 ((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
|
770 ((eq class 'string) (edebug-original-read (current-buffer))) |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
771 ((eq class 'quote) (forward-char 1) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
772 (list 'quote (edebug-read-sexp))) |
14846 | 773 ((eq class 'backquote) |
774 (list '\` (edebug-read-sexp))) | |
775 ((eq class 'comma) | |
776 (list '\, (edebug-read-sexp))) | |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
777 (t ; anything else, just read it. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
778 (edebug-original-read (current-buffer)))))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
779 |
14846 | 780 ;;; Offsets for reader |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
781 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
782 ;; Define a structure to represent offset positions of expressions. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
783 ;; Each offset structure looks like: (before . after) for constituents, |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
784 ;; or for structures that have elements: (before <subexpressions> . after) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
785 ;; where the <subexpressions> are the offset structures for subexpressions |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
786 ;; including the head of a list. |
41175
7a8a9f274e2c
(edebug-form-data, edebug-offsets)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40475
diff
changeset
|
787 (defvar edebug-offsets nil) |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
788 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
789 ;; Stack of offset structures in reverse order of the nesting. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
790 ;; This is used to get back to previous levels. |
41175
7a8a9f274e2c
(edebug-form-data, edebug-offsets)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40475
diff
changeset
|
791 (defvar edebug-offsets-stack nil) |
7a8a9f274e2c
(edebug-form-data, edebug-offsets)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40475
diff
changeset
|
792 (defvar edebug-current-offset nil) ; Top of the stack, for convenience. |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
793 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
794 ;; 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
|
795 ;; 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
|
796 ;; must also be condensed. |
41175
7a8a9f274e2c
(edebug-form-data, edebug-offsets)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40475
diff
changeset
|
797 (defvar edebug-read-dotted-list nil) |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
798 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
799 (defsubst edebug-initialize-offsets () |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
800 ;; Reinitialize offset recording. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
801 (setq edebug-current-offset nil)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
802 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
803 (defun edebug-store-before-offset (point) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
804 ;; 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
|
805 (let ((new-offset (list point))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
806 (if edebug-current-offset |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
807 (setcdr edebug-current-offset |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
808 (cons new-offset (cdr edebug-current-offset))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
809 ;; Otherwise, we are at the top level, so initialize. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
810 (setq edebug-offsets new-offset |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
811 edebug-offsets-stack nil |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
812 edebug-read-dotted-list nil)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
813 ;; Cons the new offset to the front of the stack. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
814 (setq edebug-offsets-stack (cons new-offset edebug-offsets-stack) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
815 edebug-current-offset new-offset) |
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 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
818 (defun edebug-store-after-offset (point) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
819 ;; Finalize the current offset struct by reversing it and |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
820 ;; store POINT as the after offset. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
821 (if (not edebug-read-dotted-list) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
822 ;; Just reverse the offsets of all subexpressions. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
823 (setcdr edebug-current-offset (nreverse (cdr edebug-current-offset))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
824 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
825 ;; 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
|
826 (setq edebug-read-dotted-list nil) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
827 ;; Drop the corresponding offset pair. |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
828 ;; That is, nconc the reverse of the rest of the offsets |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
829 ;; with the cdr of last offset. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
830 (setcdr edebug-current-offset |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
831 (nconc (nreverse (cdr (cdr edebug-current-offset))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
832 (cdr (car (cdr edebug-current-offset)))))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
833 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
834 ;; Now append the point using nconc. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
835 (setq edebug-current-offset (nconc edebug-current-offset point)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
836 ;; Pop the stack. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
837 (setq edebug-offsets-stack (cdr edebug-offsets-stack) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
838 edebug-current-offset (car edebug-offsets-stack))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
839 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
840 (defun edebug-ignore-offset () |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
841 ;; Ignore the last created offset pair. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
842 (setcdr edebug-current-offset (cdr (cdr edebug-current-offset)))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
843 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
844 (defmacro edebug-storing-offsets (point &rest body) |
51331
cf0bc7d12c33
(edebug-storing-offsets): Move indent and debug to inside the macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51322
diff
changeset
|
845 (declare (debug (form body)) (indent 1)) |
26519 | 846 `(unwind-protect |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
847 (progn |
26519 | 848 (edebug-store-before-offset ,point) |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
849 ,@body) |
26519 | 850 (edebug-store-after-offset (point)))) |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
851 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
852 |
14846 | 853 ;;; Reader for Emacs Lisp. |
854 | |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
855 ;; Uses edebug-next-token-class (and edebug-skip-whitespace) above. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
856 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
857 (defconst edebug-read-alist |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
858 '((symbol . edebug-read-symbol) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
859 (lparen . edebug-read-list) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
860 (string . edebug-read-string) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
861 (quote . edebug-read-quote) |
14846 | 862 (backquote . edebug-read-backquote) |
863 (comma . edebug-read-comma) | |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
864 (lbracket . edebug-read-vector) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
865 (hash . edebug-read-function) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
866 )) |
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 (defun edebug-read-storing-offsets (stream) |
51331
cf0bc7d12c33
(edebug-storing-offsets): Move indent and debug to inside the macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51322
diff
changeset
|
869 (let (edebug-read-dotted-list) ; see edebug-store-after-offset |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
870 (edebug-storing-offsets (point) |
51331
cf0bc7d12c33
(edebug-storing-offsets): Move indent and debug to inside the macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51322
diff
changeset
|
871 (funcall |
cf0bc7d12c33
(edebug-storing-offsets): Move indent and debug to inside the macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51322
diff
changeset
|
872 (or (cdr (assq (edebug-next-token-class) edebug-read-alist)) |
cf0bc7d12c33
(edebug-storing-offsets): Move indent and debug to inside the macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51322
diff
changeset
|
873 ;; anything else, just read it. |
cf0bc7d12c33
(edebug-storing-offsets): Move indent and debug to inside the macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51322
diff
changeset
|
874 'edebug-original-read) |
cf0bc7d12c33
(edebug-storing-offsets): Move indent and debug to inside the macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51322
diff
changeset
|
875 stream)))) |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
876 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
877 (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
|
878 (edebug-original-read stream)) |
6512
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-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
|
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-quote (stream) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
884 ;; Turn 'thing into (quote thing) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
885 (forward-char 1) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
886 (list |
51331
cf0bc7d12c33
(edebug-storing-offsets): Move indent and debug to inside the macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51322
diff
changeset
|
887 (edebug-storing-offsets (1- (point)) 'quote) |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
888 (edebug-read-storing-offsets stream))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
889 |
51331
cf0bc7d12c33
(edebug-storing-offsets): Move indent and debug to inside the macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51322
diff
changeset
|
890 (defvar edebug-read-backquote-level 0 |
cf0bc7d12c33
(edebug-storing-offsets): Move indent and debug to inside the macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51322
diff
changeset
|
891 "If non-zero, we're in a new-style backquote. |
cf0bc7d12c33
(edebug-storing-offsets): Move indent and debug to inside the macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51322
diff
changeset
|
892 It should never be negative. This controls how we read comma constructs.") |
cf0bc7d12c33
(edebug-storing-offsets): Move indent and debug to inside the macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51322
diff
changeset
|
893 |
14846 | 894 (defun edebug-read-backquote (stream) |
895 ;; Turn `thing into (\` thing) | |
51331
cf0bc7d12c33
(edebug-storing-offsets): Move indent and debug to inside the macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51322
diff
changeset
|
896 (forward-char 1) |
cf0bc7d12c33
(edebug-storing-offsets): Move indent and debug to inside the macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51322
diff
changeset
|
897 (list |
cf0bc7d12c33
(edebug-storing-offsets): Move indent and debug to inside the macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51322
diff
changeset
|
898 (edebug-storing-offsets (1- (point)) '\`) |
cf0bc7d12c33
(edebug-storing-offsets): Move indent and debug to inside the macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51322
diff
changeset
|
899 (let ((edebug-read-backquote-level (1+ edebug-read-backquote-level))) |
cf0bc7d12c33
(edebug-storing-offsets): Move indent and debug to inside the macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51322
diff
changeset
|
900 (edebug-read-storing-offsets stream)))) |
14846 | 901 |
902 (defun edebug-read-comma (stream) | |
903 ;; Turn ,thing into (\, thing). Handle ,@ and ,. also. | |
904 (let ((opoint (point))) | |
905 (forward-char 1) | |
906 (let ((symbol '\,)) | |
907 (cond ((eq (following-char) ?\.) | |
908 (setq symbol '\,\.) | |
909 (forward-char 1)) | |
910 ((eq (following-char) ?\@) | |
911 (setq symbol '\,@) | |
912 (forward-char 1))) | |
913 ;; Generate the same structure of offsets we would have | |
914 ;; if the resulting list appeared verbatim in the input text. | |
51331
cf0bc7d12c33
(edebug-storing-offsets): Move indent and debug to inside the macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51322
diff
changeset
|
915 (if (zerop edebug-read-backquote-level) |
cf0bc7d12c33
(edebug-storing-offsets): Move indent and debug to inside the macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51322
diff
changeset
|
916 (edebug-storing-offsets opoint symbol) |
cf0bc7d12c33
(edebug-storing-offsets): Move indent and debug to inside the macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51322
diff
changeset
|
917 (list |
cf0bc7d12c33
(edebug-storing-offsets): Move indent and debug to inside the macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51322
diff
changeset
|
918 (edebug-storing-offsets opoint symbol) |
cf0bc7d12c33
(edebug-storing-offsets): Move indent and debug to inside the macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51322
diff
changeset
|
919 (let ((edebug-read-backquote-level (1- edebug-read-backquote-level))) |
cf0bc7d12c33
(edebug-storing-offsets): Move indent and debug to inside the macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51322
diff
changeset
|
920 (edebug-read-storing-offsets stream))))))) |
14846 | 921 |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
922 (defun edebug-read-function (stream) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
923 ;; Turn #'thing into (function thing) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
924 (forward-char 1) |
33758 | 925 (cond ((eq ?\' (following-char)) |
926 (forward-char 1) | |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
927 (list |
51331
cf0bc7d12c33
(edebug-storing-offsets): Move indent and debug to inside the macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51322
diff
changeset
|
928 (edebug-storing-offsets (- (point) 2) |
33758 | 929 (if (featurep 'cl) 'function* 'function)) |
930 (edebug-read-storing-offsets stream))) | |
38730
098eb6e24910
(edebug-read-function): Fix handling of
Gerd Moellmann <gerd@gnu.org>
parents:
34854
diff
changeset
|
931 ((memq (following-char) '(?: ?B ?O ?X ?b ?o ?x ?1 ?2 ?3 ?4 ?5 ?6 |
51331
cf0bc7d12c33
(edebug-storing-offsets): Move indent and debug to inside the macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51322
diff
changeset
|
932 ?7 ?8 ?9 ?0)) |
38730
098eb6e24910
(edebug-read-function): Fix handling of
Gerd Moellmann <gerd@gnu.org>
parents:
34854
diff
changeset
|
933 (backward-char 1) |
33758 | 934 (edebug-original-read stream)) |
935 (t (edebug-syntax-error "Bad char after #")))) | |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
936 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
937 (defun edebug-read-list (stream) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
938 (forward-char 1) ; skip \( |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
939 (prog1 |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
940 (let ((elements)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
941 (while (not (memq (edebug-next-token-class) '(rparen dot))) |
51331
cf0bc7d12c33
(edebug-storing-offsets): Move indent and debug to inside the macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51322
diff
changeset
|
942 (if (and (eq (edebug-next-token-class) 'backquote) |
cf0bc7d12c33
(edebug-storing-offsets): Move indent and debug to inside the macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51322
diff
changeset
|
943 (null elements) |
cf0bc7d12c33
(edebug-storing-offsets): Move indent and debug to inside the macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51322
diff
changeset
|
944 (zerop edebug-read-backquote-level)) |
cf0bc7d12c33
(edebug-storing-offsets): Move indent and debug to inside the macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51322
diff
changeset
|
945 (progn |
cf0bc7d12c33
(edebug-storing-offsets): Move indent and debug to inside the macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51322
diff
changeset
|
946 ;; Old style backquote. |
cf0bc7d12c33
(edebug-storing-offsets): Move indent and debug to inside the macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51322
diff
changeset
|
947 (forward-char 1) ; Skip backquote. |
cf0bc7d12c33
(edebug-storing-offsets): Move indent and debug to inside the macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51322
diff
changeset
|
948 ;; Call edebug-storing-offsets here so that we |
cf0bc7d12c33
(edebug-storing-offsets): Move indent and debug to inside the macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51322
diff
changeset
|
949 ;; produce the same offsets we would have had |
cf0bc7d12c33
(edebug-storing-offsets): Move indent and debug to inside the macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51322
diff
changeset
|
950 ;; if the backquote were an ordinary symbol. |
cf0bc7d12c33
(edebug-storing-offsets): Move indent and debug to inside the macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51322
diff
changeset
|
951 (push (edebug-storing-offsets (1- (point)) '\`) elements)) |
cf0bc7d12c33
(edebug-storing-offsets): Move indent and debug to inside the macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51322
diff
changeset
|
952 (push (edebug-read-storing-offsets stream) elements))) |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
953 (setq elements (nreverse elements)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
954 (if (eq 'dot (edebug-next-token-class)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
955 (let (dotted-form) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
956 (forward-char 1) ; skip \. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
957 (setq dotted-form (edebug-read-storing-offsets stream)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
958 elements (nconc elements dotted-form) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
959 (if (not (eq (edebug-next-token-class) 'rparen)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
960 (edebug-syntax-error "Expected `)'")) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
961 (setq edebug-read-dotted-list (listp dotted-form)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
962 )) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
963 elements) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
964 (forward-char 1) ; skip \) |
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 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
967 (defun edebug-read-vector (stream) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
968 (forward-char 1) ; skip \[ |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
969 (prog1 |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
970 (let ((elements)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
971 (while (not (eq 'rbracket (edebug-next-token-class))) |
51331
cf0bc7d12c33
(edebug-storing-offsets): Move indent and debug to inside the macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51322
diff
changeset
|
972 (push (edebug-read-storing-offsets stream) elements)) |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
973 (apply 'vector (nreverse elements))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
974 (forward-char 1) ; skip \] |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
975 )) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
976 |
14846 | 977 ;;; 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
|
978 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
979 (defvar edebug-dotted-spec nil) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
980 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
981 (defun edebug-new-cursor (expressions offsets) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
982 ;; Return a new cursor for EXPRESSIONS with OFFSETS. |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
983 (if (vectorp expressions) |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
984 (setq expressions (append expressions nil))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
985 (cons expressions offsets)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
986 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
987 (defsubst edebug-set-cursor (cursor expressions offsets) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
988 ;; Set the CURSOR's EXPRESSIONS and OFFSETS to the given. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
989 ;; Return the cursor. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
990 (setcar cursor expressions) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
991 (setcdr cursor offsets) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
992 cursor) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
993 |
51332
2607d23dcfe2
Typo (no clue what happened).
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51331
diff
changeset
|
994 (defun edebug-copy-cursor (cursor) |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
995 ;; Copy the cursor using the same object and offsets. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
996 (cons (car cursor) (cdr cursor))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
997 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
998 (defsubst edebug-cursor-expressions (cursor) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
999 (car cursor)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1000 (defsubst edebug-cursor-offsets (cursor) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1001 (cdr cursor)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1002 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1003 (defsubst edebug-empty-cursor (cursor) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1004 ;; 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
|
1005 (null (car cursor))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1006 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1007 (defsubst edebug-top-element (cursor) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1008 ;; Return the top element at the cursor. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1009 ;; Assumes not empty. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1010 (car (car cursor))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1011 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1012 (defun edebug-top-element-required (cursor &rest error) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1013 ;; Check if a dotted form is required. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1014 (if edebug-dotted-spec (edebug-no-match cursor "Dot expected.")) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1015 ;; Check if there is at least one more argument. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1016 (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
|
1017 ;; Return that top element. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1018 (edebug-top-element cursor)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1019 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1020 (defsubst edebug-top-offset (cursor) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1021 ;; Return the top offset pair corresponding to the top element. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1022 (car (cdr cursor))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1023 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1024 (defun edebug-move-cursor (cursor) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1025 ;; 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
|
1026 ;; throw no-match if empty before moving. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1027 ;; This is a violation of the cursor encapsulation, but |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1028 ;; there is plenty of that going on while matching. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1029 ;; The following test should always fail. |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
1030 (if (edebug-empty-cursor cursor) |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1031 (edebug-no-match cursor "Not enough arguments.")) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1032 (setcar cursor (cdr (car cursor))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1033 (setcdr cursor (cdr (cdr cursor))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1034 cursor) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1035 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1036 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1037 (defun edebug-before-offset (cursor) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1038 ;; Return the before offset of the cursor. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1039 ;; If there is nothing left in the offsets, |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
1040 ;; return one less than the offset itself, |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1041 ;; which is the after offset for a list. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1042 (let ((offset (edebug-cursor-offsets cursor))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1043 (if (consp offset) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1044 (car (car offset)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1045 (1- offset)))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1046 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1047 (defun edebug-after-offset (cursor) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1048 ;; Return the after offset of the cursor object. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1049 (let ((offset (edebug-top-offset cursor))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1050 (while (consp offset) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1051 (setq offset (cdr offset))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1052 offset)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1053 |
14846 | 1054 ;;; The Parser |
1055 | |
1056 ;; The top level function for parsing forms is | |
1057 ;; edebug-read-and-maybe-wrap-form; it calls all the rest. It checks the | |
1058 ;; syntax a bit and leaves point at any error it finds, but otherwise | |
1059 ;; should appear to work like eval-defun. | |
1060 | |
1061 ;; The basic plan is to surround each expression with a call to | |
1062 ;; the edebug debugger together with indexes into a table of positions of | |
1063 ;; all expressions. Thus an expression "exp" becomes: | |
1064 | |
1065 ;; (edebug-after (edebug-before 1) 2 exp) | |
1066 | |
1067 ;; When this is evaluated, first point is moved to the beginning of | |
1068 ;; exp at offset 1 of the current function. The expression is | |
1069 ;; evaluated, which may cause more edebug calls, and then point is | |
1070 ;; moved to offset 2 after the end of exp. | |
1071 | |
1072 ;; The highest level expressions of the function are wrapped in a call to | |
1073 ;; edebug-enter, which supplies the function name and the actual | |
1074 ;; arguments to the function. See functions edebug-enter, edebug-before, | |
1075 ;; and edebug-after for more details. | |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1076 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1077 ;; Dynamically bound vars, left unbound, but globally declared. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1078 ;; This is to quiet the byte compiler. |
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 ;; Window data of the highest definition being wrapped. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1081 ;; This data is shared by all embedded definitions. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1082 (defvar edebug-top-window-data) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1083 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1084 (defvar edebug-&optional) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1085 (defvar edebug-&rest) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1086 (defvar edebug-gate nil) ;; whether no-match forces an error. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1087 |
41175
7a8a9f274e2c
(edebug-form-data, edebug-offsets)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40475
diff
changeset
|
1088 (defvar edebug-def-name nil) ; name of definition, used by interactive-form |
7a8a9f274e2c
(edebug-form-data, edebug-offsets)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40475
diff
changeset
|
1089 (defvar edebug-old-def-name nil) ; previous name of containing definition. |
7a8a9f274e2c
(edebug-form-data, edebug-offsets)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40475
diff
changeset
|
1090 |
7a8a9f274e2c
(edebug-form-data, edebug-offsets)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40475
diff
changeset
|
1091 (defvar edebug-error-point nil) |
7a8a9f274e2c
(edebug-form-data, edebug-offsets)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40475
diff
changeset
|
1092 (defvar edebug-best-error nil) |
6512
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 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1095 (defun edebug-read-and-maybe-wrap-form () |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1096 ;; 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
|
1097 ;; 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
|
1098 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1099 ;; Run the setup hook. |
17458
eeff371bfe78
(edebug-read-and-maybe-wrap-form): Protect
Richard M. Stallman <rms@gnu.org>
parents:
17414
diff
changeset
|
1100 ;; 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
|
1101 (let ((temp-hook edebug-setup-hook)) |
eeff371bfe78
(edebug-read-and-maybe-wrap-form): Protect
Richard M. Stallman <rms@gnu.org>
parents:
17414
diff
changeset
|
1102 (setq edebug-setup-hook nil) |
eeff371bfe78
(edebug-read-and-maybe-wrap-form): Protect
Richard M. Stallman <rms@gnu.org>
parents:
17414
diff
changeset
|
1103 (run-hooks 'temp-hook)) |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1104 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1105 (let (result |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1106 edebug-top-window-data |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1107 edebug-def-name;; make sure it is locally nil |
14846 | 1108 ;; I don't like these here!! |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1109 edebug-&optional |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1110 edebug-&rest |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1111 edebug-gate |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1112 edebug-best-error |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1113 edebug-error-point |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1114 no-match |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1115 ;; Do this once here instead of several times. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1116 (max-lisp-eval-depth (+ 800 max-lisp-eval-depth)) |
14846 | 1117 (max-specpdl-size (+ 2000 max-specpdl-size))) |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1118 (setq no-match |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1119 (catch 'no-match |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1120 (setq result (edebug-read-and-maybe-wrap-form1)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1121 nil)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1122 (if no-match |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1123 (apply 'edebug-syntax-error no-match)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1124 result)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1125 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1126 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1127 (defun edebug-read-and-maybe-wrap-form1 () |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1128 (let (spec |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1129 def-kind |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1130 defining-form-p |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1131 def-name |
14846 | 1132 ;; 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
|
1133 ;; calls to edebug-read, they need to be here. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1134 edebug-offsets |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1135 edebug-offsets-stack |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1136 edebug-current-offset ; reset to nil |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1137 ) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1138 (save-excursion |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1139 (if (and (eq 'lparen (edebug-next-token-class)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1140 (eq 'symbol (progn (forward-char 1) (edebug-next-token-class)))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1141 ;; 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
|
1142 (setq def-kind (edebug-original-read (current-buffer)) |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1143 spec (and (symbolp def-kind) (get-edebug-spec def-kind)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1144 defining-form-p (and (listp spec) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1145 (eq '&define (car spec))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1146 ;; This is incorrect in general!! But OK most of the time. |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
1147 def-name (if (and defining-form-p |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1148 (eq 'name (car (cdr spec))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1149 (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
|
1150 (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
|
1151 ;;;(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
|
1152 (cond |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1153 (defining-form-p |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1154 (if (or edebug-all-defs edebug-all-forms) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1155 ;; 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
|
1156 ;; then let edebug-list-form start it. |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
1157 (let ((cursor (edebug-new-cursor |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1158 (list (edebug-read-storing-offsets (current-buffer))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1159 (list edebug-offsets)))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1160 (car |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1161 (edebug-make-form-wrapper |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1162 cursor |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
1163 (edebug-before-offset cursor) |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1164 (1- (edebug-after-offset cursor)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1165 (list (cons (symbol-name def-kind) (cdr spec)))))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1166 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1167 ;; Not edebugging this form, so reset the symbol's edebug |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1168 ;; 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
|
1169 ;; This only works for defs with simple names. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1170 (put def-name 'edebug (point-marker)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1171 ;; Also nil out dependent defs. |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
1172 '(mapcar (function |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1173 (lambda (def) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1174 (put def-name 'edebug nil))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1175 (get def-name 'edebug-dependents)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1176 (edebug-read-sexp))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1177 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1178 ;; If all forms are being edebugged, explicitly wrap it. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1179 (edebug-all-forms |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
1180 (let ((cursor (edebug-new-cursor |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1181 (list (edebug-read-storing-offsets (current-buffer))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1182 (list edebug-offsets)))) |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
1183 (edebug-make-form-wrapper |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1184 cursor |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
1185 (edebug-before-offset cursor) |
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
1186 (edebug-after-offset cursor) |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1187 nil))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1188 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1189 ;; Not a defining form, and not edebugging. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1190 (t (edebug-read-sexp))) |
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 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1193 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1194 (defvar edebug-def-args) ; args of defining form. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1195 (defvar edebug-def-interactive) ; is it an emacs interactive function? |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1196 (defvar edebug-inside-func) ;; whether code is inside function context. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1197 ;; 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
|
1198 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1199 (defun edebug-interactive-p-name () |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1200 ;; 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
|
1201 ;; status of interactive-p for this function. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1202 (intern (format "edebug-%s-interactive-p" edebug-def-name))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1203 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1204 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1205 (defun edebug-wrap-def-body (forms) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1206 "Wrap the FORMS of a definition body." |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1207 (if edebug-def-interactive |
26519 | 1208 `(let ((,(edebug-interactive-p-name) |
1209 (interactive-p))) | |
1210 ,(edebug-make-enter-wrapper forms)) | |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1211 (edebug-make-enter-wrapper forms))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1212 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1213 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1214 (defun edebug-make-enter-wrapper (forms) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1215 ;; Generate the enter wrapper for some forms of a definition. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1216 ;; 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
|
1217 ;; 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
|
1218 ;; 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
|
1219 ;; Do this after parsing since that may find a name. |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
1220 (setq edebug-def-name |
14846 | 1221 (or edebug-def-name edebug-old-def-name (edebug-gensym "edebug-anon"))) |
26519 | 1222 `(edebug-enter |
1223 (quote ,edebug-def-name) | |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
1224 ,(if edebug-inside-func |
26648
2cca1ed12a51
(edebug-make-enter-wrapper): Correct
Gerd Moellmann <gerd@gnu.org>
parents:
26519
diff
changeset
|
1225 `(list |
2cca1ed12a51
(edebug-make-enter-wrapper): Correct
Gerd Moellmann <gerd@gnu.org>
parents:
26519
diff
changeset
|
1226 ;; Doesn't work with more than one def-body!! |
2cca1ed12a51
(edebug-make-enter-wrapper): Correct
Gerd Moellmann <gerd@gnu.org>
parents:
26519
diff
changeset
|
1227 ;; But the list will just be reversed. |
2cca1ed12a51
(edebug-make-enter-wrapper): Correct
Gerd Moellmann <gerd@gnu.org>
parents:
26519
diff
changeset
|
1228 ,@(nreverse edebug-def-args)) |
26519 | 1229 'nil) |
1230 (function (lambda () ,@forms)) | |
1231 )) | |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1232 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1233 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1234 (defvar edebug-form-begin-marker) ; the mark for def being instrumented |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
1235 |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1236 (defvar edebug-offset-index) ; the next available offset index. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1237 (defvar edebug-offset-list) ; the list of offset positions. |
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 (defun edebug-inc-offset (offset) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1240 ;; modifies edebug-offset-index and edebug-offset-list |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1241 ;; accesses edebug-func-marc and buffer point |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1242 (prog1 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1243 edebug-offset-index |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1244 (setq edebug-offset-list (cons (- offset edebug-form-begin-marker) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1245 edebug-offset-list) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1246 edebug-offset-index (1+ edebug-offset-index)))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1247 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1248 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1249 (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
|
1250 ;; Return the edebug form for the current function at offset BEFORE-INDEX |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
1251 ;; given FORM. Looks like: |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1252 ;; (edebug-after (edebug-before BEFORE-INDEX) AFTER-INDEX FORM) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1253 ;; Also increment the offset index for subsequent use. |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
1254 (list 'edebug-after |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1255 (list 'edebug-before before-index) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1256 after-index form)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1257 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1258 (defun edebug-make-after-form (form after-index) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1259 ;; Like edebug-make-before-and-after-form, but only after. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1260 (list 'edebug-after 0 after-index form)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1261 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1262 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1263 (defun edebug-unwrap (sexp) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1264 "Return the unwrapped SEXP or return it as is if it is not wrapped. |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
1265 The SEXP might be the result of wrapping a body, which is a list of |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1266 expressions; a `progn' form will be returned enclosing these forms." |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1267 (if (consp sexp) |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
1268 (cond |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1269 ((eq 'edebug-after (car sexp)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1270 (nth 3 sexp)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1271 ((eq 'edebug-enter (car sexp)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1272 (let ((forms (nthcdr 2 (nth 1 (nth 3 sexp))))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1273 (if (> (length forms) 1) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1274 (cons 'progn forms) ;; could return (values forms) instead. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1275 (car forms)))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1276 (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
|
1277 ) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1278 sexp)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1279 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1280 (defun edebug-unwrap* (sexp) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1281 "Return the sexp recursively unwrapped." |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1282 (let ((new-sexp (edebug-unwrap sexp))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1283 (while (not (eq sexp new-sexp)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1284 (setq sexp new-sexp |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1285 new-sexp (edebug-unwrap sexp))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1286 (if (consp new-sexp) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1287 (mapcar 'edebug-unwrap* new-sexp) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1288 new-sexp))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1289 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1290 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1291 (defun edebug-defining-form (cursor form-begin form-end speclist) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1292 ;; Process the defining form, starting outside the form. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1293 ;; The speclist is a generated list spec that looks like: |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1294 ;; (("def-symbol" defining-form-spec-sans-&define)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1295 ;; Skip the first offset. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1296 (edebug-set-cursor cursor (edebug-cursor-expressions cursor) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1297 (cdr (edebug-cursor-offsets cursor))) |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
1298 (edebug-make-form-wrapper |
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
1299 cursor |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1300 form-begin (1- form-end) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1301 speclist)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1302 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1303 (defun edebug-make-form-wrapper (cursor form-begin form-end |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1304 &optional speclist) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1305 ;; 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
|
1306 ;; 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
|
1307 ;; 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
|
1308 ;; 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
|
1309 (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
|
1310 ;; Set this marker before parsing. |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
1311 (edebug-form-begin-marker |
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
1312 (if form-data-entry |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1313 (edebug-form-data-begin form-data-entry) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1314 ;; Buffer must be current-buffer for this to work: |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1315 (set-marker (make-marker) form-begin)))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1316 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1317 (let (edebug-offset-list |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1318 (edebug-offset-index 0) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1319 result |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1320 ;; For definitions. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1321 ;; (edebug-containing-def-name edebug-def-name) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1322 ;; Get name from form-data, if any. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1323 (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
|
1324 edebug-def-name |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1325 edebug-def-args |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1326 edebug-def-interactive |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1327 edebug-inside-func;; whether wrapped code executes inside a function. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1328 ) |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
1329 |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1330 (setq result |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1331 (if speclist |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1332 (edebug-match cursor speclist) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1333 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1334 ;; else wrap as an enter-form. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1335 (edebug-make-enter-wrapper (list (edebug-form cursor))))) |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
1336 |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1337 ;; Set the name here if it was not set by edebug-make-enter-wrapper. |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
1338 (setq edebug-def-name |
14846 | 1339 (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
|
1340 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1341 ;; Add this def as a dependent of containing def. Buggy. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1342 '(if (and edebug-containing-def-name |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1343 (not (get edebug-containing-def-name 'edebug-dependents))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1344 (put edebug-containing-def-name 'edebug-dependents |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
1345 (cons edebug-def-name |
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
1346 (get edebug-containing-def-name |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1347 'edebug-dependents)))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1348 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1349 ;; 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
|
1350 ;; In the latter case, pointers to the entry remain eq. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1351 (if (not form-data-entry) |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
1352 (setq form-data-entry |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1353 (edebug-make-form-data-entry |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
1354 edebug-def-name |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1355 edebug-form-begin-marker |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1356 ;; Buffer must be current-buffer. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1357 (set-marker (make-marker) form-end) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1358 )) |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
1359 (edebug-set-form-data-entry |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1360 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
|
1361 form-begin form-end)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1362 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1363 ;; (message "defining: %s" edebug-def-name) (sit-for 2) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1364 (edebug-make-top-form-data-entry form-data-entry) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1365 (message "Edebug: %s" edebug-def-name) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1366 ;;(debug edebug-def-name) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1367 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1368 ;; Destructively reverse edebug-offset-list and make vector from it. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1369 (setq edebug-offset-list (vconcat (nreverse edebug-offset-list))) |
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 ;; Side effects on the property list of edebug-def-name. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1372 (edebug-clear-frequency-count edebug-def-name) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1373 (edebug-clear-coverage edebug-def-name) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1374 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1375 ;; Set up the initial window data. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1376 (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
|
1377 (let ((window ;; Find the best window for this buffer. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1378 (or (get-buffer-window (current-buffer)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1379 (selected-window)))) |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
1380 (setq edebug-top-window-data |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1381 (cons window (window-start window))))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1382 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1383 ;; Store the edebug data in symbol's property list. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1384 (put edebug-def-name 'edebug |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1385 ;; A struct or vector would be better here!! |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1386 (list edebug-form-begin-marker |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1387 nil ; clear breakpoints |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1388 edebug-offset-list |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1389 edebug-top-window-data |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1390 )) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1391 result |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1392 ))) |
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 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1395 (defun edebug-clear-frequency-count (name) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1396 ;; Create initial frequency count vector. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1397 ;; 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
|
1398 (put name 'edebug-freq-count |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1399 (make-vector (length edebug-offset-list) 0))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1400 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1401 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1402 (defun edebug-clear-coverage (name) |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
1403 ;; Create initial coverage vector. |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1404 ;; Only need one per expression, but it is simpler to use stop points. |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
1405 (put name 'edebug-coverage |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1406 (make-vector (length edebug-offset-list) 'unknown))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1407 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1408 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1409 (defun edebug-form (cursor) |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
1410 ;; Return the instrumented form for the following form. |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1411 ;; 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
|
1412 (let* ((form (edebug-top-element-required cursor "Expected form")) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1413 (offset (edebug-top-offset cursor))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1414 (prog1 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1415 (cond |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1416 ((consp form) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1417 ;; 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
|
1418 (if (eq 'quote (car form)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1419 form |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1420 (let* ((head (car form)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1421 (spec (and (symbolp head) (get-edebug-spec head))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1422 (new-cursor (edebug-new-cursor form offset))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1423 ;; 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
|
1424 ;; An indirect spec would not work here, yet. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1425 (if (and (consp spec) (eq '&define (car spec))) |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
1426 (edebug-defining-form |
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
1427 new-cursor |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1428 (car offset);; before the form |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
1429 (edebug-after-offset cursor) |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1430 (cons (symbol-name head) (cdr spec))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1431 ;; Wrap a regular form. |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
1432 (edebug-make-before-and-after-form |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1433 (edebug-inc-offset (car offset)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1434 (edebug-list-form new-cursor) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1435 ;; After processing the list form, the new-cursor is left |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1436 ;; with the offset after the form. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1437 (edebug-inc-offset (edebug-cursor-offsets new-cursor)))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1438 ))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1439 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1440 ((symbolp form) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1441 (cond |
14846 | 1442 ;; Check for constant symbols that don't get wrapped. |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1443 ((or (memq form '(t nil)) |
28567
3ed20cb4c9b3
(edebug-keywordp): Remove. Change callers
Dave Love <fx@gnu.org>
parents:
28516
diff
changeset
|
1444 (keywordp form)) |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1445 form) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1446 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1447 (t ;; just a variable |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1448 (edebug-make-after-form form (edebug-inc-offset (cdr offset)))))) |
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 ;; Anything else is self-evaluating. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1451 (t form)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1452 (edebug-move-cursor cursor)))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1453 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1454 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1455 (defsubst edebug-forms (cursor) (edebug-match cursor '(&rest form))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1456 (defsubst edebug-sexps (cursor) (edebug-match cursor '(&rest sexp))) |
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-list-form-args (head cursor) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1459 ;; 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
|
1460 ;; Helper for edebug-list-form |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1461 (let ((spec (get-edebug-spec head))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1462 (cond |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1463 (spec |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1464 (cond |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1465 ((consp spec) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1466 ;; It is a speclist. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1467 (let (edebug-best-error |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1468 edebug-error-point);; This may not be needed. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1469 (edebug-match-sublist cursor spec))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1470 ((eq t spec) (edebug-forms cursor)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1471 ((eq 0 spec) (edebug-sexps cursor)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1472 ((symbolp spec) (funcall spec cursor));; Not used by edebug, |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1473 ; but leave it in for compatibility. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1474 )) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1475 ;; No edebug-form-spec provided. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1476 ((edebug-macrop head) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1477 (if edebug-eval-macro-args |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1478 (edebug-forms cursor) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1479 (edebug-sexps cursor))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1480 (t ;; Otherwise it is a function call. |
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 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1483 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1484 (defun edebug-list-form (cursor) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1485 ;; Return an instrumented form built from the list form. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1486 ;; 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
|
1487 (let ((head (edebug-top-element-required cursor "Expected elements")) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1488 ;; Prevent backtracking whenever instrumenting. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1489 (edebug-gate t) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1490 ;; A list form is never optional because it matches anything. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1491 (edebug-&optional nil) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1492 (edebug-&rest nil)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1493 ;; Skip the first offset. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1494 (edebug-set-cursor cursor (edebug-cursor-expressions cursor) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1495 (cdr (edebug-cursor-offsets cursor))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1496 (cond |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1497 ((symbolp head) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1498 (cond |
51321
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
1499 ((null head) nil) ; () is legal. |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1500 ((eq head 'interactive-p) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1501 ;; Special case: replace (interactive-p) with variable |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1502 (setq edebug-def-interactive 'check-it) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1503 (edebug-move-cursor cursor) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1504 (edebug-interactive-p-name)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1505 (t |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
1506 (cons head (edebug-list-form-args |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1507 head (edebug-move-cursor cursor)))))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1508 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1509 ((consp head) |
51321
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
1510 (if (eq (car head) ',) |
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
1511 ;; The head of a form should normally be a symbol or a lambda |
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
1512 ;; expression but it can also be an unquote form to be filled |
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
1513 ;; before evaluation. We evaluate the arguments anyway, on the |
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
1514 ;; assumption that the unquote form will place a proper function |
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
1515 ;; name (rather than a macro name). |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1516 (edebug-match cursor '(("," def-form) body)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1517 ;; Process anonymous function and args. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1518 ;; This assumes no anonymous macros. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1519 (edebug-match-specs cursor '(lambda-expr body) 'edebug-match-specs))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1520 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1521 (t (edebug-syntax-error |
51321
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
1522 "Head of list form must be a symbol or lambda expression"))) |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1523 )) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1524 |
14846 | 1525 ;;; Matching of specs. |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1526 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1527 (defvar edebug-after-dotted-spec nil) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1528 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1529 (defvar edebug-matching-depth 0) ;; initial value |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1530 (defconst edebug-max-depth 150) ;; maximum number of matching recursions. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1531 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1532 |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
1533 ;;; Failure to match |
14846 | 1534 |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1535 ;; This throws to no-match, if there are higher alternatives. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1536 ;; 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
|
1537 ;; with the two before- and after-offset functions. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1538 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1539 (defun edebug-no-match (cursor &rest edebug-args) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1540 ;; 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
|
1541 ;; 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
|
1542 (setq edebug-error-point (or edebug-error-point |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1543 (edebug-before-offset cursor)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1544 edebug-best-error (or edebug-best-error edebug-args)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1545 (if (and edebug-gate (not edebug-&optional)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1546 (progn |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1547 (if edebug-error-point |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1548 (goto-char edebug-error-point)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1549 (apply 'edebug-syntax-error edebug-args)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1550 (funcall 'throw 'no-match edebug-args))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1551 |
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 (defun edebug-match (cursor specs) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1554 ;; Top level spec matching function. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1555 ;; Used also at each lower level of specs. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1556 (let (edebug-&optional |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1557 edebug-&rest |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1558 edebug-best-error |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1559 edebug-error-point |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1560 (edebug-gate edebug-gate) ;; locally bound to limit effect |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1561 ) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1562 (edebug-match-specs cursor specs 'edebug-match-specs))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1563 |
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 (defun edebug-match-one-spec (cursor spec) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1566 ;; Match one spec, which is not a keyword &-spec. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1567 (cond |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1568 ((symbolp spec) (edebug-match-symbol cursor spec)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1569 ((vectorp spec) (edebug-match cursor (append spec nil))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1570 ((stringp spec) (edebug-match-string cursor spec)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1571 ((listp spec) (edebug-match-list cursor spec)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1572 )) |
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 (defun edebug-match-specs (cursor specs remainder-handler) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1576 ;; Append results of matching the list of specs. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1577 ;; The first spec is handled and the remainder-handler handles the rest. |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
1578 (let ((edebug-matching-depth |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1579 (if (> edebug-matching-depth edebug-max-depth) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1580 (error "too deep - perhaps infinite loop in spec?") |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1581 (1+ edebug-matching-depth)))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1582 (cond |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1583 ((null specs) nil) |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
1584 |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1585 ;; Is the spec dotted? |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
1586 ((atom specs) |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1587 (let ((edebug-dotted-spec t));; Containing spec list was dotted. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1588 (edebug-match-specs cursor (list specs) remainder-handler))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1589 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1590 ;; Is the form dotted? |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1591 ((not (listp (edebug-cursor-expressions cursor)));; allow nil |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1592 (if (not edebug-dotted-spec) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1593 (edebug-no-match cursor "Dotted spec required.")) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1594 ;; Cancel dotted spec and dotted form. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1595 (let ((edebug-dotted-spec) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1596 (this-form (edebug-cursor-expressions cursor)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1597 (this-offset (edebug-cursor-offsets cursor))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1598 ;; Wrap the form in a list, (by changing the cursor??)... |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1599 (edebug-set-cursor cursor (list this-form) this-offset) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1600 ;; and process normally, then unwrap the result. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1601 (car (edebug-match-specs cursor specs remainder-handler)))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1602 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1603 (t;; Process normally. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1604 (let* ((spec (car specs)) |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
1605 (rest) |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1606 (first-char (and (symbolp spec) (aref (symbol-name spec) 0)))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1607 ;;(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
|
1608 (nconc |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1609 (cond |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1610 ((eq ?& first-char);; "&" symbols take all following specs. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1611 (funcall (get-edebug-spec spec) cursor (cdr specs))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1612 ((eq ?: first-char);; ":" symbols take one following spec. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1613 (setq rest (cdr (cdr specs))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1614 (funcall (get-edebug-spec spec) cursor (car (cdr specs)))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1615 (t;; Any other normal spec. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1616 (setq rest (cdr specs)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1617 (edebug-match-one-spec cursor spec))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1618 (funcall remainder-handler cursor rest remainder-handler))))))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1619 |
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 ;; Define specs for all the symbol specs with functions used to process them. |
14846 | 1622 ;; 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
|
1623 ;; 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
|
1624 ;; We could use an internal obarray for these primitive specs. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1625 |
33709
bfee926318b1
(edebug-form-spec prop): use dolist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32227
diff
changeset
|
1626 (dolist (pair '((&optional . edebug-match-&optional) |
bfee926318b1
(edebug-form-spec prop): use dolist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32227
diff
changeset
|
1627 (&rest . edebug-match-&rest) |
bfee926318b1
(edebug-form-spec prop): use dolist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32227
diff
changeset
|
1628 (&or . edebug-match-&or) |
bfee926318b1
(edebug-form-spec prop): use dolist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32227
diff
changeset
|
1629 (form . edebug-match-form) |
bfee926318b1
(edebug-form-spec prop): use dolist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32227
diff
changeset
|
1630 (sexp . edebug-match-sexp) |
bfee926318b1
(edebug-form-spec prop): use dolist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32227
diff
changeset
|
1631 (body . edebug-match-body) |
bfee926318b1
(edebug-form-spec prop): use dolist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32227
diff
changeset
|
1632 (&define . edebug-match-&define) |
bfee926318b1
(edebug-form-spec prop): use dolist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32227
diff
changeset
|
1633 (name . edebug-match-name) |
bfee926318b1
(edebug-form-spec prop): use dolist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32227
diff
changeset
|
1634 (:name . edebug-match-colon-name) |
bfee926318b1
(edebug-form-spec prop): use dolist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32227
diff
changeset
|
1635 (arg . edebug-match-arg) |
bfee926318b1
(edebug-form-spec prop): use dolist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32227
diff
changeset
|
1636 (def-body . edebug-match-def-body) |
bfee926318b1
(edebug-form-spec prop): use dolist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32227
diff
changeset
|
1637 (def-form . edebug-match-def-form) |
bfee926318b1
(edebug-form-spec prop): use dolist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32227
diff
changeset
|
1638 ;; Less frequently used: |
bfee926318b1
(edebug-form-spec prop): use dolist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32227
diff
changeset
|
1639 ;; (function . edebug-match-function) |
bfee926318b1
(edebug-form-spec prop): use dolist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32227
diff
changeset
|
1640 (lambda-expr . edebug-match-lambda-expr) |
bfee926318b1
(edebug-form-spec prop): use dolist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32227
diff
changeset
|
1641 (¬ . edebug-match-¬) |
bfee926318b1
(edebug-form-spec prop): use dolist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32227
diff
changeset
|
1642 (&key . edebug-match-&key) |
bfee926318b1
(edebug-form-spec prop): use dolist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32227
diff
changeset
|
1643 (place . edebug-match-place) |
bfee926318b1
(edebug-form-spec prop): use dolist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32227
diff
changeset
|
1644 (gate . edebug-match-gate) |
bfee926318b1
(edebug-form-spec prop): use dolist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32227
diff
changeset
|
1645 ;; (nil . edebug-match-nil) not this one - special case it. |
bfee926318b1
(edebug-form-spec prop): use dolist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32227
diff
changeset
|
1646 )) |
bfee926318b1
(edebug-form-spec prop): use dolist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32227
diff
changeset
|
1647 (put (car pair) 'edebug-form-spec (cdr pair))) |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1648 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1649 (defun edebug-match-symbol (cursor symbol) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1650 ;; Match a symbol spec. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1651 (let* ((spec (get-edebug-spec symbol))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1652 (cond |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
1653 (spec |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1654 (if (consp spec) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1655 ;; It is an indirect spec. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1656 (edebug-match cursor spec) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1657 ;; Otherwise it should be the symbol name of a function. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1658 ;; 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
|
1659 (funcall spec cursor))) |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
1660 |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1661 ((null symbol) ;; special case this. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1662 (edebug-match-nil cursor)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1663 |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
1664 ((fboundp symbol) ; is it a predicate? |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1665 (let ((sexp (edebug-top-element-required cursor "Expected" symbol))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1666 ;; Special case for edebug-`. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1667 (if (and (listp sexp) (eq (car sexp) ',)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1668 (edebug-match cursor '(("," def-form))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1669 (if (not (funcall symbol sexp)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1670 (edebug-no-match cursor symbol "failed")) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1671 (edebug-move-cursor cursor) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1672 (list sexp)))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1673 (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
|
1674 ))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1675 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1676 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1677 (defun edebug-match-sexp (cursor) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1678 (list (prog1 (edebug-top-element-required cursor "Expected sexp") |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1679 (edebug-move-cursor cursor)))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1680 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1681 (defun edebug-match-form (cursor) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1682 (list (edebug-form 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 (defalias 'edebug-match-place 'edebug-match-form) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1685 ;; Currently identical to edebug-match-form. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1686 ;; This is for common lisp setf-style place arguments. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1687 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1688 (defsubst edebug-match-body (cursor) (edebug-forms cursor)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1689 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1690 (defun edebug-match-&optional (cursor specs) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1691 ;; Keep matching until one spec fails. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1692 (edebug-&optional-wrapper cursor specs 'edebug-&optional-wrapper)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1693 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1694 (defun edebug-&optional-wrapper (cursor specs remainder-handler) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1695 (let (result |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1696 (edebug-&optional specs) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1697 (edebug-gate nil) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1698 (this-form (edebug-cursor-expressions cursor)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1699 (this-offset (edebug-cursor-offsets cursor))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1700 (if (null (catch 'no-match |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1701 (setq result |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1702 (edebug-match-specs cursor specs remainder-handler)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1703 ;; Returning nil means no no-match was thrown. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1704 nil)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1705 result |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1706 ;; 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
|
1707 (edebug-set-cursor cursor this-form this-offset) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1708 nil))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1709 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1710 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1711 (defun edebug-&rest-wrapper (cursor specs remainder-handler) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1712 (if (null specs) (setq specs edebug-&rest)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1713 ;; Reuse the &optional handler with this as the remainder handler. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1714 (edebug-&optional-wrapper cursor specs remainder-handler)) |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
1715 |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1716 (defun edebug-match-&rest (cursor specs) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1717 ;; Repeatedly use specs until failure. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1718 (let ((edebug-&rest specs) ;; remember these |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1719 edebug-best-error |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1720 edebug-error-point) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1721 (edebug-&rest-wrapper cursor specs 'edebug-&rest-wrapper))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1722 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1723 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1724 (defun edebug-match-&or (cursor specs) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1725 ;; Keep matching until one spec succeeds, and return its results. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1726 ;; If none match, fail. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1727 ;; 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
|
1728 (let ((original-specs specs) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1729 (this-form (edebug-cursor-expressions cursor)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1730 (this-offset (edebug-cursor-offsets cursor))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1731 (catch 'matched |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1732 (while specs |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1733 (catch 'no-match |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1734 (throw 'matched |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1735 (let (edebug-gate ;; only while matching each spec |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1736 edebug-best-error |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1737 edebug-error-point) |
14846 | 1738 ;; Doesn't support e.g. &or symbolp &rest form |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1739 (edebug-match-one-spec cursor (car specs))))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1740 ;; Match failed, so reset and try again. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1741 (setq specs (cdr specs)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1742 ;; Reset the cursor for the next match. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1743 (edebug-set-cursor cursor this-form this-offset)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1744 ;; All failed. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1745 (apply 'edebug-no-match cursor "Expected one of" original-specs)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1746 )) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1747 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1748 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1749 (defun edebug-match-¬ (cursor specs) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1750 ;; If any specs match, then fail |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1751 (if (null (catch 'no-match |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1752 (let ((edebug-gate nil)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1753 (save-excursion |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1754 (edebug-match-&or cursor specs))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1755 nil)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1756 ;; This means something matched, so it is a no match. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1757 (edebug-no-match cursor "Unexpected")) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1758 ;; This means nothing matched, so it is OK. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1759 nil) ;; So, return nothing |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
1760 |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1761 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1762 (def-edebug-spec &key edebug-match-&key) |
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 (defun edebug-match-&key (cursor specs) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1765 ;; Following specs must look like (<name> <spec>) ... |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1766 ;; where <name> is the name of a keyword, and spec is its spec. |
14846 | 1767 ;; This really doesn't save much over the expanded form and takes time. |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
1768 (edebug-match-&rest |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1769 cursor |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
1770 (cons '&or |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1771 (mapcar (function (lambda (pair) |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
1772 (vector (format ":%s" (car pair)) |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1773 (car (cdr pair))))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1774 specs)))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1775 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1776 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1777 (defun edebug-match-gate (cursor) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1778 ;; Simply set the gate to prevent backtracking at this level. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1779 (setq edebug-gate t) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1780 nil) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1781 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1782 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1783 (defun edebug-match-list (cursor specs) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1784 ;; 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
|
1785 (if edebug-dotted-spec |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
1786 ;; After dotted spec but form did not contain dot, |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1787 ;; so match list spec elements as if spliced in. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1788 (prog1 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1789 (let ((edebug-dotted-spec)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1790 (edebug-match-specs cursor specs 'edebug-match-specs)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1791 ;; If it matched, really clear the dotted-spec flag. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1792 (setq edebug-dotted-spec nil)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1793 (let ((spec (car specs)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1794 (form (edebug-top-element-required cursor "Expected" specs))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1795 (cond |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1796 ((eq 'quote spec) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1797 (let ((spec (car (cdr 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 ((symbolp spec) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1800 ;; Special case: spec quotes a symbol to match. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1801 ;; Change in future. Use "..." instead. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1802 (if (not (eq spec form)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1803 (edebug-no-match cursor "Expected" spec)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1804 (edebug-move-cursor cursor) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1805 (setq edebug-gate t) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1806 form) |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
1807 (t |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1808 (error "Bad spec: %s" specs))))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1809 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1810 ((listp form) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1811 (prog1 |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
1812 (list (edebug-match-sublist |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1813 ;; First offset is for the list form itself. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1814 ;; Treat nil as empty list. |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
1815 (edebug-new-cursor form (cdr (edebug-top-offset cursor))) |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1816 specs)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1817 (edebug-move-cursor cursor))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1818 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1819 ((and (eq 'vector spec) (vectorp form)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1820 ;; Special case: match a vector with the specs. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1821 (let ((result (edebug-match-sublist |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
1822 (edebug-new-cursor |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1823 form (cdr (edebug-top-offset cursor))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1824 (cdr specs)))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1825 (edebug-move-cursor cursor) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1826 (list (apply 'vector result)))) |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
1827 |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1828 (t (edebug-no-match cursor "Expected" specs))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1829 ))) |
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 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1832 (defun edebug-match-sublist (cursor specs) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1833 ;; Match a sublist of specs. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1834 (let (edebug-&optional |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1835 ;;edebug-best-error |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1836 ;;edebug-error-point |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1837 ) |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
1838 (prog1 |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1839 ;; 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
|
1840 (edebug-match-specs cursor specs 'edebug-match-specs) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1841 (if (not (edebug-empty-cursor cursor)) |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
1842 (if edebug-best-error |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1843 (apply 'edebug-no-match cursor edebug-best-error) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1844 ;; A failed &rest or &optional spec may leave some args. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1845 (edebug-no-match cursor "Failed matching" specs) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1846 ))))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1847 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1848 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1849 (defun edebug-match-string (cursor spec) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1850 (let ((sexp (edebug-top-element-required cursor "Expected" spec))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1851 (if (not (eq (intern spec) sexp)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1852 (edebug-no-match cursor "Expected" spec) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1853 ;; Since it matched, failure means immediate error, unless &optional. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1854 (setq edebug-gate t) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1855 (edebug-move-cursor cursor) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1856 (list sexp) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1857 ))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1858 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1859 (defun edebug-match-nil (cursor) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1860 ;; There must be nothing left to match a nil. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1861 (if (not (edebug-empty-cursor cursor)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1862 (edebug-no-match cursor "Unmatched argument(s)") |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1863 nil)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1864 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1865 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1866 (defun edebug-match-function (cursor) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1867 (error "Use function-form instead of function in edebug spec")) |
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-&define (cursor specs) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1870 ;; Match a defining form. |
14846 | 1871 ;; Normally, &define is interpreted specially other places. |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1872 ;; 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
|
1873 ;; 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
|
1874 (edebug-make-form-wrapper |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
1875 cursor |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1876 (edebug-before-offset cursor) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1877 ;; Find the last offset in the list. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1878 (let ((offsets (edebug-cursor-offsets cursor))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1879 (while (consp offsets) (setq offsets (cdr offsets))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1880 offsets) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1881 specs)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1882 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1883 (defun edebug-match-lambda-expr (cursor) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1884 ;; The expression must be a function. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1885 ;; 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
|
1886 ;; that has an edebug-form-spec beginning with &define. In |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
1887 ;; practice, only lambda expressions should be used. |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1888 ;; I could add a &lambda specification to avoid confusion. |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
1889 (let* ((sexp (edebug-top-element-required |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1890 cursor "Expected lambda expression")) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1891 (offset (edebug-top-offset cursor)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1892 (head (and (consp sexp) (car sexp))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1893 (spec (and (symbolp head) (get-edebug-spec head))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1894 (edebug-inside-func nil)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1895 ;; 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
|
1896 (if (and (consp spec) (eq '&define (car spec))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1897 (prog1 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1898 (list |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
1899 (edebug-defining-form |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1900 (edebug-new-cursor sexp offset) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1901 (car offset);; before the sexp |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
1902 (edebug-after-offset cursor) |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1903 (cons (symbol-name head) (cdr spec)))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1904 (edebug-move-cursor cursor)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1905 (edebug-no-match cursor "Expected lambda expression") |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1906 ))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1907 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1908 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1909 (defun edebug-match-name (cursor) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1910 ;; Set the edebug-def-name bound in edebug-defining-form. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1911 (let ((name (edebug-top-element-required cursor "Expected name"))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1912 ;; Maybe strings and numbers could be used. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1913 (if (not (symbolp name)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1914 (edebug-no-match cursor "Symbol expected for name of definition")) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1915 (setq edebug-def-name |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1916 (if edebug-def-name |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1917 ;; Construct a new name by appending to previous name. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1918 (intern (format "%s@%s" edebug-def-name name)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1919 name)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1920 (edebug-move-cursor cursor) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1921 (list name))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1922 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1923 (defun edebug-match-colon-name (cursor spec) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1924 ;; Set the edebug-def-name to the spec. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1925 (setq edebug-def-name |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1926 (if edebug-def-name |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1927 ;; Construct a new name by appending to previous name. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1928 (intern (format "%s@%s" edebug-def-name spec)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1929 spec)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1930 nil) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1931 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1932 (defun edebug-match-arg (cursor) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1933 ;; set the def-args bound in edebug-defining-form |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1934 (let ((edebug-arg (edebug-top-element-required cursor "Expected arg"))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1935 (if (or (not (symbolp edebug-arg)) |
14846 | 1936 (edebug-lambda-list-keywordp edebug-arg)) |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1937 (edebug-no-match cursor "Bad argument:" edebug-arg)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1938 (edebug-move-cursor cursor) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1939 (setq edebug-def-args (cons edebug-arg edebug-def-args)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1940 (list edebug-arg))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1941 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1942 (defun edebug-match-def-form (cursor) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1943 ;; 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
|
1944 ;; 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
|
1945 ;; 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
|
1946 ;; Not to be used otherwise. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1947 (let ((edebug-inside-func nil)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1948 (list (edebug-make-enter-wrapper (list (edebug-form cursor)))))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1949 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1950 (defun edebug-match-def-body (cursor) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1951 ;; Like body but body is wrapped in edebug-enter form. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1952 ;; 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
|
1953 ;; Not to be used otherwise. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1954 (let ((edebug-inside-func t)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1955 (list (edebug-wrap-def-body (edebug-forms cursor))))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1956 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1957 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1958 ;;;; Edebug Form Specs |
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 ;;; See cl-specs.el for common lisp specs. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1961 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1962 ;;;;* Spec for def-edebug-spec |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1963 ;;; Out of date. |
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 (defun edebug-spec-p (object) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1966 "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
|
1967 (and (symbolp object) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1968 (get object 'edebug-form-spec))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1969 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1970 (def-edebug-spec def-edebug-spec |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1971 ;; Top level is different from lower levels. |
33709
bfee926318b1
(edebug-form-spec prop): use dolist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32227
diff
changeset
|
1972 (&define :name edebug-spec name |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1973 &or "nil" edebug-spec-p "t" "0" (&rest edebug-spec))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1974 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1975 (def-edebug-spec edebug-spec-list |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1976 ;; 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
|
1977 ((edebug-spec . [&or nil edebug-spec]))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1978 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1979 (def-edebug-spec edebug-spec |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1980 (&or |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1981 (vector &rest edebug-spec) ; matches a vector |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1982 ("vector" &rest edebug-spec) ; matches a vector spec |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1983 ("quote" symbolp) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1984 edebug-spec-list |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1985 stringp |
14846 | 1986 [edebug-lambda-list-keywordp &rest edebug-spec] |
28567
3ed20cb4c9b3
(edebug-keywordp): Remove. Change callers
Dave Love <fx@gnu.org>
parents:
28516
diff
changeset
|
1987 [keywordp gate edebug-spec] |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1988 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
|
1989 symbolp;; a predicate |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1990 )) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1991 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1992 |
14846 | 1993 ;;;* Emacs special forms and some functions. |
6512
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 ;; quote expects only one argument, although it allows any number. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1996 (def-edebug-spec quote sexp) |
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 ;; The standard defining forms. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
1999 (def-edebug-spec defconst defvar) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2000 (def-edebug-spec defvar (symbolp &optional form stringp)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2001 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2002 (def-edebug-spec defun |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2003 (&define name lambda-list |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2004 [&optional stringp] |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2005 [&optional ("interactive" interactive)] |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2006 def-body)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2007 (def-edebug-spec defmacro |
51331
cf0bc7d12c33
(edebug-storing-offsets): Move indent and debug to inside the macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51322
diff
changeset
|
2008 (&define name lambda-list [&optional ("declare" &rest sexp)] def-body)) |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2009 |
14846 | 2010 (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
|
2011 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2012 (def-edebug-spec lambda-list |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2013 (([&rest arg] |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2014 [&optional ["&optional" arg &rest arg]] |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2015 &optional ["&rest" arg] |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2016 ))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2017 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2018 (def-edebug-spec interactive |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2019 (&optional &or stringp def-form)) |
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 ;; 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
|
2022 ;; This specially recognizes anonymous functions quoted with quote. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2023 (def-edebug-spec function-form |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2024 ;; form at the end could also handle "function", |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2025 ;; but recognize it specially to avoid wrapping function forms. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2026 (&or ([&or "quote" "function"] &or symbolp lambda-expr) form)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2027 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2028 ;; function expects a symbol or a lambda or macro expression |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2029 ;; A macro is allowed by Emacs. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2030 (def-edebug-spec function (&or symbolp lambda-expr)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2031 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2032 ;; lambda is a macro in emacs 19. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2033 (def-edebug-spec lambda (&define lambda-list |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2034 [&optional stringp] |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2035 [&optional ("interactive" interactive)] |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2036 def-body)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2037 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2038 ;; A macro expression is a lambda expression with "macro" prepended. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2039 (def-edebug-spec macro (&define "lambda" lambda-list 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 ;; (def-edebug-spec anonymous-form ((&or ["lambda" lambda] ["macro" macro]))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2042 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2043 ;; Standard functions that take function-forms arguments. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2044 (def-edebug-spec mapcar (function-form form)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2045 (def-edebug-spec mapconcat (function-form form form)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2046 (def-edebug-spec mapatoms (function-form &optional form)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2047 (def-edebug-spec apply (function-form &rest form)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2048 (def-edebug-spec funcall (function-form &rest form)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2049 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2050 (def-edebug-spec let |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2051 ((&rest &or (symbolp &optional form) symbolp) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2052 body)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2053 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2054 (def-edebug-spec let* let) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2055 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2056 (def-edebug-spec setq (&rest symbolp form)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2057 (def-edebug-spec setq-default setq) |
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 cond (&rest (&rest form))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2060 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2061 (def-edebug-spec condition-case |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2062 (symbolp |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2063 form |
18729
43149745d126
(condition-case): Fix edebug-form-spec to
Richard M. Stallman <rms@gnu.org>
parents:
18399
diff
changeset
|
2064 &rest ([&or symbolp (&rest symbolp)] body))) |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2065 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2066 |
14846 | 2067 (def-edebug-spec \` (backquote-form)) |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2068 |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
2069 ;; Supports quotes inside backquotes, |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2070 ;; but only at the top level inside unquotes. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2071 (def-edebug-spec backquote-form |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2072 (&or |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2073 ([&or "," ",@"] &or ("quote" backquote-form) form) |
51321
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
2074 ;; The simple version: |
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
2075 ;; (backquote-form &rest backquote-form) |
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
2076 ;; doesn't handle (a . ,b). The straightforward fix: |
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
2077 ;; (backquote-form . [&or nil backquote-form]) |
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
2078 ;; uses up too much stack space. |
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
2079 ;; Note that `(foo . ,@bar) is not legal, so we don't need to handle it. |
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
2080 (backquote-form [&rest [¬ ","] backquote-form] |
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
2081 . [&or nil backquote-form]) |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2082 ;; 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
|
2083 ;; 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
|
2084 ;; (backquote-form . [&or nil backquote-form]) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2085 (vector &rest backquote-form) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2086 sexp)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2087 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2088 ;; Special version of backquote that instruments backquoted forms |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2089 ;; destined to be evaluated, usually as the result of a |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2090 ;; macroexpansion. Backquoted code can only have unquotes (, and ,@) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2091 ;; 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
|
2092 ;; 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
|
2093 ;; 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
|
2094 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2095 ;; 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
|
2096 ;; 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
|
2097 ;; are defined with edebug-` but this would be expensive. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2098 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2099 ;; ,@ might have some problems. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2100 |
14846 | 2101 (defalias 'edebug-\` '\`) ;; same macro as regular backquote. |
2102 (def-edebug-spec edebug-\` (def-form)) | |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2103 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2104 ;; Assume immediate quote in unquotes mean backquote at next higher level. |
49842
c785a7ac61c7
Fix character constants.
Juanma Barranquero <lekktu@gmail.com>
parents:
49598
diff
changeset
|
2105 (def-edebug-spec , (&or ("quote" edebug-\`) def-form)) |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2106 (def-edebug-spec ,@ (&define ;; so (,@ form) is never wrapped. |
49842
c785a7ac61c7
Fix character constants.
Juanma Barranquero <lekktu@gmail.com>
parents:
49598
diff
changeset
|
2107 &or ("quote" edebug-\`) def-form)) |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2108 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2109 ;; New byte compiler. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2110 (def-edebug-spec defsubst defun) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2111 (def-edebug-spec dont-compile t) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2112 (def-edebug-spec eval-when-compile t) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2113 (def-edebug-spec eval-and-compile t) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2114 |
16374
b3b88a1ee6aa
(save-selected-window, save-current-buffer)
Richard M. Stallman <rms@gnu.org>
parents:
16308
diff
changeset
|
2115 (def-edebug-spec save-selected-window t) |
b3b88a1ee6aa
(save-selected-window, save-current-buffer)
Richard M. Stallman <rms@gnu.org>
parents:
16308
diff
changeset
|
2116 (def-edebug-spec save-current-buffer t) |
40475
3bf0c64f4520
(delay-mode-hooks): Add edebug-spec.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40464
diff
changeset
|
2117 (def-edebug-spec delay-mode-hooks t) |
16374
b3b88a1ee6aa
(save-selected-window, save-current-buffer)
Richard M. Stallman <rms@gnu.org>
parents:
16308
diff
changeset
|
2118 (def-edebug-spec with-temp-file 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 push (form sexp)) |
b393b2d78c62
Fix specs for dolist, dotimes, push, pop, unless, when.
Dave Love <fx@gnu.org>
parents:
27483
diff
changeset
|
2122 (def-edebug-spec pop (sexp)) |
16374
b3b88a1ee6aa
(save-selected-window, save-current-buffer)
Richard M. Stallman <rms@gnu.org>
parents:
16308
diff
changeset
|
2123 |
53198
5023ae2f95af
Add edebug specs for macros `1value' and `noreturn'.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
52898
diff
changeset
|
2124 (def-edebug-spec 1value (form)) |
5023ae2f95af
Add edebug specs for macros `1value' and `noreturn'.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
52898
diff
changeset
|
2125 (def-edebug-spec noreturn (form)) |
5023ae2f95af
Add edebug specs for macros `1value' and `noreturn'.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
52898
diff
changeset
|
2126 |
5023ae2f95af
Add edebug specs for macros `1value' and `noreturn'.
Jonathan Yavner <jyavner@member.fsf.org>
parents:
52898
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)) |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
2137 (def-edebug-spec defadvice |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2138 (&define name ;; thing being advised. |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
2139 (name ;; class is [&or "before" "around" "after" |
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
2140 ;; "activation" "deactivation"] |
6512
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)) |
39515 | 2153 (def-edebug-spec rx (&rest sexp)) |
28567
3ed20cb4c9b3
(edebug-keywordp): Remove. Change callers
Dave Love <fx@gnu.org>
parents:
28516
diff
changeset
|
2154 |
14846 | 2155 ;;; The debugger itself |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2156 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2157 (defvar edebug-active nil) ;; Non-nil when edebug is active |
661 | 2158 |
2159 ;;; add minor-mode-alist entry | |
2160 (or (assq 'edebug-active minor-mode-alist) | |
2161 (setq minor-mode-alist (cons (list 'edebug-active " *Debugging*") | |
2162 minor-mode-alist))) | |
2163 | |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2164 (defvar edebug-stack nil) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2165 ;; Stack of active functions evaluated via edebug. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2166 ;; Should be nil at the top level. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2167 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2168 (defvar edebug-stack-depth -1) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2169 ;; Index of last edebug-stack item. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2170 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2171 (defvar edebug-offset-indices nil) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2172 ;; Stack of offset indices of visited edebug sexps. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2173 ;; Should be nil at the top level. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2174 ;; Each function adds one cons. Top is modified with setcar. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2175 |
661 | 2176 |
2177 (defvar edebug-entered nil | |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2178 ;; 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
|
2179 ;; This should stay nil at the top level. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2180 ) |
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 ;; Should these be options? |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2183 (defconst edebug-debugger 'edebug |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2184 ;; 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
|
2185 ;; Set this to 'debug if you want to debug edebug. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2186 ) |
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 ;; Dynamically bound variables, declared globally but left unbound. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2190 (defvar edebug-function) ; the function being executed. change name!! |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2191 (defvar edebug-args) ; the arguments of the function |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2192 (defvar edebug-data) ; the edebug data for the function |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2193 (defvar edebug-value) ; the result of the expression |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2194 (defvar edebug-after-index) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2195 (defvar edebug-def-mark) ; the mark for the definition |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2196 (defvar edebug-freq-count) ; the count of expression visits. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2197 (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
|
2198 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2199 (defvar edebug-buffer) ; which buffer the function is in. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2200 (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
|
2201 (defvar edebug-outside-executing-macro) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2202 (defvar edebug-outside-defining-kbd-macro) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2203 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2204 (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
|
2205 (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
|
2206 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2207 (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
|
2208 (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
|
2209 |
19930
1e0f347ee021
(edebug-enter): Save, and bind to nil,
Richard M. Stallman <rms@gnu.org>
parents:
18729
diff
changeset
|
2210 (defvar edebug-outside-overriding-local-map) |
1e0f347ee021
(edebug-enter): Save, and bind to nil,
Richard M. Stallman <rms@gnu.org>
parents:
18729
diff
changeset
|
2211 (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
|
2212 |
6666
c6430bc570f9
Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents:
6512
diff
changeset
|
2213 (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
|
2214 (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
|
2215 |
c6430bc570f9
Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents:
6512
diff
changeset
|
2216 (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
|
2217 |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2218 ;;; Handling signals |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2219 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2220 (defun edebug-signal (edebug-signal-name edebug-signal-data) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2221 "Signal an error. Args are SIGNAL-NAME, and associated DATA. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2222 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
|
2223 that is a list of condition names. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2224 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
|
2225 The symbol `error' should always be one of them. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2226 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2227 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
|
2228 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
|
2229 See `condition-case'. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2230 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2231 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
|
2232 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
|
2233 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
|
2234 error is signaled again." |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2235 (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
|
2236 (edebug 'error (cons edebug-signal-name edebug-signal-data))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2237 ;; 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
|
2238 ;; 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
|
2239 ;; Avoid infinite recursion. |
4c3a2b58fd72
(edebug-signal): Avoid infinite recursion.
Richard M. Stallman <rms@gnu.org>
parents:
17650
diff
changeset
|
2240 (let ((signal-hook-function nil)) |
4c3a2b58fd72
(edebug-signal): Avoid infinite recursion.
Richard M. Stallman <rms@gnu.org>
parents:
17650
diff
changeset
|
2241 (signal edebug-signal-name edebug-signal-data))) |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2242 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2243 ;;; Entering Edebug |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2244 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2245 (defun edebug-enter (edebug-function edebug-args edebug-body) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2246 ;; 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
|
2247 ;; Setup edebug variables and evaluate BODY. This function is called |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
2248 ;; when a function evaluated with edebug-eval-top-level-form is entered. |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2249 ;; Return the result of BODY. |
661 | 2250 |
2251 ;; Is this the first time we are entering edebug since | |
2252 ;; lower-level recursive-edit command? | |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2253 ;; More precisely, this tests whether Edebug is currently active. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2254 (if (not edebug-entered) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2255 (let ((edebug-entered t) |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
2256 ;; 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
|
2257 ;; 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
|
2258 ;; 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
|
2259 (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
|
2260 (max-specpdl-size (+ 200 max-specpdl-size)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2261 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2262 (debugger edebug-debugger) ; only while edebug is active. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2263 (edebug-outside-debug-on-error debug-on-error) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2264 (edebug-outside-debug-on-quit debug-on-quit) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2265 ;; Binding these may not be the right thing to do. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2266 ;; We want to allow the global values to be changed. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2267 (debug-on-error (or debug-on-error edebug-on-error)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2268 (debug-on-quit edebug-on-quit) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2269 |
6666
c6430bc570f9
Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents:
6512
diff
changeset
|
2270 ;; 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
|
2271 (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
|
2272 |
19930
1e0f347ee021
(edebug-enter): Save, and bind to nil,
Richard M. Stallman <rms@gnu.org>
parents:
18729
diff
changeset
|
2273 (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
|
2274 (edebug-outside-overriding-terminal-local-map |
1e0f347ee021
(edebug-enter): Save, and bind to nil,
Richard M. Stallman <rms@gnu.org>
parents:
18729
diff
changeset
|
2275 overriding-terminal-local-map) |
1e0f347ee021
(edebug-enter): Save, and bind to nil,
Richard M. Stallman <rms@gnu.org>
parents:
18729
diff
changeset
|
2276 |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2277 ;; 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
|
2278 (edebug-outside-executing-macro executing-kbd-macro) |
52535
f40f0d207133
(edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
2279 (edebug-outside-pre-command-hook |
f40f0d207133
(edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
2280 (edebug-var-status 'pre-command-hook)) |
f40f0d207133
(edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
2281 (edebug-outside-post-command-hook |
f40f0d207133
(edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
2282 (edebug-var-status 'post-command-hook))) |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2283 (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
|
2284 (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
|
2285 ;; 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
|
2286 ;; non-nil. Again, local binding may not be best. |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
2287 (executing-kbd-macro |
15302
c23c9712ef5c
Use executing-kbd-macro, not executing-macro.
Karl Heuer <kwzh@gnu.org>
parents:
14846
diff
changeset
|
2288 (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
|
2289 |
19930
1e0f347ee021
(edebug-enter): Save, and bind to nil,
Richard M. Stallman <rms@gnu.org>
parents:
18729
diff
changeset
|
2290 ;; 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
|
2291 (overriding-local-map nil) |
1e0f347ee021
(edebug-enter): Save, and bind to nil,
Richard M. Stallman <rms@gnu.org>
parents:
18729
diff
changeset
|
2292 (overriding-terminal-local-map nil) |
1e0f347ee021
(edebug-enter): Save, and bind to nil,
Richard M. Stallman <rms@gnu.org>
parents:
18729
diff
changeset
|
2293 |
16308
2334a3d634c0
(edebug-original-signal): Don't define it.
Richard M. Stallman <rms@gnu.org>
parents:
16299
diff
changeset
|
2294 (signal-hook-function 'edebug-signal) |
2334a3d634c0
(edebug-original-signal): Don't define it.
Richard M. Stallman <rms@gnu.org>
parents:
16299
diff
changeset
|
2295 |
6666
c6430bc570f9
Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents:
6512
diff
changeset
|
2296 ;; 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
|
2297 ;; 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
|
2298 ;; 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
|
2299 (pre-command-hook nil) |
16299
0e4f99bad2ec
(pre-command-hook, post-command-hook): Defvars deleted.
Richard M. Stallman <rms@gnu.org>
parents:
15782
diff
changeset
|
2300 (post-command-hook nil)) |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
2301 (setq edebug-execution-mode (or edebug-next-execution-mode |
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
2302 edebug-initial-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
|
2303 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
|
2304 edebug-next-execution-mode nil) |
16308
2334a3d634c0
(edebug-original-signal): Don't define it.
Richard M. Stallman <rms@gnu.org>
parents:
16299
diff
changeset
|
2305 (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
|
2306 ;; Reset global variables in case outside value was changed. |
52535
f40f0d207133
(edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
2307 (setq executing-kbd-macro edebug-outside-executing-macro) |
f40f0d207133
(edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
2308 (edebug-restore-status |
f40f0d207133
(edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
2309 'post-command-hook edebug-outside-post-command-hook) |
f40f0d207133
(edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
2310 (edebug-restore-status |
f40f0d207133
(edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
2311 'pre-command-hook edebug-outside-pre-command-hook))) |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
2312 |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2313 (let* ((edebug-data (get edebug-function 'edebug)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2314 (edebug-def-mark (car edebug-data)) ; mark at def start |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2315 (edebug-freq-count (get edebug-function 'edebug-freq-count)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2316 (edebug-coverage (get edebug-function 'edebug-coverage)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2317 (edebug-buffer (marker-buffer edebug-def-mark)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2318 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2319 (edebug-stack (cons edebug-function edebug-stack)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2320 (edebug-offset-indices (cons 0 edebug-offset-indices)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2321 ) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2322 (if (get edebug-function 'edebug-on-entry) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2323 (progn |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2324 (setq edebug-execution-mode 'step) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2325 (if (eq (get edebug-function 'edebug-on-entry) 'temp) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2326 (put edebug-function 'edebug-on-entry nil)))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2327 (if edebug-trace |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2328 (edebug-enter-trace edebug-body) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2329 (funcall edebug-body)) |
661 | 2330 ))) |
2331 | |
52535
f40f0d207133
(edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
2332 (defun edebug-var-status (var) |
f40f0d207133
(edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
2333 "Return a cons cell describing the status of VAR's current binding. |
f40f0d207133
(edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
2334 The purpose of this function is so you can properly undo |
f40f0d207133
(edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
2335 subsequent changes to the same binding, by passing the status |
f40f0d207133
(edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
2336 cons cell to `edebug-restore-status'. The status cons cell |
f40f0d207133
(edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
2337 has the form (LOCUS . VALUE), where LOCUS can be a buffer |
f40f0d207133
(edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
2338 \(for a buffer-local binding), a frame (for a frame-local binding), |
f40f0d207133
(edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
2339 or nil (if the default binding is current)." |
f40f0d207133
(edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
2340 (cons (variable-binding-locus var) |
f40f0d207133
(edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
2341 (symbol-value var))) |
f40f0d207133
(edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
2342 |
f40f0d207133
(edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
2343 (defun edebug-restore-status (var status) |
f40f0d207133
(edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
2344 "Reset VAR based on STATUS. |
f40f0d207133
(edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
2345 STATUS should be a list you got from `edebug-var-status'." |
f40f0d207133
(edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
2346 (let ((locus (car status)) |
f40f0d207133
(edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
2347 (value (cdr status))) |
f40f0d207133
(edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
2348 (cond ((bufferp locus) |
f40f0d207133
(edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
2349 (if (buffer-live-p locus) |
f40f0d207133
(edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
2350 (with-current-buffer locus |
f40f0d207133
(edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
2351 (set var value)))) |
f40f0d207133
(edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
2352 ((framep locus) |
f40f0d207133
(edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
2353 (modify-frame-parameters locus (list (cons var value)))) |
f40f0d207133
(edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
2354 (t |
f40f0d207133
(edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
2355 (set var value))))) |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2356 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2357 (defun edebug-enter-trace (edebug-body) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2358 (let ((edebug-stack-depth (1+ edebug-stack-depth)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2359 edebug-result) |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
2360 (edebug-print-trace-before |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2361 (format "%s args: %s" edebug-function edebug-args)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2362 (prog1 (setq edebug-result (funcall edebug-body)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2363 (edebug-print-trace-after |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2364 (format "%s result: %s" edebug-function edebug-result))))) |
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 (def-edebug-spec edebug-tracing (form body)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2367 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2368 (defmacro edebug-tracing (msg &rest body) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2369 "Print MSG in *edebug-trace* before and after evaluating BODY. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2370 The result of BODY is also printed." |
26519 | 2371 `(let ((edebug-stack-depth (1+ edebug-stack-depth)) |
2372 edebug-result) | |
2373 (edebug-print-trace-before ,msg) | |
2374 (prog1 (setq edebug-result (progn ,@body)) | |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
2375 (edebug-print-trace-after |
26519 | 2376 (format "%s result: %s" ,msg edebug-result))))) |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2377 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2378 (defun edebug-print-trace-before (msg) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2379 "Function called to print trace info before expression evaluation. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2380 MSG is printed after `::::{ '." |
661 | 2381 (edebug-trace-display |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2382 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
|
2383 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2384 (defun edebug-print-trace-after (msg) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2385 "Function called to print trace info after expression evaluation. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2386 MSG is printed after `::::} '." |
661 | 2387 (edebug-trace-display |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2388 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
|
2389 |
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 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2392 (defun edebug-slow-before (edebug-before-index) |
64222
ceb9ed49f7bb
(edebug-slow-after, edebug-slow-before): Do nothing if edebug-active.
Richard M. Stallman <rms@gnu.org>
parents:
64212
diff
changeset
|
2393 (unless edebug-active |
ceb9ed49f7bb
(edebug-slow-after, edebug-slow-before): Do nothing if edebug-active.
Richard M. Stallman <rms@gnu.org>
parents:
64212
diff
changeset
|
2394 ;; Debug current function given BEFORE position. |
ceb9ed49f7bb
(edebug-slow-after, edebug-slow-before): Do nothing if edebug-active.
Richard M. Stallman <rms@gnu.org>
parents:
64212
diff
changeset
|
2395 ;; Called from functions compiled with edebug-eval-top-level-form. |
ceb9ed49f7bb
(edebug-slow-after, edebug-slow-before): Do nothing if edebug-active.
Richard M. Stallman <rms@gnu.org>
parents:
64212
diff
changeset
|
2396 ;; Return the before index. |
ceb9ed49f7bb
(edebug-slow-after, edebug-slow-before): Do nothing if edebug-active.
Richard M. Stallman <rms@gnu.org>
parents:
64212
diff
changeset
|
2397 (setcar edebug-offset-indices edebug-before-index) |
ceb9ed49f7bb
(edebug-slow-after, edebug-slow-before): Do nothing if edebug-active.
Richard M. Stallman <rms@gnu.org>
parents:
64212
diff
changeset
|
2398 |
ceb9ed49f7bb
(edebug-slow-after, edebug-slow-before): Do nothing if edebug-active.
Richard M. Stallman <rms@gnu.org>
parents:
64212
diff
changeset
|
2399 ;; Increment frequency count |
ceb9ed49f7bb
(edebug-slow-after, edebug-slow-before): Do nothing if edebug-active.
Richard M. Stallman <rms@gnu.org>
parents:
64212
diff
changeset
|
2400 (aset edebug-freq-count edebug-before-index |
ceb9ed49f7bb
(edebug-slow-after, edebug-slow-before): Do nothing if edebug-active.
Richard M. Stallman <rms@gnu.org>
parents:
64212
diff
changeset
|
2401 (1+ (aref edebug-freq-count edebug-before-index))) |
ceb9ed49f7bb
(edebug-slow-after, edebug-slow-before): Do nothing if edebug-active.
Richard M. Stallman <rms@gnu.org>
parents:
64212
diff
changeset
|
2402 |
ceb9ed49f7bb
(edebug-slow-after, edebug-slow-before): Do nothing if edebug-active.
Richard M. Stallman <rms@gnu.org>
parents:
64212
diff
changeset
|
2403 (if (or (not (memq edebug-execution-mode '(Go-nonstop next))) |
ceb9ed49f7bb
(edebug-slow-after, edebug-slow-before): Do nothing if edebug-active.
Richard M. Stallman <rms@gnu.org>
parents:
64212
diff
changeset
|
2404 (edebug-input-pending-p)) |
ceb9ed49f7bb
(edebug-slow-after, edebug-slow-before): Do nothing if edebug-active.
Richard M. Stallman <rms@gnu.org>
parents:
64212
diff
changeset
|
2405 (edebug-debugger edebug-before-index 'before nil))) |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2406 edebug-before-index) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2407 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2408 (defun edebug-fast-before (edebug-before-index) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2409 ;; Do nothing. |
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 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2412 (defun edebug-slow-after (edebug-before-index edebug-after-index edebug-value) |
64222
ceb9ed49f7bb
(edebug-slow-after, edebug-slow-before): Do nothing if edebug-active.
Richard M. Stallman <rms@gnu.org>
parents:
64212
diff
changeset
|
2413 (if edebug-active |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2414 edebug-value |
64222
ceb9ed49f7bb
(edebug-slow-after, edebug-slow-before): Do nothing if edebug-active.
Richard M. Stallman <rms@gnu.org>
parents:
64212
diff
changeset
|
2415 ;; Debug current function given AFTER position and VALUE. |
ceb9ed49f7bb
(edebug-slow-after, edebug-slow-before): Do nothing if edebug-active.
Richard M. Stallman <rms@gnu.org>
parents:
64212
diff
changeset
|
2416 ;; Called from functions compiled with edebug-eval-top-level-form. |
ceb9ed49f7bb
(edebug-slow-after, edebug-slow-before): Do nothing if edebug-active.
Richard M. Stallman <rms@gnu.org>
parents:
64212
diff
changeset
|
2417 ;; Return VALUE. |
ceb9ed49f7bb
(edebug-slow-after, edebug-slow-before): Do nothing if edebug-active.
Richard M. Stallman <rms@gnu.org>
parents:
64212
diff
changeset
|
2418 (setcar edebug-offset-indices edebug-after-index) |
ceb9ed49f7bb
(edebug-slow-after, edebug-slow-before): Do nothing if edebug-active.
Richard M. Stallman <rms@gnu.org>
parents:
64212
diff
changeset
|
2419 |
ceb9ed49f7bb
(edebug-slow-after, edebug-slow-before): Do nothing if edebug-active.
Richard M. Stallman <rms@gnu.org>
parents:
64212
diff
changeset
|
2420 ;; Increment frequency count |
ceb9ed49f7bb
(edebug-slow-after, edebug-slow-before): Do nothing if edebug-active.
Richard M. Stallman <rms@gnu.org>
parents:
64212
diff
changeset
|
2421 (aset edebug-freq-count edebug-after-index |
ceb9ed49f7bb
(edebug-slow-after, edebug-slow-before): Do nothing if edebug-active.
Richard M. Stallman <rms@gnu.org>
parents:
64212
diff
changeset
|
2422 (1+ (aref edebug-freq-count edebug-after-index))) |
ceb9ed49f7bb
(edebug-slow-after, edebug-slow-before): Do nothing if edebug-active.
Richard M. Stallman <rms@gnu.org>
parents:
64212
diff
changeset
|
2423 (if edebug-test-coverage (edebug-update-coverage)) |
ceb9ed49f7bb
(edebug-slow-after, edebug-slow-before): Do nothing if edebug-active.
Richard M. Stallman <rms@gnu.org>
parents:
64212
diff
changeset
|
2424 |
ceb9ed49f7bb
(edebug-slow-after, edebug-slow-before): Do nothing if edebug-active.
Richard M. Stallman <rms@gnu.org>
parents:
64212
diff
changeset
|
2425 (if (and (eq edebug-execution-mode 'Go-nonstop) |
ceb9ed49f7bb
(edebug-slow-after, edebug-slow-before): Do nothing if edebug-active.
Richard M. Stallman <rms@gnu.org>
parents:
64212
diff
changeset
|
2426 (not (edebug-input-pending-p))) |
ceb9ed49f7bb
(edebug-slow-after, edebug-slow-before): Do nothing if edebug-active.
Richard M. Stallman <rms@gnu.org>
parents:
64212
diff
changeset
|
2427 ;; Just return result. |
ceb9ed49f7bb
(edebug-slow-after, edebug-slow-before): Do nothing if edebug-active.
Richard M. Stallman <rms@gnu.org>
parents:
64212
diff
changeset
|
2428 edebug-value |
ceb9ed49f7bb
(edebug-slow-after, edebug-slow-before): Do nothing if edebug-active.
Richard M. Stallman <rms@gnu.org>
parents:
64212
diff
changeset
|
2429 (edebug-debugger edebug-after-index 'after edebug-value) |
ceb9ed49f7bb
(edebug-slow-after, edebug-slow-before): Do nothing if edebug-active.
Richard M. Stallman <rms@gnu.org>
parents:
64212
diff
changeset
|
2430 ))) |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2431 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2432 (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
|
2433 ;; Do nothing but return the value. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2434 edebug-value) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2435 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2436 (defun edebug-run-slow () |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2437 (defalias 'edebug-before 'edebug-slow-before) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2438 (defalias 'edebug-after 'edebug-slow-after)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2439 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2440 ;; This is not used, yet. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2441 (defun edebug-run-fast () |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2442 (defalias 'edebug-before 'edebug-fast-before) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2443 (defalias 'edebug-after 'edebug-fast-after)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2444 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2445 (edebug-run-slow) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2446 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2447 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2448 (defun edebug-update-coverage () |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2449 (let ((old-result (aref edebug-coverage edebug-after-index))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2450 (cond |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2451 ((eq 'ok-coverage old-result)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2452 ((eq 'unknown old-result) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2453 (aset edebug-coverage edebug-after-index edebug-value)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2454 ;; Test if a different result. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2455 ((not (eq edebug-value old-result)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2456 (aset edebug-coverage edebug-after-index 'ok-coverage))))) |
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 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2459 ;; Dynamically declared unbound variables. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2460 (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
|
2461 (defvar edebug-breakpoints) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2462 (defvar edebug-break-data) ; break data for current function. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2463 (defvar edebug-break) ; whether a break occurred. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2464 (defvar edebug-global-break) ; whether a global break occurred. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2465 (defvar edebug-break-condition) ; whether the breakpoint is conditional. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2466 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2467 (defvar edebug-break-result nil) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2468 (defvar edebug-global-break-result nil) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2469 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2470 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2471 (defun edebug-debugger (edebug-offset-index edebug-arg-mode edebug-value) |
46716
f9f0026b4c12
(edebug-debugger): If inside redisplay, just return.
Richard M. Stallman <rms@gnu.org>
parents:
44518
diff
changeset
|
2472 (if inhibit-redisplay |
f9f0026b4c12
(edebug-debugger): If inside redisplay, just return.
Richard M. Stallman <rms@gnu.org>
parents:
44518
diff
changeset
|
2473 ;; Don't really try to enter edebug within an eval from redisplay. |
f9f0026b4c12
(edebug-debugger): If inside redisplay, just return.
Richard M. Stallman <rms@gnu.org>
parents:
44518
diff
changeset
|
2474 edebug-value |
f9f0026b4c12
(edebug-debugger): If inside redisplay, just return.
Richard M. Stallman <rms@gnu.org>
parents:
44518
diff
changeset
|
2475 ;; Check breakpoints and pending input. |
f9f0026b4c12
(edebug-debugger): If inside redisplay, just return.
Richard M. Stallman <rms@gnu.org>
parents:
44518
diff
changeset
|
2476 ;; If edebug display should be updated, call edebug-display. |
f9f0026b4c12
(edebug-debugger): If inside redisplay, just return.
Richard M. Stallman <rms@gnu.org>
parents:
44518
diff
changeset
|
2477 ;; Return edebug-value. |
f9f0026b4c12
(edebug-debugger): If inside redisplay, just return.
Richard M. Stallman <rms@gnu.org>
parents:
44518
diff
changeset
|
2478 (let* ( ;; This needs to be here since breakpoints may be changed. |
f9f0026b4c12
(edebug-debugger): If inside redisplay, just return.
Richard M. Stallman <rms@gnu.org>
parents:
44518
diff
changeset
|
2479 (edebug-breakpoints (car (cdr edebug-data))) ; list of breakpoints |
f9f0026b4c12
(edebug-debugger): If inside redisplay, just return.
Richard M. Stallman <rms@gnu.org>
parents:
44518
diff
changeset
|
2480 (edebug-break-data (assq edebug-offset-index edebug-breakpoints)) |
f9f0026b4c12
(edebug-debugger): If inside redisplay, just return.
Richard M. Stallman <rms@gnu.org>
parents:
44518
diff
changeset
|
2481 (edebug-break-condition (car (cdr edebug-break-data))) |
f9f0026b4c12
(edebug-debugger): If inside redisplay, just return.
Richard M. Stallman <rms@gnu.org>
parents:
44518
diff
changeset
|
2482 (edebug-global-break |
f9f0026b4c12
(edebug-debugger): If inside redisplay, just return.
Richard M. Stallman <rms@gnu.org>
parents:
44518
diff
changeset
|
2483 (if edebug-global-break-condition |
f9f0026b4c12
(edebug-debugger): If inside redisplay, just return.
Richard M. Stallman <rms@gnu.org>
parents:
44518
diff
changeset
|
2484 (condition-case nil |
f9f0026b4c12
(edebug-debugger): If inside redisplay, just return.
Richard M. Stallman <rms@gnu.org>
parents:
44518
diff
changeset
|
2485 (setq edebug-global-break-result |
f9f0026b4c12
(edebug-debugger): If inside redisplay, just return.
Richard M. Stallman <rms@gnu.org>
parents:
44518
diff
changeset
|
2486 (eval edebug-global-break-condition)) |
f9f0026b4c12
(edebug-debugger): If inside redisplay, just return.
Richard M. Stallman <rms@gnu.org>
parents:
44518
diff
changeset
|
2487 (error nil)))) |
f9f0026b4c12
(edebug-debugger): If inside redisplay, just return.
Richard M. Stallman <rms@gnu.org>
parents:
44518
diff
changeset
|
2488 (edebug-break)) |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2489 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2490 ;;; (edebug-trace "exp: %s" edebug-value) |
46716
f9f0026b4c12
(edebug-debugger): If inside redisplay, just return.
Richard M. Stallman <rms@gnu.org>
parents:
44518
diff
changeset
|
2491 ;; Test whether we should break. |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
2492 (setq edebug-break |
46716
f9f0026b4c12
(edebug-debugger): If inside redisplay, just return.
Richard M. Stallman <rms@gnu.org>
parents:
44518
diff
changeset
|
2493 (or edebug-global-break |
f9f0026b4c12
(edebug-debugger): If inside redisplay, just return.
Richard M. Stallman <rms@gnu.org>
parents:
44518
diff
changeset
|
2494 (and edebug-break-data |
f9f0026b4c12
(edebug-debugger): If inside redisplay, just return.
Richard M. Stallman <rms@gnu.org>
parents:
44518
diff
changeset
|
2495 (or (not edebug-break-condition) |
f9f0026b4c12
(edebug-debugger): If inside redisplay, just return.
Richard M. Stallman <rms@gnu.org>
parents:
44518
diff
changeset
|
2496 (setq edebug-break-result |
f9f0026b4c12
(edebug-debugger): If inside redisplay, just return.
Richard M. Stallman <rms@gnu.org>
parents:
44518
diff
changeset
|
2497 (eval edebug-break-condition)))))) |
f9f0026b4c12
(edebug-debugger): If inside redisplay, just return.
Richard M. Stallman <rms@gnu.org>
parents:
44518
diff
changeset
|
2498 (if (and edebug-break |
f9f0026b4c12
(edebug-debugger): If inside redisplay, just return.
Richard M. Stallman <rms@gnu.org>
parents:
44518
diff
changeset
|
2499 (nth 2 edebug-break-data)) ; is it temporary? |
f9f0026b4c12
(edebug-debugger): If inside redisplay, just return.
Richard M. Stallman <rms@gnu.org>
parents:
44518
diff
changeset
|
2500 ;; Delete the breakpoint. |
f9f0026b4c12
(edebug-debugger): If inside redisplay, just return.
Richard M. Stallman <rms@gnu.org>
parents:
44518
diff
changeset
|
2501 (setcdr edebug-data |
f9f0026b4c12
(edebug-debugger): If inside redisplay, just return.
Richard M. Stallman <rms@gnu.org>
parents:
44518
diff
changeset
|
2502 (cons (delq edebug-break-data edebug-breakpoints) |
f9f0026b4c12
(edebug-debugger): If inside redisplay, just return.
Richard M. Stallman <rms@gnu.org>
parents:
44518
diff
changeset
|
2503 (cdr (cdr edebug-data))))) |
f9f0026b4c12
(edebug-debugger): If inside redisplay, just return.
Richard M. Stallman <rms@gnu.org>
parents:
44518
diff
changeset
|
2504 |
f9f0026b4c12
(edebug-debugger): If inside redisplay, just return.
Richard M. Stallman <rms@gnu.org>
parents:
44518
diff
changeset
|
2505 ;; Display if mode is not go, continue, or Continue-fast |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
2506 ;; or break, or input is pending, |
46716
f9f0026b4c12
(edebug-debugger): If inside redisplay, just return.
Richard M. Stallman <rms@gnu.org>
parents:
44518
diff
changeset
|
2507 (if (or (not (memq edebug-execution-mode '(go continue Continue-fast))) |
f9f0026b4c12
(edebug-debugger): If inside redisplay, just return.
Richard M. Stallman <rms@gnu.org>
parents:
44518
diff
changeset
|
2508 edebug-break |
f9f0026b4c12
(edebug-debugger): If inside redisplay, just return.
Richard M. Stallman <rms@gnu.org>
parents:
44518
diff
changeset
|
2509 (edebug-input-pending-p)) |
f9f0026b4c12
(edebug-debugger): If inside redisplay, just return.
Richard M. Stallman <rms@gnu.org>
parents:
44518
diff
changeset
|
2510 (edebug-display)) ; <--------------- display |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
2511 |
46716
f9f0026b4c12
(edebug-debugger): If inside redisplay, just return.
Richard M. Stallman <rms@gnu.org>
parents:
44518
diff
changeset
|
2512 edebug-value |
f9f0026b4c12
(edebug-debugger): If inside redisplay, just return.
Richard M. Stallman <rms@gnu.org>
parents:
44518
diff
changeset
|
2513 ))) |
661 | 2514 |
2515 | |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2516 ;; window-start now stored with each function. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2517 ;;(defvar edebug-window-start nil) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2518 ;; Remember where each buffers' window starts between edebug calls. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2519 ;; This is to avoid spurious recentering. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2520 ;; Does this still need to be buffer-local?? |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2521 ;;(setq-default edebug-window-start nil) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2522 ;;(make-variable-buffer-local 'edebug-window-start) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2523 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2524 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2525 ;; Dynamically declared unbound vars |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2526 (defvar edebug-point) ; the point in edebug buffer |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2527 (defvar edebug-outside-buffer) ; the current-buffer outside of edebug |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2528 (defvar edebug-outside-point) ; the point outside of edebug |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2529 (defvar edebug-outside-mark) ; the mark outside of edebug |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2530 (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
|
2531 (defvar edebug-outside-windows) ; outside window configuration |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2532 (defvar edebug-eval-buffer) ; for the evaluation list. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2533 (defvar edebug-outside-o-a-p) ; outside overlay-arrow-position |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2534 (defvar edebug-outside-o-a-s) ; outside overlay-arrow-string |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2535 (defvar edebug-outside-c-i-e-a) ; outside cursor-in-echo-area |
67780
6f62623c8c61
(edebug-all-defs, edebug-all-forms): Add autoload cookies.
Juri Linkov <juri@jurta.org>
parents:
67635
diff
changeset
|
2536 (defvar edebug-outside-d-c-i-n-s-w) ; outside default-cursor-in-non-selected-windows |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2537 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2538 (defvar edebug-eval-list nil) ;; List of expressions to evaluate. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2539 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2540 (defvar edebug-previous-result nil) ;; Last result returned. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2541 |
6666
c6430bc570f9
Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents:
6512
diff
changeset
|
2542 ;; 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
|
2543 (defalias 'edebug-mark-marker 'mark-marker) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2544 |
661 | 2545 |
2546 (defun edebug-display () | |
54499
b7693565f757
(edebug-display): Bring up a debug trace if the source location can't be found.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
53198
diff
changeset
|
2547 (unless (marker-position edebug-def-mark) |
b7693565f757
(edebug-display): Bring up a debug trace if the source location can't be found.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
53198
diff
changeset
|
2548 ;; The buffer holding the source has been killed. |
b7693565f757
(edebug-display): Bring up a debug trace if the source location can't be found.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
53198
diff
changeset
|
2549 ;; Let's at least show a backtrace so the user can figure out |
b7693565f757
(edebug-display): Bring up a debug trace if the source location can't be found.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
53198
diff
changeset
|
2550 ;; which function we're talking about. |
b7693565f757
(edebug-display): Bring up a debug trace if the source location can't be found.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
53198
diff
changeset
|
2551 (debug)) |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2552 ;; Setup windows for edebug, determine mode, maybe enter recursive-edit. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2553 ;; Uses local variables of edebug-enter, edebug-before, edebug-after |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2554 ;; and edebug-debugger. |
661 | 2555 (let ((edebug-active t) ; for minor mode alist |
64222
ceb9ed49f7bb
(edebug-slow-after, edebug-slow-before): Do nothing if edebug-active.
Richard M. Stallman <rms@gnu.org>
parents:
64212
diff
changeset
|
2556 (edebug-with-timeout-suspend (with-timeout-suspend)) |
661 | 2557 edebug-stop ; should we enter recursive-edit |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2558 (edebug-point (+ edebug-def-mark |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2559 (aref (nth 2 edebug-data) edebug-offset-index))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2560 edebug-buffer-outside-point ; current point in edebug-buffer |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2561 ;; window displaying edebug-buffer |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2562 (edebug-window-data (nth 3 edebug-data)) |
661 | 2563 (edebug-outside-window (selected-window)) |
2564 (edebug-outside-buffer (current-buffer)) | |
2565 (edebug-outside-point (point)) | |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2566 (edebug-outside-mark (edebug-mark)) |
72344
79197e6c8618
* emacs-lisp/edebug.el (edebug-recursive-edit): Don't save and
Chong Yidong <cyd@stupidchicken.com>
parents:
71852
diff
changeset
|
2567 (edebug-outside-unread-command-events unread-command-events) |
661 | 2568 edebug-outside-windows ; window or screen configuration |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2569 edebug-buffer-points |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
2570 |
661 | 2571 edebug-eval-buffer ; declared here so we can kill it below |
2572 (edebug-eval-result-list (and edebug-eval-list | |
2573 (edebug-eval-result-list))) | |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2574 edebug-trace-window |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2575 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
|
2576 |
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-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
|
2578 (edebug-outside-o-a-s overlay-arrow-string) |
67780
6f62623c8c61
(edebug-all-defs, edebug-all-forms): Add autoload cookies.
Juri Linkov <juri@jurta.org>
parents:
67635
diff
changeset
|
2579 (edebug-outside-c-i-e-a cursor-in-echo-area) |
6f62623c8c61
(edebug-all-defs, edebug-all-forms): Add autoload cookies.
Juri Linkov <juri@jurta.org>
parents:
67635
diff
changeset
|
2580 (edebug-outside-d-c-i-n-s-w default-cursor-in-non-selected-windows)) |
6666
c6430bc570f9
Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents:
6512
diff
changeset
|
2581 (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
|
2582 (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
|
2583 (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
|
2584 (cursor-in-echo-area nil) |
67780
6f62623c8c61
(edebug-all-defs, edebug-all-forms): Add autoload cookies.
Juri Linkov <juri@jurta.org>
parents:
67635
diff
changeset
|
2585 (default-cursor-in-non-selected-windows t) |
72347
494f2c627b5b
Minor fix to last change.
Chong Yidong <cyd@stupidchicken.com>
parents:
72344
diff
changeset
|
2586 (unread-command-events unread-command-events) |
6666
c6430bc570f9
Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents:
6512
diff
changeset
|
2587 ;; 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
|
2588 ) |
c6430bc570f9
Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents:
6512
diff
changeset
|
2589 (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
|
2590 (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
|
2591 (error "Buffer defining %s not found" edebug-function))) |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
2592 |
6666
c6430bc570f9
Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents:
6512
diff
changeset
|
2593 (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
|
2594 ;; 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
|
2595 (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
|
2596 |
c6430bc570f9
Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents:
6512
diff
changeset
|
2597 (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
|
2598 ;; Save windows now before we modify them. |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
2599 (setq edebug-outside-windows |
6666
c6430bc570f9
Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents:
6512
diff
changeset
|
2600 (edebug-current-windows edebug-save-windows))) |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
2601 |
6666
c6430bc570f9
Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents:
6512
diff
changeset
|
2602 (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
|
2603 (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
|
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 ;; First move the edebug buffer point to edebug-point |
14846 | 2606 ;; so that window start doesn't get changed when we display it. |
2607 ;; 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
|
2608 ;;(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
|
2609 ;;(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
|
2610 |
c6430bc570f9
Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents:
6512
diff
changeset
|
2611 ;; 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
|
2612 ;; 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
|
2613 (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
|
2614 (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
|
2615 |
c6430bc570f9
Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents:
6512
diff
changeset
|
2616 ;; Now display eval list, if any. |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
2617 ;; This is done after the pop to edebug-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
|
2618 ;; 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
|
2619 (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
|
2620 ;; 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
|
2621 (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
|
2622 (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
|
2623 |
c6430bc570f9
Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents:
6512
diff
changeset
|
2624 (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
|
2625 (goto-char edebug-point) |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
2626 |
6666
c6430bc570f9
Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents:
6512
diff
changeset
|
2627 (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
|
2628 ;; 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
|
2629 ;; 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
|
2630 (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
|
2631 (let ((debug-on-error nil)) |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
2632 (error "Source has changed - reevaluate definition of %s" |
6666
c6430bc570f9
Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents:
6512
diff
changeset
|
2633 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
|
2634 ))) |
c6430bc570f9
Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents:
6512
diff
changeset
|
2635 |
c6430bc570f9
Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents:
6512
diff
changeset
|
2636 (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
|
2637 (edebug-adjust-window (cdr edebug-window-data))) |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
2638 |
6666
c6430bc570f9
Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents:
6512
diff
changeset
|
2639 ;; Test if there is input, not including keyboard macros. |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
2640 (if (edebug-input-pending-p) |
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 (progn |
c6430bc570f9
Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents:
6512
diff
changeset
|
2642 (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
|
2643 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
|
2644 (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
|
2645 ;; (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
|
2646 )) |
c6430bc570f9
Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents:
6512
diff
changeset
|
2647 ;; 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
|
2648 (edebug-overlay-arrow) |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
2649 |
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 (cond |
c6430bc570f9
Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents:
6512
diff
changeset
|
2651 ((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
|
2652 ;; 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
|
2653 (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
|
2654 (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
|
2655 (beep) |
c6430bc570f9
Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents:
6512
diff
changeset
|
2656 (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
|
2657 (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
|
2658 (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
|
2659 (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
|
2660 (cond |
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-global-break |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
2662 (message "Global Break: %s => %s" |
6666
c6430bc570f9
Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents:
6512
diff
changeset
|
2663 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
|
2664 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
|
2665 (edebug-break-condition |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
2666 (message "Break: %s => %s" |
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
2667 edebug-break-condition |
6666
c6430bc570f9
Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents:
6512
diff
changeset
|
2668 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
|
2669 ((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
|
2670 (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
|
2671 (t))) |
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 (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
|
2674 |
72347
494f2c627b5b
Minor fix to last change.
Chong Yidong <cyd@stupidchicken.com>
parents:
72344
diff
changeset
|
2675 (setq unread-command-events 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
|
2676 (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
|
2677 (progn |
c6430bc570f9
Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents:
6512
diff
changeset
|
2678 ;; 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
|
2679 (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
|
2680 (not (eq edebug-execution-mode 'Continue-fast))) |
69255
651c5e7479de
(edebug-display): Use `edebug-sit-for-seconds' value instead of a literal
Eli Zaretskii <eliz@gnu.org>
parents:
68648
diff
changeset
|
2681 (edebug-sit-for edebug-sit-for-seconds)) ; Show message. |
6666
c6430bc570f9
Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents:
6512
diff
changeset
|
2682 (edebug-previous-result))) |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
2683 |
6666
c6430bc570f9
Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents:
6512
diff
changeset
|
2684 (cond |
c6430bc570f9
Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents:
6512
diff
changeset
|
2685 (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
|
2686 (cond |
69255
651c5e7479de
(edebug-display): Use `edebug-sit-for-seconds' value instead of a literal
Eli Zaretskii <eliz@gnu.org>
parents:
68648
diff
changeset
|
2687 ((eq edebug-execution-mode 'continue) |
651c5e7479de
(edebug-display): Use `edebug-sit-for-seconds' value instead of a literal
Eli Zaretskii <eliz@gnu.org>
parents:
68648
diff
changeset
|
2688 (edebug-sit-for edebug-sit-for-seconds)) |
6666
c6430bc570f9
Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents:
6512
diff
changeset
|
2689 ((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
|
2690 (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
|
2691 ;; 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
|
2692 ((eq edebug-execution-mode 'trace) |
18376
9ae76ef113f6
(edebug-sit-for-seconds): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
18017
diff
changeset
|
2693 (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
|
2694 ((eq edebug-execution-mode 'Trace-fast) |
72344
79197e6c8618
* emacs-lisp/edebug.el (edebug-recursive-edit): Don't save and
Chong Yidong <cyd@stupidchicken.com>
parents:
71852
diff
changeset
|
2695 (edebug-sit-for 0))) ; Force update and continue. |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
2696 |
6666
c6430bc570f9
Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents:
6512
diff
changeset
|
2697 (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
|
2698 (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
|
2699 (memq edebug-execution-mode '(step next)) |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
2700 (eq edebug-arg-mode 'error)) |
6666
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 ;; (setq edebug-execution-mode 'step) |
14846 | 2703 ;; (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
|
2704 (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
|
2705 |
c6430bc570f9
Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents:
6512
diff
changeset
|
2706 ;; 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
|
2707 (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
|
2708 (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
|
2709 (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
|
2710 ;; 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
|
2711 (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
|
2712 (progn |
c6430bc570f9
Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents:
6512
diff
changeset
|
2713 (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
|
2714 (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
|
2715 |
c6430bc570f9
Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents:
6512
diff
changeset
|
2716 ;; 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
|
2717 ;; 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
|
2718 (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
|
2719 (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
|
2720 (setq edebug-trace-window-start |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
2721 (and 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
|
2722 (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
|
2723 |
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 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
|
2725 (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
|
2726 (progn |
c6430bc570f9
Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents:
6512
diff
changeset
|
2727 (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
|
2728 |
c6430bc570f9
Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents:
6512
diff
changeset
|
2729 ;; 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
|
2730 ;; 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
|
2731 ;; 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
|
2732 (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
|
2733 (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
|
2734 |
c6430bc570f9
Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents:
6512
diff
changeset
|
2735 ;; 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
|
2736 (if edebug-trace-window |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
2737 (set-window-start 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
|
2738 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
|
2739 |
c6430bc570f9
Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents:
6512
diff
changeset
|
2740 ;; 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
|
2741 (let ((window (car edebug-window-data))) |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
2742 (if (and window (edebug-window-live-p 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
|
2743 (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
|
2744 (progn |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
2745 (set-window-start window (cdr edebug-window-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
|
2746 '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
|
2747 ;; 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
|
2748 ;; Needed in addition to setting the buffer point |
14846 | 2749 ;; - 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
|
2750 ;; 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
|
2751 ;; 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
|
2752 ;; (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
|
2753 ))) |
c6430bc570f9
Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents:
6512
diff
changeset
|
2754 |
c6430bc570f9
Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents:
6512
diff
changeset
|
2755 ;; 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
|
2756 ;; (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
|
2757 ) |
c6430bc570f9
Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents:
6512
diff
changeset
|
2758 ;; 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
|
2759 ;; 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
|
2760 ;; 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
|
2761 (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
|
2762 (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
|
2763 ) ; 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
|
2764 |
c6430bc570f9
Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents:
6512
diff
changeset
|
2765 ;; Restore current buffer always, in case application needs it. |
76782
f960587873db
(edebug-display): Don't go to edebug-outside-buffer if it is dead.
Richard M. Stallman <rms@gnu.org>
parents:
76298
diff
changeset
|
2766 (if (buffer-name edebug-outside-buffer) |
f960587873db
(edebug-display): Don't go to edebug-outside-buffer if it is dead.
Richard M. Stallman <rms@gnu.org>
parents:
76298
diff
changeset
|
2767 (set-buffer edebug-outside-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
|
2768 ;; 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
|
2769 ;; Needed even if restoring windows because |
14846 | 2770 ;; that doesn't restore point and mark in the current buffer. |
2771 ;; 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
|
2772 (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
|
2773 (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
|
2774 (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
|
2775 ;; 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
|
2776 (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
|
2777 ) ; 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
|
2778 ;; 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
|
2779 |
c6430bc570f9
Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents:
6512
diff
changeset
|
2780 ;; Restore edebug-buffer's outside point. |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
2781 ;; (edebug-trace "restore edebug-buffer point: %s" |
6666
c6430bc570f9
Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents:
6512
diff
changeset
|
2782 ;; 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
|
2783 (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
|
2784 (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
|
2785 (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
|
2786 (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
|
2787 ;; ... 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
|
2788 ) |
64222
ceb9ed49f7bb
(edebug-slow-after, edebug-slow-before): Do nothing if edebug-active.
Richard M. Stallman <rms@gnu.org>
parents:
64212
diff
changeset
|
2789 (with-timeout-unsuspend edebug-with-timeout-suspend) |
6666
c6430bc570f9
Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents:
6512
diff
changeset
|
2790 ;; 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
|
2791 (setq |
72344
79197e6c8618
* emacs-lisp/edebug.el (edebug-recursive-edit): Don't save and
Chong Yidong <cyd@stupidchicken.com>
parents:
71852
diff
changeset
|
2792 unread-command-events edebug-outside-unread-command-events |
6666
c6430bc570f9
Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents:
6512
diff
changeset
|
2793 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
|
2794 overlay-arrow-string edebug-outside-o-a-s |
67780
6f62623c8c61
(edebug-all-defs, edebug-all-forms): Add autoload cookies.
Juri Linkov <juri@jurta.org>
parents:
67635
diff
changeset
|
2795 cursor-in-echo-area edebug-outside-c-i-e-a |
6f62623c8c61
(edebug-all-defs, edebug-all-forms): Add autoload cookies.
Juri Linkov <juri@jurta.org>
parents:
67635
diff
changeset
|
2796 default-cursor-in-non-selected-windows edebug-outside-d-c-i-n-s-w) |
6666
c6430bc570f9
Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents:
6512
diff
changeset
|
2797 ))) |
c6430bc570f9
Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents:
6512
diff
changeset
|
2798 |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2799 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2800 (defvar edebug-number-of-recursions 0) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2801 ;; Number of recursive edits started by edebug. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2802 ;; Should be 0 at the top level. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2803 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2804 (defvar edebug-recursion-depth 0) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2805 ;; Value of recursion-depth when edebug was called. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2806 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2807 ;; Dynamically declared unbound vars |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2808 (defvar edebug-outside-match-data) ; match data outside of edebug |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2809 (defvar edebug-backtrace-buffer) ; each recursive edit gets its own |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
2810 (defvar edebug-inside-windows) |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2811 (defvar edebug-interactive-p) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2812 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2813 (defvar edebug-outside-map) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2814 (defvar edebug-outside-standard-output) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2815 (defvar edebug-outside-standard-input) |
25812
edf16534a337
(edebug-outside-current-prefix-arg):
Phillip Rulon <pjr@gnu.org>
parents:
25056
diff
changeset
|
2816 (defvar edebug-outside-current-prefix-arg) |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2817 (defvar edebug-outside-last-command-char) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2818 (defvar edebug-outside-last-command) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2819 (defvar edebug-outside-this-command) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2820 (defvar edebug-outside-last-input-char) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2821 |
6671
5b26038687ed
(edebug-emacs-19-specific): Renamed from edebug-fsf19-specific.
Richard M. Stallman <rms@gnu.org>
parents:
6666
diff
changeset
|
2822 ;; 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
|
2823 ;; 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
|
2824 ;; 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
|
2825 ;; 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
|
2826 |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2827 ;; Emacs 18 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2828 (defvar edebug-outside-unread-command-char) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2829 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2830 ;; Emacs 19. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2831 (defvar edebug-outside-last-command-event) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2832 (defvar edebug-outside-unread-command-events) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2833 (defvar edebug-outside-last-input-event) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2834 (defvar edebug-outside-last-event-frame) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2835 (defvar edebug-outside-last-nonmenu-event) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2836 (defvar edebug-outside-track-mouse) |
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 ;; Disable byte compiler warnings about unread-command-char and -event |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2839 ;; (maybe works with byte-compile-version 2.22 at least) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2840 (defvar edebug-unread-command-char-warning) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2841 (defvar edebug-unread-command-event-warning) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2842 (eval-when-compile |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2843 (setq edebug-unread-command-char-warning |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2844 (get 'unread-command-char 'byte-obsolete-variable)) |
33758 | 2845 (put 'unread-command-char 'byte-obsolete-variable nil)) |
661 | 2846 |
2847 (defun edebug-recursive-edit () | |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2848 ;; Start up a recursive edit inside of edebug. |
661 | 2849 ;; 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
|
2850 ;; Assume that none of the variables below are buffer-local. |
661 | 2851 (let ((edebug-buffer-read-only buffer-read-only) |
2852 ;; match-data must be done in the outside buffer | |
2853 (edebug-outside-match-data | |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2854 (save-excursion ; might be unnecessary now?? |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2855 (set-buffer edebug-outside-buffer) ; in case match buffer different |
661 | 2856 (match-data))) |
2857 | |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2858 ;;(edebug-number-of-recursions (1+ edebug-number-of-recursions)) |
661 | 2859 (edebug-recursion-depth (recursion-depth)) |
2860 edebug-entered ; bind locally to nil | |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2861 (edebug-interactive-p nil) ; again non-interactive |
661 | 2862 edebug-backtrace-buffer ; each recursive edit gets its own |
2863 ;; The window configuration may be saved and restored | |
2864 ;; during a recursive-edit | |
2865 edebug-inside-windows | |
2866 | |
2867 (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
|
2868 |
661 | 2869 (edebug-outside-standard-output standard-output) |
2870 (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
|
2871 (edebug-outside-defining-kbd-macro defining-kbd-macro) |
661 | 2872 |
2873 (edebug-outside-last-command-char last-command-char) | |
2874 (edebug-outside-last-command last-command) | |
2875 (edebug-outside-this-command this-command) | |
2876 (edebug-outside-last-input-char last-input-char) | |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2877 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2878 (edebug-outside-unread-command-char unread-command-char) |
25812
edf16534a337
(edebug-outside-current-prefix-arg):
Phillip Rulon <pjr@gnu.org>
parents:
25056
diff
changeset
|
2879 (edebug-outside-current-prefix-arg current-prefix-arg) |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2880 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2881 (edebug-outside-last-input-event last-input-event) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2882 (edebug-outside-last-command-event last-command-event) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2883 (edebug-outside-last-event-frame last-event-frame) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2884 (edebug-outside-last-nonmenu-event last-nonmenu-event) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2885 (edebug-outside-track-mouse track-mouse) |
661 | 2886 ) |
2887 | |
2888 (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
|
2889 (let ( |
c6430bc570f9
Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents:
6512
diff
changeset
|
2890 ;; 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
|
2891 ;; 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
|
2892 (last-command-char last-command-char) |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
2893 (last-command last-command) |
6666
c6430bc570f9
Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents:
6512
diff
changeset
|
2894 (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
|
2895 (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
|
2896 |
c6430bc570f9
Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents:
6512
diff
changeset
|
2897 ;; 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
|
2898 (unread-command-char -1) |
25812
edf16534a337
(edebug-outside-current-prefix-arg):
Phillip Rulon <pjr@gnu.org>
parents:
25056
diff
changeset
|
2899 (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
|
2900 |
c6430bc570f9
Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents:
6512
diff
changeset
|
2901 ;; 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
|
2902 (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
|
2903 (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
|
2904 (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
|
2905 (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
|
2906 (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
|
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 ;; 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
|
2909 (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
|
2910 (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
|
2911 |
c6430bc570f9
Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents:
6512
diff
changeset
|
2912 ;; Don't keep defining a kbd macro. |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
2913 (defining-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
|
2914 (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
|
2915 |
c6430bc570f9
Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents:
6512
diff
changeset
|
2916 ;; others?? |
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 |
c6430bc570f9
Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents:
6512
diff
changeset
|
2919 (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
|
2920 (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
|
2921 (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
|
2922 |
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 buffer-read-only t) |
16308
2334a3d634c0
(edebug-original-signal): Don't define it.
Richard M. Stallman <rms@gnu.org>
parents:
16299
diff
changeset
|
2924 (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
|
2925 |
c6430bc570f9
Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents:
6512
diff
changeset
|
2926 (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
|
2927 (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
|
2928 (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
|
2929 |
c6430bc570f9
Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents:
6512
diff
changeset
|
2930 ;; 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
|
2931 (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
|
2932 (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
|
2933 (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
|
2934 ;; 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
|
2935 (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
|
2936 |
c6430bc570f9
Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents:
6512
diff
changeset
|
2937 ;; 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
|
2938 ;; (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
|
2939 |
21162
6c70fa8e1a5d
(edebug-recursive-edit)
Richard M. Stallman <rms@gnu.org>
parents:
20832
diff
changeset
|
2940 (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
|
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 ;; 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
|
2943 ;; 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
|
2944 (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
|
2945 (progn |
c6430bc570f9
Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents:
6512
diff
changeset
|
2946 (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
|
2947 (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
|
2948 (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
|
2949 (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
|
2950 (use-local-map edebug-outside-map) |
76298
872a30c0f872
(edebug-kill-buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
75346
diff
changeset
|
2951 (remove-hook 'kill-buffer-hook 'edebug-kill-buffer t) |
6666
c6430bc570f9
Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents:
6512
diff
changeset
|
2952 ) |
c6430bc570f9
Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents:
6512
diff
changeset
|
2953 ;; 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
|
2954 (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
|
2955 ));; 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
|
2956 |
c6430bc570f9
Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents:
6512
diff
changeset
|
2957 ;; Reset global vars to outside values, in case they have been changed. |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
2958 (setq |
6666
c6430bc570f9
Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents:
6512
diff
changeset
|
2959 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
|
2960 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
|
2961 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
|
2962 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
|
2963 unread-command-char edebug-outside-unread-command-char |
25812
edf16534a337
(edebug-outside-current-prefix-arg):
Phillip Rulon <pjr@gnu.org>
parents:
25056
diff
changeset
|
2964 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
|
2965 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
|
2966 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
|
2967 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
|
2968 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
|
2969 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
|
2970 |
c6430bc570f9
Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents:
6512
diff
changeset
|
2971 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
|
2972 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
|
2973 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
|
2974 )) |
c6430bc570f9
Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents:
6512
diff
changeset
|
2975 )) |
661 | 2976 |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2977 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2978 ;;; Display related functions |
661 | 2979 |
2980 (defun edebug-adjust-window (old-start) | |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2981 ;; If pos is not visible, adjust current window to fit following context. |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
2982 ;;; (message "window: %s old-start: %s window-start: %s pos: %s" |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2983 ;;; (selected-window) old-start (window-start) (point)) (sit-for 5) |
661 | 2984 (if (not (pos-visible-in-window-p)) |
2985 (progn | |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2986 ;; First try old-start |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2987 (if old-start |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2988 (set-window-start (selected-window) old-start)) |
661 | 2989 (if (not (pos-visible-in-window-p)) |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2990 (progn |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2991 ;; (message "resetting window start") (sit-for 2) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2992 (set-window-start |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2993 (selected-window) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2994 (save-excursion |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2995 (forward-line |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2996 (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
|
2997 (- (/ (window-height) 2)) ; center the line moving forward |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2998 )) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
2999 (beginning-of-line) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3000 (point))))))) |
661 | 3001 (window-start)) |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
3002 |
661 | 3003 |
3004 | |
3005 (defconst edebug-arrow-alist | |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3006 '((Continue-fast . "=") |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3007 (Trace-fast . "-") |
661 | 3008 (continue . ">") |
3009 (trace . "->") | |
3010 (step . "=>") | |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3011 (next . "=>") |
661 | 3012 (go . "<>") |
3013 (Go-nonstop . "..") ; not used | |
3014 ) | |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3015 "Association list of arrows for each edebug mode.") |
661 | 3016 |
3017 (defun edebug-overlay-arrow () | |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3018 ;; Set up the overlay arrow at beginning-of-line in current buffer. |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
3019 ;; The arrow string is derived from edebug-arrow-alist and |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3020 ;; 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
|
3021 (let ((pos (save-excursion (beginning-of-line) (point)))) |
661 | 3022 (setq overlay-arrow-string |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3023 (cdr (assq edebug-execution-mode edebug-arrow-alist))) |
661 | 3024 (setq overlay-arrow-position (make-marker)) |
3025 (set-marker overlay-arrow-position pos (current-buffer)))) | |
3026 | |
3027 | |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3028 (defun edebug-toggle-save-all-windows () |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3029 "Toggle the saving and restoring of all windows. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3030 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
|
3031 configurations become the same as the current configuration." |
661 | 3032 (interactive) |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3033 (setq edebug-save-windows (not edebug-save-windows)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3034 (if edebug-save-windows |
661 | 3035 (setq edebug-inside-windows |
3036 (setq edebug-outside-windows | |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3037 (edebug-current-windows |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3038 edebug-save-windows)))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3039 (message "Window saving is %s for all windows." |
661 | 3040 (if edebug-save-windows "on" "off"))) |
3041 | |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3042 (defmacro edebug-changing-windows (&rest body) |
26519 | 3043 `(let ((window (selected-window))) |
3044 (setq edebug-inside-windows (edebug-current-windows t)) | |
3045 (edebug-set-windows edebug-outside-windows) | |
3046 ,@body;; Code to change edebug-save-windows | |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
3047 (setq edebug-outside-windows (edebug-current-windows |
26519 | 3048 edebug-save-windows)) |
3049 ;; Problem: what about outside windows that are deleted inside? | |
3050 (edebug-set-windows edebug-inside-windows))) | |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3051 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3052 (defun edebug-toggle-save-selected-window () |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
3053 "Toggle the saving and restoring of the selected window. |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3054 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
|
3055 configurations become the same as the current configuration." |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3056 (interactive) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3057 (cond |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3058 ((eq t edebug-save-windows) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3059 ;; Save all outside windows except the selected one. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3060 ;; Remove (selected-window) from outside-windows. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3061 (edebug-changing-windows |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3062 (setq edebug-save-windows (delq window (edebug-window-list))))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3063 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3064 ((memq (selected-window) edebug-save-windows) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3065 (setq edebug-outside-windows |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3066 (delq (assq (selected-window) edebug-outside-windows) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3067 edebug-outside-windows)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3068 (setq edebug-save-windows |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3069 (delq (selected-window) edebug-save-windows))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3070 (t ; Save a new window. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3071 (edebug-changing-windows |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3072 (setq edebug-save-windows (cons window edebug-save-windows))))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3073 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3074 (message "Window saving is %s for %s." |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3075 (if (memq (selected-window) edebug-save-windows) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3076 "on" "off") |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3077 (selected-window))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3078 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3079 (defun edebug-toggle-save-windows (arg) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3080 "Toggle the saving and restoring of windows. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3081 With prefix, toggle for just the selected window. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3082 Otherwise, toggle for all windows." |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3083 (interactive "P") |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3084 (if arg |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3085 (edebug-toggle-save-selected-window) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3086 (edebug-toggle-save-all-windows))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3087 |
661 | 3088 |
3089 (defun edebug-where () | |
3090 "Show the debug windows and where we stopped in the program." | |
3091 (interactive) | |
3092 (if (not edebug-active) | |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3093 (error "Edebug is not active")) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3094 ;; Restore the window configuration to what it last was inside. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3095 ;; But it is not always set. - experiment |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3096 ;;(if edebug-inside-windows |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3097 ;; (edebug-set-windows edebug-inside-windows)) |
661 | 3098 (edebug-pop-to-buffer edebug-buffer) |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3099 (goto-char edebug-point)) |
661 | 3100 |
3101 (defun edebug-view-outside () | |
3102 "Change to the outside window configuration." | |
3103 (interactive) | |
3104 (if (not edebug-active) | |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3105 (error "Edebug is not active")) |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
3106 (setq edebug-inside-windows |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3107 (edebug-current-windows edebug-save-windows)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3108 (edebug-set-windows edebug-outside-windows) |
661 | 3109 (goto-char edebug-outside-point) |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3110 (message "Window configuration outside of Edebug. Return with %s" |
661 | 3111 (substitute-command-keys "\\<global-map>\\[edebug-where]"))) |
3112 | |
3113 | |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3114 (defun edebug-bounce-point (arg) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3115 "Bounce the point in the outside current buffer. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3116 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
|
3117 The default is one second." |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3118 (interactive "p") |
661 | 3119 (if (not edebug-active) |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3120 (error "Edebug is not active")) |
661 | 3121 (save-excursion |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3122 ;; If the buffer's currently displayed, avoid set-window-configuration. |
661 | 3123 (save-window-excursion |
3124 (edebug-pop-to-buffer edebug-outside-buffer) | |
3125 (goto-char edebug-outside-point) | |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
3126 (message "Current buffer: %s Point: %s Mark: %s" |
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
3127 (current-buffer) (point) |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3128 (if (marker-buffer (edebug-mark-marker)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3129 (marker-position (edebug-mark-marker)) "<not set>")) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3130 (edebug-sit-for arg) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3131 (edebug-pop-to-buffer edebug-buffer (car edebug-window-data))))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3132 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3133 |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
3134 ;; Joe Wells, here is a start at your idea of adding a buffer to the internal |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3135 ;; 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
|
3136 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3137 '(defvar edebug-display-buffer-list nil |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3138 "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
|
3139 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3140 '(defun edebug-display-buffer (buffer) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3141 "Toggle display of a buffer inside of edebug." |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3142 (interactive "bBuffer: ") |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3143 (let ((already-displaying (memq buffer edebug-display-buffer-list))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3144 (setq edebug-display-buffer-list |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3145 (if already-displaying |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3146 (delq buffer edebug-display-buffer-list) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3147 (cons buffer edebug-display-buffer-list))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3148 (message "Displaying %s %s" buffer |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3149 (if already-displaying "off" "on")))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3150 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3151 ;;; Breakpoint related functions |
661 | 3152 |
3153 (defun edebug-find-stop-point () | |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3154 ;; Return (function . index) of the nearest edebug stop point. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3155 (let* ((edebug-def-name (edebug-form-data-symbol)) |
661 | 3156 (edebug-data |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3157 (let ((data (get edebug-def-name 'edebug))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3158 (if (or (null data) (markerp data)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3159 (error "%s is not instrumented for Edebug" edebug-def-name)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3160 data)) ; we could do it automatically, if data is a marker. |
661 | 3161 ;; pull out parts of edebug-data. |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3162 (edebug-def-mark (car edebug-data)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3163 ;; (edebug-breakpoints (car (cdr edebug-data))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3164 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3165 (offset-vector (nth 2 edebug-data)) |
661 | 3166 (offset (- (save-excursion |
3167 (if (looking-at "[ \t]") | |
3168 ;; skip backwards until non-whitespace, or bol | |
3169 (skip-chars-backward " \t")) | |
3170 (point)) | |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3171 edebug-def-mark)) |
661 | 3172 len i) |
3173 ;; the offsets are in order so we can do a linear search | |
3174 (setq len (length offset-vector)) | |
3175 (setq i 0) | |
3176 (while (and (< i len) (> offset (aref offset-vector i))) | |
3177 (setq i (1+ i))) | |
3178 (if (and (< i len) | |
3179 (<= offset (aref offset-vector i))) | |
3180 ;; return the relevant info | |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3181 (cons edebug-def-name i) |
661 | 3182 (message "Point is not on an expression in %s." |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3183 edebug-def-name) |
661 | 3184 ))) |
3185 | |
3186 | |
3187 (defun edebug-next-breakpoint () | |
3188 "Move point to the next breakpoint, or first if none past point." | |
3189 (interactive) | |
3190 (let ((edebug-stop-point (edebug-find-stop-point))) | |
3191 (if edebug-stop-point | |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3192 (let* ((edebug-def-name (car edebug-stop-point)) |
661 | 3193 (index (cdr edebug-stop-point)) |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3194 (edebug-data (get edebug-def-name 'edebug)) |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
3195 |
661 | 3196 ;; pull out parts of edebug-data |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3197 (edebug-def-mark (car edebug-data)) |
661 | 3198 (edebug-breakpoints (car (cdr edebug-data))) |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3199 (offset-vector (nth 2 edebug-data)) |
661 | 3200 breakpoint) |
3201 (if (not edebug-breakpoints) | |
3202 (message "No breakpoints in this function.") | |
3203 (let ((breaks edebug-breakpoints)) | |
3204 (while (and breaks | |
3205 (<= (car (car breaks)) index)) | |
3206 (setq breaks (cdr breaks))) | |
3207 (setq breakpoint | |
3208 (if breaks | |
3209 (car breaks) | |
3210 ;; goto the first breakpoint | |
3211 (car edebug-breakpoints))) | |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3212 (goto-char (+ edebug-def-mark |
661 | 3213 (aref offset-vector (car breakpoint)))) |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
3214 |
14846 | 3215 (message "%s" |
3216 (concat (if (nth 2 breakpoint) | |
661 | 3217 "Temporary " "") |
3218 (if (car (cdr breakpoint)) | |
3219 (format "Condition: %s" | |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3220 (edebug-safe-prin1-to-string |
661 | 3221 (car (cdr breakpoint)))) |
3222 ""))) | |
3223 )))))) | |
3224 | |
3225 | |
3226 (defun edebug-modify-breakpoint (flag &optional condition temporary) | |
63439
de8468617bbf
(edebug-all-defs, edebug-initial-mode, edebug-print-length)
Luc Teirlinck <teirllm@auburn.edu>
parents:
63303
diff
changeset
|
3227 "Modify the breakpoint for the form at point or after it. |
de8468617bbf
(edebug-all-defs, edebug-initial-mode, edebug-print-length)
Luc Teirlinck <teirllm@auburn.edu>
parents:
63303
diff
changeset
|
3228 Set it if FLAG is non-nil, clear it otherwise. Then move to that point. |
661 | 3229 If CONDITION or TEMPORARY are non-nil, add those attributes to |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
3230 the breakpoint. " |
661 | 3231 (let ((edebug-stop-point (edebug-find-stop-point))) |
3232 (if edebug-stop-point | |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3233 (let* ((edebug-def-name (car edebug-stop-point)) |
661 | 3234 (index (cdr edebug-stop-point)) |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3235 (edebug-data (get edebug-def-name 'edebug)) |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
3236 |
661 | 3237 ;; pull out parts of edebug-data |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3238 (edebug-def-mark (car edebug-data)) |
661 | 3239 (edebug-breakpoints (car (cdr edebug-data))) |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3240 (offset-vector (nth 2 edebug-data)) |
661 | 3241 present) |
3242 ;; delete it either way | |
3243 (setq present (assq index edebug-breakpoints)) | |
3244 (setq edebug-breakpoints (delq present edebug-breakpoints)) | |
3245 (if flag | |
3246 (progn | |
3247 ;; add it to the list and resort | |
3248 (setq edebug-breakpoints | |
3249 (edebug-sort-alist | |
3250 (cons | |
3251 (list index condition temporary) | |
3252 edebug-breakpoints) '<)) | |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3253 (if condition |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3254 (message "Breakpoint set in %s with condition: %s" |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3255 edebug-def-name condition) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3256 (message "Breakpoint set in %s" edebug-def-name))) |
661 | 3257 (if present |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3258 (message "Breakpoint unset in %s" edebug-def-name) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3259 (message "No breakpoint here"))) |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
3260 |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3261 (setcar (cdr edebug-data) edebug-breakpoints) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3262 (goto-char (+ edebug-def-mark (aref offset-vector index))) |
661 | 3263 )))) |
3264 | |
3265 (defun edebug-set-breakpoint (arg) | |
3266 "Set the breakpoint of nearest sexp. | |
3267 With prefix argument, make it a temporary breakpoint." | |
3268 (interactive "P") | |
3269 (edebug-modify-breakpoint t nil arg)) | |
3270 | |
3271 (defun edebug-unset-breakpoint () | |
3272 "Clear the breakpoint of nearest sexp." | |
3273 (interactive) | |
3274 (edebug-modify-breakpoint nil)) | |
3275 | |
6512
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 (defun edebug-set-global-break-condition (expression) |
58602
2864ad32d866
(edebug-set-global-break-condition):
Juri Linkov <juri@jurta.org>
parents:
58589
diff
changeset
|
3278 (interactive |
2864ad32d866
(edebug-set-global-break-condition):
Juri Linkov <juri@jurta.org>
parents:
58589
diff
changeset
|
3279 (list |
2864ad32d866
(edebug-set-global-break-condition):
Juri Linkov <juri@jurta.org>
parents:
58589
diff
changeset
|
3280 (let ((initial (and edebug-global-break-condition |
2864ad32d866
(edebug-set-global-break-condition):
Juri Linkov <juri@jurta.org>
parents:
58589
diff
changeset
|
3281 (format "%s" edebug-global-break-condition)))) |
2864ad32d866
(edebug-set-global-break-condition):
Juri Linkov <juri@jurta.org>
parents:
58589
diff
changeset
|
3282 (read-from-minibuffer |
2864ad32d866
(edebug-set-global-break-condition):
Juri Linkov <juri@jurta.org>
parents:
58589
diff
changeset
|
3283 "Global Condition: " initial read-expression-map t |
2864ad32d866
(edebug-set-global-break-condition):
Juri Linkov <juri@jurta.org>
parents:
58589
diff
changeset
|
3284 (if (equal (car read-expression-history) initial) |
2864ad32d866
(edebug-set-global-break-condition):
Juri Linkov <juri@jurta.org>
parents:
58589
diff
changeset
|
3285 '(read-expression-history . 1) |
2864ad32d866
(edebug-set-global-break-condition):
Juri Linkov <juri@jurta.org>
parents:
58589
diff
changeset
|
3286 'read-expression-history))))) |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3287 (setq edebug-global-break-condition expression)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3288 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3289 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3290 ;;; Mode switching functions |
661 | 3291 |
3292 (defun edebug-set-mode (mode shortmsg msg) | |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3293 ;; Set the edebug mode to MODE. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3294 ;; Display SHORTMSG, or MSG if not within edebug. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3295 (if (eq (1+ edebug-recursion-depth) (recursion-depth)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3296 (progn |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3297 (setq edebug-execution-mode mode) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3298 (message shortmsg) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3299 ;; Continue execution |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3300 (exit-recursive-edit)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3301 ;; This is not terribly useful!! |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3302 (setq edebug-next-execution-mode mode) |
661 | 3303 (message msg))) |
3304 | |
3305 | |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3306 (defalias 'edebug-step-through-mode 'edebug-step-mode) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3307 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3308 (defun edebug-step-mode () |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3309 "Proceed to next stop point." |
661 | 3310 (interactive) |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3311 (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
|
3312 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3313 (defun edebug-next-mode () |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3314 "Proceed to next `after' stop point." |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3315 (interactive) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3316 (edebug-set-mode 'next "" "Edebug will stop after next eval.")) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3317 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3318 (defun edebug-go-mode (arg) |
661 | 3319 "Go, evaluating until break. |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3320 With prefix ARG, set temporary break at current point and go." |
661 | 3321 (interactive "P") |
3322 (if arg | |
3323 (edebug-set-breakpoint t)) | |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3324 (edebug-set-mode 'go "Go..." "Edebug will go until break.")) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3325 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3326 (defun edebug-Go-nonstop-mode () |
661 | 3327 "Go, evaluating without debugging." |
3328 (interactive) | |
3329 (edebug-set-mode 'Go-nonstop "Go-Nonstop..." | |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3330 "Edebug will not stop at breaks.")) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3331 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3332 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3333 (defun edebug-trace-mode () |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3334 "Begin trace mode." |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3335 (interactive) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3336 (edebug-set-mode 'trace "Tracing..." "Edebug will trace with pause.")) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3337 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3338 (defun edebug-Trace-fast-mode () |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3339 "Trace with no wait at each step." |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3340 (interactive) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3341 (edebug-set-mode 'Trace-fast |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3342 "Trace fast..." "Edebug will trace without pause.")) |
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 (defun edebug-continue-mode () |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3345 "Begin continue mode." |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3346 (interactive) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3347 (edebug-set-mode 'continue "Continue..." |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3348 "Edebug will pause at breakpoints.")) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3349 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3350 (defun edebug-Continue-fast-mode () |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3351 "Trace with no wait at each step." |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3352 (interactive) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3353 (edebug-set-mode 'Continue-fast "Continue fast..." |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3354 "Edebug will stop and go at breakpoints.")) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3355 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3356 ;; ------------------------------------------------------------ |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3357 ;; The following use the mode changing commands and breakpoints. |
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-goto-here () |
63556
96c3254c37c5
(edebug-goto-here): Doc fix.
Luc Teirlinck <teirllm@auburn.edu>
parents:
63439
diff
changeset
|
3361 "Proceed to first stop-point at or after current position of point." |
6512
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-go-mode t)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3364 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3365 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3366 (defun edebug-stop () |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3367 "Stop execution and do not continue. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3368 Useful for exiting from trace or continue loop." |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3369 (interactive) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3370 (message "Stop")) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3371 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3372 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3373 '(defun edebug-forward () |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3374 "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
|
3375 (interactive) |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
3376 (edebug-set-mode |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3377 'forward "Forward" |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3378 "Edebug will stop after exiting the next expression.")) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3379 |
661 | 3380 |
3381 (defun edebug-forward-sexp (arg) | |
3382 "Proceed from the current point to the end of the ARGth sexp ahead. | |
3383 If there are not ARG sexps ahead, then do edebug-step-out." | |
3384 (interactive "p") | |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3385 (condition-case nil |
661 | 3386 (let ((parse-sexp-ignore-comments t)) |
3387 ;; Call forward-sexp repeatedly until done or failure. | |
3388 (forward-sexp arg) | |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3389 (edebug-go-mode t)) |
661 | 3390 (error |
3391 (edebug-step-out) | |
3392 ))) | |
3393 | |
3394 (defun edebug-step-out () | |
3395 "Proceed from the current point to the end of the containing sexp. | |
3396 If there is no containing sexp that is not the top level defun, | |
3397 go to the end of the last sexp, or if that is the same point, then step." | |
3398 (interactive) | |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3399 (condition-case nil |
661 | 3400 (let ((parse-sexp-ignore-comments t)) |
3401 (up-list 1) | |
3402 (save-excursion | |
3403 ;; Is there still a containing expression? | |
3404 (up-list 1)) | |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3405 (edebug-go-mode t)) |
661 | 3406 (error |
3407 ;; At top level - 1, so first check if there are more sexps at this level. | |
3408 (let ((start-point (point))) | |
3409 ;; (up-list 1) | |
3410 (down-list -1) | |
3411 (if (= (point) start-point) | |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3412 (edebug-step-mode) ; No more at this level, so step. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3413 (edebug-go-mode t) |
661 | 3414 ))))) |
3415 | |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3416 (defun edebug-instrument-function (func) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3417 ;; Func should be a function symbol. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3418 ;; Return the function symbol, or nil if not instrumented. |
40475
3bf0c64f4520
(delay-mode-hooks): Add edebug-spec.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40464
diff
changeset
|
3419 (let ((func-marker (get func 'edebug))) |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3420 (cond |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3421 ((markerp func-marker) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3422 ;; It is uninstrumented, so instrument it. |
40475
3bf0c64f4520
(delay-mode-hooks): Add edebug-spec.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40464
diff
changeset
|
3423 (with-current-buffer (marker-buffer func-marker) |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3424 (goto-char func-marker) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3425 (edebug-eval-top-level-form) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3426 func)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3427 ((consp func-marker) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3428 (message "%s is already instrumented." func) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3429 func) |
40475
3bf0c64f4520
(delay-mode-hooks): Add edebug-spec.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40464
diff
changeset
|
3430 (t |
3bf0c64f4520
(delay-mode-hooks): Add edebug-spec.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40464
diff
changeset
|
3431 (let ((loc (find-function-noselect func))) |
71852
81b8b2bb63de
(edebug-instrument-function): Err if find-function-noselect gives no position.
Richard M. Stallman <rms@gnu.org>
parents:
71727
diff
changeset
|
3432 (unless (cdr loc) |
81b8b2bb63de
(edebug-instrument-function): Err if find-function-noselect gives no position.
Richard M. Stallman <rms@gnu.org>
parents:
71727
diff
changeset
|
3433 (error "Could not find the definition in its file")) |
40475
3bf0c64f4520
(delay-mode-hooks): Add edebug-spec.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40464
diff
changeset
|
3434 (with-current-buffer (car loc) |
3bf0c64f4520
(delay-mode-hooks): Add edebug-spec.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40464
diff
changeset
|
3435 (goto-char (cdr loc)) |
3bf0c64f4520
(delay-mode-hooks): Add edebug-spec.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40464
diff
changeset
|
3436 (edebug-eval-top-level-form) |
3bf0c64f4520
(delay-mode-hooks): Add edebug-spec.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40464
diff
changeset
|
3437 func)))))) |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3438 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3439 (defun edebug-instrument-callee () |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
3440 "Instrument the definition of the function or macro about to be called. |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3441 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
|
3442 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
|
3443 function or macro is called, Edebug will be called there as well." |
661 | 3444 (interactive) |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3445 (if (not (looking-at "\(")) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3446 (error "You must be before a list form") |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3447 (let ((func |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3448 (save-excursion |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3449 (down-list 1) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3450 (if (looking-at "\(") |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3451 (edebug-form-data-name |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3452 (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
|
3453 (edebug-original-read (current-buffer)))))) |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3454 (edebug-instrument-function func)))) |
661 | 3455 |
3456 | |
3457 (defun edebug-step-in () | |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
3458 "Step into the definition of the function or macro about to be called. |
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
3459 This first does `edebug-instrument-callee' to ensure that it is |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3460 instrumented. Then it does `edebug-on-entry' and switches to `go' mode." |
661 | 3461 (interactive) |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3462 (let ((func (edebug-instrument-callee))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3463 (if func |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3464 (progn |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3465 (edebug-on-entry func 'temp) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3466 (edebug-go-mode nil))))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3467 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3468 (defun edebug-on-entry (function &optional flag) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3469 "Cause Edebug to stop when FUNCTION is called. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3470 With prefix argument, make this temporary so it is automatically |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3471 cancelled the first time the function is entered." |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3472 (interactive "aEdebug on entry to: \nP") |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3473 ;; Could store this in the edebug data instead. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3474 (put function 'edebug-on-entry (if flag 'temp t))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3475 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3476 (defun cancel-edebug-on-entry (function) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3477 (interactive "aEdebug on entry to: ") |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3478 (put function 'edebug-on-entry nil)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3479 |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
3480 |
6666
c6430bc570f9
Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents:
6512
diff
changeset
|
3481 (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
|
3482 (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
|
3483 '(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
|
3484 ;; Also need edebug-cancel-debug-on-entry |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3485 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3486 '(defun edebug-debug-on-entry (function) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3487 "Request FUNCTION to invoke debugger each time it is called. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3488 If the user continues, FUNCTION's execution proceeds. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3489 Works by modifying the definition of FUNCTION, |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3490 which must be written in Lisp, not predefined. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3491 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
|
3492 Redefining FUNCTION also does that. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3493 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3494 This version is from Edebug. If the function is instrumented for |
33758 | 3495 Edebug, it calls `edebug-on-entry'." |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3496 (interactive "aDebug on entry (to function): ") |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3497 (let ((func-data (get function 'edebug))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3498 (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
|
3499 (edebug-original-debug-on-entry function) |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3500 (edebug-on-entry function)))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3501 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3502 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3503 (defun edebug-top-level-nonstop () |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3504 "Set mode to Go-nonstop, and exit to top-level. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3505 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
|
3506 (interactive) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3507 (setq edebug-execution-mode 'Go-nonstop) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3508 (top-level)) |
661 | 3509 |
3510 | |
3511 ;;(defun edebug-exit-out () | |
3512 ;; "Go until the current function exits." | |
3513 ;; (interactive) | |
3514 ;; (edebug-set-mode 'exiting "Exit...")) | |
3515 | |
3516 | |
3517 ;;; The following initial mode setting definitions are not used yet. | |
3518 | |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3519 '(defconst edebug-initial-mode-alist |
661 | 3520 '((edebug-Continue-fast . Continue-fast) |
3521 (edebug-Trace-fast . Trace-fast) | |
3522 (edebug-continue . continue) | |
3523 (edebug-trace . trace) | |
3524 (edebug-go . go) | |
3525 (edebug-step-through . step) | |
3526 (edebug-Go-nonstop . Go-nonstop) | |
3527 ) | |
3528 "Association list between commands and the modes they set.") | |
3529 | |
3530 | |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3531 '(defun edebug-set-initial-mode () |
661 | 3532 "Ask for the initial mode of the enclosing function. |
3533 The mode is requested via the key that would be used to set the mode in | |
3534 edebug-mode." | |
3535 (interactive) | |
3536 (let* ((this-function (edebug-which-function)) | |
3537 (keymap (if (eq edebug-mode-map (current-local-map)) | |
3538 edebug-mode-map)) | |
3539 (old-mode (or (get this-function 'edebug-initial-mode) | |
3540 edebug-initial-mode)) | |
3541 (key (read-key-sequence | |
3542 (format | |
3543 "Change initial edebug mode for %s from %s (%s) to (enter key): " | |
3544 this-function | |
3545 old-mode | |
3546 (where-is-internal | |
3547 (car (rassq old-mode edebug-initial-mode-alist)) | |
3548 keymap 'firstonly | |
3549 )))) | |
3550 (mode (cdr (assq (key-binding key) edebug-initial-mode-alist))) | |
3551 ) | |
3552 (if (and mode | |
3553 (or (get this-function 'edebug-initial-mode) | |
3554 (not (eq mode edebug-initial-mode)))) | |
3555 (progn | |
3556 (put this-function 'edebug-initial-mode mode) | |
3557 (message "Initial mode for %s is now: %s" | |
3558 this-function mode)) | |
5126
30682388c4cf
Delete periods from error messages.
Richard M. Stallman <rms@gnu.org>
parents:
5125
diff
changeset
|
3559 (error "Key must map to one of the mode changing commands") |
661 | 3560 ))) |
3561 | |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3562 ;;; Evaluation of expressions |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3563 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3564 (def-edebug-spec edebug-outside-excursion t) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3565 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3566 (defmacro edebug-outside-excursion (&rest body) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3567 "Evaluate an expression list in the outside context. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3568 Return the result of the last expression." |
26519 | 3569 `(save-excursion ; of current-buffer |
3570 (if edebug-save-windows | |
3571 (progn | |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
3572 ;; After excursion, we will |
26519 | 3573 ;; restore to current window configuration. |
3574 (setq edebug-inside-windows | |
3575 (edebug-current-windows edebug-save-windows)) | |
3576 ;; Restore outside windows. | |
3577 (edebug-set-windows edebug-outside-windows))) | |
3578 | |
3579 (set-buffer edebug-buffer) ; why? | |
3580 ;; (use-local-map edebug-outside-map) | |
3581 (set-match-data edebug-outside-match-data) | |
3582 ;; Restore outside context. | |
3583 (let (;; (edebug-inside-map (current-local-map)) ;; restore map?? | |
3584 (last-command-char edebug-outside-last-command-char) | |
3585 (last-command-event edebug-outside-last-command-event) | |
3586 (last-command edebug-outside-last-command) | |
3587 (this-command edebug-outside-this-command) | |
3588 (unread-command-char edebug-outside-unread-command-char) | |
3589 (unread-command-events edebug-outside-unread-command-events) | |
3590 (current-prefix-arg edebug-outside-current-prefix-arg) | |
3591 (last-input-char edebug-outside-last-input-char) | |
3592 (last-input-event edebug-outside-last-input-event) | |
3593 (last-event-frame edebug-outside-last-event-frame) | |
3594 (last-nonmenu-event edebug-outside-last-nonmenu-event) | |
3595 (track-mouse edebug-outside-track-mouse) | |
3596 (standard-output edebug-outside-standard-output) | |
3597 (standard-input edebug-outside-standard-input) | |
3598 | |
3599 (executing-kbd-macro edebug-outside-executing-macro) | |
3600 (defining-kbd-macro edebug-outside-defining-kbd-macro) | |
52535
f40f0d207133
(edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
3601 ;; Get the values out of the saved statuses. |
f40f0d207133
(edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
3602 (pre-command-hook (cdr edebug-outside-pre-command-hook)) |
f40f0d207133
(edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
3603 (post-command-hook (cdr edebug-outside-post-command-hook)) |
26519 | 3604 |
3605 ;; See edebug-display | |
3606 (overlay-arrow-position edebug-outside-o-a-p) | |
3607 (overlay-arrow-string edebug-outside-o-a-s) | |
3608 (cursor-in-echo-area edebug-outside-c-i-e-a) | |
67780
6f62623c8c61
(edebug-all-defs, edebug-all-forms): Add autoload cookies.
Juri Linkov <juri@jurta.org>
parents:
67635
diff
changeset
|
3609 (default-cursor-in-non-selected-windows edebug-outside-d-c-i-n-s-w) |
26519 | 3610 ) |
3611 (unwind-protect | |
3612 (save-excursion ; of edebug-buffer | |
3613 (set-buffer edebug-outside-buffer) | |
3614 (goto-char edebug-outside-point) | |
3615 (if (marker-buffer (edebug-mark-marker)) | |
3616 (set-marker (edebug-mark-marker) edebug-outside-mark)) | |
3617 ,@body) | |
3618 | |
3619 ;; Back to edebug-buffer. Restore rest of inside context. | |
3620 ;; (use-local-map edebug-inside-map) | |
3621 (if edebug-save-windows | |
3622 ;; Restore inside windows. | |
3623 (edebug-set-windows edebug-inside-windows)) | |
3624 | |
3625 ;; Save values that may have been changed. | |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
3626 (setq |
26519 | 3627 edebug-outside-last-command-char last-command-char |
3628 edebug-outside-last-command-event last-command-event | |
3629 edebug-outside-last-command last-command | |
3630 edebug-outside-this-command this-command | |
3631 edebug-outside-unread-command-char unread-command-char | |
3632 edebug-outside-unread-command-events unread-command-events | |
3633 edebug-outside-current-prefix-arg current-prefix-arg | |
3634 edebug-outside-last-input-char last-input-char | |
3635 edebug-outside-last-input-event last-input-event | |
3636 edebug-outside-last-event-frame last-event-frame | |
3637 edebug-outside-last-nonmenu-event last-nonmenu-event | |
3638 edebug-outside-track-mouse track-mouse | |
3639 edebug-outside-standard-output standard-output | |
3640 edebug-outside-standard-input standard-input | |
3641 | |
3642 edebug-outside-executing-macro executing-kbd-macro | |
3643 edebug-outside-defining-kbd-macro defining-kbd-macro | |
3644 | |
3645 edebug-outside-o-a-p overlay-arrow-position | |
3646 edebug-outside-o-a-s overlay-arrow-string | |
3647 edebug-outside-c-i-e-a cursor-in-echo-area | |
67780
6f62623c8c61
(edebug-all-defs, edebug-all-forms): Add autoload cookies.
Juri Linkov <juri@jurta.org>
parents:
67635
diff
changeset
|
3648 edebug-outside-d-c-i-n-s-w default-cursor-in-non-selected-windows |
52535
f40f0d207133
(edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
3649 ) |
f40f0d207133
(edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
3650 |
f40f0d207133
(edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
3651 ;; Restore the outside saved values; don't alter |
f40f0d207133
(edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
3652 ;; the outside binding loci. |
f40f0d207133
(edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
3653 (setcdr edebug-outside-pre-command-hook pre-command-hook) |
f40f0d207133
(edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
3654 (setcdr edebug-outside-post-command-hook post-command-hook) |
f40f0d207133
(edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
3655 |
f40f0d207133
(edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
3656 )) ; let |
26519 | 3657 )) |
6512
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 (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
|
3660 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3661 (defun edebug-eval (edebug-expr) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3662 ;; Are there cl lexical variables active? |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3663 (if cl-debug-env |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3664 (eval (cl-macroexpand-all edebug-expr cl-debug-env)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3665 (eval edebug-expr))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3666 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3667 (defun edebug-safe-eval (edebug-expr) |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
3668 ;; Evaluate EXPR safely. |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3669 ;; 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
|
3670 (condition-case edebug-err |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3671 (edebug-eval edebug-expr) |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
3672 (error (edebug-format "%s: %s" ;; could |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3673 (get (car edebug-err) 'error-message) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3674 (car (cdr edebug-err)))))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3675 |
14846 | 3676 ;;; Printing |
3677 | |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3678 ;; Replace printing functions. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3679 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3680 ;; obsolete names |
64406
3b29f20942e2
(def-edebug-form-spec): Add obsolescence info and delete redundant message. Doc
Juanma Barranquero <lekktu@gmail.com>
parents:
64222
diff
changeset
|
3681 (define-obsolete-function-alias 'edebug-install-custom-print-funcs |
3b29f20942e2
(def-edebug-form-spec): Add obsolescence info and delete redundant message. Doc
Juanma Barranquero <lekktu@gmail.com>
parents:
64222
diff
changeset
|
3682 'edebug-install-custom-print "22.1") |
3b29f20942e2
(def-edebug-form-spec): Add obsolescence info and delete redundant message. Doc
Juanma Barranquero <lekktu@gmail.com>
parents:
64222
diff
changeset
|
3683 (define-obsolete-function-alias 'edebug-reset-print-funcs |
3b29f20942e2
(def-edebug-form-spec): Add obsolescence info and delete redundant message. Doc
Juanma Barranquero <lekktu@gmail.com>
parents:
64222
diff
changeset
|
3684 'edebug-uninstall-custom-print "22.1") |
3b29f20942e2
(def-edebug-form-spec): Add obsolescence info and delete redundant message. Doc
Juanma Barranquero <lekktu@gmail.com>
parents:
64222
diff
changeset
|
3685 (define-obsolete-function-alias 'edebug-uninstall-custom-print-funcs |
3b29f20942e2
(def-edebug-form-spec): Add obsolescence info and delete redundant message. Doc
Juanma Barranquero <lekktu@gmail.com>
parents:
64222
diff
changeset
|
3686 'edebug-uninstall-custom-print "22.1") |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3687 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3688 (defun edebug-install-custom-print () |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3689 "Replace print functions used by Edebug with custom versions." |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3690 ;; Modifying the custom print functions, or changing print-length, |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3691 ;; 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
|
3692 ;; have immediate effect. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3693 (interactive) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3694 (require 'cust-print) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3695 (defalias 'edebug-prin1 'custom-prin1) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3696 (defalias 'edebug-print 'custom-print) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3697 (defalias 'edebug-prin1-to-string 'custom-prin1-to-string) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3698 (defalias 'edebug-format 'custom-format) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3699 (defalias 'edebug-message 'custom-message) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3700 "Installed") |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3701 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3702 (eval-and-compile |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3703 (defun edebug-uninstall-custom-print () |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3704 "Replace edebug custom print functions with internal versions." |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3705 (interactive) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3706 (defalias 'edebug-prin1 'prin1) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3707 (defalias 'edebug-print 'print) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3708 (defalias 'edebug-prin1-to-string 'prin1-to-string) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3709 (defalias 'edebug-format 'format) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3710 (defalias 'edebug-message 'message) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3711 "Uninstalled") |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3712 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3713 ;; Default print functions are the same as Emacs'. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3714 (edebug-uninstall-custom-print)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3715 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3716 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3717 (defun edebug-report-error (edebug-value) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3718 ;; Print an error message like command level does. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3719 ;; This also prints the error name if it has no error-message. |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
3720 (message "%s: %s" |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3721 (or (get (car edebug-value) 'error-message) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3722 (format "peculiar error (%s)" (car edebug-value))) |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
3723 (mapconcat (function (lambda (edebug-arg) |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3724 ;; continuing after an error may |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3725 ;; complain about edebug-arg. why?? |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3726 (prin1-to-string edebug-arg))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3727 (cdr edebug-value) ", "))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3728 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3729 ;; Define here in case they are not already defined. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3730 (defvar print-level nil) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3731 (defvar print-circle nil) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3732 (defvar print-readably) ;; defined by lemacs |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
3733 ;; 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
|
3734 ;; 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
|
3735 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3736 (defun edebug-safe-prin1-to-string (value) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3737 (let ((print-escape-newlines t) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3738 (print-length (or edebug-print-length print-length)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3739 (print-level (or edebug-print-level print-level)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3740 (print-circle (or edebug-print-circle print-circle)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3741 (print-readably nil)) ;; lemacs uses this. |
67635
70e76c30ddcc
* emacs-lisp/edebug.el (edebug-safe-prin1-to-string): Capture
Chong Yidong <cyd@stupidchicken.com>
parents:
67357
diff
changeset
|
3742 (condition-case nil |
70e76c30ddcc
* emacs-lisp/edebug.el (edebug-safe-prin1-to-string): Capture
Chong Yidong <cyd@stupidchicken.com>
parents:
67357
diff
changeset
|
3743 (edebug-prin1-to-string value) |
70e76c30ddcc
* emacs-lisp/edebug.el (edebug-safe-prin1-to-string): Capture
Chong Yidong <cyd@stupidchicken.com>
parents:
67357
diff
changeset
|
3744 (error "#Apparently circular structure#")))) |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3745 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3746 (defun edebug-compute-previous-result (edebug-previous-value) |
54499
b7693565f757
(edebug-display): Bring up a debug trace if the source location can't be found.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
53198
diff
changeset
|
3747 (if edebug-unwrap-results |
b7693565f757
(edebug-display): Bring up a debug trace if the source location can't be found.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
53198
diff
changeset
|
3748 (setq edebug-previous-value |
b7693565f757
(edebug-display): Bring up a debug trace if the source location can't be found.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
53198
diff
changeset
|
3749 (edebug-unwrap* edebug-previous-value))) |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3750 (setq edebug-previous-result |
54499
b7693565f757
(edebug-display): Bring up a debug trace if the source location can't be found.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
53198
diff
changeset
|
3751 (concat "Result: " |
b7693565f757
(edebug-display): Bring up a debug trace if the source location can't be found.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
53198
diff
changeset
|
3752 (edebug-safe-prin1-to-string edebug-previous-value) |
55800
c9243f2a022c
* emacs-lisp/edebug.el (edebug-compute-previous-result)
Juri Linkov <juri@jurta.org>
parents:
54499
diff
changeset
|
3753 (eval-expression-print-format edebug-previous-value)))) |
661 | 3754 |
3755 (defun edebug-previous-result () | |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3756 "Print the previous result." |
661 | 3757 (interactive) |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3758 (message "%s" edebug-previous-result)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3759 |
14846 | 3760 ;;; Read, Eval and Print |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3761 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3762 (defun edebug-eval-expression (edebug-expr) |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
3763 "Evaluate an expression in the outside environment. |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3764 If interactive, prompt for the expression. |
661 | 3765 Print result in minibuffer." |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
3766 (interactive (list (read-from-minibuffer |
40464
f1e32a9da9a8
(edebug-window-live-p): Always alias to window-live-p.
Richard M. Stallman <rms@gnu.org>
parents:
39515
diff
changeset
|
3767 "Eval: " nil read-expression-map t |
f1e32a9da9a8
(edebug-window-live-p): Always alias to window-live-p.
Richard M. Stallman <rms@gnu.org>
parents:
39515
diff
changeset
|
3768 'read-expression-history))) |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3769 (princ |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3770 (edebug-outside-excursion |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3771 (setq values (cons (edebug-eval edebug-expr) values)) |
55800
c9243f2a022c
* emacs-lisp/edebug.el (edebug-compute-previous-result)
Juri Linkov <juri@jurta.org>
parents:
54499
diff
changeset
|
3772 (concat (edebug-safe-prin1-to-string (car values)) |
c9243f2a022c
* emacs-lisp/edebug.el (edebug-compute-previous-result)
Juri Linkov <juri@jurta.org>
parents:
54499
diff
changeset
|
3773 (eval-expression-print-format (car values)))))) |
661 | 3774 |
3775 (defun edebug-eval-last-sexp () | |
63439
de8468617bbf
(edebug-all-defs, edebug-initial-mode, edebug-print-length)
Luc Teirlinck <teirllm@auburn.edu>
parents:
63303
diff
changeset
|
3776 "Evaluate sexp before point in the outside environment. |
de8468617bbf
(edebug-all-defs, edebug-initial-mode, edebug-print-length)
Luc Teirlinck <teirllm@auburn.edu>
parents:
63303
diff
changeset
|
3777 Print value in minibuffer." |
661 | 3778 (interactive) |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3779 (edebug-eval-expression (edebug-last-sexp))) |
661 | 3780 |
3781 (defun edebug-eval-print-last-sexp () | |
63439
de8468617bbf
(edebug-all-defs, edebug-initial-mode, edebug-print-length)
Luc Teirlinck <teirllm@auburn.edu>
parents:
63303
diff
changeset
|
3782 "Evaluate sexp before point in outside environment; insert value. |
52535
f40f0d207133
(edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
3783 This prints the value into current buffer." |
661 | 3784 (interactive) |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3785 (let* ((edebug-form (edebug-last-sexp)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3786 (edebug-result-string |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
3787 (edebug-outside-excursion |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3788 (edebug-safe-prin1-to-string (edebug-safe-eval edebug-form)))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3789 (standard-output (current-buffer))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3790 (princ "\n") |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3791 ;; princ the string to get rid of quotes. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3792 (princ edebug-result-string) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3793 (princ "\n") |
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 |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
3796 ;;; Edebug Minor Mode |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3797 |
52535
f40f0d207133
(edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
3798 (defvar gud-inhibit-global-bindings |
f40f0d207133
(edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
3799 "*Non-nil means don't do global rebindings of C-x C-a subcommands.") |
f40f0d207133
(edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
3800 |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3801 ;; Global GUD bindings for all emacs-lisp-mode buffers. |
52535
f40f0d207133
(edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
3802 (unless gud-inhibit-global-bindings |
f40f0d207133
(edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
3803 (define-key emacs-lisp-mode-map "\C-x\C-a\C-s" 'edebug-step-mode) |
f40f0d207133
(edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
3804 (define-key emacs-lisp-mode-map "\C-x\C-a\C-n" 'edebug-next-mode) |
f40f0d207133
(edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
3805 (define-key emacs-lisp-mode-map "\C-x\C-a\C-c" 'edebug-go-mode) |
f40f0d207133
(edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
3806 (define-key emacs-lisp-mode-map "\C-x\C-a\C-l" 'edebug-where)) |
661 | 3807 |
51321
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
3808 (defvar edebug-mode-map |
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
3809 (let ((map (copy-keymap emacs-lisp-mode-map))) |
661 | 3810 ;; control |
51321
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
3811 (define-key map " " 'edebug-step-mode) |
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
3812 (define-key map "n" 'edebug-next-mode) |
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
3813 (define-key map "g" 'edebug-go-mode) |
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
3814 (define-key map "G" 'edebug-Go-nonstop-mode) |
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
3815 (define-key map "t" 'edebug-trace-mode) |
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
3816 (define-key map "T" 'edebug-Trace-fast-mode) |
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
3817 (define-key map "c" 'edebug-continue-mode) |
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
3818 (define-key map "C" 'edebug-Continue-fast-mode) |
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
3819 |
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
3820 ;;(define-key map "f" 'edebug-forward) not implemented |
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
3821 (define-key map "f" 'edebug-forward-sexp) |
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
3822 (define-key map "h" 'edebug-goto-here) |
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
3823 |
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
3824 (define-key map "I" 'edebug-instrument-callee) |
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
3825 (define-key map "i" 'edebug-step-in) |
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
3826 (define-key map "o" 'edebug-step-out) |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
3827 |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3828 ;; quitting and stopping |
51321
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
3829 (define-key map "q" 'top-level) |
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
3830 (define-key map "Q" 'edebug-top-level-nonstop) |
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
3831 (define-key map "a" 'abort-recursive-edit) |
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
3832 (define-key map "S" 'edebug-stop) |
661 | 3833 |
3834 ;; breakpoints | |
51321
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
3835 (define-key map "b" 'edebug-set-breakpoint) |
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
3836 (define-key map "u" 'edebug-unset-breakpoint) |
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
3837 (define-key map "B" 'edebug-next-breakpoint) |
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
3838 (define-key map "x" 'edebug-set-conditional-breakpoint) |
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
3839 (define-key map "X" 'edebug-set-global-break-condition) |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
3840 |
661 | 3841 ;; evaluation |
51321
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
3842 (define-key map "r" 'edebug-previous-result) |
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
3843 (define-key map "e" 'edebug-eval-expression) |
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
3844 (define-key map "\C-x\C-e" 'edebug-eval-last-sexp) |
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
3845 (define-key map "E" 'edebug-visit-eval-list) |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
3846 |
661 | 3847 ;; views |
51321
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
3848 (define-key map "w" 'edebug-where) |
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
3849 (define-key map "v" 'edebug-view-outside) ;; maybe obsolete?? |
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
3850 (define-key map "p" 'edebug-bounce-point) |
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
3851 (define-key map "P" 'edebug-view-outside) ;; same as v |
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
3852 (define-key map "W" 'edebug-toggle-save-windows) |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3853 |
661 | 3854 ;; misc |
51321
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
3855 (define-key map "?" 'edebug-help) |
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
3856 (define-key map "d" 'edebug-backtrace) |
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
3857 |
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
3858 (define-key map "-" 'negative-argument) |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3859 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3860 ;; statistics |
51321
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
3861 (define-key map "=" 'edebug-temp-display-freq-count) |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3862 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3863 ;; GUD bindings |
51321
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
3864 (define-key map "\C-c\C-s" 'edebug-step-mode) |
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
3865 (define-key map "\C-c\C-n" 'edebug-next-mode) |
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
3866 (define-key map "\C-c\C-c" 'edebug-go-mode) |
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
3867 |
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
3868 (define-key map "\C-x " 'edebug-set-breakpoint) |
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
3869 (define-key map "\C-c\C-d" 'edebug-unset-breakpoint) |
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
3870 (define-key map "\C-c\C-t" |
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
3871 (lambda () (interactive) (edebug-set-breakpoint t))) |
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
3872 (define-key map "\C-c\C-l" 'edebug-where) |
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
3873 map)) |
661 | 3874 |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3875 ;; Autoloading these global bindings doesn't make sense because |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3876 ;; 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
|
3877 |
661 | 3878 (defvar global-edebug-prefix "\^XX" |
3879 "Prefix key for global edebug commands, available from any buffer.") | |
3880 | |
51321
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
3881 (defvar global-edebug-map |
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
3882 (let ((map (make-sparse-keymap))) |
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
3883 |
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
3884 (define-key map " " 'edebug-step-mode) |
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
3885 (define-key map "g" 'edebug-go-mode) |
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
3886 (define-key map "G" 'edebug-Go-nonstop-mode) |
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
3887 (define-key map "t" 'edebug-trace-mode) |
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
3888 (define-key map "T" 'edebug-Trace-fast-mode) |
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
3889 (define-key map "c" 'edebug-continue-mode) |
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
3890 (define-key map "C" 'edebug-Continue-fast-mode) |
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
3891 |
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
3892 ;; breakpoints |
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
3893 (define-key map "b" 'edebug-set-breakpoint) |
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
3894 (define-key map "u" 'edebug-unset-breakpoint) |
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
3895 (define-key map "x" 'edebug-set-conditional-breakpoint) |
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
3896 (define-key map "X" 'edebug-set-global-break-condition) |
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
3897 |
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
3898 ;; views |
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
3899 (define-key map "w" 'edebug-where) |
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
3900 (define-key map "W" 'edebug-toggle-save-windows) |
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
3901 |
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
3902 ;; quitting |
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
3903 (define-key map "q" 'top-level) |
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
3904 (define-key map "Q" 'edebug-top-level-nonstop) |
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
3905 (define-key map "a" 'abort-recursive-edit) |
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
3906 |
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
3907 ;; statistics |
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
3908 (define-key map "=" 'edebug-display-freq-count) |
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
3909 map) |
661 | 3910 "Global map of edebug commands, available from any buffer.") |
3911 | |
51321
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
3912 (global-unset-key global-edebug-prefix) |
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
3913 (global-set-key global-edebug-prefix global-edebug-map) |
e005bbe7be9e
(edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
49842
diff
changeset
|
3914 |
661 | 3915 |
3916 (defun edebug-help () | |
3917 (interactive) | |
3918 (describe-function 'edebug-mode)) | |
3919 | |
3920 (defun edebug-mode () | |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3921 "Mode for Emacs Lisp buffers while in Edebug. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3922 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3923 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
|
3924 buffer) there are local and global key bindings to several Edebug |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
3925 specific commands. E.g. `edebug-step-mode' is bound to \\[edebug-step-mode] |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3926 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
|
3927 |
67780
6f62623c8c61
(edebug-all-defs, edebug-all-forms): Add autoload cookies.
Juri Linkov <juri@jurta.org>
parents:
67635
diff
changeset
|
3928 Also see bindings for the eval list buffer *edebug* in `edebug-eval-mode'. |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3929 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3930 The edebug buffer commands: |
661 | 3931 \\{edebug-mode-map} |
3932 | |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3933 Global commands prefixed by `global-edebug-prefix': |
661 | 3934 \\{global-edebug-map} |
3935 | |
3936 Options: | |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3937 edebug-setup-hook |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3938 edebug-all-defs |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3939 edebug-all-forms |
661 | 3940 edebug-save-windows |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3941 edebug-save-displayed-buffer-points |
661 | 3942 edebug-initial-mode |
3943 edebug-trace | |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3944 edebug-test-coverage |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3945 edebug-continue-kbd-macro |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3946 edebug-print-length |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3947 edebug-print-level |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3948 edebug-print-circle |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3949 edebug-on-error |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3950 edebug-on-quit |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3951 edebug-on-signal |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3952 edebug-unwrap-results |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3953 edebug-global-break-condition |
661 | 3954 " |
76298
872a30c0f872
(edebug-kill-buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
75346
diff
changeset
|
3955 ;; If the user kills the buffer in which edebug is currently active, |
872a30c0f872
(edebug-kill-buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
75346
diff
changeset
|
3956 ;; exit to top level, because the edebug command loop can't usefully |
872a30c0f872
(edebug-kill-buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
75346
diff
changeset
|
3957 ;; continue running in such a case. |
872a30c0f872
(edebug-kill-buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
75346
diff
changeset
|
3958 (add-hook 'kill-buffer-hook 'edebug-kill-buffer nil t) |
661 | 3959 (use-local-map edebug-mode-map)) |
3960 | |
76298
872a30c0f872
(edebug-kill-buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
75346
diff
changeset
|
3961 (defun edebug-kill-buffer () |
872a30c0f872
(edebug-kill-buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
75346
diff
changeset
|
3962 "Used on `kill-buffer-hook' when Edebug is operating in a buffer of Lisp code." |
872a30c0f872
(edebug-kill-buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
75346
diff
changeset
|
3963 (let (kill-buffer-hook) |
872a30c0f872
(edebug-kill-buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
75346
diff
changeset
|
3964 (kill-buffer (current-buffer))) |
872a30c0f872
(edebug-kill-buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
75346
diff
changeset
|
3965 (top-level)) |
872a30c0f872
(edebug-kill-buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
75346
diff
changeset
|
3966 |
14846 | 3967 ;;; edebug eval list mode |
3968 | |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3969 ;; A list of expressions and their evaluations is displayed in *edebug*. |
661 | 3970 |
3971 (defun edebug-eval-result-list () | |
3972 "Return a list of evaluations of edebug-eval-list" | |
3973 ;; 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
|
3974 ;; 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
|
3975 (let ((edebug-execution-mode 'Go-nonstop) |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
3976 (edebug-trace 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
|
3977 (mapcar 'edebug-safe-eval edebug-eval-list))) |
661 | 3978 |
3979 (defun edebug-eval-display-list (edebug-eval-result-list) | |
3980 ;; Assumes edebug-eval-buffer exists. | |
3981 (let ((edebug-eval-list-temp edebug-eval-list) | |
3982 (standard-output edebug-eval-buffer) | |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3983 (edebug-comment-line |
661 | 3984 (format ";%s\n" (make-string (- (window-width) 2) ?-)))) |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3985 (set-buffer edebug-eval-buffer) |
661 | 3986 (erase-buffer) |
3987 (while edebug-eval-list-temp | |
3988 (prin1 (car edebug-eval-list-temp)) (terpri) | |
3989 (prin1 (car edebug-eval-result-list)) (terpri) | |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
3990 (princ edebug-comment-line) |
661 | 3991 (setq edebug-eval-list-temp (cdr edebug-eval-list-temp)) |
3992 (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
|
3993 (edebug-pop-to-buffer edebug-eval-buffer) |
661 | 3994 )) |
3995 | |
3996 (defun edebug-create-eval-buffer () | |
3997 (if (not (and edebug-eval-buffer (buffer-name edebug-eval-buffer))) | |
3998 (progn | |
3999 (set-buffer (setq edebug-eval-buffer (get-buffer-create "*edebug*"))) | |
4000 (edebug-eval-mode)))) | |
4001 | |
4002 ;; Should generalize this to be callable outside of edebug | |
4003 ;; with calls in user functions, e.g. (edebug-eval-display) | |
4004 | |
4005 (defun edebug-eval-display (edebug-eval-result-list) | |
4006 "Display expressions and evaluations in EVAL-LIST. | |
4007 It modifies the context by popping up the eval display." | |
4008 (if edebug-eval-result-list | |
4009 (progn | |
4010 (edebug-create-eval-buffer) | |
4011 (edebug-eval-display-list edebug-eval-result-list) | |
4012 ))) | |
4013 | |
4014 (defun edebug-eval-redisplay () | |
4015 "Redisplay eval list in outside environment. | |
4016 May only be called from within edebug-recursive-edit." | |
4017 (edebug-create-eval-buffer) | |
4018 (edebug-outside-excursion | |
4019 (edebug-eval-display-list (edebug-eval-result-list)) | |
4020 )) | |
4021 | |
4022 (defun edebug-visit-eval-list () | |
4023 (interactive) | |
4024 (edebug-eval-redisplay) | |
4025 (edebug-pop-to-buffer edebug-eval-buffer)) | |
4026 | |
4027 | |
4028 (defun edebug-update-eval-list () | |
4029 "Replace the evaluation list with the sexps now in the eval buffer." | |
4030 (interactive) | |
4031 (let ((starting-point (point)) | |
4032 new-list) | |
4033 (goto-char (point-min)) | |
4034 ;; get the first expression | |
4035 (edebug-skip-whitespace) | |
4036 (if (not (eobp)) | |
4037 (progn | |
4038 (forward-sexp 1) | |
4039 (setq new-list (cons (edebug-last-sexp) new-list)))) | |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
4040 |
661 | 4041 (while (re-search-forward "^;" nil t) |
4042 (forward-line 1) | |
4043 (skip-chars-forward " \t\n\r") | |
4044 (if (and (/= ?\; (following-char)) | |
4045 (not (eobp))) | |
4046 (progn | |
4047 (forward-sexp 1) | |
4048 (setq new-list (cons (edebug-last-sexp) new-list))))) | |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
4049 |
661 | 4050 (setq edebug-eval-list (nreverse new-list)) |
4051 (edebug-eval-redisplay) | |
4052 (goto-char starting-point))) | |
4053 | |
4054 | |
4055 (defun edebug-delete-eval-item () | |
4056 "Delete the item under point and redisplay." | |
4057 ;; could add arg to do repeatedly | |
4058 (interactive) | |
4059 (if (re-search-backward "^;" nil 'nofail) | |
4060 (forward-line 1)) | |
4061 (delete-region | |
4062 (point) (progn (re-search-forward "^;" nil 'nofail) | |
4063 (beginning-of-line) | |
4064 (point))) | |
4065 (edebug-update-eval-list)) | |
4066 | |
4067 | |
4068 | |
4069 (defvar edebug-eval-mode-map nil | |
20078
0fc1437e7427
(edebug-eval-mode): Nicer mode-name value.
Karl Heuer <kwzh@gnu.org>
parents:
19930
diff
changeset
|
4070 "Keymap for Edebug Eval mode. Superset of Lisp Interaction mode.") |
661 | 4071 |
63303
297abad3d613
(edebug-eval-mode-map): Don't copy lisp-interaction-mode-map but make
Lute Kamstra <lute@gnu.org>
parents:
58602
diff
changeset
|
4072 (unless edebug-eval-mode-map |
297abad3d613
(edebug-eval-mode-map): Don't copy lisp-interaction-mode-map but make
Lute Kamstra <lute@gnu.org>
parents:
58602
diff
changeset
|
4073 (setq edebug-eval-mode-map (make-sparse-keymap)) |
297abad3d613
(edebug-eval-mode-map): Don't copy lisp-interaction-mode-map but make
Lute Kamstra <lute@gnu.org>
parents:
58602
diff
changeset
|
4074 (set-keymap-parent edebug-eval-mode-map lisp-interaction-mode-map) |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
4075 |
661 | 4076 (define-key edebug-eval-mode-map "\C-c\C-w" 'edebug-where) |
4077 (define-key edebug-eval-mode-map "\C-c\C-d" 'edebug-delete-eval-item) | |
4078 (define-key edebug-eval-mode-map "\C-c\C-u" 'edebug-update-eval-list) | |
4079 (define-key edebug-eval-mode-map "\C-x\C-e" 'edebug-eval-last-sexp) | |
63303
297abad3d613
(edebug-eval-mode-map): Don't copy lisp-interaction-mode-map but make
Lute Kamstra <lute@gnu.org>
parents:
58602
diff
changeset
|
4080 (define-key edebug-eval-mode-map "\C-j" 'edebug-eval-print-last-sexp)) |
661 | 4081 |
17650
dbcf0b5d5265
(edebug-eval-mode): Add a mode-class property.
Richard M. Stallman <rms@gnu.org>
parents:
17458
diff
changeset
|
4082 (put 'edebug-eval-mode 'mode-class 'special) |
661 | 4083 |
63303
297abad3d613
(edebug-eval-mode-map): Don't copy lisp-interaction-mode-map but make
Lute Kamstra <lute@gnu.org>
parents:
58602
diff
changeset
|
4084 (define-derived-mode edebug-eval-mode lisp-interaction-mode "Edebug Eval" |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4085 "Mode for evaluation list buffer while in Edebug. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4086 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4087 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
|
4088 global key bindings to several Edebug specific commands. E.g. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4089 `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
|
4090 buffer and \\<global-map>\\[edebug-step-mode] in any buffer. |
661 | 4091 |
4092 Eval list buffer commands: | |
4093 \\{edebug-eval-mode-map} | |
4094 | |
67780
6f62623c8c61
(edebug-all-defs, edebug-all-forms): Add autoload cookies.
Juri Linkov <juri@jurta.org>
parents:
67635
diff
changeset
|
4095 Global commands prefixed by `global-edebug-prefix': |
63303
297abad3d613
(edebug-eval-mode-map): Don't copy lisp-interaction-mode-map but make
Lute Kamstra <lute@gnu.org>
parents:
58602
diff
changeset
|
4096 \\{global-edebug-map}") |
661 | 4097 |
14846 | 4098 ;;; Interface with standard debugger. |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4099 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4100 ;; (setq debugger 'edebug) ; to use the edebug debugger |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4101 ;; (setq debugger 'debug) ; use the standard debugger |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4102 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4103 ;; 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
|
4104 ;; 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
|
4105 ;; edebug is not dependent on this, yet. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4106 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4107 (defun edebug (&optional edebug-arg-mode &rest debugger-args) |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
4108 "Replacement for debug. |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4109 If we are running an edebugged function, |
661 | 4110 show where we last were. Otherwise call debug normally." |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4111 ;; (message "entered: %s depth: %s edebug-recursion-depth: %s" |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4112 ;; edebug-entered (recursion-depth) edebug-recursion-depth) (sit-for 1) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4113 (if (and edebug-entered ; anything active? |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4114 (eq (recursion-depth) edebug-recursion-depth)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4115 (let (;; Where were we before the error occurred? |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4116 (edebug-offset-index (car edebug-offset-indices)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4117 ;; Bind variables required by edebug-display |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4118 (edebug-value (car debugger-args)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4119 edebug-breakpoints |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4120 edebug-break-data |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4121 edebug-break-condition |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4122 edebug-global-break |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4123 (edebug-break (null edebug-arg-mode)) ;; if called explicitly |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4124 ) |
661 | 4125 (edebug-display) |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
4126 (if (eq edebug-arg-mode 'error) |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4127 nil |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4128 edebug-value)) |
661 | 4129 |
4130 ;; Otherwise call debug normally. | |
4131 ;; Still need to remove extraneous edebug calls from stack. | |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4132 (apply 'debug edebug-arg-mode debugger-args) |
661 | 4133 )) |
4134 | |
4135 | |
4136 (defun edebug-backtrace () | |
4137 "Display a non-working backtrace. Better than nothing..." | |
4138 (interactive) | |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4139 (if (or (not edebug-backtrace-buffer) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4140 (null (buffer-name edebug-backtrace-buffer))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4141 (setq edebug-backtrace-buffer |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4142 (generate-new-buffer "*Backtrace*")) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4143 ;; else, could just display edebug-backtrace-buffer |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4144 ) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4145 (with-output-to-temp-buffer (buffer-name edebug-backtrace-buffer) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4146 (setq edebug-backtrace-buffer standard-output) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4147 (let ((print-escape-newlines t) |
661 | 4148 (print-length 50) |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4149 last-ok-point) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4150 (backtrace) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4151 |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
4152 ;; Clean up the backtrace. |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4153 ;; Not quite right for current edebug scheme. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4154 (set-buffer edebug-backtrace-buffer) |
661 | 4155 (setq truncate-lines t) |
4156 (goto-char (point-min)) | |
4157 (setq last-ok-point (point)) | |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4158 (if t (progn |
661 | 4159 |
4160 ;; Delete interspersed edebug internals. | |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4161 (while (re-search-forward "^ \(?edebug" nil t) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4162 (beginning-of-line) |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
4163 (cond |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4164 ((looking-at "^ \(edebug-after") |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4165 ;; Previous lines may contain code, so just delete this line |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4166 (setq last-ok-point (point)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4167 (forward-line 1) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4168 (delete-region last-ok-point (point))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4169 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4170 ((looking-at "^ edebug") |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4171 (forward-line 1) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4172 (delete-region last-ok-point (point)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4173 ))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4174 ))))) |
661 | 4175 |
4176 | |
14846 | 4177 ;;; Trace display |
661 | 4178 |
4179 (defun edebug-trace-display (buf-name fmt &rest args) | |
4180 "In buffer BUF-NAME, display FMT and ARGS at the end and make it visible. | |
4181 The buffer is created if it does not exist. | |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4182 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
|
4183 ;; e.g. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4184 ;; (edebug-trace-display "*trace-point*" |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4185 ;; "saving: point = %s window-start = %s" |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4186 ;; (point) (window-start)) |
15782
096142df0b36
(edebug-trace-display): Save and restore current buffer.
Richard M. Stallman <rms@gnu.org>
parents:
15302
diff
changeset
|
4187 (let* ((oldbuf (current-buffer)) |
096142df0b36
(edebug-trace-display): Save and restore current buffer.
Richard M. Stallman <rms@gnu.org>
parents:
15302
diff
changeset
|
4188 (selected-window (selected-window)) |
661 | 4189 (buffer (get-buffer-create buf-name)) |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4190 buf-window) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4191 ;; (message "before pop-to-buffer") (sit-for 1) |
661 | 4192 (edebug-pop-to-buffer buffer) |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4193 (setq truncate-lines t) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4194 (setq buf-window (selected-window)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4195 (goto-char (point-max)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4196 (insert (apply 'edebug-format fmt args) "\n") |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4197 ;; Make it visible. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4198 (vertical-motion (- 1 (window-height))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4199 (set-window-start buf-window (point)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4200 (goto-char (point-max)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4201 ;; (set-window-point buf-window (point)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4202 ;; (edebug-sit-for 0) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4203 (bury-buffer buffer) |
15782
096142df0b36
(edebug-trace-display): Save and restore current buffer.
Richard M. Stallman <rms@gnu.org>
parents:
15302
diff
changeset
|
4204 (select-window selected-window) |
096142df0b36
(edebug-trace-display): Save and restore current buffer.
Richard M. Stallman <rms@gnu.org>
parents:
15302
diff
changeset
|
4205 (set-buffer oldbuf)) |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4206 buf-name) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4207 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4208 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4209 (defun edebug-trace (fmt &rest args) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4210 "Convenience call to edebug-trace-display using edebug-trace-buffer" |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4211 (apply 'edebug-trace-display edebug-trace-buffer fmt args)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4212 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4213 |
14846 | 4214 ;;; Frequency count and coverage |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4215 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4216 (defun edebug-display-freq-count () |
52898
1b8e800b5b2a
(edebug-display-freq-count): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
52535
diff
changeset
|
4217 "Display the frequency count data for each line of the current definition. |
1b8e800b5b2a
(edebug-display-freq-count): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
52535
diff
changeset
|
4218 The frequency counts are inserted as comment lines after |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4219 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
|
4220 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4221 The counts are inserted starting under the `(' before an expression |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4222 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
|
4223 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
|
4224 the same line. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4225 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4226 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
|
4227 are `eq', the char `=' will be appended after the count |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4228 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
|
4229 expression only evaluated once. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4230 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4231 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
|
4232 reinstrument it." |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4233 (interactive) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4234 (let* ((function (edebug-form-data-symbol)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4235 (counts (get function 'edebug-freq-count)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4236 (coverages (get function 'edebug-coverage)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4237 (data (get function 'edebug)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4238 (def-mark (car data)) ; mark at def start |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4239 (edebug-points (nth 2 data)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4240 (i (1- (length edebug-points))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4241 (last-index) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4242 (first-index) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4243 (start-of-line) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4244 (start-of-count-line) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4245 (last-count) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4246 ) |
661 | 4247 (save-excursion |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4248 ;; Traverse in reverse order so offsets are correct. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4249 (while (<= 0 i) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4250 ;; Start at last expression in line. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4251 (goto-char (+ def-mark (aref edebug-points i))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4252 (beginning-of-line) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4253 (setq start-of-line (- (point) def-mark) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4254 last-index i) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4255 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4256 ;; Find all indexes on same line. |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
4257 (while (and (<= 0 (setq i (1- i))) |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4258 (<= start-of-line (aref edebug-points i)))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4259 ;; Insert all the indices for this line. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4260 (forward-line 1) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4261 (setq start-of-count-line (point) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4262 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
|
4263 last-count -1) ; cause first count to always appear. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4264 (insert ";#") |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4265 ;; i == first-index still |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4266 (while (<= (setq i (1+ i)) last-index) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4267 (let ((count (aref counts i)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4268 (coverage (aref coverages i)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4269 (col (save-excursion |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4270 (goto-char (+ (aref edebug-points i) def-mark)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4271 (- (current-column) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4272 (if (= ?\( (following-char)) 0 1))))) |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
4273 (insert (make-string |
64029
d4866c35bebd
(edebug): Finish `defgroup' description with period.
Juanma Barranquero <lekktu@gmail.com>
parents:
63989
diff
changeset
|
4274 (max 0 (- col (- (point) start-of-count-line))) ?\s) |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4275 (if (and (< 0 count) |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
4276 (not (memq coverage |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4277 '(unknown ok-coverage)))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4278 "=" "") |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4279 (if (= count last-count) "" (int-to-string count)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4280 " ") |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4281 (setq last-count count))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4282 (insert "\n") |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4283 (setq i first-index))))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4284 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4285 (defun edebug-temp-display-freq-count () |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4286 "Temporarily display the frequency count data for the current definition. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4287 It is removed when you hit any char." |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4288 ;; 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
|
4289 (interactive) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4290 (let ((buffer-read-only nil)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4291 (undo-boundary) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4292 (edebug-display-freq-count) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4293 (setq unread-command-char (read-char)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4294 (undo))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4295 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4296 |
14846 | 4297 ;;; Menus |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4298 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4299 (defun edebug-toggle (variable) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4300 (set variable (not (eval variable))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4301 (message "%s: %s" variable (eval variable))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4302 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4303 ;; 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
|
4304 ;; the easy-menu-define macro call is compiled correctly. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4305 (require 'easymenu) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4306 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4307 (defconst edebug-mode-menus |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4308 '("Edebug" |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4309 ["Stop" edebug-stop t] |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4310 ["Step" edebug-step-mode t] |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4311 ["Next" edebug-next-mode t] |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4312 ["Trace" edebug-trace-mode t] |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4313 ["Trace Fast" edebug-Trace-fast-mode t] |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4314 ["Continue" edebug-continue-mode t] |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4315 ["Continue Fast" edebug-Continue-fast-mode t] |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4316 ["Go" edebug-go-mode t] |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4317 ["Go Nonstop" edebug-Go-nonstop-mode 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 ["Help" edebug-help t] |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4320 ["Abort" abort-recursive-edit t] |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4321 ["Quit to Top Level" top-level t] |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4322 ["Quit Nonstop" edebug-top-level-nonstop 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 ("Jumps" |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4325 ["Forward Sexp" edebug-forward-sexp t] |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4326 ["Step In" edebug-step-in t] |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4327 ["Step Out" edebug-step-out t] |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4328 ["Goto Here" edebug-goto-here t]) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4329 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4330 ("Breaks" |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4331 ["Set Breakpoint" edebug-set-breakpoint t] |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4332 ["Unset Breakpoint" edebug-unset-breakpoint t] |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4333 ["Set Conditional Breakpoint" edebug-set-conditional-breakpoint t] |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4334 ["Set Global Break Condition" edebug-set-global-break-condition t] |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4335 ["Show Next Breakpoint" edebug-next-breakpoint t]) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4336 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4337 ("Views" |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4338 ["Where am I?" edebug-where t] |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4339 ["Bounce to Current Point" edebug-bounce-point t] |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4340 ["View Outside Windows" edebug-view-outside t] |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4341 ["Previous Result" edebug-previous-result t] |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4342 ["Show Backtrace" edebug-backtrace t] |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4343 ["Display Freq Count" edebug-display-freq-count t]) |
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 ("Eval" |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4346 ["Expression" edebug-eval-expression t] |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4347 ["Last Sexp" edebug-eval-last-sexp t] |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4348 ["Visit Eval List" edebug-visit-eval-list t]) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4349 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4350 ("Options" |
33758 | 4351 ["Edebug All Defs" edebug-all-defs |
4352 :style toggle :selected edebug-all-defs] | |
4353 ["Edebug All Forms" edebug-all-forms | |
4354 :style toggle :selected edebug-all-forms] | |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4355 "----" |
33758 | 4356 ["Tracing" (edebug-toggle 'edebug-trace) |
4357 :style toggle :selected edebug-trace] | |
4358 ["Test Coverage" (edebug-toggle 'edebug-test-coverage) | |
4359 :style toggle :selected edebug-test-coverage] | |
4360 ["Save Windows" edebug-toggle-save-windows | |
4361 :style toggle :selected edebug-save-windows] | |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
4362 ["Save Point" |
33758 | 4363 (edebug-toggle 'edebug-save-displayed-buffer-points) |
4364 :style toggle :selected edebug-save-displayed-buffer-points] | |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4365 )) |
33758 | 4366 "Menus for Edebug.") |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4367 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4368 |
14846 | 4369 ;;; Emacs version specific code |
4370 | |
40464
f1e32a9da9a8
(edebug-window-live-p): Always alias to window-live-p.
Richard M. Stallman <rms@gnu.org>
parents:
39515
diff
changeset
|
4371 (defalias 'edebug-window-live-p 'window-live-p) |
f1e32a9da9a8
(edebug-window-live-p): Always alias to window-live-p.
Richard M. Stallman <rms@gnu.org>
parents:
39515
diff
changeset
|
4372 |
f1e32a9da9a8
(edebug-window-live-p): Always alias to window-live-p.
Richard M. Stallman <rms@gnu.org>
parents:
39515
diff
changeset
|
4373 (defun edebug-mark () |
58589 | 4374 (mark t)) |
40464
f1e32a9da9a8
(edebug-window-live-p): Always alias to window-live-p.
Richard M. Stallman <rms@gnu.org>
parents:
39515
diff
changeset
|
4375 |
f1e32a9da9a8
(edebug-window-live-p): Always alias to window-live-p.
Richard M. Stallman <rms@gnu.org>
parents:
39515
diff
changeset
|
4376 (defun edebug-set-conditional-breakpoint (arg condition) |
f1e32a9da9a8
(edebug-window-live-p): Always alias to window-live-p.
Richard M. Stallman <rms@gnu.org>
parents:
39515
diff
changeset
|
4377 "Set a conditional breakpoint at nearest sexp. |
f1e32a9da9a8
(edebug-window-live-p): Always alias to window-live-p.
Richard M. Stallman <rms@gnu.org>
parents:
39515
diff
changeset
|
4378 The condition is evaluated in the outside context. |
f1e32a9da9a8
(edebug-window-live-p): Always alias to window-live-p.
Richard M. Stallman <rms@gnu.org>
parents:
39515
diff
changeset
|
4379 With prefix argument, make it a temporary breakpoint." |
f1e32a9da9a8
(edebug-window-live-p): Always alias to window-live-p.
Richard M. Stallman <rms@gnu.org>
parents:
39515
diff
changeset
|
4380 ;; (interactive "P\nxCondition: ") |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
4381 (interactive |
40464
f1e32a9da9a8
(edebug-window-live-p): Always alias to window-live-p.
Richard M. Stallman <rms@gnu.org>
parents:
39515
diff
changeset
|
4382 (list |
f1e32a9da9a8
(edebug-window-live-p): Always alias to window-live-p.
Richard M. Stallman <rms@gnu.org>
parents:
39515
diff
changeset
|
4383 current-prefix-arg |
58602
2864ad32d866
(edebug-set-global-break-condition):
Juri Linkov <juri@jurta.org>
parents:
58589
diff
changeset
|
4384 ;; Read condition as follows; getting previous condition is cumbersome: |
40464
f1e32a9da9a8
(edebug-window-live-p): Always alias to window-live-p.
Richard M. Stallman <rms@gnu.org>
parents:
39515
diff
changeset
|
4385 (let ((edebug-stop-point (edebug-find-stop-point))) |
f1e32a9da9a8
(edebug-window-live-p): Always alias to window-live-p.
Richard M. Stallman <rms@gnu.org>
parents:
39515
diff
changeset
|
4386 (if edebug-stop-point |
f1e32a9da9a8
(edebug-window-live-p): Always alias to window-live-p.
Richard M. Stallman <rms@gnu.org>
parents:
39515
diff
changeset
|
4387 (let* ((edebug-def-name (car edebug-stop-point)) |
f1e32a9da9a8
(edebug-window-live-p): Always alias to window-live-p.
Richard M. Stallman <rms@gnu.org>
parents:
39515
diff
changeset
|
4388 (index (cdr edebug-stop-point)) |
f1e32a9da9a8
(edebug-window-live-p): Always alias to window-live-p.
Richard M. Stallman <rms@gnu.org>
parents:
39515
diff
changeset
|
4389 (edebug-data (get edebug-def-name 'edebug)) |
f1e32a9da9a8
(edebug-window-live-p): Always alias to window-live-p.
Richard M. Stallman <rms@gnu.org>
parents:
39515
diff
changeset
|
4390 (edebug-breakpoints (car (cdr edebug-data))) |
f1e32a9da9a8
(edebug-window-live-p): Always alias to window-live-p.
Richard M. Stallman <rms@gnu.org>
parents:
39515
diff
changeset
|
4391 (edebug-break-data (assq index edebug-breakpoints)) |
f1e32a9da9a8
(edebug-window-live-p): Always alias to window-live-p.
Richard M. Stallman <rms@gnu.org>
parents:
39515
diff
changeset
|
4392 (edebug-break-condition (car (cdr edebug-break-data))) |
58602
2864ad32d866
(edebug-set-global-break-condition):
Juri Linkov <juri@jurta.org>
parents:
58589
diff
changeset
|
4393 (initial (and edebug-break-condition |
2864ad32d866
(edebug-set-global-break-condition):
Juri Linkov <juri@jurta.org>
parents:
58589
diff
changeset
|
4394 (format "%s" edebug-break-condition)))) |
2864ad32d866
(edebug-set-global-break-condition):
Juri Linkov <juri@jurta.org>
parents:
58589
diff
changeset
|
4395 (read-from-minibuffer |
2864ad32d866
(edebug-set-global-break-condition):
Juri Linkov <juri@jurta.org>
parents:
58589
diff
changeset
|
4396 "Condition: " initial read-expression-map t |
2864ad32d866
(edebug-set-global-break-condition):
Juri Linkov <juri@jurta.org>
parents:
58589
diff
changeset
|
4397 (if (equal (car read-expression-history) initial) |
2864ad32d866
(edebug-set-global-break-condition):
Juri Linkov <juri@jurta.org>
parents:
58589
diff
changeset
|
4398 '(read-expression-history . 1) |
2864ad32d866
(edebug-set-global-break-condition):
Juri Linkov <juri@jurta.org>
parents:
58589
diff
changeset
|
4399 'read-expression-history))))))) |
40464
f1e32a9da9a8
(edebug-window-live-p): Always alias to window-live-p.
Richard M. Stallman <rms@gnu.org>
parents:
39515
diff
changeset
|
4400 (edebug-modify-breakpoint t condition arg)) |
f1e32a9da9a8
(edebug-window-live-p): Always alias to window-live-p.
Richard M. Stallman <rms@gnu.org>
parents:
39515
diff
changeset
|
4401 |
41175
7a8a9f274e2c
(edebug-form-data, edebug-offsets)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40475
diff
changeset
|
4402 (easy-menu-define edebug-menu edebug-mode-map "Edebug menus" edebug-mode-menus) |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4403 |
14846 | 4404 ;;; Byte-compiler |
4405 | |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4406 ;; Extension for bytecomp to resolve undefined function references. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4407 ;; Requires new byte compiler. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4408 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4409 ;; Reenable byte compiler warnings about unread-command-char and -event. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4410 ;; Disabled before edebug-recursive-edit. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4411 (eval-when-compile |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4412 (if edebug-unread-command-char-warning |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
4413 (put 'unread-command-char 'byte-obsolete-variable |
33758 | 4414 edebug-unread-command-char-warning))) |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4415 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4416 (eval-when-compile |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4417 ;; 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
|
4418 ;; We only want to evaluate when actually byte compiling. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4419 ;; 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
|
4420 (if (featurep 'byte-compile) (progn |
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 (defun byte-compile-resolve-functions (funcs) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4423 "Say it is OK for the named functions to be unresolved." |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
4424 (mapcar |
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
4425 (function |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4426 (lambda (func) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4427 (setq byte-compile-unresolved-functions |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4428 (delq (assq func byte-compile-unresolved-functions) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4429 byte-compile-unresolved-functions)))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4430 funcs) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4431 nil) |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
4432 |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4433 '(defun byte-compile-resolve-free-references (vars) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4434 "Say it is OK for the named variables to be referenced." |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
4435 (mapcar |
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
4436 (function |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4437 (lambda (var) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4438 (setq byte-compile-free-references |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4439 (delq var byte-compile-free-references)))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4440 vars) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4441 nil) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4442 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4443 '(defun byte-compile-resolve-free-assignments (vars) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4444 "Say it is OK for the named variables to be assigned." |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
4445 (mapcar |
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
4446 (function |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4447 (lambda (var) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4448 (setq byte-compile-free-assignments |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4449 (delq var byte-compile-free-assignments)))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4450 vars) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4451 nil) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4452 |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
4453 (byte-compile-resolve-functions |
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
4454 '(reporter-submit-bug-report |
14846 | 4455 edebug-gensym ;; also in cl.el |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4456 ;; Interfaces to standard functions. |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
4457 edebug-original-eval-defun |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4458 edebug-original-read |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4459 edebug-get-buffer-window |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4460 edebug-mark |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4461 edebug-mark-marker |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
4462 edebug-input-pending-p |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4463 edebug-sit-for |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
4464 edebug-prin1-to-string |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4465 edebug-format |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4466 ;; lemacs |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4467 zmacs-deactivate-region |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4468 popup-menu |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4469 ;; CL |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4470 cl-macroexpand-all |
14846 | 4471 ;; 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
|
4472 byte-compile-resolve-functions |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4473 )) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4474 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4475 '(byte-compile-resolve-free-references |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4476 '(read-expression-history |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4477 read-expression-map)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4478 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4479 '(byte-compile-resolve-free-assignments |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4480 '(read-expression-history)) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4481 |
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 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4484 |
14846 | 4485 ;;; Autoloading of Edebug accessories |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4486 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4487 (if (featurep 'cl) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4488 (add-hook 'edebug-setup-hook |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4489 (function (lambda () (require 'cl-specs)))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4490 ;; 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
|
4491 (add-hook 'cl-load-hook |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4492 (function (lambda () (require 'cl-specs))))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4493 |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47660
diff
changeset
|
4494 ;;; 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
|
4495 (if (featurep 'cl-read) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4496 (add-hook 'edebug-setup-hook |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4497 (function (lambda () (require 'edebug-cl-read)))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4498 ;; 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
|
4499 (add-hook 'cl-read-load-hooks |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4500 (function (lambda () (require 'edebug-cl-read))))) |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4501 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4502 |
14846 | 4503 ;;; Finalize Loading |
6512
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4504 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4505 ;;; Finally, hook edebug into the rest of Emacs. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4506 ;;; There are probably some other things that could go here. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4507 |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4508 ;; Install edebug read and eval functions. |
c79a6bf75daa
New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents:
6226
diff
changeset
|
4509 (edebug-install-read-eval-functions) |
661 | 4510 |
3350 | 4511 (provide 'edebug) |
4512 | |
52401 | 4513 ;;; arch-tag: 19c8d05c-4554-426e-ac72-e0fa1fcb0808 |
661 | 4514 ;;; edebug.el ends here |