annotate lisp/emacs-lisp/edebug.el @ 88192:f2fae8754f34

(rmail-process-new-messages): Don't require rmailkwd here, do it at toplevel instead.
author Henrik Enberg <henrik.enberg@telia.com>
date Tue, 17 Jan 2006 21:33:12 +0000
parents d7ddb3e565de
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1 ;;; edebug.el --- a source-level debugger for Emacs Lisp
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
2
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3 ;; Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1997, 1999,
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
4 ;; 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
5
30805
3cfd3dc474b8 Change authors' mail address.
Gerd Moellmann <gerd@gnu.org>
parents: 30054
diff changeset
6 ;; Author: Daniel LaLiberte <liberte@holonexus.org>
20832
d953c9628570 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 20078
diff changeset
7 ;; Maintainer: FSF
2247
2c7997f249eb Add or correct keywords
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1821
diff changeset
8 ;; Keywords: lisp, tools, maint
846
20674ae6bf52 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 778
diff changeset
9
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
10 ;; This file is part of GNU Emacs.
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
11
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
12 ;; GNU Emacs is free software; you can redistribute it and/or modify
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
13 ;; it under the terms of the GNU General Public License as published by
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
14 ;; the Free Software Foundation; either version 2, or (at your option)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
15 ;; any later version.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
16
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
17 ;; GNU Emacs is distributed in the hope that it will be useful,
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
18 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
19 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
20 ;; GNU General Public License for more details.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
21
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
22 ;; You should have received a copy of the GNU General Public License
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
23 ;; along with GNU Emacs; see the file COPYING. If not, write to the
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
24 ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
25 ;; Boston, MA 02110-1301, USA.
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
26
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
27 ;;; Commentary:
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
28
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
29 ;; This minor mode allows programmers to step through Emacs Lisp
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
30 ;; source code while executing functions. You can also set
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
31 ;; breakpoints, trace (stopping at each expression), evaluate
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
32 ;; expressions as if outside Edebug, reevaluate and display a list of
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
33 ;; expressions, trap errors normally caught by debug, and display a
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
34 ;; debug style backtrace.
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
35
20078
0fc1437e7427 (edebug-eval-mode): Nicer mode-name value.
Karl Heuer <kwzh@gnu.org>
parents: 19930
diff changeset
36 ;;; Minimal Instructions
0fc1437e7427 (edebug-eval-mode): Nicer mode-name value.
Karl Heuer <kwzh@gnu.org>
parents: 19930
diff changeset
37 ;; =====================
0fc1437e7427 (edebug-eval-mode): Nicer mode-name value.
Karl Heuer <kwzh@gnu.org>
parents: 19930
diff changeset
38
0fc1437e7427 (edebug-eval-mode): Nicer mode-name value.
Karl Heuer <kwzh@gnu.org>
parents: 19930
diff changeset
39 ;; First evaluate a defun with C-M-x, then run the function. Step
0fc1437e7427 (edebug-eval-mode): Nicer mode-name value.
Karl Heuer <kwzh@gnu.org>
parents: 19930
diff changeset
40 ;; through the code with SPC, mark breakpoints with b, go until a
0fc1437e7427 (edebug-eval-mode): Nicer mode-name value.
Karl Heuer <kwzh@gnu.org>
parents: 19930
diff changeset
41 ;; breakpoint is reached with g, and quit execution with q. Use the
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
42 ;; "?" command in edebug to describe other commands.
20832
d953c9628570 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 20078
diff changeset
43 ;; See the Emacs Lisp Reference Manual for more details.
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
44
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
45 ;; If you wish to change the default edebug global command prefix, change:
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
46 ;; (setq edebug-global-prefix "\C-xX")
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
47
20832
d953c9628570 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 20078
diff changeset
48 ;; Edebug was written by
d953c9628570 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 20078
diff changeset
49 ;; Daniel LaLiberte
20078
0fc1437e7427 (edebug-eval-mode): Nicer mode-name value.
Karl Heuer <kwzh@gnu.org>
parents: 19930
diff changeset
50 ;; GTE Labs
0fc1437e7427 (edebug-eval-mode): Nicer mode-name value.
Karl Heuer <kwzh@gnu.org>
parents: 19930
diff changeset
51 ;; 40 Sylvan Rd
0fc1437e7427 (edebug-eval-mode): Nicer mode-name value.
Karl Heuer <kwzh@gnu.org>
parents: 19930
diff changeset
52 ;; Waltham, MA 02254
30805
3cfd3dc474b8 Change authors' mail address.
Gerd Moellmann <gerd@gnu.org>
parents: 30054
diff changeset
53 ;; liberte@holonexus.org
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
54
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
55 ;;; Code:
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
56
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
57 ;;; Bug reporting
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
58
33758
8c1e62157545 (edebug-version)
Dave Love <fx@gnu.org>
parents: 33709
diff changeset
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
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
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
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
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
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
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
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
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
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
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
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
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
d953c9628570 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 20078
diff changeset
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
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
135 window, the buffer's point will be changed to the window's point.
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
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
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
144 "*Initial execution mode for Edebug, if non-nil.
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
145 If this variable is non-nil, it specifies the initial execution mode
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
146 for Edebug when it is first activated. Possible values are step, next,
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
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
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
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
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
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
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
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
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
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 ;;;###autoload
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
239 (defmacro def-edebug-spec (symbol spec)
27296
6a6b75706812 (with-syntax-table): Add a def-edebug-spec.
Richard M. Stallman <rms@gnu.org>
parents: 26648
diff changeset
240 "Set the `edebug-form-spec' property of SYMBOL according to SPEC.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
241 Both SYMBOL and SPEC are unevaluated. The SPEC can be 0, t, a symbol
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
242 \(naming a function), or a list."
26519
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
243 `(put (quote ,symbol) 'edebug-form-spec (quote ,spec)))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
244
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
245 (defmacro def-edebug-form-spec (symbol spec-form)
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
246 "For compatibility with old version."
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
247 (def-edebug-spec symbol (eval spec-form)))
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
248 (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
249
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
250 (defun get-edebug-spec (symbol)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
251 ;; Get the spec of symbol resolving all indirection.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
252 (let ((edebug-form-spec (get symbol 'edebug-form-spec))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
253 indirect)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
254 (while (and (symbolp edebug-form-spec)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
255 (setq indirect (get edebug-form-spec 'edebug-form-spec)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
256 ;; (edebug-trace "indirection: %s" edebug-form-spec)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
257 (setq edebug-form-spec indirect))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
258 edebug-form-spec
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
259 ))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
260
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
261 ;;; Utilities
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
262
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
263 ;; Define edebug-gensym - from old cl.el
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
264 (defvar edebug-gensym-index 0
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
265 "Integer used by `edebug-gensym' to produce new names.")
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
266
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
267 (defun edebug-gensym (&optional prefix)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
268 "Generate a fresh uninterned symbol.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
269 There is an optional argument, PREFIX. PREFIX is the
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
270 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
271 except when debugging needs suggest otherwise."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
272 (if (null prefix)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
273 (setq prefix "G"))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
274 (let ((newsymbol nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
275 (newname ""))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
276 (while (not newsymbol)
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
277 (setq newname (concat prefix (int-to-string edebug-gensym-index)))
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
278 (setq edebug-gensym-index (+ edebug-gensym-index 1))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
279 (if (not (intern-soft newname))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
280 (setq newsymbol (make-symbol newname))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
281 newsymbol))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
282
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
283 (defun edebug-lambda-list-keywordp (object)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
284 "Return t if OBJECT is a lambda list keyword.
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
285 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
286 (and (symbolp object)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
287 (= ?& (aref (symbol-name object) 0))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
288
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
289
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
290 (defun edebug-last-sexp ()
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
291 ;; Return the last sexp before point in current buffer.
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
292 ;; Assumes Emacs Lisp syntax is active.
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
293 (car
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
294 (read-from-string
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
295 (buffer-substring
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
296 (save-excursion
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
297 (forward-sexp -1)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
298 (point))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
299 (point)))))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
300
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
301 (defun edebug-window-list ()
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
302 "Return a list of windows, in order of `next-window'."
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
303 ;; This doesn't work for epoch.
30000
323c0e2c2032 (edebug-window-live-p, edebug-window-list)
Gerd Moellmann <gerd@gnu.org>
parents: 29202
diff changeset
304 (let (window-list)
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
305 (walk-windows (lambda (w) (push w window-list)))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
306 (nreverse window-list)))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
307
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
308 ;; Not used.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
309 '(defun edebug-two-window-p ()
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
310 "Return t if there are two windows."
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
311 (and (not (one-window-p))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
312 (eq (selected-window)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
313 (next-window (next-window (selected-window))))))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
314
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
315 (defsubst edebug-lookup-function (object)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
316 (while (and (symbolp object) (fboundp object))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
317 (setq object (symbol-function object)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
318 object)
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
319
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
320 (defun edebug-macrop (object)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
321 "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
322 (setq object (edebug-lookup-function object))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
323 (if (and (listp object)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
324 (eq 'macro (car object))
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
325 (functionp (cdr object)))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
326 object))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
327
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
328 (defun edebug-sort-alist (alist function)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
329 ;; Return the ALIST sorted with comparison function FUNCTION.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
330 ;; This uses 'sort so the sorting is destructive.
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
331 (sort alist (function
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
332 (lambda (e1 e2)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
333 (funcall function (car e1) (car e2))))))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
334
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
335 ;;(def-edebug-spec edebug-save-restriction t)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
336
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
337 ;; 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
338 '(defmacro edebug-save-restriction (&rest body)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
339 "Evaluate BODY while saving the current buffers restriction.
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
340 BODY may change buffer outside of current restriction, unlike
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
341 save-restriction. BODY may change the current buffer,
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
342 and the restriction will be restored to the original buffer,
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
343 and the current buffer remains current.
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
344 Return the result of the last expression in BODY."
26519
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
345 `(let ((edebug:s-r-beg (point-min-marker))
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
346 (edebug:s-r-end (point-max-marker)))
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
347 (unwind-protect
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
348 (progn ,@body)
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
349 (save-excursion
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
350 (set-buffer (marker-buffer edebug:s-r-beg))
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
351 (narrow-to-region edebug:s-r-beg edebug:s-r-end)))))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
352
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
353 ;;; Display
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
354
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
355 (defconst edebug-trace-buffer "*edebug-trace*"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
356 "Name of the buffer to put trace info in.")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
357
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
358 (defun edebug-pop-to-buffer (buffer &optional window)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
359 ;; Like pop-to-buffer, but select window where BUFFER was last shown.
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
360 ;; Select WINDOW if it provided and it still exists. Otherwise,
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
361 ;; if buffer is currently shown in several windows, choose one.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
362 ;; Otherwise, find a new window, possibly splitting one.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
363 (setq window (if (and (windowp window) (edebug-window-live-p window)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
364 (eq (window-buffer window) buffer))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
365 window
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
366 (if (eq (window-buffer (selected-window)) buffer)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
367 (selected-window)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
368 (edebug-get-buffer-window buffer))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
369 (if window
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
370 (select-window window)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
371 (if (one-window-p)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
372 (split-window))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
373 ;; (message "next window: %s" (next-window)) (sit-for 1)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
374 (if (eq (get-buffer-window edebug-trace-buffer) (next-window))
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
375 ;; Don't select trace window
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
376 nil
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
377 (select-window (next-window))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
378 (set-window-buffer (selected-window) buffer)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
379 (set-window-hscroll (selected-window) 0);; should this be??
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
380 ;; 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
381 ;;(set-buffer buffer)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
382 )
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
383
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
384
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
385 (defun edebug-get-displayed-buffer-points ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
386 ;; 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
387 (let (list)
323c0e2c2032 (edebug-window-live-p, edebug-window-list)
Gerd Moellmann <gerd@gnu.org>
parents: 29202
diff changeset
388 (walk-windows (lambda (w)
323c0e2c2032 (edebug-window-live-p, edebug-window-list)
Gerd Moellmann <gerd@gnu.org>
parents: 29202
diff changeset
389 (unless (eq w (selected-window))
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
390 (push (cons (window-buffer w)
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
391 (window-point w))
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
392 list))))
30000
323c0e2c2032 (edebug-window-live-p, edebug-window-list)
Gerd Moellmann <gerd@gnu.org>
parents: 29202
diff changeset
393 list))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
394
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
395
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
396 (defun edebug-set-buffer-points (buffer-points)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
397 ;; Restore the buffer-points created by edebug-get-displayed-buffer-points.
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
398 (save-current-buffer
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
399 (mapcar (lambda (buf-point)
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
400 (when (buffer-live-p (car buf-point))
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
401 (set-buffer (car buf-point))
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
402 (goto-char (cdr buf-point))))
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
403 buffer-points)))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
404
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
405 (defun edebug-current-windows (which-windows)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
406 ;; Get either a full window configuration or some window information.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
407 (if (listp which-windows)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
408 (mapcar (function (lambda (window)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
409 (if (edebug-window-live-p window)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
410 (list window
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
411 (window-buffer window)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
412 (window-point window)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
413 (window-start window)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
414 (window-hscroll window)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
415 which-windows)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
416 (current-window-configuration)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
417
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
418 (defun edebug-set-windows (window-info)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
419 ;; Set either a full window configuration or some window information.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
420 (if (listp window-info)
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
421 (mapcar (function
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
422 (lambda (one-window-info)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
423 (if one-window-info
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
424 (apply (function
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
425 (lambda (window buffer point start hscroll)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
426 (if (edebug-window-live-p window)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
427 (progn
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
428 (set-window-buffer window buffer)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
429 (set-window-point window point)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
430 (set-window-start window start)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
431 (set-window-hscroll window hscroll)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
432 one-window-info))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
433 window-info)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
434 (set-window-configuration window-info)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
435
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
436 (defalias 'edebug-get-buffer-window 'get-buffer-window)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
437 (defalias 'edebug-sit-for 'sit-for)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
438 (defalias 'edebug-input-pending-p 'input-pending-p)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
439
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
440
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
441 ;;; Redefine read and eval functions
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
442 ;; read is redefined to maybe instrument forms.
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
443 ;; eval-defun is redefined to check edebug-all-forms and edebug-all-defs.
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
444
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
445 ;; Save the original read function
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
446 (or (fboundp 'edebug-original-read)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
447 (defalias 'edebug-original-read (symbol-function 'read)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
448
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
449 (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
450 "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
451 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
452 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
453 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
454 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
455 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
456 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
457 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
458 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
459
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
460 This version, from Edebug, maybe instruments the expression. But the
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
461 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
462 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
463 `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
464 (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
465 (if (eq stream (current-buffer))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
466 (edebug-read-and-maybe-wrap-form)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
467 (edebug-original-read stream)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
468
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
469 (or (fboundp 'edebug-original-eval-defun)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
470 (defalias 'edebug-original-eval-defun (symbol-function 'eval-defun)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
471
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
472 ;; We should somehow arrange to be able to do this
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
473 ;; without actually replacing the eval-defun command.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
474 (defun edebug-eval-defun (edebug-it)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
475 "Evaluate the top-level form containing point, or after point.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
476
30054
72640301c1fe (edebug-eval-defun): Make doc string
Gerd Moellmann <gerd@gnu.org>
parents: 30000
diff changeset
477 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
478 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
479 already has some other value. (Normally `defvar' does not change the
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
480 variable's value if it already has a value.) Treat `defcustom'
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
481 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
482
72640301c1fe (edebug-eval-defun): Make doc string
Gerd Moellmann <gerd@gnu.org>
parents: 30000
diff changeset
483 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
484
72640301c1fe (edebug-eval-defun): Make doc string
Gerd Moellmann <gerd@gnu.org>
parents: 30000
diff changeset
485 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
486 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
487 invoked without a prefix argument
72640301c1fe (edebug-eval-defun): Make doc string
Gerd Moellmann <gerd@gnu.org>
parents: 30000
diff changeset
488
72640301c1fe (edebug-eval-defun): Make doc string
Gerd Moellmann <gerd@gnu.org>
parents: 30000
diff changeset
489 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
490 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
491 instrumented, just FUNCTION is printed.
72640301c1fe (edebug-eval-defun): Make doc string
Gerd Moellmann <gerd@gnu.org>
parents: 30000
diff changeset
492
72640301c1fe (edebug-eval-defun): Make doc string
Gerd Moellmann <gerd@gnu.org>
parents: 30000
diff changeset
493 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
494 the minibuffer."
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
495 (interactive "P")
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
496 (let* ((edebugging (not (eq (not edebug-it) (not edebug-all-defs))))
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
497 (edebug-result)
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
498 (form
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
499 (let ((edebug-all-forms edebugging)
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
500 (edebug-all-defs (eq edebug-all-defs (not edebug-it))))
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
501 (edebug-read-top-level-form))))
32227
d22ae991ac5f Comment.
Dave Love <fx@gnu.org>
parents: 30805
diff changeset
502 ;; 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
503 ;; same, since that gets a macroexpanded form.
24024
2981304f5015 (edebug-eval-defun): Deal with defcustom
Dave Love <fx@gnu.org>
parents: 23587
diff changeset
504 (cond ((and (eq (car form) 'defvar)
2981304f5015 (edebug-eval-defun): Deal with defcustom
Dave Love <fx@gnu.org>
parents: 23587
diff changeset
505 (cdr-safe (cdr-safe form)))
2981304f5015 (edebug-eval-defun): Deal with defcustom
Dave Love <fx@gnu.org>
parents: 23587
diff changeset
506 ;; 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
507 (makunbound (nth 1 form)))
24024
2981304f5015 (edebug-eval-defun): Deal with defcustom
Dave Love <fx@gnu.org>
parents: 23587
diff changeset
508 ((and (eq (car form) 'defcustom)
2981304f5015 (edebug-eval-defun): Deal with defcustom
Dave Love <fx@gnu.org>
parents: 23587
diff changeset
509 (default-boundp (nth 1 form)))
2981304f5015 (edebug-eval-defun): Deal with defcustom
Dave Love <fx@gnu.org>
parents: 23587
diff changeset
510 ;; Force variable to be bound.
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
511 (set-default (nth 1 form) (eval (nth 2 form))))
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
512 ((eq (car form) 'defface)
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
513 ;; Reset the face.
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
514 (setq face-new-frame-defaults
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
515 (assq-delete-all (nth 1 form) face-new-frame-defaults))
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
516 (put (nth 1 form) 'face-defface-spec nil)
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
517 ;; See comments in `eval-defun-1' for purpose of code below
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
518 (setq form (prog1 `(prog1 ,form
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
519 (put ',(nth 1 form) 'saved-face
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
520 ',(get (nth 1 form) 'saved-face))
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
521 (put ',(nth 1 form) 'customized-face
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
522 ,(nth 2 form)))
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
523 (put (nth 1 form) 'saved-face nil)))))
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
524 (setq edebug-result (eval form))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
525 (if (not edebugging)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
526 (princ edebug-result)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
527 edebug-result)))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
528
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
529
727
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 661
diff changeset
530 ;;;###autoload
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
531 (defalias 'edebug-defun 'edebug-eval-top-level-form)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
532
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
533 ;;;###autoload
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
534 (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
535 "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
536 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
537 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
538 using `eval-expression' (which see).
546f1e0c46c9 (edebug-eval-top-level-form): Use eval-expression.
Richard M. Stallman <rms@gnu.org>
parents: 46716
diff changeset
539
546f1e0c46c9 (edebug-eval-top-level-form): Use eval-expression.
Richard M. Stallman <rms@gnu.org>
parents: 46716
diff changeset
540 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
541 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
542 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
543 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
544 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
545
546f1e0c46c9 (edebug-eval-top-level-form): Use eval-expression.
Richard M. Stallman <rms@gnu.org>
parents: 46716
diff changeset
546 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
547 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
548 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
549 \(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
550 already is one.)"
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
551 (interactive)
46784
546f1e0c46c9 (edebug-eval-top-level-form): Use eval-expression.
Richard M. Stallman <rms@gnu.org>
parents: 46716
diff changeset
552 (eval-expression
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
553 ;; 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
554 ;; 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
555 (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
556 (edebug-all-defs t))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
557 (edebug-read-top-level-form))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
558
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
559
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
560 (defun edebug-read-top-level-form ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
561 (let ((starting-point (point)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
562 (end-of-defun)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
563 (beginning-of-defun)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
564 (prog1
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
565 (edebug-read-and-maybe-wrap-form)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
566 ;; Recover point, but only if no error occurred.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
567 (goto-char starting-point))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
568
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
569
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
570 ;; Compatibility with old versions.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
571 (defalias 'edebug-all-defuns 'edebug-all-defs)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
572
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
573 ;;;###autoload
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
574 (defun edebug-all-defs ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
575 "Toggle edebugging of all definitions."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
576 (interactive)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
577 (setq edebug-all-defs (not edebug-all-defs))
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
578 (message "Edebugging all definitions is %s."
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
579 (if edebug-all-defs "on" "off")))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
580
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
581
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
582 ;;;###autoload
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
583 (defun edebug-all-forms ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
584 "Toggle edebugging of all forms."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
585 (interactive)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
586 (setq edebug-all-forms (not edebug-all-forms))
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
587 (message "Edebugging all forms is %s."
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
588 (if edebug-all-forms "on" "off")))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
589
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
590
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
591 (defun edebug-install-read-eval-functions ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
592 (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
593 ;; Don't install if already installed.
26049
e7c4cf80a64a (edebug-install-read-eval-functions)
Dave Love <fx@gnu.org>
parents: 25812
diff changeset
594 (unless load-read-function
e7c4cf80a64a (edebug-install-read-eval-functions)
Dave Love <fx@gnu.org>
parents: 25812
diff changeset
595 (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
596 (defalias 'eval-defun 'edebug-eval-defun)))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
597
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
598 (defun edebug-uninstall-read-eval-functions ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
599 (interactive)
26049
e7c4cf80a64a (edebug-install-read-eval-functions)
Dave Love <fx@gnu.org>
parents: 25812
diff changeset
600 (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
601 (defalias 'eval-defun (symbol-function 'edebug-original-eval-defun)))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
602
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
603
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
604 ;;; Edebug internal data
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
605
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
606 ;; 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
607 ;; buffer-local variable `edebug-form-data'.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
608
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
609 (make-variable-buffer-local 'edebug-form-data)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
610
41175
7a8a9f274e2c (edebug-form-data, edebug-offsets)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40475
diff changeset
611 (defvar edebug-form-data nil)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
612 ;; A list of entries associating symbols with buffer regions.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
613 ;; 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
614 ;; @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
615 ;; 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
616 ;; 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
617 ;; property list.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
618
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
619 ;; 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
620 ;; 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
621 ;; list of a symbol.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
622
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
623 (defun edebug-make-form-data-entry (symbol begin end)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
624 (list symbol begin end))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
625
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
626 (defsubst edebug-form-data-name (entry)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
627 (car entry))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
628
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
629 (defsubst edebug-form-data-begin (entry)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
630 (nth 1 entry))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
631
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
632 (defsubst edebug-form-data-end (entry)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
633 (nth 2 entry))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
634
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
635 (defsubst edebug-set-form-data-entry (entry name begin end)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
636 (setcar entry name);; in case name is changed
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
637 (set-marker (nth 1 entry) begin)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
638 (set-marker (nth 2 entry) end))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
639
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
640 (defun edebug-get-form-data-entry (pnt &optional end-point)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
641 ;; 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
642 ;; If END-POINT is supplied, match must be exact.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
643 ;; Return `nil' if none found.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
644 (let ((rest edebug-form-data)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
645 closest-entry
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
646 (closest-dist 999999)) ;; need maxint here
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
647 (while (and rest (< 0 closest-dist))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
648 (let* ((entry (car rest))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
649 (begin (edebug-form-data-begin entry))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
650 (dist (- pnt begin)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
651 (setq rest (cdr rest))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
652 (if (and (<= 0 dist)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
653 (< dist closest-dist)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
654 (or (not end-point)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
655 (= end-point (edebug-form-data-end entry)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
656 (<= pnt (edebug-form-data-end entry)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
657 (setq closest-dist dist
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
658 closest-entry entry))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
659 closest-entry))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
660
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
661 ;; Also need to find all contained entries,
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
662 ;; 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
663
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
664 (defun edebug-form-data-symbol ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
665 ;; 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
666 ;; If point is not inside a edebuggable form, cause error.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
667 (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
668 (error "Not inside instrumented form")))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
669
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
670 (defun edebug-make-top-form-data-entry (new-entry)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
671 ;; 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
672 (edebug-clear-form-data-entry new-entry)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
673 (setq edebug-form-data (cons new-entry edebug-form-data)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
674
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
675 (defun edebug-clear-form-data-entry (entry)
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
676 ;; 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
677 ;; 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
678 (if entry
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
679 (progn
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
680 ;; Instead of this, we could just find all contained forms.
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
681 ;; (put (car entry) 'edebug nil) ;
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
682 ;; (mapcar 'edebug-clear-form-data-entry ; dangerous
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
683 ;; (get (car entry) 'edebug-dependents))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
684 ;; (set-marker (nth 1 entry) nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
685 ;; (set-marker (nth 2 entry) nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
686 (setq edebug-form-data (delq entry edebug-form-data)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
687
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
688 ;;; Parser utilities
6512
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-syntax-error (&rest args)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
691 ;; Signal an invalid-read-syntax with ARGS.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
692 (signal 'invalid-read-syntax args))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
693
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
694
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
695 (defconst edebug-read-syntax-table
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
696 ;; Lookup table for significant characters indicating the class of the
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
697 ;; 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
698 (let ((table (make-char-table 'syntax-table 'symbol))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
699 (i 0))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
700 (while (< i ?!)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
701 (aset table i 'space)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
702 (setq i (1+ i)))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
703 (aset table ?\( 'lparen)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
704 (aset table ?\) 'rparen)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
705 (aset table ?\' 'quote)
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
706 (aset table ?\` 'backquote)
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
707 (aset table ?\, 'comma)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
708 (aset table ?\" 'string)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
709 (aset table ?\? 'char)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
710 (aset table ?\[ 'lbracket)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
711 (aset table ?\] 'rbracket)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
712 (aset table ?\. 'dot)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
713 (aset table ?\# 'hash)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
714 ;; We treat numbers as symbols, because of confusion with -, -1, and 1-.
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
715 ;; 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
716 table))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
717
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
718 (defun edebug-next-token-class ()
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
719 ;; Move to the next token and return its class. We only care about
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
720 ;; lparen, rparen, dot, quote, backquote, comma, string, char, vector,
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
721 ;; or symbol.
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
722 (edebug-skip-whitespace)
25056
d29c2ded5971 Delete compatibility code.
Karl Heuer <kwzh@gnu.org>
parents: 24122
diff changeset
723 (if (and (eq (following-char) ?.)
d29c2ded5971 Delete compatibility code.
Karl Heuer <kwzh@gnu.org>
parents: 24122
diff changeset
724 (save-excursion
d29c2ded5971 Delete compatibility code.
Karl Heuer <kwzh@gnu.org>
parents: 24122
diff changeset
725 (forward-char 1)
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
726 (or (and (eq (aref edebug-read-syntax-table (following-char))
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
727 'symbol)
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
728 (not (= (following-char) ?\;)))
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
729 (memq (following-char) '(?\, ?\.)))))
25056
d29c2ded5971 Delete compatibility code.
Karl Heuer <kwzh@gnu.org>
parents: 24122
diff changeset
730 'symbol
d29c2ded5971 Delete compatibility code.
Karl Heuer <kwzh@gnu.org>
parents: 24122
diff changeset
731 (aref edebug-read-syntax-table (following-char))))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
732
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
733
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
734 (defun edebug-skip-whitespace ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
735 ;; 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
736 (skip-chars-forward " \t\r\n\f")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
737 (while (= (following-char) ?\;)
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
738 (skip-chars-forward "^\n") ; skip the comment
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
739 (skip-chars-forward " \t\r\n\f")))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
740
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
741
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
742 ;; Mostly obsolete reader; still used in one case.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
743
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
744 (defun edebug-read-sexp ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
745 ;; Read one sexp from the current buffer starting at point.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
746 ;; 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
747 ;; 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
748 ;; This works for reading anything legitimate, but it
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
749 ;; is gummed up by parser inconsistencies (bugs?)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
750 (let ((class (edebug-next-token-class)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
751 (cond
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
752 ;; 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
753 ;; 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
754 ((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
755 ((eq class 'string) (edebug-original-read (current-buffer)))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
756 ((eq class 'quote) (forward-char 1)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
757 (list 'quote (edebug-read-sexp)))
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
758 ((eq class 'backquote)
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
759 (list '\` (edebug-read-sexp)))
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
760 ((eq class 'comma)
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
761 (list '\, (edebug-read-sexp)))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
762 (t ; anything else, just read it.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
763 (edebug-original-read (current-buffer))))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
764
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
765 ;;; Offsets for reader
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
766
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
767 ;; Define a structure to represent offset positions of expressions.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
768 ;; Each offset structure looks like: (before . after) for constituents,
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
769 ;; or for structures that have elements: (before <subexpressions> . after)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
770 ;; where the <subexpressions> are the offset structures for subexpressions
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
771 ;; including the head of a list.
41175
7a8a9f274e2c (edebug-form-data, edebug-offsets)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40475
diff changeset
772 (defvar edebug-offsets nil)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
773
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
774 ;; Stack of offset structures in reverse order of the nesting.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
775 ;; 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
776 (defvar edebug-offsets-stack nil)
7a8a9f274e2c (edebug-form-data, edebug-offsets)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40475
diff changeset
777 (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
778
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
779 ;; 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
780 ;; 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
781 ;; must also be condensed.
41175
7a8a9f274e2c (edebug-form-data, edebug-offsets)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40475
diff changeset
782 (defvar edebug-read-dotted-list nil)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
783
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
784 (defsubst edebug-initialize-offsets ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
785 ;; Reinitialize offset recording.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
786 (setq edebug-current-offset nil))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
787
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
788 (defun edebug-store-before-offset (point)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
789 ;; 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
790 (let ((new-offset (list point)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
791 (if edebug-current-offset
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
792 (setcdr edebug-current-offset
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
793 (cons new-offset (cdr edebug-current-offset)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
794 ;; Otherwise, we are at the top level, so initialize.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
795 (setq edebug-offsets new-offset
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
796 edebug-offsets-stack nil
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
797 edebug-read-dotted-list nil))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
798 ;; Cons the new offset to the front of the stack.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
799 (setq edebug-offsets-stack (cons new-offset edebug-offsets-stack)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
800 edebug-current-offset new-offset)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
801 ))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
802
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
803 (defun edebug-store-after-offset (point)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
804 ;; Finalize the current offset struct by reversing it and
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
805 ;; store POINT as the after offset.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
806 (if (not edebug-read-dotted-list)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
807 ;; Just reverse the offsets of all subexpressions.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
808 (setcdr edebug-current-offset (nreverse (cdr edebug-current-offset)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
809
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
810 ;; 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
811 (setq edebug-read-dotted-list nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
812 ;; Drop the corresponding offset pair.
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
813 ;; 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
814 ;; with the cdr of last offset.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
815 (setcdr edebug-current-offset
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
816 (nconc (nreverse (cdr (cdr edebug-current-offset)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
817 (cdr (car (cdr edebug-current-offset))))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
818
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
819 ;; Now append the point using nconc.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
820 (setq edebug-current-offset (nconc edebug-current-offset point))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
821 ;; Pop the stack.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
822 (setq edebug-offsets-stack (cdr edebug-offsets-stack)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
823 edebug-current-offset (car edebug-offsets-stack)))
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 (defun edebug-ignore-offset ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
826 ;; Ignore the last created offset pair.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
827 (setcdr edebug-current-offset (cdr (cdr edebug-current-offset))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
828
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
829 (defmacro edebug-storing-offsets (point &rest body)
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
830 (declare (debug (form body)) (indent 1))
26519
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
831 `(unwind-protect
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
832 (progn
26519
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
833 (edebug-store-before-offset ,point)
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
834 ,@body)
26519
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
835 (edebug-store-after-offset (point))))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
836
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
837
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
838 ;;; Reader for Emacs Lisp.
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
839
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
840 ;; Uses edebug-next-token-class (and edebug-skip-whitespace) above.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
841
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
842 (defconst edebug-read-alist
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
843 '((symbol . edebug-read-symbol)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
844 (lparen . edebug-read-list)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
845 (string . edebug-read-string)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
846 (quote . edebug-read-quote)
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
847 (backquote . edebug-read-backquote)
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
848 (comma . edebug-read-comma)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
849 (lbracket . edebug-read-vector)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
850 (hash . edebug-read-function)
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
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
853 (defun edebug-read-storing-offsets (stream)
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
854 (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
855 (edebug-storing-offsets (point)
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
856 (funcall
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
857 (or (cdr (assq (edebug-next-token-class) edebug-read-alist))
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
858 ;; anything else, just read it.
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
859 'edebug-original-read)
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
860 stream))))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
861
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
862 (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
863 (edebug-original-read stream))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
864
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
865 (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
866 (edebug-original-read stream))
6512
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-quote (stream)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
869 ;; Turn 'thing into (quote thing)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
870 (forward-char 1)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
871 (list
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
872 (edebug-storing-offsets (1- (point)) 'quote)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
873 (edebug-read-storing-offsets stream)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
874
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
875 (defvar edebug-read-backquote-level 0
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
876 "If non-zero, we're in a new-style backquote.
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
877 It should never be negative. This controls how we read comma constructs.")
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
878
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
879 (defun edebug-read-backquote (stream)
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
880 ;; Turn `thing into (\` thing)
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
881 (forward-char 1)
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
882 (list
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
883 (edebug-storing-offsets (1- (point)) '\`)
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
884 (let ((edebug-read-backquote-level (1+ edebug-read-backquote-level)))
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
885 (edebug-read-storing-offsets stream))))
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
886
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
887 (defun edebug-read-comma (stream)
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
888 ;; Turn ,thing into (\, thing). Handle ,@ and ,. also.
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
889 (let ((opoint (point)))
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
890 (forward-char 1)
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
891 (let ((symbol '\,))
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
892 (cond ((eq (following-char) ?\.)
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
893 (setq symbol '\,\.)
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
894 (forward-char 1))
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
895 ((eq (following-char) ?\@)
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
896 (setq symbol '\,@)
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
897 (forward-char 1)))
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
898 ;; Generate the same structure of offsets we would have
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
899 ;; if the resulting list appeared verbatim in the input text.
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
900 (if (zerop edebug-read-backquote-level)
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
901 (edebug-storing-offsets opoint symbol)
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
902 (list
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
903 (edebug-storing-offsets opoint symbol)
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
904 (let ((edebug-read-backquote-level (1- edebug-read-backquote-level)))
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
905 (edebug-read-storing-offsets stream)))))))
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
906
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
907 (defun edebug-read-function (stream)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
908 ;; Turn #'thing into (function thing)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
909 (forward-char 1)
33758
8c1e62157545 (edebug-version)
Dave Love <fx@gnu.org>
parents: 33709
diff changeset
910 (cond ((eq ?\' (following-char))
8c1e62157545 (edebug-version)
Dave Love <fx@gnu.org>
parents: 33709
diff changeset
911 (forward-char 1)
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
912 (list
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
913 (edebug-storing-offsets (- (point) 2)
33758
8c1e62157545 (edebug-version)
Dave Love <fx@gnu.org>
parents: 33709
diff changeset
914 (if (featurep 'cl) 'function* 'function))
8c1e62157545 (edebug-version)
Dave Love <fx@gnu.org>
parents: 33709
diff changeset
915 (edebug-read-storing-offsets stream)))
38730
098eb6e24910 (edebug-read-function): Fix handling of
Gerd Moellmann <gerd@gnu.org>
parents: 34854
diff changeset
916 ((memq (following-char) '(?: ?B ?O ?X ?b ?o ?x ?1 ?2 ?3 ?4 ?5 ?6
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
917 ?7 ?8 ?9 ?0))
38730
098eb6e24910 (edebug-read-function): Fix handling of
Gerd Moellmann <gerd@gnu.org>
parents: 34854
diff changeset
918 (backward-char 1)
33758
8c1e62157545 (edebug-version)
Dave Love <fx@gnu.org>
parents: 33709
diff changeset
919 (edebug-original-read stream))
8c1e62157545 (edebug-version)
Dave Love <fx@gnu.org>
parents: 33709
diff changeset
920 (t (edebug-syntax-error "Bad char after #"))))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
921
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
922 (defun edebug-read-list (stream)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
923 (forward-char 1) ; skip \(
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
924 (prog1
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
925 (let ((elements))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
926 (while (not (memq (edebug-next-token-class) '(rparen dot)))
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
927 (if (and (eq (edebug-next-token-class) 'backquote)
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
928 (null elements)
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
929 (zerop edebug-read-backquote-level))
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
930 (progn
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
931 ;; Old style backquote.
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
932 (forward-char 1) ; Skip backquote.
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
933 ;; Call edebug-storing-offsets here so that we
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
934 ;; produce the same offsets we would have had
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
935 ;; if the backquote were an ordinary symbol.
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
936 (push (edebug-storing-offsets (1- (point)) '\`) elements))
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
937 (push (edebug-read-storing-offsets stream) elements)))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
938 (setq elements (nreverse elements))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
939 (if (eq 'dot (edebug-next-token-class))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
940 (let (dotted-form)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
941 (forward-char 1) ; skip \.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
942 (setq dotted-form (edebug-read-storing-offsets stream))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
943 elements (nconc elements dotted-form)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
944 (if (not (eq (edebug-next-token-class) 'rparen))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
945 (edebug-syntax-error "Expected `)'"))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
946 (setq edebug-read-dotted-list (listp dotted-form))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
947 ))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
948 elements)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
949 (forward-char 1) ; skip \)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
950 ))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
951
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
952 (defun edebug-read-vector (stream)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
953 (forward-char 1) ; skip \[
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
954 (prog1
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
955 (let ((elements))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
956 (while (not (eq 'rbracket (edebug-next-token-class)))
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
957 (push (edebug-read-storing-offsets stream) elements))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
958 (apply 'vector (nreverse elements)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
959 (forward-char 1) ; skip \]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
960 ))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
961
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
962 ;;; 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
963
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
964 (defvar edebug-dotted-spec nil)
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 (defun edebug-new-cursor (expressions offsets)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
967 ;; Return a new cursor for EXPRESSIONS with OFFSETS.
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
968 (if (vectorp expressions)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
969 (setq expressions (append expressions nil)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
970 (cons expressions offsets))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
971
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
972 (defsubst edebug-set-cursor (cursor expressions offsets)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
973 ;; Set the CURSOR's EXPRESSIONS and OFFSETS to the given.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
974 ;; Return the cursor.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
975 (setcar cursor expressions)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
976 (setcdr cursor offsets)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
977 cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
978
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
979 (defun edebug-copy-cursor (cursor)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
980 ;; Copy the cursor using the same object and offsets.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
981 (cons (car cursor) (cdr cursor)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
982
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
983 (defsubst edebug-cursor-expressions (cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
984 (car cursor))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
985 (defsubst edebug-cursor-offsets (cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
986 (cdr cursor))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
987
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
988 (defsubst edebug-empty-cursor (cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
989 ;; 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
990 (null (car cursor)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
991
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
992 (defsubst edebug-top-element (cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
993 ;; Return the top element at the cursor.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
994 ;; Assumes not empty.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
995 (car (car cursor)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
996
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
997 (defun edebug-top-element-required (cursor &rest error)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
998 ;; Check if a dotted form is required.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
999 (if edebug-dotted-spec (edebug-no-match cursor "Dot expected."))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1000 ;; Check if there is at least one more argument.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1001 (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
1002 ;; Return that top element.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1003 (edebug-top-element cursor))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1004
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1005 (defsubst edebug-top-offset (cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1006 ;; Return the top offset pair corresponding to the top element.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1007 (car (cdr cursor)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1008
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1009 (defun edebug-move-cursor (cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1010 ;; 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
1011 ;; throw no-match if empty before moving.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1012 ;; This is a violation of the cursor encapsulation, but
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1013 ;; there is plenty of that going on while matching.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1014 ;; The following test should always fail.
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1015 (if (edebug-empty-cursor cursor)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1016 (edebug-no-match cursor "Not enough arguments."))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1017 (setcar cursor (cdr (car cursor)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1018 (setcdr cursor (cdr (cdr cursor)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1019 cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1020
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1021
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1022 (defun edebug-before-offset (cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1023 ;; Return the before offset of the cursor.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1024 ;; If there is nothing left in the offsets,
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1025 ;; return one less than the offset itself,
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1026 ;; which is the after offset for a list.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1027 (let ((offset (edebug-cursor-offsets cursor)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1028 (if (consp offset)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1029 (car (car offset))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1030 (1- offset))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1031
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1032 (defun edebug-after-offset (cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1033 ;; Return the after offset of the cursor object.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1034 (let ((offset (edebug-top-offset cursor)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1035 (while (consp offset)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1036 (setq offset (cdr offset)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1037 offset))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1038
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1039 ;;; The Parser
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1040
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1041 ;; The top level function for parsing forms is
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1042 ;; edebug-read-and-maybe-wrap-form; it calls all the rest. It checks the
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1043 ;; syntax a bit and leaves point at any error it finds, but otherwise
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1044 ;; should appear to work like eval-defun.
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1045
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1046 ;; The basic plan is to surround each expression with a call to
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1047 ;; the edebug debugger together with indexes into a table of positions of
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1048 ;; all expressions. Thus an expression "exp" becomes:
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1049
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1050 ;; (edebug-after (edebug-before 1) 2 exp)
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1051
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1052 ;; When this is evaluated, first point is moved to the beginning of
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1053 ;; exp at offset 1 of the current function. The expression is
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1054 ;; evaluated, which may cause more edebug calls, and then point is
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1055 ;; moved to offset 2 after the end of exp.
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1056
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1057 ;; The highest level expressions of the function are wrapped in a call to
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1058 ;; edebug-enter, which supplies the function name and the actual
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1059 ;; arguments to the function. See functions edebug-enter, edebug-before,
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1060 ;; and edebug-after for more details.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1061
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1062 ;; Dynamically bound vars, left unbound, but globally declared.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1063 ;; This is to quiet the byte compiler.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1064
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1065 ;; Window data of the highest definition being wrapped.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1066 ;; This data is shared by all embedded definitions.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1067 (defvar edebug-top-window-data)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1068
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1069 (defvar edebug-&optional)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1070 (defvar edebug-&rest)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1071 (defvar edebug-gate nil) ;; whether no-match forces an error.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1072
41175
7a8a9f274e2c (edebug-form-data, edebug-offsets)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40475
diff changeset
1073 (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
1074 (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
1075
7a8a9f274e2c (edebug-form-data, edebug-offsets)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40475
diff changeset
1076 (defvar edebug-error-point nil)
7a8a9f274e2c (edebug-form-data, edebug-offsets)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40475
diff changeset
1077 (defvar edebug-best-error nil)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1078
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 (defun edebug-read-and-maybe-wrap-form ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1081 ;; 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
1082 ;; 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
1083
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1084 ;; Run the setup hook.
17458
eeff371bfe78 (edebug-read-and-maybe-wrap-form): Protect
Richard M. Stallman <rms@gnu.org>
parents: 17414
diff changeset
1085 ;; 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
1086 (let ((temp-hook edebug-setup-hook))
eeff371bfe78 (edebug-read-and-maybe-wrap-form): Protect
Richard M. Stallman <rms@gnu.org>
parents: 17414
diff changeset
1087 (setq edebug-setup-hook nil)
eeff371bfe78 (edebug-read-and-maybe-wrap-form): Protect
Richard M. Stallman <rms@gnu.org>
parents: 17414
diff changeset
1088 (run-hooks 'temp-hook))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1089
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1090 (let (result
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1091 edebug-top-window-data
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1092 edebug-def-name;; make sure it is locally nil
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1093 ;; I don't like these here!!
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1094 edebug-&optional
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1095 edebug-&rest
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1096 edebug-gate
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1097 edebug-best-error
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1098 edebug-error-point
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1099 no-match
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1100 ;; Do this once here instead of several times.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1101 (max-lisp-eval-depth (+ 800 max-lisp-eval-depth))
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1102 (max-specpdl-size (+ 2000 max-specpdl-size)))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1103 (setq no-match
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1104 (catch 'no-match
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1105 (setq result (edebug-read-and-maybe-wrap-form1))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1106 nil))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1107 (if no-match
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1108 (apply 'edebug-syntax-error no-match))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1109 result))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1110
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1111
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1112 (defun edebug-read-and-maybe-wrap-form1 ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1113 (let (spec
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1114 def-kind
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1115 defining-form-p
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1116 def-name
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1117 ;; 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
1118 ;; calls to edebug-read, they need to be here.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1119 edebug-offsets
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1120 edebug-offsets-stack
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1121 edebug-current-offset ; reset to nil
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1122 )
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1123 (save-excursion
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1124 (if (and (eq 'lparen (edebug-next-token-class))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1125 (eq 'symbol (progn (forward-char 1) (edebug-next-token-class))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1126 ;; 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
1127 (setq def-kind (edebug-original-read (current-buffer))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1128 spec (and (symbolp def-kind) (get-edebug-spec def-kind))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1129 defining-form-p (and (listp spec)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1130 (eq '&define (car spec)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1131 ;; 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
1132 def-name (if (and defining-form-p
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1133 (eq 'name (car (cdr spec)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1134 (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
1135 (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
1136 ;;;(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
1137 (cond
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1138 (defining-form-p
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1139 (if (or edebug-all-defs edebug-all-forms)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1140 ;; 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
1141 ;; then let edebug-list-form start it.
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1142 (let ((cursor (edebug-new-cursor
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1143 (list (edebug-read-storing-offsets (current-buffer)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1144 (list edebug-offsets))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1145 (car
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1146 (edebug-make-form-wrapper
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1147 cursor
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1148 (edebug-before-offset cursor)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1149 (1- (edebug-after-offset cursor))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1150 (list (cons (symbol-name def-kind) (cdr spec))))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1151
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1152 ;; Not edebugging this form, so reset the symbol's edebug
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1153 ;; 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
1154 ;; This only works for defs with simple names.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1155 (put def-name 'edebug (point-marker))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1156 ;; Also nil out dependent defs.
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1157 '(mapcar (function
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1158 (lambda (def)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1159 (put def-name 'edebug nil)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1160 (get def-name 'edebug-dependents))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1161 (edebug-read-sexp)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1162
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1163 ;; If all forms are being edebugged, explicitly wrap it.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1164 (edebug-all-forms
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1165 (let ((cursor (edebug-new-cursor
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1166 (list (edebug-read-storing-offsets (current-buffer)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1167 (list edebug-offsets))))
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1168 (edebug-make-form-wrapper
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1169 cursor
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1170 (edebug-before-offset cursor)
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1171 (edebug-after-offset cursor)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1172 nil)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1173
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1174 ;; Not a defining form, and not edebugging.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1175 (t (edebug-read-sexp)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1176 ))
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
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1179 (defvar edebug-def-args) ; args of defining form.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1180 (defvar edebug-def-interactive) ; is it an emacs interactive function?
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1181 (defvar edebug-inside-func) ;; whether code is inside function context.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1182 ;; 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
1183
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1184 (defun edebug-interactive-p-name ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1185 ;; 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
1186 ;; status of interactive-p for this function.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1187 (intern (format "edebug-%s-interactive-p" edebug-def-name)))
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
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1190 (defun edebug-wrap-def-body (forms)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1191 "Wrap the FORMS of a definition body."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1192 (if edebug-def-interactive
26519
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
1193 `(let ((,(edebug-interactive-p-name)
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
1194 (interactive-p)))
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
1195 ,(edebug-make-enter-wrapper forms))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1196 (edebug-make-enter-wrapper forms)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1197
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-make-enter-wrapper (forms)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1200 ;; Generate the enter wrapper for some forms of a definition.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1201 ;; 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
1202 ;; 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
1203 ;; 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
1204 ;; Do this after parsing since that may find a name.
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1205 (setq edebug-def-name
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1206 (or edebug-def-name edebug-old-def-name (edebug-gensym "edebug-anon")))
26519
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
1207 `(edebug-enter
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
1208 (quote ,edebug-def-name)
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1209 ,(if edebug-inside-func
26648
2cca1ed12a51 (edebug-make-enter-wrapper): Correct
Gerd Moellmann <gerd@gnu.org>
parents: 26519
diff changeset
1210 `(list
2cca1ed12a51 (edebug-make-enter-wrapper): Correct
Gerd Moellmann <gerd@gnu.org>
parents: 26519
diff changeset
1211 ;; Doesn't work with more than one def-body!!
2cca1ed12a51 (edebug-make-enter-wrapper): Correct
Gerd Moellmann <gerd@gnu.org>
parents: 26519
diff changeset
1212 ;; But the list will just be reversed.
2cca1ed12a51 (edebug-make-enter-wrapper): Correct
Gerd Moellmann <gerd@gnu.org>
parents: 26519
diff changeset
1213 ,@(nreverse edebug-def-args))
26519
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
1214 'nil)
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
1215 (function (lambda () ,@forms))
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
1216 ))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1217
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1218
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1219 (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
1220
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1221 (defvar edebug-offset-index) ; the next available offset index.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1222 (defvar edebug-offset-list) ; the list of offset positions.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1223
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1224 (defun edebug-inc-offset (offset)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1225 ;; modifies edebug-offset-index and edebug-offset-list
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1226 ;; accesses edebug-func-marc and buffer point
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1227 (prog1
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1228 edebug-offset-index
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1229 (setq edebug-offset-list (cons (- offset edebug-form-begin-marker)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1230 edebug-offset-list)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1231 edebug-offset-index (1+ edebug-offset-index))))
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 (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
1235 ;; 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
1236 ;; given FORM. Looks like:
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1237 ;; (edebug-after (edebug-before BEFORE-INDEX) AFTER-INDEX FORM)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1238 ;; Also increment the offset index for subsequent use.
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1239 (list 'edebug-after
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1240 (list 'edebug-before before-index)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1241 after-index form))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1242
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1243 (defun edebug-make-after-form (form after-index)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1244 ;; Like edebug-make-before-and-after-form, but only after.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1245 (list 'edebug-after 0 after-index form))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1246
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 (defun edebug-unwrap (sexp)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1249 "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
1250 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
1251 expressions; a `progn' form will be returned enclosing these forms."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1252 (if (consp sexp)
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1253 (cond
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1254 ((eq 'edebug-after (car sexp))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1255 (nth 3 sexp))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1256 ((eq 'edebug-enter (car sexp))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1257 (let ((forms (nthcdr 2 (nth 1 (nth 3 sexp)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1258 (if (> (length forms) 1)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1259 (cons 'progn forms) ;; could return (values forms) instead.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1260 (car forms))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1261 (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
1262 )
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1263 sexp))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1264
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1265 (defun edebug-unwrap* (sexp)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1266 "Return the sexp recursively unwrapped."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1267 (let ((new-sexp (edebug-unwrap sexp)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1268 (while (not (eq sexp new-sexp))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1269 (setq sexp new-sexp
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1270 new-sexp (edebug-unwrap sexp)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1271 (if (consp new-sexp)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1272 (mapcar 'edebug-unwrap* new-sexp)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1273 new-sexp)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1274
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1275
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1276 (defun edebug-defining-form (cursor form-begin form-end speclist)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1277 ;; Process the defining form, starting outside the form.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1278 ;; The speclist is a generated list spec that looks like:
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1279 ;; (("def-symbol" defining-form-spec-sans-&define))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1280 ;; Skip the first offset.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1281 (edebug-set-cursor cursor (edebug-cursor-expressions cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1282 (cdr (edebug-cursor-offsets cursor)))
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1283 (edebug-make-form-wrapper
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1284 cursor
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1285 form-begin (1- form-end)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1286 speclist))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1287
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1288 (defun edebug-make-form-wrapper (cursor form-begin form-end
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1289 &optional speclist)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1290 ;; 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
1291 ;; 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
1292 ;; 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
1293 ;; 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
1294 (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
1295 ;; Set this marker before parsing.
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1296 (edebug-form-begin-marker
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1297 (if form-data-entry
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1298 (edebug-form-data-begin form-data-entry)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1299 ;; Buffer must be current-buffer for this to work:
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1300 (set-marker (make-marker) form-begin))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1301
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1302 (let (edebug-offset-list
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1303 (edebug-offset-index 0)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1304 result
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1305 ;; For definitions.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1306 ;; (edebug-containing-def-name edebug-def-name)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1307 ;; Get name from form-data, if any.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1308 (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
1309 edebug-def-name
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1310 edebug-def-args
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1311 edebug-def-interactive
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1312 edebug-inside-func;; whether wrapped code executes inside a function.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1313 )
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1314
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1315 (setq result
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1316 (if speclist
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1317 (edebug-match cursor speclist)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1318
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1319 ;; else wrap as an enter-form.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1320 (edebug-make-enter-wrapper (list (edebug-form cursor)))))
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1321
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1322 ;; 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
1323 (setq edebug-def-name
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1324 (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
1325
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1326 ;; Add this def as a dependent of containing def. Buggy.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1327 '(if (and edebug-containing-def-name
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1328 (not (get edebug-containing-def-name 'edebug-dependents)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1329 (put edebug-containing-def-name 'edebug-dependents
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1330 (cons edebug-def-name
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1331 (get edebug-containing-def-name
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1332 'edebug-dependents))))
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 ;; 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
1335 ;; In the latter case, pointers to the entry remain eq.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1336 (if (not form-data-entry)
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1337 (setq form-data-entry
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1338 (edebug-make-form-data-entry
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1339 edebug-def-name
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1340 edebug-form-begin-marker
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1341 ;; Buffer must be current-buffer.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1342 (set-marker (make-marker) form-end)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1343 ))
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1344 (edebug-set-form-data-entry
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1345 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
1346 form-begin form-end))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1347
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1348 ;; (message "defining: %s" edebug-def-name) (sit-for 2)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1349 (edebug-make-top-form-data-entry form-data-entry)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1350 (message "Edebug: %s" edebug-def-name)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1351 ;;(debug edebug-def-name)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1352
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1353 ;; Destructively reverse edebug-offset-list and make vector from it.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1354 (setq edebug-offset-list (vconcat (nreverse edebug-offset-list)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1355
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1356 ;; Side effects on the property list of edebug-def-name.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1357 (edebug-clear-frequency-count edebug-def-name)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1358 (edebug-clear-coverage edebug-def-name)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1359
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1360 ;; Set up the initial window data.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1361 (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
1362 (let ((window ;; Find the best window for this buffer.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1363 (or (get-buffer-window (current-buffer))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1364 (selected-window))))
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1365 (setq edebug-top-window-data
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1366 (cons window (window-start window)))))
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 ;; Store the edebug data in symbol's property list.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1369 (put edebug-def-name 'edebug
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1370 ;; A struct or vector would be better here!!
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1371 (list edebug-form-begin-marker
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1372 nil ; clear breakpoints
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1373 edebug-offset-list
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1374 edebug-top-window-data
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1375 ))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1376 result
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1377 )))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1378
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1379
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1380 (defun edebug-clear-frequency-count (name)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1381 ;; Create initial frequency count vector.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1382 ;; 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
1383 (put name 'edebug-freq-count
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1384 (make-vector (length edebug-offset-list) 0)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1385
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1386
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1387 (defun edebug-clear-coverage (name)
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1388 ;; Create initial coverage vector.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1389 ;; 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
1390 (put name 'edebug-coverage
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1391 (make-vector (length edebug-offset-list) 'unknown)))
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 (defun edebug-form (cursor)
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1395 ;; Return the instrumented form for the following form.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1396 ;; 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
1397 (let* ((form (edebug-top-element-required cursor "Expected form"))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1398 (offset (edebug-top-offset cursor)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1399 (prog1
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1400 (cond
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1401 ((consp form)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1402 ;; 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
1403 (if (eq 'quote (car form))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1404 form
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1405 (let* ((head (car form))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1406 (spec (and (symbolp head) (get-edebug-spec head)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1407 (new-cursor (edebug-new-cursor form offset)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1408 ;; 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
1409 ;; An indirect spec would not work here, yet.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1410 (if (and (consp spec) (eq '&define (car spec)))
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1411 (edebug-defining-form
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1412 new-cursor
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1413 (car offset);; before the form
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1414 (edebug-after-offset cursor)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1415 (cons (symbol-name head) (cdr spec)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1416 ;; Wrap a regular form.
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1417 (edebug-make-before-and-after-form
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1418 (edebug-inc-offset (car offset))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1419 (edebug-list-form new-cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1420 ;; After processing the list form, the new-cursor is left
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1421 ;; with the offset after the form.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1422 (edebug-inc-offset (edebug-cursor-offsets new-cursor))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1423 )))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1424
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1425 ((symbolp form)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1426 (cond
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1427 ;; Check for constant symbols that don't get wrapped.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1428 ((or (memq form '(t nil))
28567
3ed20cb4c9b3 (edebug-keywordp): Remove. Change callers
Dave Love <fx@gnu.org>
parents: 28516
diff changeset
1429 (keywordp form))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1430 form)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1431
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1432 (t ;; just a variable
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1433 (edebug-make-after-form form (edebug-inc-offset (cdr offset))))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1434
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1435 ;; Anything else is self-evaluating.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1436 (t form))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1437 (edebug-move-cursor 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 (defsubst edebug-forms (cursor) (edebug-match cursor '(&rest form)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1441 (defsubst edebug-sexps (cursor) (edebug-match cursor '(&rest sexp)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1442
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1443 (defsubst edebug-list-form-args (head cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1444 ;; 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
1445 ;; Helper for edebug-list-form
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1446 (let ((spec (get-edebug-spec head)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1447 (cond
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1448 (spec
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1449 (cond
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1450 ((consp spec)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1451 ;; It is a speclist.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1452 (let (edebug-best-error
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1453 edebug-error-point);; This may not be needed.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1454 (edebug-match-sublist cursor spec)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1455 ((eq t spec) (edebug-forms cursor))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1456 ((eq 0 spec) (edebug-sexps cursor))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1457 ((symbolp spec) (funcall spec cursor));; Not used by edebug,
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1458 ; but leave it in for compatibility.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1459 ))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1460 ;; No edebug-form-spec provided.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1461 ((edebug-macrop head)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1462 (if edebug-eval-macro-args
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1463 (edebug-forms cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1464 (edebug-sexps cursor)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1465 (t ;; Otherwise it is a function call.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1466 (edebug-forms cursor)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1467
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1468
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1469 (defun edebug-list-form (cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1470 ;; Return an instrumented form built from the list form.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1471 ;; 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
1472 (let ((head (edebug-top-element-required cursor "Expected elements"))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1473 ;; Prevent backtracking whenever instrumenting.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1474 (edebug-gate t)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1475 ;; A list form is never optional because it matches anything.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1476 (edebug-&optional nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1477 (edebug-&rest nil))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1478 ;; Skip the first offset.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1479 (edebug-set-cursor cursor (edebug-cursor-expressions cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1480 (cdr (edebug-cursor-offsets cursor)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1481 (cond
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1482 ((symbolp head)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1483 (cond
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
1484 ((null head) nil) ; () is legal.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1485 ((eq head 'interactive-p)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1486 ;; Special case: replace (interactive-p) with variable
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1487 (setq edebug-def-interactive 'check-it)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1488 (edebug-move-cursor cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1489 (edebug-interactive-p-name))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1490 (t
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1491 (cons head (edebug-list-form-args
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1492 head (edebug-move-cursor cursor))))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1493
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1494 ((consp head)
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
1495 (if (eq (car head) ',)
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
1496 ;; The head of a form should normally be a symbol or a lambda
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
1497 ;; expression but it can also be an unquote form to be filled
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
1498 ;; before evaluation. We evaluate the arguments anyway, on the
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
1499 ;; assumption that the unquote form will place a proper function
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
1500 ;; name (rather than a macro name).
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1501 (edebug-match cursor '(("," def-form) body))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1502 ;; Process anonymous function and args.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1503 ;; This assumes no anonymous macros.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1504 (edebug-match-specs cursor '(lambda-expr body) 'edebug-match-specs)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1505
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1506 (t (edebug-syntax-error
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
1507 "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
1508 ))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1509
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1510 ;;; Matching of specs.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1511
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1512 (defvar edebug-after-dotted-spec nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1513
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1514 (defvar edebug-matching-depth 0) ;; initial value
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1515 (defconst edebug-max-depth 150) ;; maximum number of matching recursions.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1516
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1517
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1518 ;;; Failure to match
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1519
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1520 ;; This throws to no-match, if there are higher alternatives.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1521 ;; 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
1522 ;; with the two before- and after-offset functions.
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 (defun edebug-no-match (cursor &rest edebug-args)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1525 ;; 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
1526 ;; 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
1527 (setq edebug-error-point (or edebug-error-point
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1528 (edebug-before-offset cursor))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1529 edebug-best-error (or edebug-best-error edebug-args))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1530 (if (and edebug-gate (not edebug-&optional))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1531 (progn
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1532 (if edebug-error-point
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1533 (goto-char edebug-error-point))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1534 (apply 'edebug-syntax-error edebug-args))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1535 (funcall 'throw 'no-match edebug-args)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1536
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1537
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1538 (defun edebug-match (cursor specs)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1539 ;; Top level spec matching function.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1540 ;; Used also at each lower level of specs.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1541 (let (edebug-&optional
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1542 edebug-&rest
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1543 edebug-best-error
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1544 edebug-error-point
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1545 (edebug-gate edebug-gate) ;; locally bound to limit effect
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1546 )
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1547 (edebug-match-specs cursor specs 'edebug-match-specs)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1548
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1549
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1550 (defun edebug-match-one-spec (cursor spec)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1551 ;; Match one spec, which is not a keyword &-spec.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1552 (cond
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1553 ((symbolp spec) (edebug-match-symbol cursor spec))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1554 ((vectorp spec) (edebug-match cursor (append spec nil)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1555 ((stringp spec) (edebug-match-string cursor spec))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1556 ((listp spec) (edebug-match-list cursor spec))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1557 ))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1558
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1559
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1560 (defun edebug-match-specs (cursor specs remainder-handler)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1561 ;; Append results of matching the list of specs.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1562 ;; 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
1563 (let ((edebug-matching-depth
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1564 (if (> edebug-matching-depth edebug-max-depth)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1565 (error "too deep - perhaps infinite loop in spec?")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1566 (1+ edebug-matching-depth))))
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 ((null specs) nil)
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1569
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1570 ;; Is the spec dotted?
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1571 ((atom specs)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1572 (let ((edebug-dotted-spec t));; Containing spec list was dotted.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1573 (edebug-match-specs cursor (list specs) remainder-handler)))
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 ;; Is the form dotted?
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1576 ((not (listp (edebug-cursor-expressions cursor)));; allow nil
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1577 (if (not edebug-dotted-spec)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1578 (edebug-no-match cursor "Dotted spec required."))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1579 ;; Cancel dotted spec and dotted form.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1580 (let ((edebug-dotted-spec)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1581 (this-form (edebug-cursor-expressions cursor))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1582 (this-offset (edebug-cursor-offsets cursor)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1583 ;; Wrap the form in a list, (by changing the cursor??)...
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1584 (edebug-set-cursor cursor (list this-form) this-offset)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1585 ;; and process normally, then unwrap the result.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1586 (car (edebug-match-specs cursor specs remainder-handler))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1587
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1588 (t;; Process normally.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1589 (let* ((spec (car specs))
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1590 (rest)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1591 (first-char (and (symbolp spec) (aref (symbol-name spec) 0))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1592 ;;(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
1593 (nconc
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1594 (cond
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1595 ((eq ?& first-char);; "&" symbols take all following specs.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1596 (funcall (get-edebug-spec spec) cursor (cdr specs)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1597 ((eq ?: first-char);; ":" symbols take one following spec.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1598 (setq rest (cdr (cdr specs)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1599 (funcall (get-edebug-spec spec) cursor (car (cdr specs))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1600 (t;; Any other normal spec.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1601 (setq rest (cdr specs))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1602 (edebug-match-one-spec cursor spec)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1603 (funcall remainder-handler cursor rest remainder-handler)))))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1604
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1605
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1606 ;; Define specs for all the symbol specs with functions used to process them.
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1607 ;; 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
1608 ;; 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
1609 ;; We could use an internal obarray for these primitive specs.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1610
33709
bfee926318b1 (edebug-form-spec prop): use dolist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32227
diff changeset
1611 (dolist (pair '((&optional . edebug-match-&optional)
bfee926318b1 (edebug-form-spec prop): use dolist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32227
diff changeset
1612 (&rest . edebug-match-&rest)
bfee926318b1 (edebug-form-spec prop): use dolist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32227
diff changeset
1613 (&or . edebug-match-&or)
bfee926318b1 (edebug-form-spec prop): use dolist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32227
diff changeset
1614 (form . edebug-match-form)
bfee926318b1 (edebug-form-spec prop): use dolist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32227
diff changeset
1615 (sexp . edebug-match-sexp)
bfee926318b1 (edebug-form-spec prop): use dolist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32227
diff changeset
1616 (body . edebug-match-body)
bfee926318b1 (edebug-form-spec prop): use dolist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32227
diff changeset
1617 (&define . edebug-match-&define)
bfee926318b1 (edebug-form-spec prop): use dolist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32227
diff changeset
1618 (name . edebug-match-name)
bfee926318b1 (edebug-form-spec prop): use dolist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32227
diff changeset
1619 (:name . edebug-match-colon-name)
bfee926318b1 (edebug-form-spec prop): use dolist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32227
diff changeset
1620 (arg . edebug-match-arg)
bfee926318b1 (edebug-form-spec prop): use dolist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32227
diff changeset
1621 (def-body . edebug-match-def-body)
bfee926318b1 (edebug-form-spec prop): use dolist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32227
diff changeset
1622 (def-form . edebug-match-def-form)
bfee926318b1 (edebug-form-spec prop): use dolist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32227
diff changeset
1623 ;; Less frequently used:
bfee926318b1 (edebug-form-spec prop): use dolist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32227
diff changeset
1624 ;; (function . edebug-match-function)
bfee926318b1 (edebug-form-spec prop): use dolist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32227
diff changeset
1625 (lambda-expr . edebug-match-lambda-expr)
bfee926318b1 (edebug-form-spec prop): use dolist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32227
diff changeset
1626 (&not . edebug-match-&not)
bfee926318b1 (edebug-form-spec prop): use dolist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32227
diff changeset
1627 (&key . edebug-match-&key)
bfee926318b1 (edebug-form-spec prop): use dolist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32227
diff changeset
1628 (place . edebug-match-place)
bfee926318b1 (edebug-form-spec prop): use dolist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32227
diff changeset
1629 (gate . edebug-match-gate)
bfee926318b1 (edebug-form-spec prop): use dolist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32227
diff changeset
1630 ;; (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
1631 ))
bfee926318b1 (edebug-form-spec prop): use dolist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32227
diff changeset
1632 (put (car pair) 'edebug-form-spec (cdr pair)))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1633
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1634 (defun edebug-match-symbol (cursor symbol)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1635 ;; Match a symbol spec.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1636 (let* ((spec (get-edebug-spec symbol)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1637 (cond
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1638 (spec
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1639 (if (consp spec)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1640 ;; It is an indirect spec.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1641 (edebug-match cursor spec)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1642 ;; Otherwise it should be the symbol name of a function.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1643 ;; 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
1644 (funcall spec cursor)))
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1645
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1646 ((null symbol) ;; special case this.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1647 (edebug-match-nil cursor))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1648
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1649 ((fboundp symbol) ; is it a predicate?
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1650 (let ((sexp (edebug-top-element-required cursor "Expected" symbol)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1651 ;; Special case for edebug-`.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1652 (if (and (listp sexp) (eq (car sexp) ',))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1653 (edebug-match cursor '(("," def-form)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1654 (if (not (funcall symbol sexp))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1655 (edebug-no-match cursor symbol "failed"))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1656 (edebug-move-cursor cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1657 (list sexp))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1658 (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
1659 )))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1660
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1661
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1662 (defun edebug-match-sexp (cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1663 (list (prog1 (edebug-top-element-required cursor "Expected sexp")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1664 (edebug-move-cursor cursor))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1665
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1666 (defun edebug-match-form (cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1667 (list (edebug-form cursor)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1668
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1669 (defalias 'edebug-match-place 'edebug-match-form)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1670 ;; Currently identical to edebug-match-form.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1671 ;; This is for common lisp setf-style place arguments.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1672
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1673 (defsubst edebug-match-body (cursor) (edebug-forms cursor))
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 (defun edebug-match-&optional (cursor specs)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1676 ;; Keep matching until one spec fails.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1677 (edebug-&optional-wrapper cursor specs 'edebug-&optional-wrapper))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1678
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1679 (defun edebug-&optional-wrapper (cursor specs remainder-handler)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1680 (let (result
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1681 (edebug-&optional specs)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1682 (edebug-gate nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1683 (this-form (edebug-cursor-expressions cursor))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1684 (this-offset (edebug-cursor-offsets cursor)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1685 (if (null (catch 'no-match
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1686 (setq result
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1687 (edebug-match-specs cursor specs remainder-handler))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1688 ;; Returning nil means no no-match was thrown.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1689 nil))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1690 result
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1691 ;; 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
1692 (edebug-set-cursor cursor this-form this-offset)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1693 nil)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1694
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1695
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1696 (defun edebug-&rest-wrapper (cursor specs remainder-handler)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1697 (if (null specs) (setq specs edebug-&rest))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1698 ;; Reuse the &optional handler with this as the remainder handler.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1699 (edebug-&optional-wrapper cursor specs remainder-handler))
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1700
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1701 (defun edebug-match-&rest (cursor specs)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1702 ;; Repeatedly use specs until failure.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1703 (let ((edebug-&rest specs) ;; remember these
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1704 edebug-best-error
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1705 edebug-error-point)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1706 (edebug-&rest-wrapper cursor specs 'edebug-&rest-wrapper)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1707
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1708
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1709 (defun edebug-match-&or (cursor specs)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1710 ;; Keep matching until one spec succeeds, and return its results.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1711 ;; If none match, fail.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1712 ;; 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
1713 (let ((original-specs specs)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1714 (this-form (edebug-cursor-expressions cursor))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1715 (this-offset (edebug-cursor-offsets cursor)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1716 (catch 'matched
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1717 (while specs
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1718 (catch 'no-match
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1719 (throw 'matched
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1720 (let (edebug-gate ;; only while matching each spec
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1721 edebug-best-error
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1722 edebug-error-point)
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1723 ;; Doesn't support e.g. &or symbolp &rest form
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1724 (edebug-match-one-spec cursor (car specs)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1725 ;; Match failed, so reset and try again.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1726 (setq specs (cdr specs))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1727 ;; Reset the cursor for the next match.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1728 (edebug-set-cursor cursor this-form this-offset))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1729 ;; All failed.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1730 (apply 'edebug-no-match cursor "Expected one of" original-specs))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1731 ))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1732
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1733
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1734 (defun edebug-match-&not (cursor specs)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1735 ;; If any specs match, then fail
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1736 (if (null (catch 'no-match
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1737 (let ((edebug-gate nil))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1738 (save-excursion
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1739 (edebug-match-&or cursor specs)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1740 nil))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1741 ;; This means something matched, so it is a no match.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1742 (edebug-no-match cursor "Unexpected"))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1743 ;; This means nothing matched, so it is OK.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1744 nil) ;; So, return nothing
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1745
6512
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 (def-edebug-spec &key edebug-match-&key)
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-&key (cursor specs)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1750 ;; Following specs must look like (<name> <spec>) ...
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1751 ;; where <name> is the name of a keyword, and spec is its spec.
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1752 ;; 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
1753 (edebug-match-&rest
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1754 cursor
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1755 (cons '&or
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1756 (mapcar (function (lambda (pair)
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1757 (vector (format ":%s" (car pair))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1758 (car (cdr pair)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1759 specs))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1760
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 (defun edebug-match-gate (cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1763 ;; Simply set the gate to prevent backtracking at this level.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1764 (setq edebug-gate t)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1765 nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1766
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1767
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1768 (defun edebug-match-list (cursor specs)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1769 ;; 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
1770 (if edebug-dotted-spec
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1771 ;; After dotted spec but form did not contain dot,
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1772 ;; so match list spec elements as if spliced in.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1773 (prog1
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1774 (let ((edebug-dotted-spec))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1775 (edebug-match-specs cursor specs 'edebug-match-specs))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1776 ;; If it matched, really clear the dotted-spec flag.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1777 (setq edebug-dotted-spec nil))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1778 (let ((spec (car specs))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1779 (form (edebug-top-element-required cursor "Expected" specs)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1780 (cond
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1781 ((eq 'quote spec)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1782 (let ((spec (car (cdr specs))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1783 (cond
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1784 ((symbolp spec)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1785 ;; Special case: spec quotes a symbol to match.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1786 ;; Change in future. Use "..." instead.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1787 (if (not (eq spec form))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1788 (edebug-no-match cursor "Expected" spec))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1789 (edebug-move-cursor cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1790 (setq edebug-gate t)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1791 form)
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1792 (t
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1793 (error "Bad spec: %s" specs)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1794
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1795 ((listp form)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1796 (prog1
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1797 (list (edebug-match-sublist
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1798 ;; First offset is for the list form itself.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1799 ;; Treat nil as empty list.
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1800 (edebug-new-cursor form (cdr (edebug-top-offset cursor)))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1801 specs))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1802 (edebug-move-cursor cursor)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1803
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1804 ((and (eq 'vector spec) (vectorp form))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1805 ;; Special case: match a vector with the specs.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1806 (let ((result (edebug-match-sublist
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1807 (edebug-new-cursor
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1808 form (cdr (edebug-top-offset cursor)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1809 (cdr specs))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1810 (edebug-move-cursor cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1811 (list (apply 'vector result))))
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1812
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1813 (t (edebug-no-match cursor "Expected" specs)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1814 )))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1815
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1816
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1817 (defun edebug-match-sublist (cursor specs)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1818 ;; Match a sublist of specs.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1819 (let (edebug-&optional
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1820 ;;edebug-best-error
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1821 ;;edebug-error-point
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1822 )
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1823 (prog1
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1824 ;; 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
1825 (edebug-match-specs cursor specs 'edebug-match-specs)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1826 (if (not (edebug-empty-cursor cursor))
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1827 (if edebug-best-error
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1828 (apply 'edebug-no-match cursor edebug-best-error)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1829 ;; A failed &rest or &optional spec may leave some args.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1830 (edebug-no-match cursor "Failed matching" specs)
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
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1833
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1834 (defun edebug-match-string (cursor spec)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1835 (let ((sexp (edebug-top-element-required cursor "Expected" spec)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1836 (if (not (eq (intern spec) sexp))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1837 (edebug-no-match cursor "Expected" spec)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1838 ;; Since it matched, failure means immediate error, unless &optional.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1839 (setq edebug-gate t)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1840 (edebug-move-cursor cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1841 (list sexp)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1842 )))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1843
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1844 (defun edebug-match-nil (cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1845 ;; There must be nothing left to match a nil.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1846 (if (not (edebug-empty-cursor cursor))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1847 (edebug-no-match cursor "Unmatched argument(s)")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1848 nil))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1849
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1850
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1851 (defun edebug-match-function (cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1852 (error "Use function-form instead of function in edebug spec"))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1853
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1854 (defun edebug-match-&define (cursor specs)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1855 ;; Match a defining form.
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1856 ;; Normally, &define is interpreted specially other places.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1857 ;; 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
1858 ;; 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
1859 (edebug-make-form-wrapper
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1860 cursor
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1861 (edebug-before-offset cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1862 ;; Find the last offset in the list.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1863 (let ((offsets (edebug-cursor-offsets cursor)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1864 (while (consp offsets) (setq offsets (cdr offsets)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1865 offsets)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1866 specs))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1867
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1868 (defun edebug-match-lambda-expr (cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1869 ;; The expression must be a function.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1870 ;; 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
1871 ;; that has an edebug-form-spec beginning with &define. In
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1872 ;; practice, only lambda expressions should be used.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1873 ;; I could add a &lambda specification to avoid confusion.
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1874 (let* ((sexp (edebug-top-element-required
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1875 cursor "Expected lambda expression"))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1876 (offset (edebug-top-offset cursor))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1877 (head (and (consp sexp) (car sexp)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1878 (spec (and (symbolp head) (get-edebug-spec head)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1879 (edebug-inside-func nil))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1880 ;; 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
1881 (if (and (consp spec) (eq '&define (car spec)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1882 (prog1
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1883 (list
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1884 (edebug-defining-form
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1885 (edebug-new-cursor sexp offset)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1886 (car offset);; before the sexp
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1887 (edebug-after-offset cursor)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1888 (cons (symbol-name head) (cdr spec))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1889 (edebug-move-cursor cursor))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1890 (edebug-no-match cursor "Expected lambda expression")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1891 )))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1892
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1893
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1894 (defun edebug-match-name (cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1895 ;; Set the edebug-def-name bound in edebug-defining-form.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1896 (let ((name (edebug-top-element-required cursor "Expected name")))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1897 ;; Maybe strings and numbers could be used.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1898 (if (not (symbolp name))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1899 (edebug-no-match cursor "Symbol expected for name of definition"))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1900 (setq edebug-def-name
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1901 (if edebug-def-name
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1902 ;; Construct a new name by appending to previous name.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1903 (intern (format "%s@%s" edebug-def-name name))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1904 name))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1905 (edebug-move-cursor cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1906 (list name)))
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 (defun edebug-match-colon-name (cursor spec)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1909 ;; Set the edebug-def-name to the spec.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1910 (setq edebug-def-name
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1911 (if edebug-def-name
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1912 ;; Construct a new name by appending to previous name.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1913 (intern (format "%s@%s" edebug-def-name spec))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1914 spec))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1915 nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1916
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1917 (defun edebug-match-arg (cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1918 ;; set the def-args bound in edebug-defining-form
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1919 (let ((edebug-arg (edebug-top-element-required cursor "Expected arg")))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1920 (if (or (not (symbolp edebug-arg))
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1921 (edebug-lambda-list-keywordp edebug-arg))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1922 (edebug-no-match cursor "Bad argument:" edebug-arg))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1923 (edebug-move-cursor cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1924 (setq edebug-def-args (cons edebug-arg edebug-def-args))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1925 (list edebug-arg)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1926
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1927 (defun edebug-match-def-form (cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1928 ;; 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
1929 ;; 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
1930 ;; 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
1931 ;; Not to be used otherwise.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1932 (let ((edebug-inside-func nil))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1933 (list (edebug-make-enter-wrapper (list (edebug-form cursor))))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1934
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1935 (defun edebug-match-def-body (cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1936 ;; Like body but body is wrapped in edebug-enter form.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1937 ;; 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
1938 ;; Not to be used otherwise.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1939 (let ((edebug-inside-func t))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1940 (list (edebug-wrap-def-body (edebug-forms cursor)))))
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
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1943 ;;;; Edebug Form Specs
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1944 ;;; ==========================================================
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1945 ;;; See cl-specs.el for common lisp specs.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1946
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1947 ;;;;* Spec for def-edebug-spec
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1948 ;;; Out of date.
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-spec-p (object)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1951 "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
1952 (and (symbolp object)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1953 (get object 'edebug-form-spec)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1954
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1955 (def-edebug-spec def-edebug-spec
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1956 ;; 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
1957 (&define :name edebug-spec name
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1958 &or "nil" edebug-spec-p "t" "0" (&rest edebug-spec)))
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 (def-edebug-spec edebug-spec-list
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1961 ;; 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
1962 ((edebug-spec . [&or nil edebug-spec])))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1963
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1964 (def-edebug-spec edebug-spec
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1965 (&or
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1966 (vector &rest edebug-spec) ; matches a vector
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1967 ("vector" &rest edebug-spec) ; matches a vector spec
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1968 ("quote" symbolp)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1969 edebug-spec-list
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1970 stringp
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1971 [edebug-lambda-list-keywordp &rest edebug-spec]
28567
3ed20cb4c9b3 (edebug-keywordp): Remove. Change callers
Dave Love <fx@gnu.org>
parents: 28516
diff changeset
1972 [keywordp gate edebug-spec]
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1973 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
1974 symbolp;; a predicate
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1975 ))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1976
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1977
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1978 ;;;* Emacs special forms and some functions.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1979
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1980 ;; quote expects only one argument, although it allows any number.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1981 (def-edebug-spec quote sexp)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1982
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1983 ;; The standard defining forms.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1984 (def-edebug-spec defconst defvar)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1985 (def-edebug-spec defvar (symbolp &optional form stringp))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1986
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1987 (def-edebug-spec defun
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1988 (&define name lambda-list
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1989 [&optional stringp]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1990 [&optional ("interactive" interactive)]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1991 def-body))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1992 (def-edebug-spec defmacro
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
1993 (&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
1994
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1995 (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
1996
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1997 (def-edebug-spec lambda-list
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1998 (([&rest arg]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1999 [&optional ["&optional" arg &rest arg]]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2000 &optional ["&rest" arg]
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
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2003 (def-edebug-spec interactive
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2004 (&optional &or stringp def-form))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2005
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2006 ;; 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
2007 ;; This specially recognizes anonymous functions quoted with quote.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2008 (def-edebug-spec function-form
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2009 ;; form at the end could also handle "function",
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2010 ;; but recognize it specially to avoid wrapping function forms.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2011 (&or ([&or "quote" "function"] &or symbolp lambda-expr) form))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2012
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2013 ;; function expects a symbol or a lambda or macro expression
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2014 ;; A macro is allowed by Emacs.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2015 (def-edebug-spec function (&or symbolp lambda-expr))
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 ;; lambda is a macro in emacs 19.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2018 (def-edebug-spec lambda (&define lambda-list
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2019 [&optional stringp]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2020 [&optional ("interactive" interactive)]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2021 def-body))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2022
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2023 ;; A macro expression is a lambda expression with "macro" prepended.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2024 (def-edebug-spec macro (&define "lambda" lambda-list def-body))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2025
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2026 ;; (def-edebug-spec anonymous-form ((&or ["lambda" lambda] ["macro" macro])))
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 ;; Standard functions that take function-forms arguments.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2029 (def-edebug-spec mapcar (function-form form))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2030 (def-edebug-spec mapconcat (function-form form form))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2031 (def-edebug-spec mapatoms (function-form &optional form))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2032 (def-edebug-spec apply (function-form &rest form))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2033 (def-edebug-spec funcall (function-form &rest form))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2034
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2035 (def-edebug-spec let
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2036 ((&rest &or (symbolp &optional form) symbolp)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2037 body))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2038
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2039 (def-edebug-spec let* let)
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 setq (&rest symbolp form))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2042 (def-edebug-spec setq-default setq)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2043
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2044 (def-edebug-spec cond (&rest (&rest form)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2045
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2046 (def-edebug-spec condition-case
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2047 (symbolp
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2048 form
18729
43149745d126 (condition-case): Fix edebug-form-spec to
Richard M. Stallman <rms@gnu.org>
parents: 18399
diff changeset
2049 &rest ([&or symbolp (&rest symbolp)] body)))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2050
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2051
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
2052 (def-edebug-spec \` (backquote-form))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2053
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
2054 ;; Supports quotes inside backquotes,
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2055 ;; but only at the top level inside unquotes.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2056 (def-edebug-spec backquote-form
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2057 (&or
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2058 ([&or "," ",@"] &or ("quote" backquote-form) form)
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
2059 ;; The simple version:
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
2060 ;; (backquote-form &rest backquote-form)
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
2061 ;; doesn't handle (a . ,b). The straightforward fix:
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
2062 ;; (backquote-form . [&or nil backquote-form])
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
2063 ;; uses up too much stack space.
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
2064 ;; Note that `(foo . ,@bar) is not legal, so we don't need to handle it.
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
2065 (backquote-form [&rest [&not ","] backquote-form]
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
2066 . [&or nil backquote-form])
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2067 ;; 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
2068 ;; 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
2069 ;; (backquote-form . [&or nil backquote-form])
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2070 (vector &rest backquote-form)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2071 sexp))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2072
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2073 ;; Special version of backquote that instruments backquoted forms
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2074 ;; destined to be evaluated, usually as the result of a
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2075 ;; macroexpansion. Backquoted code can only have unquotes (, and ,@)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2076 ;; 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
2077 ;; 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
2078 ;; 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
2079
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2080 ;; 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
2081 ;; 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
2082 ;; are defined with edebug-` but this would be expensive.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2083
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2084 ;; ,@ might have some problems.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2085
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
2086 (defalias 'edebug-\` '\`) ;; same macro as regular backquote.
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
2087 (def-edebug-spec edebug-\` (def-form))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2088
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2089 ;; Assume immediate quote in unquotes mean backquote at next higher level.
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
2090 (def-edebug-spec , (&or ("quote" edebug-\`) def-form))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2091 (def-edebug-spec ,@ (&define ;; so (,@ form) is never wrapped.
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
2092 &or ("quote" edebug-\`) def-form))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2093
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2094 ;; New byte compiler.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2095 (def-edebug-spec defsubst defun)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2096 (def-edebug-spec dont-compile t)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2097 (def-edebug-spec eval-when-compile t)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2098 (def-edebug-spec eval-and-compile t)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2099
16374
b3b88a1ee6aa (save-selected-window, save-current-buffer)
Richard M. Stallman <rms@gnu.org>
parents: 16308
diff changeset
2100 (def-edebug-spec save-selected-window t)
b3b88a1ee6aa (save-selected-window, save-current-buffer)
Richard M. Stallman <rms@gnu.org>
parents: 16308
diff changeset
2101 (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
2102 (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
2103 (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
2104 (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
2105 (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
2106 (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
2107 (def-edebug-spec pop (sexp))
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
2108
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
2109 (def-edebug-spec 1value (form))
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
2110 (def-edebug-spec noreturn (form))
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
2111
16374
b3b88a1ee6aa (save-selected-window, save-current-buffer)
Richard M. Stallman <rms@gnu.org>
parents: 16308
diff changeset
2112
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2113 ;; Anything else?
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2114
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2115
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2116 ;; Some miscellaneous specs for macros in public packages.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2117 ;; Send me yours.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2118
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2119 ;; advice.el by Hans Chalupsky (hans@cs.buffalo.edu)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2120
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2121 (def-edebug-spec ad-dolist ((symbolp form &optional form) body))
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
2122 (def-edebug-spec defadvice
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2123 (&define name ;; thing being advised.
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
2124 (name ;; class is [&or "before" "around" "after"
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
2125 ;; "activation" "deactivation"]
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2126 name ;; name of advice
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2127 &rest sexp ;; optional position and flags
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2128 )
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2129 [&optional stringp]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2130 [&optional ("interactive" interactive)]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2131 def-body))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2132
28567
3ed20cb4c9b3 (edebug-keywordp): Remove. Change callers
Dave Love <fx@gnu.org>
parents: 28516
diff changeset
2133 (def-edebug-spec easy-menu-define (symbolp body))
3ed20cb4c9b3 (edebug-keywordp): Remove. Change callers
Dave Love <fx@gnu.org>
parents: 28516
diff changeset
2134
3ed20cb4c9b3 (edebug-keywordp): Remove. Change callers
Dave Love <fx@gnu.org>
parents: 28516
diff changeset
2135 (def-edebug-spec with-custom-print body)
3ed20cb4c9b3 (edebug-keywordp): Remove. Change callers
Dave Love <fx@gnu.org>
parents: 28516
diff changeset
2136
3ed20cb4c9b3 (edebug-keywordp): Remove. Change callers
Dave Love <fx@gnu.org>
parents: 28516
diff changeset
2137 (def-edebug-spec sregexq (&rest sexp))
39515
da28750c22cd (rx): Add def-edebug-spec.
Gerd Moellmann <gerd@gnu.org>
parents: 39173
diff changeset
2138 (def-edebug-spec rx (&rest sexp))
28567
3ed20cb4c9b3 (edebug-keywordp): Remove. Change callers
Dave Love <fx@gnu.org>
parents: 28516
diff changeset
2139
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
2140 ;;; The debugger itself
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2141
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2142 (defvar edebug-active nil) ;; Non-nil when edebug is active
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2143
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2144 ;;; add minor-mode-alist entry
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2145 (or (assq 'edebug-active minor-mode-alist)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2146 (setq minor-mode-alist (cons (list 'edebug-active " *Debugging*")
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2147 minor-mode-alist)))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2148
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2149 (defvar edebug-stack nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2150 ;; Stack of active functions evaluated via edebug.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2151 ;; Should be nil at the top level.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2152
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2153 (defvar edebug-stack-depth -1)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2154 ;; Index of last edebug-stack item.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2155
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2156 (defvar edebug-offset-indices nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2157 ;; Stack of offset indices of visited edebug sexps.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2158 ;; Should be nil at the top level.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2159 ;; Each function adds one cons. Top is modified with setcar.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2160
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2161
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2162 (defvar edebug-entered nil
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2163 ;; 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
2164 ;; This should stay nil at the top level.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2165 )
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2166
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2167 ;; Should these be options?
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2168 (defconst edebug-debugger 'edebug
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2169 ;; 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
2170 ;; Set this to 'debug if you want to debug edebug.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2171 )
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2172
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2173
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2174 ;; Dynamically bound variables, declared globally but left unbound.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2175 (defvar edebug-function) ; the function being executed. change name!!
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2176 (defvar edebug-args) ; the arguments of the function
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2177 (defvar edebug-data) ; the edebug data for the function
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2178 (defvar edebug-value) ; the result of the expression
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2179 (defvar edebug-after-index)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2180 (defvar edebug-def-mark) ; the mark for the definition
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2181 (defvar edebug-freq-count) ; the count of expression visits.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2182 (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
2183
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2184 (defvar edebug-buffer) ; which buffer the function is in.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2185 (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
2186 (defvar edebug-outside-executing-macro)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2187 (defvar edebug-outside-defining-kbd-macro)
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 (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
2190 (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
2191
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2192 (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
2193 (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
2194
19930
1e0f347ee021 (edebug-enter): Save, and bind to nil,
Richard M. Stallman <rms@gnu.org>
parents: 18729
diff changeset
2195 (defvar edebug-outside-overriding-local-map)
1e0f347ee021 (edebug-enter): Save, and bind to nil,
Richard M. Stallman <rms@gnu.org>
parents: 18729
diff changeset
2196 (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
2197
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2198 (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
2199 (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
2200
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2201 (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
2202
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2203 ;;; Handling signals
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2204
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2205 (defun edebug-signal (edebug-signal-name edebug-signal-data)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2206 "Signal an error. Args are SIGNAL-NAME, and associated DATA.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2207 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
2208 that is a list of condition names.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2209 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
2210 The symbol `error' should always be one of them.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2211
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2212 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
2213 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
2214 See `condition-case'.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2215
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2216 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
2217 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
2218 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
2219 error is signaled again."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2220 (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
2221 (edebug 'error (cons edebug-signal-name edebug-signal-data)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2222 ;; 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
2223 ;; 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
2224 ;; Avoid infinite recursion.
4c3a2b58fd72 (edebug-signal): Avoid infinite recursion.
Richard M. Stallman <rms@gnu.org>
parents: 17650
diff changeset
2225 (let ((signal-hook-function nil))
4c3a2b58fd72 (edebug-signal): Avoid infinite recursion.
Richard M. Stallman <rms@gnu.org>
parents: 17650
diff changeset
2226 (signal edebug-signal-name edebug-signal-data)))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2227
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2228 ;;; Entering Edebug
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2229
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2230 (defun edebug-enter (edebug-function edebug-args edebug-body)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2231 ;; 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
2232 ;; Setup edebug variables and evaluate BODY. This function is called
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
2233 ;; 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
2234 ;; Return the result of BODY.
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2235
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2236 ;; Is this the first time we are entering edebug since
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2237 ;; lower-level recursive-edit command?
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2238 ;; More precisely, this tests whether Edebug is currently active.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2239 (if (not edebug-entered)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2240 (let ((edebug-entered t)
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
2241 ;; 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
2242 ;; 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
2243 ;; 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
2244 (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
2245 (max-specpdl-size (+ 200 max-specpdl-size))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2246
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2247 (debugger edebug-debugger) ; only while edebug is active.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2248 (edebug-outside-debug-on-error debug-on-error)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2249 (edebug-outside-debug-on-quit debug-on-quit)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2250 ;; Binding these may not be the right thing to do.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2251 ;; We want to allow the global values to be changed.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2252 (debug-on-error (or debug-on-error edebug-on-error))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2253 (debug-on-quit edebug-on-quit)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2254
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2255 ;; 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
2256 (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
2257
19930
1e0f347ee021 (edebug-enter): Save, and bind to nil,
Richard M. Stallman <rms@gnu.org>
parents: 18729
diff changeset
2258 (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
2259 (edebug-outside-overriding-terminal-local-map
1e0f347ee021 (edebug-enter): Save, and bind to nil,
Richard M. Stallman <rms@gnu.org>
parents: 18729
diff changeset
2260 overriding-terminal-local-map)
1e0f347ee021 (edebug-enter): Save, and bind to nil,
Richard M. Stallman <rms@gnu.org>
parents: 18729
diff changeset
2261
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2262 ;; 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
2263 (edebug-outside-executing-macro executing-kbd-macro)
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
2264 (edebug-outside-pre-command-hook
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
2265 (edebug-var-status 'pre-command-hook))
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
2266 (edebug-outside-post-command-hook
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
2267 (edebug-var-status 'post-command-hook)))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2268 (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
2269 (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
2270 ;; 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
2271 ;; non-nil. Again, local binding may not be best.
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
2272 (executing-kbd-macro
15302
c23c9712ef5c Use executing-kbd-macro, not executing-macro.
Karl Heuer <kwzh@gnu.org>
parents: 14846
diff changeset
2273 (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
2274
19930
1e0f347ee021 (edebug-enter): Save, and bind to nil,
Richard M. Stallman <rms@gnu.org>
parents: 18729
diff changeset
2275 ;; 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
2276 (overriding-local-map nil)
1e0f347ee021 (edebug-enter): Save, and bind to nil,
Richard M. Stallman <rms@gnu.org>
parents: 18729
diff changeset
2277 (overriding-terminal-local-map nil)
1e0f347ee021 (edebug-enter): Save, and bind to nil,
Richard M. Stallman <rms@gnu.org>
parents: 18729
diff changeset
2278
16308
2334a3d634c0 (edebug-original-signal): Don't define it.
Richard M. Stallman <rms@gnu.org>
parents: 16299
diff changeset
2279 (signal-hook-function 'edebug-signal)
2334a3d634c0 (edebug-original-signal): Don't define it.
Richard M. Stallman <rms@gnu.org>
parents: 16299
diff changeset
2280
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2281 ;; 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
2282 ;; 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
2283 ;; 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
2284 (pre-command-hook nil)
16299
0e4f99bad2ec (pre-command-hook, post-command-hook): Defvars deleted.
Richard M. Stallman <rms@gnu.org>
parents: 15782
diff changeset
2285 (post-command-hook nil))
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
2286 (setq edebug-execution-mode (or edebug-next-execution-mode
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
2287 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
2288 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
2289 edebug-next-execution-mode nil)
16308
2334a3d634c0 (edebug-original-signal): Don't define it.
Richard M. Stallman <rms@gnu.org>
parents: 16299
diff changeset
2290 (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
2291 ;; Reset global variables in case outside value was changed.
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
2292 (setq executing-kbd-macro edebug-outside-executing-macro)
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
2293 (edebug-restore-status
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
2294 'post-command-hook edebug-outside-post-command-hook)
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
2295 (edebug-restore-status
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
2296 'pre-command-hook edebug-outside-pre-command-hook)))
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
2297
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2298 (let* ((edebug-data (get edebug-function 'edebug))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2299 (edebug-def-mark (car edebug-data)) ; mark at def start
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2300 (edebug-freq-count (get edebug-function 'edebug-freq-count))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2301 (edebug-coverage (get edebug-function 'edebug-coverage))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2302 (edebug-buffer (marker-buffer edebug-def-mark))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2303
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2304 (edebug-stack (cons edebug-function edebug-stack))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2305 (edebug-offset-indices (cons 0 edebug-offset-indices))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2306 )
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2307 (if (get edebug-function 'edebug-on-entry)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2308 (progn
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2309 (setq edebug-execution-mode 'step)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2310 (if (eq (get edebug-function 'edebug-on-entry) 'temp)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2311 (put edebug-function 'edebug-on-entry nil))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2312 (if edebug-trace
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2313 (edebug-enter-trace edebug-body)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2314 (funcall edebug-body))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2315 )))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2316
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
2317 (defun edebug-var-status (var)
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
2318 "Return a cons cell describing the status of VAR's current binding.
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
2319 The purpose of this function is so you can properly undo
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
2320 subsequent changes to the same binding, by passing the status
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
2321 cons cell to `edebug-restore-status'. The status cons cell
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
2322 has the form (LOCUS . VALUE), where LOCUS can be a buffer
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
2323 \(for a buffer-local binding), a frame (for a frame-local binding),
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
2324 or nil (if the default binding is current)."
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
2325 (cons (variable-binding-locus var)
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
2326 (symbol-value var)))
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
2327
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
2328 (defun edebug-restore-status (var status)
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
2329 "Reset VAR based on STATUS.
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
2330 STATUS should be a list you got from `edebug-var-status'."
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
2331 (let ((locus (car status))
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
2332 (value (cdr status)))
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
2333 (cond ((bufferp locus)
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
2334 (if (buffer-live-p locus)
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
2335 (with-current-buffer locus
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
2336 (set var value))))
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
2337 ((framep locus)
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
2338 (modify-frame-parameters locus (list (cons var value))))
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
2339 (t
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
2340 (set var value)))))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2341
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2342 (defun edebug-enter-trace (edebug-body)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2343 (let ((edebug-stack-depth (1+ edebug-stack-depth))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2344 edebug-result)
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
2345 (edebug-print-trace-before
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2346 (format "%s args: %s" edebug-function edebug-args))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2347 (prog1 (setq edebug-result (funcall edebug-body))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2348 (edebug-print-trace-after
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2349 (format "%s result: %s" edebug-function edebug-result)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2350
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2351 (def-edebug-spec edebug-tracing (form body))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2352
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2353 (defmacro edebug-tracing (msg &rest body)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2354 "Print MSG in *edebug-trace* before and after evaluating BODY.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2355 The result of BODY is also printed."
26519
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
2356 `(let ((edebug-stack-depth (1+ edebug-stack-depth))
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
2357 edebug-result)
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
2358 (edebug-print-trace-before ,msg)
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
2359 (prog1 (setq edebug-result (progn ,@body))
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
2360 (edebug-print-trace-after
26519
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
2361 (format "%s result: %s" ,msg edebug-result)))))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2362
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2363 (defun edebug-print-trace-before (msg)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2364 "Function called to print trace info before expression evaluation.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2365 MSG is printed after `::::{ '."
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2366 (edebug-trace-display
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2367 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
2368
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2369 (defun edebug-print-trace-after (msg)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2370 "Function called to print trace info after expression evaluation.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2371 MSG is printed after `::::} '."
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2372 (edebug-trace-display
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2373 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
2374
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2375
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2376
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2377 (defun edebug-slow-before (edebug-before-index)
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
2378 (unless edebug-active
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
2379 ;; Debug current function given BEFORE position.
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
2380 ;; Called from functions compiled with edebug-eval-top-level-form.
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
2381 ;; Return the before index.
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
2382 (setcar edebug-offset-indices edebug-before-index)
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
2383
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
2384 ;; Increment frequency count
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
2385 (aset edebug-freq-count edebug-before-index
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
2386 (1+ (aref edebug-freq-count edebug-before-index)))
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
2387
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
2388 (if (or (not (memq edebug-execution-mode '(Go-nonstop next)))
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
2389 (edebug-input-pending-p))
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
2390 (edebug-debugger edebug-before-index 'before nil)))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2391 edebug-before-index)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2392
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2393 (defun edebug-fast-before (edebug-before-index)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2394 ;; Do nothing.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2395 )
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2396
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2397 (defun edebug-slow-after (edebug-before-index edebug-after-index edebug-value)
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
2398 (if edebug-active
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2399 edebug-value
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
2400 ;; Debug current function given AFTER position and VALUE.
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
2401 ;; Called from functions compiled with edebug-eval-top-level-form.
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
2402 ;; Return VALUE.
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
2403 (setcar edebug-offset-indices edebug-after-index)
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
2404
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
2405 ;; Increment frequency count
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
2406 (aset edebug-freq-count edebug-after-index
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
2407 (1+ (aref edebug-freq-count edebug-after-index)))
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
2408 (if edebug-test-coverage (edebug-update-coverage))
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
2409
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
2410 (if (and (eq edebug-execution-mode 'Go-nonstop)
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
2411 (not (edebug-input-pending-p)))
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
2412 ;; Just return result.
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
2413 edebug-value
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
2414 (edebug-debugger edebug-after-index 'after edebug-value)
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
2415 )))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2416
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2417 (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
2418 ;; Do nothing but return the value.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2419 edebug-value)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2420
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2421 (defun edebug-run-slow ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2422 (defalias 'edebug-before 'edebug-slow-before)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2423 (defalias 'edebug-after 'edebug-slow-after))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2424
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2425 ;; This is not used, yet.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2426 (defun edebug-run-fast ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2427 (defalias 'edebug-before 'edebug-fast-before)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2428 (defalias 'edebug-after 'edebug-fast-after))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2429
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2430 (edebug-run-slow)
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
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2433 (defun edebug-update-coverage ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2434 (let ((old-result (aref edebug-coverage edebug-after-index)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2435 (cond
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2436 ((eq 'ok-coverage old-result))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2437 ((eq 'unknown old-result)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2438 (aset edebug-coverage edebug-after-index edebug-value))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2439 ;; Test if a different result.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2440 ((not (eq edebug-value old-result))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2441 (aset edebug-coverage edebug-after-index 'ok-coverage)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2442
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2443
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2444 ;; Dynamically declared unbound variables.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2445 (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
2446 (defvar edebug-breakpoints)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2447 (defvar edebug-break-data) ; break data for current function.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2448 (defvar edebug-break) ; whether a break occurred.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2449 (defvar edebug-global-break) ; whether a global break occurred.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2450 (defvar edebug-break-condition) ; whether the breakpoint is conditional.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2451
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2452 (defvar edebug-break-result nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2453 (defvar edebug-global-break-result nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2454
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2455
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2456 (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
2457 (if inhibit-redisplay
f9f0026b4c12 (edebug-debugger): If inside redisplay, just return.
Richard M. Stallman <rms@gnu.org>
parents: 44518
diff changeset
2458 ;; 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
2459 edebug-value
f9f0026b4c12 (edebug-debugger): If inside redisplay, just return.
Richard M. Stallman <rms@gnu.org>
parents: 44518
diff changeset
2460 ;; Check breakpoints and pending input.
f9f0026b4c12 (edebug-debugger): If inside redisplay, just return.
Richard M. Stallman <rms@gnu.org>
parents: 44518
diff changeset
2461 ;; 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
2462 ;; Return edebug-value.
f9f0026b4c12 (edebug-debugger): If inside redisplay, just return.
Richard M. Stallman <rms@gnu.org>
parents: 44518
diff changeset
2463 (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
2464 (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
2465 (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
2466 (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
2467 (edebug-global-break
f9f0026b4c12 (edebug-debugger): If inside redisplay, just return.
Richard M. Stallman <rms@gnu.org>
parents: 44518
diff changeset
2468 (if edebug-global-break-condition
f9f0026b4c12 (edebug-debugger): If inside redisplay, just return.
Richard M. Stallman <rms@gnu.org>
parents: 44518
diff changeset
2469 (condition-case nil
f9f0026b4c12 (edebug-debugger): If inside redisplay, just return.
Richard M. Stallman <rms@gnu.org>
parents: 44518
diff changeset
2470 (setq edebug-global-break-result
f9f0026b4c12 (edebug-debugger): If inside redisplay, just return.
Richard M. Stallman <rms@gnu.org>
parents: 44518
diff changeset
2471 (eval edebug-global-break-condition))
f9f0026b4c12 (edebug-debugger): If inside redisplay, just return.
Richard M. Stallman <rms@gnu.org>
parents: 44518
diff changeset
2472 (error nil))))
f9f0026b4c12 (edebug-debugger): If inside redisplay, just return.
Richard M. Stallman <rms@gnu.org>
parents: 44518
diff changeset
2473 (edebug-break))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2474
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2475 ;;; (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
2476 ;; Test whether we should break.
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
2477 (setq edebug-break
46716
f9f0026b4c12 (edebug-debugger): If inside redisplay, just return.
Richard M. Stallman <rms@gnu.org>
parents: 44518
diff changeset
2478 (or edebug-global-break
f9f0026b4c12 (edebug-debugger): If inside redisplay, just return.
Richard M. Stallman <rms@gnu.org>
parents: 44518
diff changeset
2479 (and edebug-break-data
f9f0026b4c12 (edebug-debugger): If inside redisplay, just return.
Richard M. Stallman <rms@gnu.org>
parents: 44518
diff changeset
2480 (or (not edebug-break-condition)
f9f0026b4c12 (edebug-debugger): If inside redisplay, just return.
Richard M. Stallman <rms@gnu.org>
parents: 44518
diff changeset
2481 (setq edebug-break-result
f9f0026b4c12 (edebug-debugger): If inside redisplay, just return.
Richard M. Stallman <rms@gnu.org>
parents: 44518
diff changeset
2482 (eval edebug-break-condition))))))
f9f0026b4c12 (edebug-debugger): If inside redisplay, just return.
Richard M. Stallman <rms@gnu.org>
parents: 44518
diff changeset
2483 (if (and edebug-break
f9f0026b4c12 (edebug-debugger): If inside redisplay, just return.
Richard M. Stallman <rms@gnu.org>
parents: 44518
diff changeset
2484 (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
2485 ;; Delete the breakpoint.
f9f0026b4c12 (edebug-debugger): If inside redisplay, just return.
Richard M. Stallman <rms@gnu.org>
parents: 44518
diff changeset
2486 (setcdr edebug-data
f9f0026b4c12 (edebug-debugger): If inside redisplay, just return.
Richard M. Stallman <rms@gnu.org>
parents: 44518
diff changeset
2487 (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
2488 (cdr (cdr edebug-data)))))
f9f0026b4c12 (edebug-debugger): If inside redisplay, just return.
Richard M. Stallman <rms@gnu.org>
parents: 44518
diff changeset
2489
f9f0026b4c12 (edebug-debugger): If inside redisplay, just return.
Richard M. Stallman <rms@gnu.org>
parents: 44518
diff changeset
2490 ;; Display if mode is not go, continue, or Continue-fast
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
2491 ;; 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
2492 (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
2493 edebug-break
f9f0026b4c12 (edebug-debugger): If inside redisplay, just return.
Richard M. Stallman <rms@gnu.org>
parents: 44518
diff changeset
2494 (edebug-input-pending-p))
f9f0026b4c12 (edebug-debugger): If inside redisplay, just return.
Richard M. Stallman <rms@gnu.org>
parents: 44518
diff changeset
2495 (edebug-display)) ; <--------------- display
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
2496
46716
f9f0026b4c12 (edebug-debugger): If inside redisplay, just return.
Richard M. Stallman <rms@gnu.org>
parents: 44518
diff changeset
2497 edebug-value
f9f0026b4c12 (edebug-debugger): If inside redisplay, just return.
Richard M. Stallman <rms@gnu.org>
parents: 44518
diff changeset
2498 )))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2499
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2500
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2501 ;; window-start now stored with each function.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2502 ;;(defvar edebug-window-start nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2503 ;; Remember where each buffers' window starts between edebug calls.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2504 ;; This is to avoid spurious recentering.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2505 ;; Does this still need to be buffer-local??
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2506 ;;(setq-default edebug-window-start nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2507 ;;(make-variable-buffer-local 'edebug-window-start)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2508
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2509
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2510 ;; Dynamically declared unbound vars
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2511 (defvar edebug-point) ; the point in edebug buffer
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2512 (defvar edebug-outside-buffer) ; the current-buffer outside of edebug
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2513 (defvar edebug-outside-point) ; the point outside of edebug
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2514 (defvar edebug-outside-mark) ; the mark outside of edebug
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2515 (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
2516 (defvar edebug-outside-windows) ; outside window configuration
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2517 (defvar edebug-eval-buffer) ; for the evaluation list.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2518 (defvar edebug-outside-o-a-p) ; outside overlay-arrow-position
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2519 (defvar edebug-outside-o-a-s) ; outside overlay-arrow-string
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2520 (defvar edebug-outside-c-i-e-a) ; outside cursor-in-echo-area
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
2521 (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
2522
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2523 (defvar edebug-eval-list nil) ;; List of expressions to evaluate.
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 (defvar edebug-previous-result nil) ;; Last result returned.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2526
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2527 ;; 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
2528 (defalias 'edebug-mark-marker 'mark-marker)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2529
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2530
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2531 (defun edebug-display ()
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
2532 (unless (marker-position edebug-def-mark)
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
2533 ;; The buffer holding the source has been killed.
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
2534 ;; Let's at least show a backtrace so the user can figure out
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
2535 ;; which function we're talking about.
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
2536 (debug))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2537 ;; Setup windows for edebug, determine mode, maybe enter recursive-edit.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2538 ;; Uses local variables of edebug-enter, edebug-before, edebug-after
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2539 ;; and edebug-debugger.
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2540 (let ((edebug-active t) ; for minor mode alist
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
2541 (edebug-with-timeout-suspend (with-timeout-suspend))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2542 edebug-stop ; should we enter recursive-edit
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2543 (edebug-point (+ edebug-def-mark
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2544 (aref (nth 2 edebug-data) edebug-offset-index)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2545 edebug-buffer-outside-point ; current point in edebug-buffer
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2546 ;; window displaying edebug-buffer
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2547 (edebug-window-data (nth 3 edebug-data))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2548 (edebug-outside-window (selected-window))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2549 (edebug-outside-buffer (current-buffer))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2550 (edebug-outside-point (point))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2551 (edebug-outside-mark (edebug-mark))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2552 edebug-outside-windows ; window or screen configuration
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2553 edebug-buffer-points
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
2554
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2555 edebug-eval-buffer ; declared here so we can kill it below
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2556 (edebug-eval-result-list (and edebug-eval-list
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2557 (edebug-eval-result-list)))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2558 edebug-trace-window
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2559 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
2560
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2561 (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
2562 (edebug-outside-o-a-s overlay-arrow-string)
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
2563 (edebug-outside-c-i-e-a cursor-in-echo-area)
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
2564 (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
2565 (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
2566 (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
2567 (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
2568 (cursor-in-echo-area nil)
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
2569 (default-cursor-in-non-selected-windows 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
2570 ;; 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
2571 )
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2572 (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
2573 (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
2574 (error "Buffer defining %s not found" edebug-function)))
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
2575
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 (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
2577 ;; 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
2578 (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
2579
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2580 (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
2581 ;; Save windows now before we modify them.
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
2582 (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
2583 (edebug-current-windows edebug-save-windows)))
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
2584
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2585 (if 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
2586 (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
2587
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2588 ;; First move the edebug buffer point to edebug-point
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
2589 ;; so that window start doesn't get changed when we display it.
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
2590 ;; 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
2591 ;;(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
2592 ;;(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
2593
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2594 ;; 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
2595 ;; 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
2596 (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
2597 (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
2598
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2599 ;; Now display eval list, if any.
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
2600 ;; 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
2601 ;; 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
2602 (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
2603 ;; 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
2604 (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
2605 (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
2606
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2607 (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
2608 (goto-char edebug-point)
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
2609
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2610 (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
2611 ;; 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
2612 ;; 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
2613 (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
2614 (let ((debug-on-error nil))
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
2615 (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
2616 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
2617 )))
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2618
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2619 (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
2620 (edebug-adjust-window (cdr edebug-window-data)))
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
2621
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2622 ;; Test if there is input, not including keyboard macros.
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
2623 (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
2624 (progn
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2625 (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
2626 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
2627 (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
2628 ;; (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
2629 ))
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2630 ;; 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
2631 (edebug-overlay-arrow)
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
2632
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 (cond
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2634 ((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
2635 ;; 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
2636 (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
2637 (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
2638 (beep)
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2639 (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
2640 (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
2641 (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
2642 (edebug-break
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2643 (cond
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2644 (edebug-global-break
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
2645 (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
2646 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
2647 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
2648 (edebug-break-condition
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
2649 (message "Break: %s => %s"
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
2650 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
2651 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
2652 ((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
2653 (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
2654 (t)))
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2655
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2656 (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
2657
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2658 (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
2659 (progn
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2660 ;; 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
2661 (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
2662 (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
2663 (sit-for 1)) ; Show break message.
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2664 (edebug-previous-result)))
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
2665
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2666 (cond
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2667 (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
2668 (cond
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2669 ((eq edebug-execution-mode 'continue) (edebug-sit-for 1))
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2670 ((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
2671 (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
2672 ;; 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
2673 ((eq edebug-execution-mode 'trace)
18376
9ae76ef113f6 (edebug-sit-for-seconds): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 18017
diff changeset
2674 (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
2675 ((eq edebug-execution-mode 'Trace-fast)
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2676 (edebug-sit-for 0)) ; Force update and continue.
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2677 )
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
2678
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2679 (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
2680 (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
2681 (memq edebug-execution-mode '(step next))
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
2682 (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
2683 (progn
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2684 ;; (setq edebug-execution-mode 'step)
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
2685 ;; (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
2686 (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
2687
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2688 ;; 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
2689 (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
2690 (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
2691 (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
2692 ;; 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
2693 (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
2694 (progn
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2695 (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
2696 (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
2697
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2698 ;; 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
2699 ;; 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
2700 (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
2701 (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
2702 (setq edebug-trace-window-start
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
2703 (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
2704 (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
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 ;; 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
2707 (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
2708 (progn
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-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
2710
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2711 ;; 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
2712 ;; 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
2713 ;; 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
2714 (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
2715 (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
2716
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2717 ;; 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
2718 (if edebug-trace-window
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
2719 (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
2720 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
2721
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2722 ;; 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
2723 (let ((window (car edebug-window-data)))
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
2724 (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
2725 (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
2726 (progn
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
2727 (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
2728 '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
2729 ;; 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
2730 ;; Needed in addition to setting the buffer point
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
2731 ;; - 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
2732 ;; 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
2733 ;; 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
2734 ;; (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
2735 )))
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2736
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2737 ;; 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
2738 ;; (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
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 ;; 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
2741 ;; 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
2742 ;; 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
2743 (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
2744 (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
2745 ) ; 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
2746
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2747 ;; Restore current buffer always, in case application needs it.
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2748 (set-buffer edebug-outside-buffer)
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2749 ;; 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
2750 ;; Needed even if restoring windows because
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
2751 ;; that doesn't restore point and mark in the current buffer.
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
2752 ;; 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
2753 (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
2754 (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
2755 (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
2756 ;; 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
2757 (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
2758 ) ; 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
2759 ;; 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
2760
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2761 ;; Restore edebug-buffer's outside point.
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
2762 ;; (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
2763 ;; 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
2764 (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
2765 (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
2766 (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
2767 (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
2768 ;; ... 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
2769 )
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
2770 (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
2771 ;; 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
2772 (setq
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2773 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
2774 overlay-arrow-string edebug-outside-o-a-s
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
2775 cursor-in-echo-area edebug-outside-c-i-e-a
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
2776 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
2777 )))
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2778
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2779
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2780 (defvar edebug-number-of-recursions 0)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2781 ;; Number of recursive edits started by edebug.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2782 ;; Should be 0 at the top level.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2783
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2784 (defvar edebug-recursion-depth 0)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2785 ;; Value of recursion-depth when edebug was called.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2786
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2787 ;; Dynamically declared unbound vars
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2788 (defvar edebug-outside-match-data) ; match data outside of edebug
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2789 (defvar edebug-backtrace-buffer) ; each recursive edit gets its own
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
2790 (defvar edebug-inside-windows)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2791 (defvar edebug-interactive-p)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2792
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2793 (defvar edebug-outside-map)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2794 (defvar edebug-outside-standard-output)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2795 (defvar edebug-outside-standard-input)
25812
edf16534a337 (edebug-outside-current-prefix-arg):
Phillip Rulon <pjr@gnu.org>
parents: 25056
diff changeset
2796 (defvar edebug-outside-current-prefix-arg)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2797 (defvar edebug-outside-last-command-char)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2798 (defvar edebug-outside-last-command)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2799 (defvar edebug-outside-this-command)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2800 (defvar edebug-outside-last-input-char)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2801
6671
5b26038687ed (edebug-emacs-19-specific): Renamed from edebug-fsf19-specific.
Richard M. Stallman <rms@gnu.org>
parents: 6666
diff changeset
2802 ;; 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
2803 ;; 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
2804 ;; 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
2805 ;; 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
2806
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2807 ;; Emacs 18
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2808 (defvar edebug-outside-unread-command-char)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2809
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2810 ;; Emacs 19.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2811 (defvar edebug-outside-last-command-event)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2812 (defvar edebug-outside-unread-command-events)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2813 (defvar edebug-outside-last-input-event)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2814 (defvar edebug-outside-last-event-frame)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2815 (defvar edebug-outside-last-nonmenu-event)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2816 (defvar edebug-outside-track-mouse)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2817
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2818 ;; Disable byte compiler warnings about unread-command-char and -event
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2819 ;; (maybe works with byte-compile-version 2.22 at least)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2820 (defvar edebug-unread-command-char-warning)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2821 (defvar edebug-unread-command-event-warning)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2822 (eval-when-compile
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2823 (setq edebug-unread-command-char-warning
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2824 (get 'unread-command-char 'byte-obsolete-variable))
33758
8c1e62157545 (edebug-version)
Dave Love <fx@gnu.org>
parents: 33709
diff changeset
2825 (put 'unread-command-char 'byte-obsolete-variable nil))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2826
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2827 (defun edebug-recursive-edit ()
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2828 ;; Start up a recursive edit inside of edebug.
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2829 ;; 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
2830 ;; Assume that none of the variables below are buffer-local.
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2831 (let ((edebug-buffer-read-only buffer-read-only)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2832 ;; match-data must be done in the outside buffer
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2833 (edebug-outside-match-data
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2834 (save-excursion ; might be unnecessary now??
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2835 (set-buffer edebug-outside-buffer) ; in case match buffer different
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2836 (match-data)))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2837
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2838 ;;(edebug-number-of-recursions (1+ edebug-number-of-recursions))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2839 (edebug-recursion-depth (recursion-depth))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2840 edebug-entered ; bind locally to nil
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2841 (edebug-interactive-p nil) ; again non-interactive
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2842 edebug-backtrace-buffer ; each recursive edit gets its own
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2843 ;; The window configuration may be saved and restored
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2844 ;; during a recursive-edit
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2845 edebug-inside-windows
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2846
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2847 (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
2848
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2849 (edebug-outside-standard-output standard-output)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2850 (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
2851 (edebug-outside-defining-kbd-macro defining-kbd-macro)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2852
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2853 (edebug-outside-last-command-char last-command-char)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2854 (edebug-outside-last-command last-command)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2855 (edebug-outside-this-command this-command)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2856 (edebug-outside-last-input-char last-input-char)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2857
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2858 (edebug-outside-unread-command-char unread-command-char)
25812
edf16534a337 (edebug-outside-current-prefix-arg):
Phillip Rulon <pjr@gnu.org>
parents: 25056
diff changeset
2859 (edebug-outside-current-prefix-arg current-prefix-arg)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2860
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2861 (edebug-outside-last-input-event last-input-event)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2862 (edebug-outside-last-command-event last-command-event)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2863 (edebug-outside-unread-command-events unread-command-events)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2864 (edebug-outside-last-event-frame last-event-frame)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2865 (edebug-outside-last-nonmenu-event last-nonmenu-event)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2866 (edebug-outside-track-mouse track-mouse)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2867 )
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2868
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2869 (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
2870 (let (
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2871 ;; 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
2872 ;; 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
2873 (last-command-char last-command-char)
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
2874 (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
2875 (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
2876 (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
2877
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2878 ;; 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
2879 (unread-command-char -1)
25812
edf16534a337 (edebug-outside-current-prefix-arg):
Phillip Rulon <pjr@gnu.org>
parents: 25056
diff changeset
2880 (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
2881
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2882 ;; 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
2883 (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
2884 (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
2885 (unread-command-events nil)
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2886 (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
2887 (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
2888 (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
2889
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2890 ;; 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
2891 (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
2892 (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
2893
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2894 ;; Don't keep defining a kbd macro.
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
2895 (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
2896 (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
2897
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2898 ;; others??
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2899 )
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 (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
2902 (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
2903 (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
2904
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2905 (setq buffer-read-only t)
16308
2334a3d634c0 (edebug-original-signal): Don't define it.
Richard M. Stallman <rms@gnu.org>
parents: 16299
diff changeset
2906 (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
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 (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
2909 (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
2910 (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
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 ;; 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
2913 (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
2914 (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
2915 (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
2916 ;; 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
2917 (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
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 ;; 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
2920 ;; (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
2921
21162
6c70fa8e1a5d (edebug-recursive-edit)
Richard M. Stallman <rms@gnu.org>
parents: 20832
diff changeset
2922 (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
2923
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2924 ;; 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
2925 ;; 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
2926 (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
2927 (progn
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2928 (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
2929 (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
2930 (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
2931 (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
2932 (use-local-map edebug-outside-map)
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2933 )
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2934 ;; 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
2935 (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
2936 ));; 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
2937
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2938 ;; 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
2939 (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
2940 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
2941 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
2942 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
2943 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
2944 unread-command-char edebug-outside-unread-command-char
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2945 unread-command-events edebug-outside-unread-command-events
25812
edf16534a337 (edebug-outside-current-prefix-arg):
Phillip Rulon <pjr@gnu.org>
parents: 25056
diff changeset
2946 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
2947 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
2948 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
2949 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
2950 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
2951 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
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 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
2954 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
2955 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
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 ))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2958
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2959
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2960 ;;; Display related functions
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2961
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2962 (defun edebug-adjust-window (old-start)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2963 ;; 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
2964 ;;; (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
2965 ;;; (selected-window) old-start (window-start) (point)) (sit-for 5)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2966 (if (not (pos-visible-in-window-p))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2967 (progn
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2968 ;; First try old-start
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2969 (if old-start
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2970 (set-window-start (selected-window) old-start))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2971 (if (not (pos-visible-in-window-p))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2972 (progn
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2973 ;; (message "resetting window start") (sit-for 2)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2974 (set-window-start
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2975 (selected-window)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2976 (save-excursion
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2977 (forward-line
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2978 (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
2979 (- (/ (window-height) 2)) ; center the line moving forward
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2980 ))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2981 (beginning-of-line)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2982 (point)))))))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2983 (window-start))
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
2984
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2985
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2986
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2987 (defconst edebug-arrow-alist
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2988 '((Continue-fast . "=")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2989 (Trace-fast . "-")
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2990 (continue . ">")
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2991 (trace . "->")
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2992 (step . "=>")
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2993 (next . "=>")
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2994 (go . "<>")
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2995 (Go-nonstop . "..") ; not used
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2996 )
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2997 "Association list of arrows for each edebug mode.")
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2998
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2999 (defun edebug-overlay-arrow ()
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3000 ;; 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
3001 ;; 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
3002 ;; 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
3003 (let ((pos (save-excursion (beginning-of-line) (point))))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3004 (setq overlay-arrow-string
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3005 (cdr (assq edebug-execution-mode edebug-arrow-alist)))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3006 (setq overlay-arrow-position (make-marker))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3007 (set-marker overlay-arrow-position pos (current-buffer))))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3008
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3009
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3010 (defun edebug-toggle-save-all-windows ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3011 "Toggle the saving and restoring of all windows.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3012 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
3013 configurations become the same as the current configuration."
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3014 (interactive)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3015 (setq edebug-save-windows (not edebug-save-windows))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3016 (if edebug-save-windows
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3017 (setq edebug-inside-windows
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3018 (setq edebug-outside-windows
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3019 (edebug-current-windows
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3020 edebug-save-windows))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3021 (message "Window saving is %s for all windows."
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3022 (if edebug-save-windows "on" "off")))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3023
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3024 (defmacro edebug-changing-windows (&rest body)
26519
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3025 `(let ((window (selected-window)))
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3026 (setq edebug-inside-windows (edebug-current-windows t))
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3027 (edebug-set-windows edebug-outside-windows)
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3028 ,@body;; Code to change edebug-save-windows
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
3029 (setq edebug-outside-windows (edebug-current-windows
26519
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3030 edebug-save-windows))
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3031 ;; Problem: what about outside windows that are deleted inside?
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3032 (edebug-set-windows edebug-inside-windows)))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3033
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3034 (defun edebug-toggle-save-selected-window ()
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
3035 "Toggle the saving and restoring of the selected window.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3036 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
3037 configurations become the same as the current configuration."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3038 (interactive)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3039 (cond
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3040 ((eq t edebug-save-windows)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3041 ;; Save all outside windows except the selected one.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3042 ;; Remove (selected-window) from outside-windows.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3043 (edebug-changing-windows
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3044 (setq edebug-save-windows (delq window (edebug-window-list)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3045
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3046 ((memq (selected-window) edebug-save-windows)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3047 (setq edebug-outside-windows
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3048 (delq (assq (selected-window) edebug-outside-windows)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3049 edebug-outside-windows))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3050 (setq edebug-save-windows
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3051 (delq (selected-window) edebug-save-windows)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3052 (t ; Save a new window.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3053 (edebug-changing-windows
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3054 (setq edebug-save-windows (cons window edebug-save-windows)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3055
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3056 (message "Window saving is %s for %s."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3057 (if (memq (selected-window) edebug-save-windows)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3058 "on" "off")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3059 (selected-window)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3060
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3061 (defun edebug-toggle-save-windows (arg)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3062 "Toggle the saving and restoring of windows.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3063 With prefix, toggle for just the selected window.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3064 Otherwise, toggle for all windows."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3065 (interactive "P")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3066 (if arg
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3067 (edebug-toggle-save-selected-window)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3068 (edebug-toggle-save-all-windows)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3069
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3070
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3071 (defun edebug-where ()
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3072 "Show the debug windows and where we stopped in the program."
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3073 (interactive)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3074 (if (not edebug-active)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3075 (error "Edebug is not active"))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3076 ;; Restore the window configuration to what it last was inside.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3077 ;; But it is not always set. - experiment
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3078 ;;(if edebug-inside-windows
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3079 ;; (edebug-set-windows edebug-inside-windows))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3080 (edebug-pop-to-buffer edebug-buffer)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3081 (goto-char edebug-point))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3082
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3083 (defun edebug-view-outside ()
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3084 "Change to the outside window configuration."
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3085 (interactive)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3086 (if (not edebug-active)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3087 (error "Edebug is not active"))
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
3088 (setq edebug-inside-windows
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3089 (edebug-current-windows edebug-save-windows))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3090 (edebug-set-windows edebug-outside-windows)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3091 (goto-char edebug-outside-point)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3092 (message "Window configuration outside of Edebug. Return with %s"
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3093 (substitute-command-keys "\\<global-map>\\[edebug-where]")))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3094
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3095
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3096 (defun edebug-bounce-point (arg)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3097 "Bounce the point in the outside current buffer.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3098 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
3099 The default is one second."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3100 (interactive "p")
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3101 (if (not edebug-active)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3102 (error "Edebug is not active"))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3103 (save-excursion
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3104 ;; If the buffer's currently displayed, avoid set-window-configuration.
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3105 (save-window-excursion
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3106 (edebug-pop-to-buffer edebug-outside-buffer)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3107 (goto-char edebug-outside-point)
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
3108 (message "Current buffer: %s Point: %s Mark: %s"
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
3109 (current-buffer) (point)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3110 (if (marker-buffer (edebug-mark-marker))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3111 (marker-position (edebug-mark-marker)) "<not set>"))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3112 (edebug-sit-for arg)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3113 (edebug-pop-to-buffer edebug-buffer (car edebug-window-data)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3114
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3115
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
3116 ;; 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
3117 ;; 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
3118
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3119 '(defvar edebug-display-buffer-list nil
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3120 "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
3121
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3122 '(defun edebug-display-buffer (buffer)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3123 "Toggle display of a buffer inside of edebug."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3124 (interactive "bBuffer: ")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3125 (let ((already-displaying (memq buffer edebug-display-buffer-list)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3126 (setq edebug-display-buffer-list
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3127 (if already-displaying
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3128 (delq buffer edebug-display-buffer-list)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3129 (cons buffer edebug-display-buffer-list)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3130 (message "Displaying %s %s" buffer
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3131 (if already-displaying "off" "on"))))
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 ;;; Breakpoint related functions
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3134
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3135 (defun edebug-find-stop-point ()
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3136 ;; Return (function . index) of the nearest edebug stop point.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3137 (let* ((edebug-def-name (edebug-form-data-symbol))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3138 (edebug-data
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3139 (let ((data (get edebug-def-name 'edebug)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3140 (if (or (null data) (markerp data))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3141 (error "%s is not instrumented for Edebug" edebug-def-name))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3142 data)) ; we could do it automatically, if data is a marker.
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3143 ;; pull out parts of edebug-data.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3144 (edebug-def-mark (car edebug-data))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3145 ;; (edebug-breakpoints (car (cdr edebug-data)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3146
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3147 (offset-vector (nth 2 edebug-data))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3148 (offset (- (save-excursion
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3149 (if (looking-at "[ \t]")
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3150 ;; skip backwards until non-whitespace, or bol
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3151 (skip-chars-backward " \t"))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3152 (point))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3153 edebug-def-mark))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3154 len i)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3155 ;; the offsets are in order so we can do a linear search
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3156 (setq len (length offset-vector))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3157 (setq i 0)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3158 (while (and (< i len) (> offset (aref offset-vector i)))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3159 (setq i (1+ i)))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3160 (if (and (< i len)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3161 (<= offset (aref offset-vector i)))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3162 ;; return the relevant info
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3163 (cons edebug-def-name i)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3164 (message "Point is not on an expression in %s."
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3165 edebug-def-name)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3166 )))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3167
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3168
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3169 (defun edebug-next-breakpoint ()
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3170 "Move point to the next breakpoint, or first if none past point."
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3171 (interactive)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3172 (let ((edebug-stop-point (edebug-find-stop-point)))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3173 (if edebug-stop-point
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3174 (let* ((edebug-def-name (car edebug-stop-point))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3175 (index (cdr edebug-stop-point))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3176 (edebug-data (get edebug-def-name 'edebug))
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
3177
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3178 ;; pull out parts of edebug-data
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3179 (edebug-def-mark (car edebug-data))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3180 (edebug-breakpoints (car (cdr edebug-data)))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3181 (offset-vector (nth 2 edebug-data))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3182 breakpoint)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3183 (if (not edebug-breakpoints)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3184 (message "No breakpoints in this function.")
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3185 (let ((breaks edebug-breakpoints))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3186 (while (and breaks
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3187 (<= (car (car breaks)) index))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3188 (setq breaks (cdr breaks)))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3189 (setq breakpoint
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3190 (if breaks
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3191 (car breaks)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3192 ;; goto the first breakpoint
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3193 (car edebug-breakpoints)))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3194 (goto-char (+ edebug-def-mark
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3195 (aref offset-vector (car breakpoint))))
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
3196
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
3197 (message "%s"
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
3198 (concat (if (nth 2 breakpoint)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3199 "Temporary " "")
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3200 (if (car (cdr breakpoint))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3201 (format "Condition: %s"
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3202 (edebug-safe-prin1-to-string
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3203 (car (cdr breakpoint))))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3204 "")))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3205 ))))))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3206
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3207
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3208 (defun edebug-modify-breakpoint (flag &optional condition temporary)
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3209 "Modify the breakpoint for the form at point or after it.
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3210 Set it if FLAG is non-nil, clear it otherwise. Then move to that point.
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3211 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
3212 the breakpoint. "
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3213 (let ((edebug-stop-point (edebug-find-stop-point)))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3214 (if edebug-stop-point
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3215 (let* ((edebug-def-name (car edebug-stop-point))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3216 (index (cdr edebug-stop-point))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3217 (edebug-data (get edebug-def-name 'edebug))
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
3218
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3219 ;; pull out parts of edebug-data
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3220 (edebug-def-mark (car edebug-data))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3221 (edebug-breakpoints (car (cdr edebug-data)))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3222 (offset-vector (nth 2 edebug-data))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3223 present)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3224 ;; delete it either way
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3225 (setq present (assq index edebug-breakpoints))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3226 (setq edebug-breakpoints (delq present edebug-breakpoints))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3227 (if flag
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3228 (progn
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3229 ;; add it to the list and resort
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3230 (setq edebug-breakpoints
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3231 (edebug-sort-alist
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3232 (cons
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3233 (list index condition temporary)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3234 edebug-breakpoints) '<))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3235 (if condition
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3236 (message "Breakpoint set in %s with condition: %s"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3237 edebug-def-name condition)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3238 (message "Breakpoint set in %s" edebug-def-name)))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3239 (if present
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3240 (message "Breakpoint unset in %s" edebug-def-name)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3241 (message "No breakpoint here")))
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
3242
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3243 (setcar (cdr edebug-data) edebug-breakpoints)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3244 (goto-char (+ edebug-def-mark (aref offset-vector index)))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3245 ))))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3246
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3247 (defun edebug-set-breakpoint (arg)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3248 "Set the breakpoint of nearest sexp.
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3249 With prefix argument, make it a temporary breakpoint."
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3250 (interactive "P")
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3251 (edebug-modify-breakpoint t nil arg))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3252
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3253 (defun edebug-unset-breakpoint ()
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3254 "Clear the breakpoint of nearest sexp."
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3255 (interactive)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3256 (edebug-modify-breakpoint nil))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3257
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3258
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3259 (defun edebug-set-global-break-condition (expression)
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3260 (interactive
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3261 (list
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3262 (let ((initial (and edebug-global-break-condition
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3263 (format "%s" edebug-global-break-condition))))
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3264 (read-from-minibuffer
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3265 "Global Condition: " initial read-expression-map t
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3266 (if (equal (car read-expression-history) initial)
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3267 '(read-expression-history . 1)
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3268 'read-expression-history)))))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3269 (setq edebug-global-break-condition expression))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3270
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3271
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3272 ;;; Mode switching functions
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3273
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3274 (defun edebug-set-mode (mode shortmsg msg)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3275 ;; Set the edebug mode to MODE.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3276 ;; Display SHORTMSG, or MSG if not within edebug.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3277 (if (eq (1+ edebug-recursion-depth) (recursion-depth))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3278 (progn
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3279 (setq edebug-execution-mode mode)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3280 (message shortmsg)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3281 ;; Continue execution
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3282 (exit-recursive-edit))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3283 ;; This is not terribly useful!!
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3284 (setq edebug-next-execution-mode mode)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3285 (message msg)))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3286
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3287
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3288 (defalias 'edebug-step-through-mode 'edebug-step-mode)
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 (defun edebug-step-mode ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3291 "Proceed to next stop point."
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3292 (interactive)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3293 (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
3294
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3295 (defun edebug-next-mode ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3296 "Proceed to next `after' stop point."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3297 (interactive)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3298 (edebug-set-mode 'next "" "Edebug will stop after next eval."))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3299
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3300 (defun edebug-go-mode (arg)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3301 "Go, evaluating until break.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3302 With prefix ARG, set temporary break at current point and go."
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3303 (interactive "P")
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3304 (if arg
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3305 (edebug-set-breakpoint t))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3306 (edebug-set-mode 'go "Go..." "Edebug will go until break."))
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-Go-nonstop-mode ()
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3309 "Go, evaluating without debugging."
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3310 (interactive)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3311 (edebug-set-mode 'Go-nonstop "Go-Nonstop..."
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3312 "Edebug will not stop at breaks."))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3313
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3314
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3315 (defun edebug-trace-mode ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3316 "Begin trace mode."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3317 (interactive)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3318 (edebug-set-mode 'trace "Tracing..." "Edebug will trace with pause."))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3319
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3320 (defun edebug-Trace-fast-mode ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3321 "Trace with no wait at each step."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3322 (interactive)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3323 (edebug-set-mode 'Trace-fast
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3324 "Trace fast..." "Edebug will trace without pause."))
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-continue-mode ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3327 "Begin continue mode."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3328 (interactive)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3329 (edebug-set-mode 'continue "Continue..."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3330 "Edebug will pause at breakpoints."))
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 (defun edebug-Continue-fast-mode ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3333 "Trace with no wait at each step."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3334 (interactive)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3335 (edebug-set-mode 'Continue-fast "Continue fast..."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3336 "Edebug will stop and go at breakpoints."))
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 ;; ------------------------------------------------------------
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3339 ;; The following use the mode changing commands and breakpoints.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3340
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3341
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3342 (defun edebug-goto-here ()
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3343 "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
3344 (interactive)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3345 (edebug-go-mode t))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3346
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3347
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3348 (defun edebug-stop ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3349 "Stop execution and do not continue.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3350 Useful for exiting from trace or continue loop."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3351 (interactive)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3352 (message "Stop"))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3353
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3354
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3355 '(defun edebug-forward ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3356 "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
3357 (interactive)
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
3358 (edebug-set-mode
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3359 'forward "Forward"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3360 "Edebug will stop after exiting the next expression."))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3361
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3362
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3363 (defun edebug-forward-sexp (arg)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3364 "Proceed from the current point to the end of the ARGth sexp ahead.
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3365 If there are not ARG sexps ahead, then do edebug-step-out."
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3366 (interactive "p")
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3367 (condition-case nil
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3368 (let ((parse-sexp-ignore-comments t))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3369 ;; Call forward-sexp repeatedly until done or failure.
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3370 (forward-sexp arg)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3371 (edebug-go-mode t))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3372 (error
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3373 (edebug-step-out)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3374 )))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3375
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3376 (defun edebug-step-out ()
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3377 "Proceed from the current point to the end of the containing sexp.
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3378 If there is no containing sexp that is not the top level defun,
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3379 go to the end of the last sexp, or if that is the same point, then step."
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3380 (interactive)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3381 (condition-case nil
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3382 (let ((parse-sexp-ignore-comments t))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3383 (up-list 1)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3384 (save-excursion
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3385 ;; Is there still a containing expression?
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3386 (up-list 1))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3387 (edebug-go-mode t))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3388 (error
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3389 ;; At top level - 1, so first check if there are more sexps at this level.
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3390 (let ((start-point (point)))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3391 ;; (up-list 1)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3392 (down-list -1)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3393 (if (= (point) start-point)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3394 (edebug-step-mode) ; No more at this level, so step.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3395 (edebug-go-mode t)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3396 )))))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3397
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3398 (defun edebug-instrument-function (func)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3399 ;; Func should be a function symbol.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3400 ;; 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
3401 (let ((func-marker (get func 'edebug)))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3402 (cond
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3403 ((markerp func-marker)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3404 ;; It is uninstrumented, so instrument it.
40475
3bf0c64f4520 (delay-mode-hooks): Add edebug-spec.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40464
diff changeset
3405 (with-current-buffer (marker-buffer func-marker)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3406 (goto-char func-marker)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3407 (edebug-eval-top-level-form)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3408 func))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3409 ((consp func-marker)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3410 (message "%s is already instrumented." func)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3411 func)
40475
3bf0c64f4520 (delay-mode-hooks): Add edebug-spec.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40464
diff changeset
3412 (t
3bf0c64f4520 (delay-mode-hooks): Add edebug-spec.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40464
diff changeset
3413 (let ((loc (find-function-noselect func)))
3bf0c64f4520 (delay-mode-hooks): Add edebug-spec.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40464
diff changeset
3414 (with-current-buffer (car loc)
3bf0c64f4520 (delay-mode-hooks): Add edebug-spec.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40464
diff changeset
3415 (goto-char (cdr loc))
3bf0c64f4520 (delay-mode-hooks): Add edebug-spec.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40464
diff changeset
3416 (edebug-eval-top-level-form)
3bf0c64f4520 (delay-mode-hooks): Add edebug-spec.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40464
diff changeset
3417 func))))))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3418
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3419 (defun edebug-instrument-callee ()
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
3420 "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
3421 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
3422 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
3423 function or macro is called, Edebug will be called there as well."
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3424 (interactive)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3425 (if (not (looking-at "\("))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3426 (error "You must be before a list form")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3427 (let ((func
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3428 (save-excursion
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3429 (down-list 1)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3430 (if (looking-at "\(")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3431 (edebug-form-data-name
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3432 (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
3433 (edebug-original-read (current-buffer))))))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3434 (edebug-instrument-function func))))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3435
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3436
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3437 (defun edebug-step-in ()
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
3438 "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
3439 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
3440 instrumented. Then it does `edebug-on-entry' and switches to `go' mode."
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3441 (interactive)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3442 (let ((func (edebug-instrument-callee)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3443 (if func
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3444 (progn
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3445 (edebug-on-entry func 'temp)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3446 (edebug-go-mode nil)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3447
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3448 (defun edebug-on-entry (function &optional flag)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3449 "Cause Edebug to stop when FUNCTION is called.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3450 With prefix argument, make this temporary so it is automatically
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3451 cancelled the first time the function is entered."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3452 (interactive "aEdebug on entry to: \nP")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3453 ;; Could store this in the edebug data instead.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3454 (put function 'edebug-on-entry (if flag 'temp t)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3455
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3456 (defun cancel-edebug-on-entry (function)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3457 (interactive "aEdebug on entry to: ")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3458 (put function 'edebug-on-entry nil))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3459
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
3460
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
3461 (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
3462 (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
3463 '(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
3464 ;; Also need edebug-cancel-debug-on-entry
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3465
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3466 '(defun edebug-debug-on-entry (function)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3467 "Request FUNCTION to invoke debugger each time it is called.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3468 If the user continues, FUNCTION's execution proceeds.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3469 Works by modifying the definition of FUNCTION,
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3470 which must be written in Lisp, not predefined.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3471 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
3472 Redefining FUNCTION also does that.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3473
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3474 This version is from Edebug. If the function is instrumented for
33758
8c1e62157545 (edebug-version)
Dave Love <fx@gnu.org>
parents: 33709
diff changeset
3475 Edebug, it calls `edebug-on-entry'."
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3476 (interactive "aDebug on entry (to function): ")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3477 (let ((func-data (get function 'edebug)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3478 (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
3479 (edebug-original-debug-on-entry function)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3480 (edebug-on-entry function))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3481
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3482
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3483 (defun edebug-top-level-nonstop ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3484 "Set mode to Go-nonstop, and exit to top-level.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3485 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
3486 (interactive)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3487 (setq edebug-execution-mode 'Go-nonstop)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3488 (top-level))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3489
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3490
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3491 ;;(defun edebug-exit-out ()
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3492 ;; "Go until the current function exits."
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3493 ;; (interactive)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3494 ;; (edebug-set-mode 'exiting "Exit..."))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3495
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3496
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3497 ;;; The following initial mode setting definitions are not used yet.
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3498
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3499 '(defconst edebug-initial-mode-alist
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3500 '((edebug-Continue-fast . Continue-fast)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3501 (edebug-Trace-fast . Trace-fast)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3502 (edebug-continue . continue)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3503 (edebug-trace . trace)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3504 (edebug-go . go)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3505 (edebug-step-through . step)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3506 (edebug-Go-nonstop . Go-nonstop)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3507 )
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3508 "Association list between commands and the modes they set.")
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3509
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3510
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3511 '(defun edebug-set-initial-mode ()
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3512 "Ask for the initial mode of the enclosing function.
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3513 The mode is requested via the key that would be used to set the mode in
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3514 edebug-mode."
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3515 (interactive)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3516 (let* ((this-function (edebug-which-function))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3517 (keymap (if (eq edebug-mode-map (current-local-map))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3518 edebug-mode-map))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3519 (old-mode (or (get this-function 'edebug-initial-mode)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3520 edebug-initial-mode))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3521 (key (read-key-sequence
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3522 (format
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3523 "Change initial edebug mode for %s from %s (%s) to (enter key): "
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3524 this-function
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3525 old-mode
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3526 (where-is-internal
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3527 (car (rassq old-mode edebug-initial-mode-alist))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3528 keymap 'firstonly
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3529 ))))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3530 (mode (cdr (assq (key-binding key) edebug-initial-mode-alist)))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3531 )
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3532 (if (and mode
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3533 (or (get this-function 'edebug-initial-mode)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3534 (not (eq mode edebug-initial-mode))))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3535 (progn
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3536 (put this-function 'edebug-initial-mode mode)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3537 (message "Initial mode for %s is now: %s"
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3538 this-function mode))
5126
30682388c4cf Delete periods from error messages.
Richard M. Stallman <rms@gnu.org>
parents: 5125
diff changeset
3539 (error "Key must map to one of the mode changing commands")
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3540 )))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3541
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3542 ;;; Evaluation of expressions
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3543
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3544 (def-edebug-spec edebug-outside-excursion t)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3545
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3546 (defmacro edebug-outside-excursion (&rest body)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3547 "Evaluate an expression list in the outside context.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3548 Return the result of the last expression."
26519
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3549 `(save-excursion ; of current-buffer
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3550 (if edebug-save-windows
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3551 (progn
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
3552 ;; After excursion, we will
26519
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3553 ;; restore to current window configuration.
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3554 (setq edebug-inside-windows
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3555 (edebug-current-windows edebug-save-windows))
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3556 ;; Restore outside windows.
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3557 (edebug-set-windows edebug-outside-windows)))
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3558
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3559 (set-buffer edebug-buffer) ; why?
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3560 ;; (use-local-map edebug-outside-map)
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3561 (set-match-data edebug-outside-match-data)
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3562 ;; Restore outside context.
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3563 (let (;; (edebug-inside-map (current-local-map)) ;; restore map??
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3564 (last-command-char edebug-outside-last-command-char)
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3565 (last-command-event edebug-outside-last-command-event)
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3566 (last-command edebug-outside-last-command)
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3567 (this-command edebug-outside-this-command)
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3568 (unread-command-char edebug-outside-unread-command-char)
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3569 (unread-command-events edebug-outside-unread-command-events)
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3570 (current-prefix-arg edebug-outside-current-prefix-arg)
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3571 (last-input-char edebug-outside-last-input-char)
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3572 (last-input-event edebug-outside-last-input-event)
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3573 (last-event-frame edebug-outside-last-event-frame)
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3574 (last-nonmenu-event edebug-outside-last-nonmenu-event)
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3575 (track-mouse edebug-outside-track-mouse)
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3576 (standard-output edebug-outside-standard-output)
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3577 (standard-input edebug-outside-standard-input)
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3578
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3579 (executing-kbd-macro edebug-outside-executing-macro)
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3580 (defining-kbd-macro edebug-outside-defining-kbd-macro)
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3581 ;; Get the values out of the saved statuses.
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3582 (pre-command-hook (cdr edebug-outside-pre-command-hook))
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3583 (post-command-hook (cdr edebug-outside-post-command-hook))
26519
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3584
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3585 ;; See edebug-display
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3586 (overlay-arrow-position edebug-outside-o-a-p)
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3587 (overlay-arrow-string edebug-outside-o-a-s)
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3588 (cursor-in-echo-area edebug-outside-c-i-e-a)
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3589 (default-cursor-in-non-selected-windows edebug-outside-d-c-i-n-s-w)
26519
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3590 )
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3591 (unwind-protect
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3592 (save-excursion ; of edebug-buffer
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3593 (set-buffer edebug-outside-buffer)
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3594 (goto-char edebug-outside-point)
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3595 (if (marker-buffer (edebug-mark-marker))
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3596 (set-marker (edebug-mark-marker) edebug-outside-mark))
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3597 ,@body)
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3598
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3599 ;; Back to edebug-buffer. Restore rest of inside context.
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3600 ;; (use-local-map edebug-inside-map)
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3601 (if edebug-save-windows
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3602 ;; Restore inside windows.
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3603 (edebug-set-windows edebug-inside-windows))
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3604
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3605 ;; Save values that may have been changed.
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
3606 (setq
26519
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3607 edebug-outside-last-command-char last-command-char
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3608 edebug-outside-last-command-event last-command-event
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3609 edebug-outside-last-command last-command
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3610 edebug-outside-this-command this-command
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3611 edebug-outside-unread-command-char unread-command-char
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3612 edebug-outside-unread-command-events unread-command-events
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3613 edebug-outside-current-prefix-arg current-prefix-arg
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3614 edebug-outside-last-input-char last-input-char
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3615 edebug-outside-last-input-event last-input-event
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3616 edebug-outside-last-event-frame last-event-frame
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3617 edebug-outside-last-nonmenu-event last-nonmenu-event
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3618 edebug-outside-track-mouse track-mouse
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3619 edebug-outside-standard-output standard-output
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3620 edebug-outside-standard-input standard-input
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3621
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3622 edebug-outside-executing-macro executing-kbd-macro
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3623 edebug-outside-defining-kbd-macro defining-kbd-macro
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3624
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3625 edebug-outside-o-a-p overlay-arrow-position
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3626 edebug-outside-o-a-s overlay-arrow-string
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3627 edebug-outside-c-i-e-a cursor-in-echo-area
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3628 edebug-outside-d-c-i-n-s-w default-cursor-in-non-selected-windows
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3629 )
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3630
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3631 ;; Restore the outside saved values; don't alter
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3632 ;; the outside binding loci.
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3633 (setcdr edebug-outside-pre-command-hook pre-command-hook)
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3634 (setcdr edebug-outside-post-command-hook post-command-hook)
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3635
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3636 )) ; let
26519
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3637 ))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3638
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3639 (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
3640
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3641 (defun edebug-eval (edebug-expr)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3642 ;; Are there cl lexical variables active?
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3643 (if cl-debug-env
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3644 (eval (cl-macroexpand-all edebug-expr cl-debug-env))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3645 (eval edebug-expr)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3646
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3647 (defun edebug-safe-eval (edebug-expr)
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
3648 ;; Evaluate EXPR safely.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3649 ;; 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
3650 (condition-case edebug-err
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3651 (edebug-eval edebug-expr)
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
3652 (error (edebug-format "%s: %s" ;; could
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3653 (get (car edebug-err) 'error-message)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3654 (car (cdr edebug-err))))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3655
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
3656 ;;; Printing
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
3657
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3658 ;; Replace printing functions.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3659
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3660 ;; obsolete names
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3661 (define-obsolete-function-alias 'edebug-install-custom-print-funcs
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3662 'edebug-install-custom-print "22.1")
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3663 (define-obsolete-function-alias 'edebug-reset-print-funcs
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3664 'edebug-uninstall-custom-print "22.1")
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3665 (define-obsolete-function-alias 'edebug-uninstall-custom-print-funcs
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3666 'edebug-uninstall-custom-print "22.1")
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3667
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3668 (defun edebug-install-custom-print ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3669 "Replace print functions used by Edebug with custom versions."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3670 ;; Modifying the custom print functions, or changing print-length,
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3671 ;; 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
3672 ;; have immediate effect.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3673 (interactive)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3674 (require 'cust-print)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3675 (defalias 'edebug-prin1 'custom-prin1)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3676 (defalias 'edebug-print 'custom-print)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3677 (defalias 'edebug-prin1-to-string 'custom-prin1-to-string)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3678 (defalias 'edebug-format 'custom-format)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3679 (defalias 'edebug-message 'custom-message)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3680 "Installed")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3681
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3682 (eval-and-compile
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3683 (defun edebug-uninstall-custom-print ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3684 "Replace edebug custom print functions with internal versions."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3685 (interactive)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3686 (defalias 'edebug-prin1 'prin1)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3687 (defalias 'edebug-print 'print)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3688 (defalias 'edebug-prin1-to-string 'prin1-to-string)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3689 (defalias 'edebug-format 'format)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3690 (defalias 'edebug-message 'message)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3691 "Uninstalled")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3692
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3693 ;; Default print functions are the same as Emacs'.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3694 (edebug-uninstall-custom-print))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3695
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3696
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3697 (defun edebug-report-error (edebug-value)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3698 ;; Print an error message like command level does.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3699 ;; 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
3700 (message "%s: %s"
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3701 (or (get (car edebug-value) 'error-message)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3702 (format "peculiar error (%s)" (car edebug-value)))
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
3703 (mapconcat (function (lambda (edebug-arg)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3704 ;; continuing after an error may
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3705 ;; complain about edebug-arg. why??
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3706 (prin1-to-string edebug-arg)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3707 (cdr edebug-value) ", ")))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3708
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3709 ;; Define here in case they are not already defined.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3710 (defvar print-level nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3711 (defvar print-circle nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3712 (defvar print-readably) ;; defined by lemacs
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
3713 ;; 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
3714 ;; 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
3715
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3716 (defun edebug-safe-prin1-to-string (value)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3717 (let ((print-escape-newlines t)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3718 (print-length (or edebug-print-length print-length))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3719 (print-level (or edebug-print-level print-level))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3720 (print-circle (or edebug-print-circle print-circle))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3721 (print-readably nil)) ;; lemacs uses this.
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3722 (condition-case nil
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3723 (edebug-prin1-to-string value)
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3724 (error "#Apparently circular structure#"))))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3725
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3726 (defun edebug-compute-previous-result (edebug-previous-value)
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3727 (if edebug-unwrap-results
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3728 (setq edebug-previous-value
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3729 (edebug-unwrap* edebug-previous-value)))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3730 (setq edebug-previous-result
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3731 (concat "Result: "
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3732 (edebug-safe-prin1-to-string edebug-previous-value)
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3733 (eval-expression-print-format edebug-previous-value))))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3734
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3735 (defun edebug-previous-result ()
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3736 "Print the previous result."
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3737 (interactive)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3738 (message "%s" edebug-previous-result))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3739
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
3740 ;;; Read, Eval and Print
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3741
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3742 (defun edebug-eval-expression (edebug-expr)
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
3743 "Evaluate an expression in the outside environment.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3744 If interactive, prompt for the expression.
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3745 Print result in minibuffer."
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
3746 (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
3747 "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
3748 'read-expression-history)))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3749 (princ
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3750 (edebug-outside-excursion
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3751 (setq values (cons (edebug-eval edebug-expr) values))
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3752 (concat (edebug-safe-prin1-to-string (car values))
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3753 (eval-expression-print-format (car values))))))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3754
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3755 (defun edebug-eval-last-sexp ()
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3756 "Evaluate sexp before point in the outside environment.
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3757 Print value in minibuffer."
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3758 (interactive)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3759 (edebug-eval-expression (edebug-last-sexp)))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3760
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3761 (defun edebug-eval-print-last-sexp ()
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3762 "Evaluate sexp before point in outside environment; insert value.
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3763 This prints the value into current buffer."
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3764 (interactive)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3765 (let* ((edebug-form (edebug-last-sexp))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3766 (edebug-result-string
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
3767 (edebug-outside-excursion
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3768 (edebug-safe-prin1-to-string (edebug-safe-eval edebug-form))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3769 (standard-output (current-buffer)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3770 (princ "\n")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3771 ;; princ the string to get rid of quotes.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3772 (princ edebug-result-string)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3773 (princ "\n")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3774 ))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3775
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
3776 ;;; Edebug Minor Mode
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3777
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3778 (defvar gud-inhibit-global-bindings
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3779 "*Non-nil means don't do global rebindings of C-x C-a subcommands.")
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3780
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3781 ;; Global GUD bindings for all emacs-lisp-mode buffers.
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3782 (unless gud-inhibit-global-bindings
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3783 (define-key emacs-lisp-mode-map "\C-x\C-a\C-s" 'edebug-step-mode)
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3784 (define-key emacs-lisp-mode-map "\C-x\C-a\C-n" 'edebug-next-mode)
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3785 (define-key emacs-lisp-mode-map "\C-x\C-a\C-c" 'edebug-go-mode)
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3786 (define-key emacs-lisp-mode-map "\C-x\C-a\C-l" 'edebug-where))
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3787
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3788 (defvar edebug-mode-map
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3789 (let ((map (copy-keymap emacs-lisp-mode-map)))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3790 ;; control
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3791 (define-key map " " 'edebug-step-mode)
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3792 (define-key map "n" 'edebug-next-mode)
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3793 (define-key map "g" 'edebug-go-mode)
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3794 (define-key map "G" 'edebug-Go-nonstop-mode)
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3795 (define-key map "t" 'edebug-trace-mode)
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3796 (define-key map "T" 'edebug-Trace-fast-mode)
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3797 (define-key map "c" 'edebug-continue-mode)
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3798 (define-key map "C" 'edebug-Continue-fast-mode)
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3799
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3800 ;;(define-key map "f" 'edebug-forward) not implemented
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3801 (define-key map "f" 'edebug-forward-sexp)
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3802 (define-key map "h" 'edebug-goto-here)
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3803
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3804 (define-key map "I" 'edebug-instrument-callee)
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3805 (define-key map "i" 'edebug-step-in)
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3806 (define-key map "o" 'edebug-step-out)
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
3807
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3808 ;; quitting and stopping
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3809 (define-key map "q" 'top-level)
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3810 (define-key map "Q" 'edebug-top-level-nonstop)
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3811 (define-key map "a" 'abort-recursive-edit)
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3812 (define-key map "S" 'edebug-stop)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3813
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3814 ;; breakpoints
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3815 (define-key map "b" 'edebug-set-breakpoint)
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3816 (define-key map "u" 'edebug-unset-breakpoint)
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3817 (define-key map "B" 'edebug-next-breakpoint)
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3818 (define-key map "x" 'edebug-set-conditional-breakpoint)
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3819 (define-key map "X" 'edebug-set-global-break-condition)
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
3820
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3821 ;; evaluation
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3822 (define-key map "r" 'edebug-previous-result)
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3823 (define-key map "e" 'edebug-eval-expression)
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3824 (define-key map "\C-x\C-e" 'edebug-eval-last-sexp)
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3825 (define-key map "E" 'edebug-visit-eval-list)
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
3826
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3827 ;; views
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3828 (define-key map "w" 'edebug-where)
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3829 (define-key map "v" 'edebug-view-outside) ;; maybe obsolete??
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3830 (define-key map "p" 'edebug-bounce-point)
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3831 (define-key map "P" 'edebug-view-outside) ;; same as v
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3832 (define-key map "W" 'edebug-toggle-save-windows)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3833
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3834 ;; misc
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3835 (define-key map "?" 'edebug-help)
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3836 (define-key map "d" 'edebug-backtrace)
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3837
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3838 (define-key map "-" 'negative-argument)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3839
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3840 ;; statistics
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3841 (define-key map "=" 'edebug-temp-display-freq-count)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3842
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3843 ;; GUD bindings
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3844 (define-key map "\C-c\C-s" 'edebug-step-mode)
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3845 (define-key map "\C-c\C-n" 'edebug-next-mode)
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3846 (define-key map "\C-c\C-c" 'edebug-go-mode)
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3847
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3848 (define-key map "\C-x " 'edebug-set-breakpoint)
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3849 (define-key map "\C-c\C-d" 'edebug-unset-breakpoint)
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3850 (define-key map "\C-c\C-t"
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3851 (lambda () (interactive) (edebug-set-breakpoint t)))
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3852 (define-key map "\C-c\C-l" 'edebug-where)
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3853 map))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3854
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3855 ;; Autoloading these global bindings doesn't make sense because
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3856 ;; 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
3857
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3858 (defvar global-edebug-prefix "\^XX"
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3859 "Prefix key for global edebug commands, available from any buffer.")
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3860
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3861 (defvar global-edebug-map
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3862 (let ((map (make-sparse-keymap)))
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3863
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3864 (define-key map " " 'edebug-step-mode)
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3865 (define-key map "g" 'edebug-go-mode)
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3866 (define-key map "G" 'edebug-Go-nonstop-mode)
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3867 (define-key map "t" 'edebug-trace-mode)
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3868 (define-key map "T" 'edebug-Trace-fast-mode)
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3869 (define-key map "c" 'edebug-continue-mode)
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3870 (define-key map "C" 'edebug-Continue-fast-mode)
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3871
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3872 ;; breakpoints
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3873 (define-key map "b" 'edebug-set-breakpoint)
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3874 (define-key map "u" 'edebug-unset-breakpoint)
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3875 (define-key map "x" 'edebug-set-conditional-breakpoint)
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3876 (define-key map "X" 'edebug-set-global-break-condition)
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3877
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3878 ;; views
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3879 (define-key map "w" 'edebug-where)
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3880 (define-key map "W" 'edebug-toggle-save-windows)
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3881
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3882 ;; quitting
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3883 (define-key map "q" 'top-level)
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3884 (define-key map "Q" 'edebug-top-level-nonstop)
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3885 (define-key map "a" 'abort-recursive-edit)
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3886
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3887 ;; statistics
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3888 (define-key map "=" 'edebug-display-freq-count)
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3889 map)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3890 "Global map of edebug commands, available from any buffer.")
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3891
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3892 (global-unset-key global-edebug-prefix)
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3893 (global-set-key global-edebug-prefix global-edebug-map)
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3894
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3895
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3896 (defun edebug-help ()
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3897 (interactive)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3898 (describe-function 'edebug-mode))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3899
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3900 (defun edebug-mode ()
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3901 "Mode for Emacs Lisp buffers while in Edebug.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3902
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3903 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
3904 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
3905 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
3906 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
3907
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
3908 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
3909
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3910 The edebug buffer commands:
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3911 \\{edebug-mode-map}
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3912
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3913 Global commands prefixed by `global-edebug-prefix':
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3914 \\{global-edebug-map}
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3915
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3916 Options:
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3917 edebug-setup-hook
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3918 edebug-all-defs
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3919 edebug-all-forms
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3920 edebug-save-windows
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3921 edebug-save-displayed-buffer-points
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3922 edebug-initial-mode
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3923 edebug-trace
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3924 edebug-test-coverage
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3925 edebug-continue-kbd-macro
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3926 edebug-print-length
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3927 edebug-print-level
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3928 edebug-print-circle
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3929 edebug-on-error
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3930 edebug-on-quit
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3931 edebug-on-signal
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3932 edebug-unwrap-results
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3933 edebug-global-break-condition
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3934 "
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3935 (use-local-map edebug-mode-map))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3936
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
3937 ;;; edebug eval list mode
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
3938
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3939 ;; A list of expressions and their evaluations is displayed in *edebug*.
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3940
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3941 (defun edebug-eval-result-list ()
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3942 "Return a list of evaluations of edebug-eval-list"
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3943 ;; 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
3944 ;; 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
3945 (let ((edebug-execution-mode 'Go-nonstop)
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
3946 (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
3947 (mapcar 'edebug-safe-eval edebug-eval-list)))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3948
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3949 (defun edebug-eval-display-list (edebug-eval-result-list)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3950 ;; Assumes edebug-eval-buffer exists.
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3951 (let ((edebug-eval-list-temp edebug-eval-list)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3952 (standard-output edebug-eval-buffer)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3953 (edebug-comment-line
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3954 (format ";%s\n" (make-string (- (window-width) 2) ?-))))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3955 (set-buffer edebug-eval-buffer)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3956 (erase-buffer)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3957 (while edebug-eval-list-temp
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3958 (prin1 (car edebug-eval-list-temp)) (terpri)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3959 (prin1 (car edebug-eval-result-list)) (terpri)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3960 (princ edebug-comment-line)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3961 (setq edebug-eval-list-temp (cdr edebug-eval-list-temp))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3962 (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
3963 (edebug-pop-to-buffer edebug-eval-buffer)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3964 ))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3965
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3966 (defun edebug-create-eval-buffer ()
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3967 (if (not (and edebug-eval-buffer (buffer-name edebug-eval-buffer)))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3968 (progn
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3969 (set-buffer (setq edebug-eval-buffer (get-buffer-create "*edebug*")))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3970 (edebug-eval-mode))))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3971
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3972 ;; Should generalize this to be callable outside of edebug
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3973 ;; with calls in user functions, e.g. (edebug-eval-display)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3974
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3975 (defun edebug-eval-display (edebug-eval-result-list)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3976 "Display expressions and evaluations in EVAL-LIST.
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3977 It modifies the context by popping up the eval display."
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3978 (if edebug-eval-result-list
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3979 (progn
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3980 (edebug-create-eval-buffer)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3981 (edebug-eval-display-list edebug-eval-result-list)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3982 )))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3983
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3984 (defun edebug-eval-redisplay ()
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3985 "Redisplay eval list in outside environment.
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3986 May only be called from within edebug-recursive-edit."
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3987 (edebug-create-eval-buffer)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3988 (edebug-outside-excursion
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3989 (edebug-eval-display-list (edebug-eval-result-list))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3990 ))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3991
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3992 (defun edebug-visit-eval-list ()
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3993 (interactive)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3994 (edebug-eval-redisplay)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3995 (edebug-pop-to-buffer edebug-eval-buffer))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3996
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3997
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3998 (defun edebug-update-eval-list ()
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3999 "Replace the evaluation list with the sexps now in the eval buffer."
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4000 (interactive)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4001 (let ((starting-point (point))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4002 new-list)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4003 (goto-char (point-min))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4004 ;; get the first expression
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4005 (edebug-skip-whitespace)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4006 (if (not (eobp))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4007 (progn
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4008 (forward-sexp 1)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4009 (setq new-list (cons (edebug-last-sexp) new-list))))
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
4010
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4011 (while (re-search-forward "^;" nil t)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4012 (forward-line 1)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4013 (skip-chars-forward " \t\n\r")
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4014 (if (and (/= ?\; (following-char))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4015 (not (eobp)))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4016 (progn
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4017 (forward-sexp 1)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4018 (setq new-list (cons (edebug-last-sexp) new-list)))))
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
4019
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4020 (setq edebug-eval-list (nreverse new-list))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4021 (edebug-eval-redisplay)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4022 (goto-char starting-point)))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4023
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4024
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4025 (defun edebug-delete-eval-item ()
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4026 "Delete the item under point and redisplay."
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4027 ;; could add arg to do repeatedly
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4028 (interactive)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4029 (if (re-search-backward "^;" nil 'nofail)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4030 (forward-line 1))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4031 (delete-region
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4032 (point) (progn (re-search-forward "^;" nil 'nofail)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4033 (beginning-of-line)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4034 (point)))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4035 (edebug-update-eval-list))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4036
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4037
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4038
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4039 (defvar edebug-eval-mode-map nil
20078
0fc1437e7427 (edebug-eval-mode): Nicer mode-name value.
Karl Heuer <kwzh@gnu.org>
parents: 19930
diff changeset
4040 "Keymap for Edebug Eval mode. Superset of Lisp Interaction mode.")
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4041
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
4042 (unless edebug-eval-mode-map
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
4043 (setq edebug-eval-mode-map (make-sparse-keymap))
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
4044 (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
4045
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4046 (define-key edebug-eval-mode-map "\C-c\C-w" 'edebug-where)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4047 (define-key edebug-eval-mode-map "\C-c\C-d" 'edebug-delete-eval-item)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4048 (define-key edebug-eval-mode-map "\C-c\C-u" 'edebug-update-eval-list)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4049 (define-key edebug-eval-mode-map "\C-x\C-e" 'edebug-eval-last-sexp)
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
4050 (define-key edebug-eval-mode-map "\C-j" 'edebug-eval-print-last-sexp))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4051
17650
dbcf0b5d5265 (edebug-eval-mode): Add a mode-class property.
Richard M. Stallman <rms@gnu.org>
parents: 17458
diff changeset
4052 (put 'edebug-eval-mode 'mode-class 'special)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4053
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
4054 (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
4055 "Mode for evaluation list buffer while in Edebug.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4056
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4057 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
4058 global key bindings to several Edebug specific commands. E.g.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4059 `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
4060 buffer and \\<global-map>\\[edebug-step-mode] in any buffer.
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4061
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4062 Eval list buffer commands:
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4063 \\{edebug-eval-mode-map}
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4064
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
4065 Global commands prefixed by `global-edebug-prefix':
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
4066 \\{global-edebug-map}")
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4067
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
4068 ;;; Interface with standard debugger.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4069
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4070 ;; (setq debugger 'edebug) ; to use the edebug debugger
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4071 ;; (setq debugger 'debug) ; use the standard debugger
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4072
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4073 ;; 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
4074 ;; 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
4075 ;; edebug is not dependent on this, yet.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4076
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4077 (defun edebug (&optional edebug-arg-mode &rest debugger-args)
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
4078 "Replacement for debug.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4079 If we are running an edebugged function,
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4080 show where we last were. Otherwise call debug normally."
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4081 ;; (message "entered: %s depth: %s edebug-recursion-depth: %s"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4082 ;; edebug-entered (recursion-depth) edebug-recursion-depth) (sit-for 1)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4083 (if (and edebug-entered ; anything active?
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4084 (eq (recursion-depth) edebug-recursion-depth))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4085 (let (;; Where were we before the error occurred?
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4086 (edebug-offset-index (car edebug-offset-indices))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4087 ;; Bind variables required by edebug-display
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4088 (edebug-value (car debugger-args))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4089 edebug-breakpoints
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4090 edebug-break-data
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4091 edebug-break-condition
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4092 edebug-global-break
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4093 (edebug-break (null edebug-arg-mode)) ;; if called explicitly
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4094 )
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4095 (edebug-display)
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
4096 (if (eq edebug-arg-mode 'error)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4097 nil
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4098 edebug-value))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4099
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4100 ;; Otherwise call debug normally.
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4101 ;; Still need to remove extraneous edebug calls from stack.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4102 (apply 'debug edebug-arg-mode debugger-args)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4103 ))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4104
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4105
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4106 (defun edebug-backtrace ()
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4107 "Display a non-working backtrace. Better than nothing..."
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4108 (interactive)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4109 (if (or (not edebug-backtrace-buffer)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4110 (null (buffer-name edebug-backtrace-buffer)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4111 (setq edebug-backtrace-buffer
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4112 (generate-new-buffer "*Backtrace*"))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4113 ;; else, could just display edebug-backtrace-buffer
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4114 )
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4115 (with-output-to-temp-buffer (buffer-name edebug-backtrace-buffer)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4116 (setq edebug-backtrace-buffer standard-output)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4117 (let ((print-escape-newlines t)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4118 (print-length 50)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4119 last-ok-point)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4120 (backtrace)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4121
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
4122 ;; Clean up the backtrace.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4123 ;; Not quite right for current edebug scheme.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4124 (set-buffer edebug-backtrace-buffer)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4125 (setq truncate-lines t)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4126 (goto-char (point-min))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4127 (setq last-ok-point (point))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4128 (if t (progn
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4129
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4130 ;; Delete interspersed edebug internals.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4131 (while (re-search-forward "^ \(?edebug" nil t)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4132 (beginning-of-line)
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
4133 (cond
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4134 ((looking-at "^ \(edebug-after")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4135 ;; Previous lines may contain code, so just delete this line
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4136 (setq last-ok-point (point))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4137 (forward-line 1)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4138 (delete-region last-ok-point (point)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4139
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4140 ((looking-at "^ edebug")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4141 (forward-line 1)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4142 (delete-region last-ok-point (point))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4143 )))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4144 )))))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4145
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4146
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
4147 ;;; Trace display
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4148
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4149 (defun edebug-trace-display (buf-name fmt &rest args)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4150 "In buffer BUF-NAME, display FMT and ARGS at the end and make it visible.
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4151 The buffer is created if it does not exist.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4152 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
4153 ;; e.g.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4154 ;; (edebug-trace-display "*trace-point*"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4155 ;; "saving: point = %s window-start = %s"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4156 ;; (point) (window-start))
15782
096142df0b36 (edebug-trace-display): Save and restore current buffer.
Richard M. Stallman <rms@gnu.org>
parents: 15302
diff changeset
4157 (let* ((oldbuf (current-buffer))
096142df0b36 (edebug-trace-display): Save and restore current buffer.
Richard M. Stallman <rms@gnu.org>
parents: 15302
diff changeset
4158 (selected-window (selected-window))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4159 (buffer (get-buffer-create buf-name))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4160 buf-window)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4161 ;; (message "before pop-to-buffer") (sit-for 1)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4162 (edebug-pop-to-buffer buffer)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4163 (setq truncate-lines t)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4164 (setq buf-window (selected-window))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4165 (goto-char (point-max))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4166 (insert (apply 'edebug-format fmt args) "\n")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4167 ;; Make it visible.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4168 (vertical-motion (- 1 (window-height)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4169 (set-window-start buf-window (point))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4170 (goto-char (point-max))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4171 ;; (set-window-point buf-window (point))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4172 ;; (edebug-sit-for 0)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4173 (bury-buffer buffer)
15782
096142df0b36 (edebug-trace-display): Save and restore current buffer.
Richard M. Stallman <rms@gnu.org>
parents: 15302
diff changeset
4174 (select-window selected-window)
096142df0b36 (edebug-trace-display): Save and restore current buffer.
Richard M. Stallman <rms@gnu.org>
parents: 15302
diff changeset
4175 (set-buffer oldbuf))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4176 buf-name)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4177
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4178
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4179 (defun edebug-trace (fmt &rest args)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4180 "Convenience call to edebug-trace-display using edebug-trace-buffer"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4181 (apply 'edebug-trace-display edebug-trace-buffer fmt args))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4182
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4183
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
4184 ;;; Frequency count and coverage
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4185
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4186 (defun edebug-display-freq-count ()
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
4187 "Display the frequency count data for each line of the current definition.
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
4188 The frequency counts are inserted as comment lines after
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4189 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
4190
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4191 The counts are inserted starting under the `(' before an expression
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4192 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
4193 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
4194 the same line.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4195
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4196 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
4197 are `eq', the char `=' will be appended after the count
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4198 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
4199 expression only evaluated once.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4200
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4201 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
4202 reinstrument it."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4203 (interactive)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4204 (let* ((function (edebug-form-data-symbol))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4205 (counts (get function 'edebug-freq-count))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4206 (coverages (get function 'edebug-coverage))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4207 (data (get function 'edebug))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4208 (def-mark (car data)) ; mark at def start
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4209 (edebug-points (nth 2 data))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4210 (i (1- (length edebug-points)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4211 (last-index)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4212 (first-index)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4213 (start-of-line)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4214 (start-of-count-line)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4215 (last-count)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4216 )
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4217 (save-excursion
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4218 ;; Traverse in reverse order so offsets are correct.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4219 (while (<= 0 i)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4220 ;; Start at last expression in line.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4221 (goto-char (+ def-mark (aref edebug-points i)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4222 (beginning-of-line)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4223 (setq start-of-line (- (point) def-mark)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4224 last-index i)
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 ;; Find all indexes on same line.
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
4227 (while (and (<= 0 (setq i (1- i)))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4228 (<= start-of-line (aref edebug-points i))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4229 ;; Insert all the indices for this line.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4230 (forward-line 1)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4231 (setq start-of-count-line (point)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4232 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
4233 last-count -1) ; cause first count to always appear.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4234 (insert ";#")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4235 ;; i == first-index still
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4236 (while (<= (setq i (1+ i)) last-index)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4237 (let ((count (aref counts i))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4238 (coverage (aref coverages i))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4239 (col (save-excursion
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4240 (goto-char (+ (aref edebug-points i) def-mark))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4241 (- (current-column)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4242 (if (= ?\( (following-char)) 0 1)))))
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
4243 (insert (make-string
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
4244 (max 0 (- col (- (point) start-of-count-line))) ?\s)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4245 (if (and (< 0 count)
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
4246 (not (memq coverage
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4247 '(unknown ok-coverage))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4248 "=" "")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4249 (if (= count last-count) "" (int-to-string count))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4250 " ")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4251 (setq last-count count)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4252 (insert "\n")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4253 (setq i first-index)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4254
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4255 (defun edebug-temp-display-freq-count ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4256 "Temporarily display the frequency count data for the current definition.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4257 It is removed when you hit any char."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4258 ;; 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
4259 (interactive)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4260 (let ((buffer-read-only nil))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4261 (undo-boundary)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4262 (edebug-display-freq-count)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4263 (setq unread-command-char (read-char))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4264 (undo)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4265
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4266
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
4267 ;;; Menus
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4268
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4269 (defun edebug-toggle (variable)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4270 (set variable (not (eval variable)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4271 (message "%s: %s" variable (eval variable)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4272
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4273 ;; 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
4274 ;; the easy-menu-define macro call is compiled correctly.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4275 (require 'easymenu)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4276
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4277 (defconst edebug-mode-menus
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4278 '("Edebug"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4279 ["Stop" edebug-stop t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4280 ["Step" edebug-step-mode t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4281 ["Next" edebug-next-mode t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4282 ["Trace" edebug-trace-mode t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4283 ["Trace Fast" edebug-Trace-fast-mode t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4284 ["Continue" edebug-continue-mode t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4285 ["Continue Fast" edebug-Continue-fast-mode t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4286 ["Go" edebug-go-mode t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4287 ["Go Nonstop" edebug-Go-nonstop-mode t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4288 "----"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4289 ["Help" edebug-help t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4290 ["Abort" abort-recursive-edit t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4291 ["Quit to Top Level" top-level t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4292 ["Quit Nonstop" edebug-top-level-nonstop t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4293 "----"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4294 ("Jumps"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4295 ["Forward Sexp" edebug-forward-sexp t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4296 ["Step In" edebug-step-in t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4297 ["Step Out" edebug-step-out t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4298 ["Goto Here" edebug-goto-here t])
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4299
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4300 ("Breaks"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4301 ["Set Breakpoint" edebug-set-breakpoint t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4302 ["Unset Breakpoint" edebug-unset-breakpoint t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4303 ["Set Conditional Breakpoint" edebug-set-conditional-breakpoint t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4304 ["Set Global Break Condition" edebug-set-global-break-condition t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4305 ["Show Next Breakpoint" edebug-next-breakpoint t])
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 ("Views"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4308 ["Where am I?" edebug-where t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4309 ["Bounce to Current Point" edebug-bounce-point t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4310 ["View Outside Windows" edebug-view-outside t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4311 ["Previous Result" edebug-previous-result t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4312 ["Show Backtrace" edebug-backtrace t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4313 ["Display Freq Count" edebug-display-freq-count t])
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4314
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4315 ("Eval"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4316 ["Expression" edebug-eval-expression t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4317 ["Last Sexp" edebug-eval-last-sexp t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4318 ["Visit Eval List" edebug-visit-eval-list t])
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4319
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4320 ("Options"
33758
8c1e62157545 (edebug-version)
Dave Love <fx@gnu.org>
parents: 33709
diff changeset
4321 ["Edebug All Defs" edebug-all-defs
8c1e62157545 (edebug-version)
Dave Love <fx@gnu.org>
parents: 33709
diff changeset
4322 :style toggle :selected edebug-all-defs]
8c1e62157545 (edebug-version)
Dave Love <fx@gnu.org>
parents: 33709
diff changeset
4323 ["Edebug All Forms" edebug-all-forms
8c1e62157545 (edebug-version)
Dave Love <fx@gnu.org>
parents: 33709
diff changeset
4324 :style toggle :selected edebug-all-forms]
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4325 "----"
33758
8c1e62157545 (edebug-version)
Dave Love <fx@gnu.org>
parents: 33709
diff changeset
4326 ["Tracing" (edebug-toggle 'edebug-trace)
8c1e62157545 (edebug-version)
Dave Love <fx@gnu.org>
parents: 33709
diff changeset
4327 :style toggle :selected edebug-trace]
8c1e62157545 (edebug-version)
Dave Love <fx@gnu.org>
parents: 33709
diff changeset
4328 ["Test Coverage" (edebug-toggle 'edebug-test-coverage)
8c1e62157545 (edebug-version)
Dave Love <fx@gnu.org>
parents: 33709
diff changeset
4329 :style toggle :selected edebug-test-coverage]
8c1e62157545 (edebug-version)
Dave Love <fx@gnu.org>
parents: 33709
diff changeset
4330 ["Save Windows" edebug-toggle-save-windows
8c1e62157545 (edebug-version)
Dave Love <fx@gnu.org>
parents: 33709
diff changeset
4331 :style toggle :selected edebug-save-windows]
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
4332 ["Save Point"
33758
8c1e62157545 (edebug-version)
Dave Love <fx@gnu.org>
parents: 33709
diff changeset
4333 (edebug-toggle 'edebug-save-displayed-buffer-points)
8c1e62157545 (edebug-version)
Dave Love <fx@gnu.org>
parents: 33709
diff changeset
4334 :style toggle :selected edebug-save-displayed-buffer-points]
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4335 ))
33758
8c1e62157545 (edebug-version)
Dave Love <fx@gnu.org>
parents: 33709
diff changeset
4336 "Menus for Edebug.")
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4337
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4338
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
4339 ;;; Emacs version specific code
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
4340
40464
f1e32a9da9a8 (edebug-window-live-p): Always alias to window-live-p.
Richard M. Stallman <rms@gnu.org>
parents: 39515
diff changeset
4341 (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
4342
f1e32a9da9a8 (edebug-window-live-p): Always alias to window-live-p.
Richard M. Stallman <rms@gnu.org>
parents: 39515
diff changeset
4343 (defun edebug-mark ()
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
4344 (mark t))
40464
f1e32a9da9a8 (edebug-window-live-p): Always alias to window-live-p.
Richard M. Stallman <rms@gnu.org>
parents: 39515
diff changeset
4345
f1e32a9da9a8 (edebug-window-live-p): Always alias to window-live-p.
Richard M. Stallman <rms@gnu.org>
parents: 39515
diff changeset
4346 (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
4347 "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
4348 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
4349 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
4350 ;; (interactive "P\nxCondition: ")
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
4351 (interactive
40464
f1e32a9da9a8 (edebug-window-live-p): Always alias to window-live-p.
Richard M. Stallman <rms@gnu.org>
parents: 39515
diff changeset
4352 (list
f1e32a9da9a8 (edebug-window-live-p): Always alias to window-live-p.
Richard M. Stallman <rms@gnu.org>
parents: 39515
diff changeset
4353 current-prefix-arg
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
4354 ;; 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
4355 (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
4356 (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
4357 (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
4358 (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
4359 (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
4360 (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
4361 (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
4362 (edebug-break-condition (car (cdr edebug-break-data)))
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
4363 (initial (and edebug-break-condition
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
4364 (format "%s" edebug-break-condition))))
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
4365 (read-from-minibuffer
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
4366 "Condition: " initial read-expression-map t
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
4367 (if (equal (car read-expression-history) initial)
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
4368 '(read-expression-history . 1)
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
4369 '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
4370 (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
4371
41175
7a8a9f274e2c (edebug-form-data, edebug-offsets)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40475
diff changeset
4372 (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
4373
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
4374 ;;; Byte-compiler
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
4375
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4376 ;; Extension for bytecomp to resolve undefined function references.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4377 ;; Requires new byte compiler.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4378
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4379 ;; Reenable byte compiler warnings about unread-command-char and -event.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4380 ;; Disabled before edebug-recursive-edit.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4381 (eval-when-compile
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4382 (if edebug-unread-command-char-warning
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
4383 (put 'unread-command-char 'byte-obsolete-variable
33758
8c1e62157545 (edebug-version)
Dave Love <fx@gnu.org>
parents: 33709
diff changeset
4384 edebug-unread-command-char-warning)))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4385
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4386 (eval-when-compile
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4387 ;; 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
4388 ;; We only want to evaluate when actually byte compiling.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4389 ;; 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
4390 (if (featurep 'byte-compile) (progn
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4391
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4392 (defun byte-compile-resolve-functions (funcs)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4393 "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
4394 (mapcar
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
4395 (function
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4396 (lambda (func)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4397 (setq byte-compile-unresolved-functions
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4398 (delq (assq func byte-compile-unresolved-functions)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4399 byte-compile-unresolved-functions))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4400 funcs)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4401 nil)
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
4402
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4403 '(defun byte-compile-resolve-free-references (vars)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4404 "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
4405 (mapcar
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
4406 (function
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4407 (lambda (var)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4408 (setq byte-compile-free-references
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4409 (delq var byte-compile-free-references))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4410 vars)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4411 nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4412
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4413 '(defun byte-compile-resolve-free-assignments (vars)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4414 "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
4415 (mapcar
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
4416 (function
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4417 (lambda (var)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4418 (setq byte-compile-free-assignments
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4419 (delq var byte-compile-free-assignments))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4420 vars)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4421 nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4422
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
4423 (byte-compile-resolve-functions
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
4424 '(reporter-submit-bug-report
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
4425 edebug-gensym ;; also in cl.el
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4426 ;; Interfaces to standard functions.
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
4427 edebug-original-eval-defun
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4428 edebug-original-read
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4429 edebug-get-buffer-window
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4430 edebug-mark
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4431 edebug-mark-marker
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
4432 edebug-input-pending-p
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4433 edebug-sit-for
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
4434 edebug-prin1-to-string
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4435 edebug-format
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4436 ;; lemacs
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4437 zmacs-deactivate-region
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4438 popup-menu
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4439 ;; CL
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4440 cl-macroexpand-all
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
4441 ;; 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
4442 byte-compile-resolve-functions
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4443 ))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4444
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4445 '(byte-compile-resolve-free-references
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4446 '(read-expression-history
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4447 read-expression-map))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4448
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4449 '(byte-compile-resolve-free-assignments
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4450 '(read-expression-history))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4451
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4452 )))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4453
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4454
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
4455 ;;; Autoloading of Edebug accessories
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4456
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4457 (if (featurep 'cl)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4458 (add-hook 'edebug-setup-hook
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4459 (function (lambda () (require 'cl-specs))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4460 ;; 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
4461 (add-hook 'cl-load-hook
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4462 (function (lambda () (require 'cl-specs)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4463
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
4464 ;;; 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
4465 (if (featurep 'cl-read)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4466 (add-hook 'edebug-setup-hook
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4467 (function (lambda () (require 'edebug-cl-read))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4468 ;; 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
4469 (add-hook 'cl-read-load-hooks
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4470 (function (lambda () (require 'edebug-cl-read)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4471
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4472
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
4473 ;;; Finalize Loading
6512
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 ;;; Finally, hook edebug into the rest of Emacs.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4476 ;;; There are probably some other things that could go here.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4477
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4478 ;; Install edebug read and eval functions.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4479 (edebug-install-read-eval-functions)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4480
3350
c9689f8d0574 Provide edebug.
Richard M. Stallman <rms@gnu.org>
parents: 2629
diff changeset
4481 (provide 'edebug)
c9689f8d0574 Provide edebug.
Richard M. Stallman <rms@gnu.org>
parents: 2629
diff changeset
4482
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 49598
diff changeset
4483 ;;; arch-tag: 19c8d05c-4554-426e-ac72-e0fa1fcb0808
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4484 ;;; edebug.el ends here