annotate lisp/emacs-lisp/edebug.el @ 105105:cd7303840497

*** empty log message ***
author Nick Roberts <nickrob@snap.net.nz>
date Sat, 19 Sep 2009 11:44:23 +0000
parents ae5e866fedd8
children df4934f25eef
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
64751
5b1a238fcbb4 Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 64406
diff changeset
3 ;; Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1997, 1999,
101015
0c2777fdd83f Remove references to last-command-char and
Glenn Morris <rgm@gnu.org>
parents: 100908
diff changeset
4 ;; 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
0c2777fdd83f Remove references to last-command-char and
Glenn Morris <rgm@gnu.org>
parents: 100908
diff changeset
5 ;; Free Software Foundation, Inc.
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
6
30805
3cfd3dc474b8 Change authors' mail address.
Gerd Moellmann <gerd@gnu.org>
parents: 30054
diff changeset
7 ;; Author: Daniel LaLiberte <liberte@holonexus.org>
20832
d953c9628570 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 20078
diff changeset
8 ;; Maintainer: FSF
2247
2c7997f249eb Add or correct keywords
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1821
diff changeset
9 ;; Keywords: lisp, tools, maint
846
20674ae6bf52 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 778
diff changeset
10
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
11 ;; This file is part of GNU Emacs.
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
12
94655
90a2847062be Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93975
diff changeset
13 ;; GNU Emacs is free software: you can redistribute it and/or modify
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
14 ;; it under the terms of the GNU General Public License as published by
94655
90a2847062be Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93975
diff changeset
15 ;; the Free Software Foundation, either version 3 of the License, or
90a2847062be Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93975
diff changeset
16 ;; (at your option) any later version.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
17
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
18 ;; 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
19 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
20 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
21 ;; GNU General Public License for more details.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
22
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
23 ;; You should have received a copy of the GNU General Public License
94655
90a2847062be Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93975
diff changeset
24 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
25
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
26 ;;; Commentary:
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
27
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
28 ;; This minor mode allows programmers to step through Emacs Lisp
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
29 ;; source code while executing functions. You can also set
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
30 ;; breakpoints, trace (stopping at each expression), evaluate
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
31 ;; expressions as if outside Edebug, reevaluate and display a list of
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
32 ;; expressions, trap errors normally caught by debug, and display a
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
33 ;; debug style backtrace.
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
34
20078
0fc1437e7427 (edebug-eval-mode): Nicer mode-name value.
Karl Heuer <kwzh@gnu.org>
parents: 19930
diff changeset
35 ;;; Minimal Instructions
0fc1437e7427 (edebug-eval-mode): Nicer mode-name value.
Karl Heuer <kwzh@gnu.org>
parents: 19930
diff changeset
36 ;; =====================
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 ;; 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
39 ;; 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
40 ;; 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
41 ;; "?" command in edebug to describe other commands.
20832
d953c9628570 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 20078
diff changeset
42 ;; See the Emacs Lisp Reference Manual for more details.
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
43
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
44 ;; 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
45 ;; (setq edebug-global-prefix "\C-xX")
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
46
20832
d953c9628570 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 20078
diff changeset
47 ;; Edebug was written by
d953c9628570 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 20078
diff changeset
48 ;; Daniel LaLiberte
20078
0fc1437e7427 (edebug-eval-mode): Nicer mode-name value.
Karl Heuer <kwzh@gnu.org>
parents: 19930
diff changeset
49 ;; GTE Labs
0fc1437e7427 (edebug-eval-mode): Nicer mode-name value.
Karl Heuer <kwzh@gnu.org>
parents: 19930
diff changeset
50 ;; 40 Sylvan Rd
0fc1437e7427 (edebug-eval-mode): Nicer mode-name value.
Karl Heuer <kwzh@gnu.org>
parents: 19930
diff changeset
51 ;; Waltham, MA 02254
30805
3cfd3dc474b8 Change authors' mail address.
Gerd Moellmann <gerd@gnu.org>
parents: 30054
diff changeset
52 ;; liberte@holonexus.org
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
53
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
54 ;;; Code:
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
55
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
56 ;;; Bug reporting
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
57
33758
8c1e62157545 (edebug-version)
Dave Love <fx@gnu.org>
parents: 33709
diff changeset
58 (defalias 'edebug-submit-bug-report 'report-emacs-bug)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
59
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
60 ;;; Options
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
61
17414
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
62 (defgroup edebug nil
64029
d4866c35bebd (edebug): Finish `defgroup' description with period.
Juanma Barranquero <lekktu@gmail.com>
parents: 63989
diff changeset
63 "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
64 :group 'lisp)
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
65
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 (defcustom edebug-setup-hook nil
95287
6150694d72ec (edebug-setup-hook, edebug-all-defs, edebug-all-forms, edebug-eval-macro-args,
Juanma Barranquero <lekktu@gmail.com>
parents: 94655
diff changeset
68 "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
69 Each time it is set to a new value, Edebug will call those functions
103885
adbe0e36df45 (edebug-setup-hook, edebug-all-forms)
Glenn Morris <rgm@gnu.org>
parents: 101015
diff changeset
70 once and then reset `edebug-setup-hook' to nil. You could use 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
71 to load up Edebug specifications associated with a package you are
103885
adbe0e36df45 (edebug-setup-hook, edebug-all-forms)
Glenn Morris <rgm@gnu.org>
parents: 101015
diff changeset
72 using, but only when you also use Edebug."
17414
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
73 :type 'hook
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
74 :group 'edebug)
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
75
21990
02b32ae7e637 (edebug-all-forms): Add autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents: 21643
diff changeset
76 ;; 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
77 ;; 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
78 ;; 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
79
02b32ae7e637 (edebug-all-forms): Add autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents: 21643
diff changeset
80 ;;;###autoload
17414
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
81 (defcustom edebug-all-defs nil
95287
6150694d72ec (edebug-setup-hook, edebug-all-defs, edebug-all-forms, edebug-eval-macro-args,
Juanma Barranquero <lekktu@gmail.com>
parents: 94655
diff changeset
82 "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
83 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
84 `eval-current-buffer'. `eval-region' is also called by
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
85 `eval-last-sexp', and `eval-print-last-sexp'.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
86
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
87 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
88 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
89 \(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
90 `emacs-lisp-mode-hook'."
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
91 :type 'boolean
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
92 :group 'edebug)
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
93
21990
02b32ae7e637 (edebug-all-forms): Add autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents: 21643
diff changeset
94 ;; 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
95 ;; 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
96 ;; 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
97
02b32ae7e637 (edebug-all-forms): Add autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents: 21643
diff changeset
98 ;;;###autoload
17414
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
99 (defcustom edebug-all-forms nil
103885
adbe0e36df45 (edebug-setup-hook, edebug-all-forms)
Glenn Morris <rgm@gnu.org>
parents: 101015
diff changeset
100 "Non-nil means evaluation of all forms will instrument for Edebug.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
101 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
102 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
103 :type 'boolean
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
104 :group 'edebug)
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
105
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
106 (defcustom edebug-eval-macro-args nil
95287
6150694d72ec (edebug-setup-hook, edebug-all-defs, edebug-all-forms, edebug-eval-macro-args,
Juanma Barranquero <lekktu@gmail.com>
parents: 94655
diff changeset
107 "Non-nil means all macro call arguments may be evaluated.
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
108 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
109 macro call arguments as if they will be evaluated.
103885
adbe0e36df45 (edebug-setup-hook, edebug-all-forms)
Glenn Morris <rgm@gnu.org>
parents: 101015
diff changeset
110 For each macro, an `edebug-form-spec' overrides this option.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
111 So to specify exceptions for macros that have some arguments evaluated
103885
adbe0e36df45 (edebug-setup-hook, edebug-all-forms)
Glenn Morris <rgm@gnu.org>
parents: 101015
diff changeset
112 and some not, use `def-edebug-spec' to 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
113 :type 'boolean
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
114 :group 'edebug)
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
115
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
116 (defcustom edebug-save-windows t
95287
6150694d72ec (edebug-setup-hook, edebug-all-defs, edebug-all-forms, edebug-eval-macro-args,
Juanma Barranquero <lekktu@gmail.com>
parents: 94655
diff changeset
117 "If non-nil, Edebug saves and restores the window configuration.
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 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
119 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
120
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
121 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
122 restored.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
123
17414
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
124 `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
125 :type '(choice boolean (repeat string))
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
126 :group 'edebug)
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
127
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
128 (defcustom edebug-save-displayed-buffer-points nil
95287
6150694d72ec (edebug-setup-hook, edebug-all-defs, edebug-all-forms, edebug-eval-macro-args,
Juanma Barranquero <lekktu@gmail.com>
parents: 94655
diff changeset
129 "If non-nil, save and restore point in all displayed buffers.
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
f1d73d12436e checked in with -k by liberte at 1994/04/09 20:57:56
Daniel LaLiberte <liberte@gnu.org>
parents: 6732
diff changeset
131 Saving and restoring point in other buffers is necessary if you are
103885
adbe0e36df45 (edebug-setup-hook, edebug-all-forms)
Glenn Morris <rgm@gnu.org>
parents: 101015
diff changeset
132 debugging code that changes the point of a buffer that is displayed
6761
f1d73d12436e checked in with -k by liberte at 1994/04/09 20:57:56
Daniel LaLiberte <liberte@gnu.org>
parents: 6732
diff changeset
133 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
134 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
135
6761
f1d73d12436e checked in with -k by liberte at 1994/04/09 20:57:56
Daniel LaLiberte <liberte@gnu.org>
parents: 6732
diff changeset
136 Saving and restoring point in all buffers is expensive, since it
103885
adbe0e36df45 (edebug-setup-hook, edebug-all-forms)
Glenn Morris <rgm@gnu.org>
parents: 101015
diff changeset
137 requires selecting each window twice, so enable this only if you
adbe0e36df45 (edebug-setup-hook, edebug-all-forms)
Glenn Morris <rgm@gnu.org>
parents: 101015
diff changeset
138 need it."
17414
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
139 :type 'boolean
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
140 :group 'edebug)
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
141
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
142 (defcustom edebug-initial-mode 'step
95287
6150694d72ec (edebug-setup-hook, edebug-all-defs, edebug-all-forms, edebug-eval-macro-args,
Juanma Barranquero <lekktu@gmail.com>
parents: 94655
diff changeset
143 "Initial execution mode for Edebug, if non-nil.
63439
de8468617bbf (edebug-all-defs, edebug-initial-mode, edebug-print-length)
Luc Teirlinck <teirllm@auburn.edu>
parents: 63303
diff changeset
144 If this variable is non-nil, it specifies the initial execution mode
de8468617bbf (edebug-all-defs, edebug-initial-mode, edebug-print-length)
Luc Teirlinck <teirllm@auburn.edu>
parents: 63303
diff changeset
145 for Edebug when it is first activated. Possible values are step, next,
de8468617bbf (edebug-all-defs, edebug-initial-mode, edebug-print-length)
Luc Teirlinck <teirllm@auburn.edu>
parents: 63303
diff changeset
146 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
147 :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
148 (const Go-nonstop) (const trace)
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
149 (const Trace-fast) (const continue)
23587
26749ef98f6c (edebug-initial-mode): Fix customize type.
Andreas Schwab <schwab@suse.de>
parents: 21990
diff changeset
150 (const Continue-fast))
17414
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
151 :group 'edebug)
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
152
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
153 (defcustom edebug-trace nil
95287
6150694d72ec (edebug-setup-hook, edebug-all-defs, edebug-all-forms, edebug-eval-macro-args,
Juanma Barranquero <lekktu@gmail.com>
parents: 94655
diff changeset
154 "Non-nil means display a trace of function entry and exit.
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 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
156 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
157
f1d73d12436e checked in with -k by liberte at 1994/04/09 20:57:56
Daniel LaLiberte <liberte@gnu.org>
parents: 6732
diff changeset
158 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
159 and `edebug-print-trace-after'."
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
160 :type 'boolean
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
161 :group 'edebug)
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
162
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
163 (defcustom edebug-test-coverage nil
95287
6150694d72ec (edebug-setup-hook, edebug-all-defs, edebug-all-forms, edebug-eval-macro-args,
Juanma Barranquero <lekktu@gmail.com>
parents: 94655
diff changeset
164 "If non-nil, Edebug tests coverage of all expressions debugged.
6150694d72ec (edebug-setup-hook, edebug-all-defs, edebug-all-forms, edebug-eval-macro-args,
Juanma Barranquero <lekktu@gmail.com>
parents: 94655
diff changeset
165 This is done by comparing the result of each expression with the
6150694d72ec (edebug-setup-hook, edebug-all-defs, edebug-all-forms, edebug-eval-macro-args,
Juanma Barranquero <lekktu@gmail.com>
parents: 94655
diff changeset
166 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
167 results are found.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
168
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
169 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
170 coverage information for a definition."
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
171 :type 'boolean
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
172 :group 'edebug)
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
173
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
174 (defcustom edebug-continue-kbd-macro nil
95287
6150694d72ec (edebug-setup-hook, edebug-all-defs, edebug-all-forms, edebug-eval-macro-args,
Juanma Barranquero <lekktu@gmail.com>
parents: 94655
diff changeset
175 "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
176 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
177 :type 'boolean
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
178 :group 'edebug)
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
179
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
180
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
181 (defcustom edebug-print-length 50
103885
adbe0e36df45 (edebug-setup-hook, edebug-all-forms)
Glenn Morris <rgm@gnu.org>
parents: 101015
diff changeset
182 "If non-nil, 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
183 :type 'integer
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
184 :group 'edebug)
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
185 (defcustom edebug-print-level 50
103885
adbe0e36df45 (edebug-setup-hook, edebug-all-forms)
Glenn Morris <rgm@gnu.org>
parents: 101015
diff changeset
186 "If non-nil, 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
187 :type 'integer
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
188 :group 'edebug)
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
189 (defcustom edebug-print-circle t
103885
adbe0e36df45 (edebug-setup-hook, edebug-all-forms)
Glenn Morris <rgm@gnu.org>
parents: 101015
diff changeset
190 "If non-nil, 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
191 :type 'boolean
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
192 :group 'edebug)
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
193
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
194 (defcustom edebug-unwrap-results nil
95287
6150694d72ec (edebug-setup-hook, edebug-all-defs, edebug-all-forms, edebug-eval-macro-args,
Juanma Barranquero <lekktu@gmail.com>
parents: 94655
diff changeset
195 "Non-nil if Edebug should unwrap results of expressions.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
196 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
197 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
198 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
199 :type 'boolean
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
200 :group 'edebug)
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
201
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
202 (defcustom edebug-on-error t
95287
6150694d72ec (edebug-setup-hook, edebug-all-defs, edebug-all-forms, edebug-eval-macro-args,
Juanma Barranquero <lekktu@gmail.com>
parents: 94655
diff changeset
203 "Value bound to `debug-on-error' while Edebug is active.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
204
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
205 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
206
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
207 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
208 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
209 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
210 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
211 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
212 :type '(choice (const :tag "off")
26749ef98f6c (edebug-initial-mode): Fix customize type.
Andreas Schwab <schwab@suse.de>
parents: 21990
diff changeset
213 (repeat :menu-tag "When"
26749ef98f6c (edebug-initial-mode): Fix customize type.
Andreas Schwab <schwab@suse.de>
parents: 21990
diff changeset
214 :value (nil)
26749ef98f6c (edebug-initial-mode): Fix customize type.
Andreas Schwab <schwab@suse.de>
parents: 21990
diff changeset
215 (symbol :format "%v"))
26749ef98f6c (edebug-initial-mode): Fix customize type.
Andreas Schwab <schwab@suse.de>
parents: 21990
diff changeset
216 (const :tag "always" t))
17414
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
217 :group 'edebug)
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
218
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
219 (defcustom edebug-on-quit t
95287
6150694d72ec (edebug-setup-hook, edebug-all-defs, edebug-all-forms, edebug-eval-macro-args,
Juanma Barranquero <lekktu@gmail.com>
parents: 94655
diff changeset
220 "Value bound to `debug-on-quit' while Edebug is active."
17414
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
221 :type 'boolean
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
222 :group 'edebug)
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
223
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
224 (defcustom edebug-global-break-condition nil
95287
6150694d72ec (edebug-setup-hook, edebug-all-defs, edebug-all-forms, edebug-eval-macro-args,
Juanma Barranquero <lekktu@gmail.com>
parents: 94655
diff changeset
225 "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
226 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
227 :type 'sexp
f967f12c8ec8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16744
diff changeset
228 :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
229
18376
9ae76ef113f6 (edebug-sit-for-seconds): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 18017
diff changeset
230 (defcustom edebug-sit-for-seconds 1
103885
adbe0e36df45 (edebug-setup-hook, edebug-all-forms)
Glenn Morris <rgm@gnu.org>
parents: 101015
diff changeset
231 "Number of seconds to pause when execution mode is `trace' or `continue'."
18376
9ae76ef113f6 (edebug-sit-for-seconds): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 18017
diff changeset
232 :type 'number
9ae76ef113f6 (edebug-sit-for-seconds): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 18017
diff changeset
233 :group 'edebug)
9ae76ef113f6 (edebug-sit-for-seconds): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 18017
diff changeset
234
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
235 ;;; Form spec utilities.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
236
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
237 (defmacro def-edebug-form-spec (symbol spec-form)
64406
3b29f20942e2 (def-edebug-form-spec): Add obsolescence info and delete redundant message. Doc
Juanma Barranquero <lekktu@gmail.com>
parents: 64222
diff changeset
238 "For compatibility with old version."
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
239 (def-edebug-spec symbol (eval spec-form)))
64406
3b29f20942e2 (def-edebug-form-spec): Add obsolescence info and delete redundant message. Doc
Juanma Barranquero <lekktu@gmail.com>
parents: 64222
diff changeset
240 (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
241
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
242 (defun get-edebug-spec (symbol)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
243 ;; Get the spec of symbol resolving all indirection.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
244 (let ((edebug-form-spec (get symbol 'edebug-form-spec))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
245 indirect)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
246 (while (and (symbolp edebug-form-spec)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
247 (setq indirect (get edebug-form-spec 'edebug-form-spec)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
248 ;; (edebug-trace "indirection: %s" edebug-form-spec)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
249 (setq edebug-form-spec indirect))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
250 edebug-form-spec
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
251 ))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
252
70003
5fd1441a60f9 (edebug-basic-spec): New function for vetting file-local form specs.
Eli Zaretskii <eliz@gnu.org>
parents: 69255
diff changeset
253 ;;;###autoload
5fd1441a60f9 (edebug-basic-spec): New function for vetting file-local form specs.
Eli Zaretskii <eliz@gnu.org>
parents: 69255
diff changeset
254 (defun edebug-basic-spec (spec)
5fd1441a60f9 (edebug-basic-spec): New function for vetting file-local form specs.
Eli Zaretskii <eliz@gnu.org>
parents: 69255
diff changeset
255 "Return t if SPEC uses only extant spec symbols.
5fd1441a60f9 (edebug-basic-spec): New function for vetting file-local form specs.
Eli Zaretskii <eliz@gnu.org>
parents: 69255
diff changeset
256 An extant spec symbol is a symbol that is not a function and has a
5fd1441a60f9 (edebug-basic-spec): New function for vetting file-local form specs.
Eli Zaretskii <eliz@gnu.org>
parents: 69255
diff changeset
257 `edebug-form-spec' property."
5fd1441a60f9 (edebug-basic-spec): New function for vetting file-local form specs.
Eli Zaretskii <eliz@gnu.org>
parents: 69255
diff changeset
258 (cond ((listp spec)
5fd1441a60f9 (edebug-basic-spec): New function for vetting file-local form specs.
Eli Zaretskii <eliz@gnu.org>
parents: 69255
diff changeset
259 (catch 'basic
5fd1441a60f9 (edebug-basic-spec): New function for vetting file-local form specs.
Eli Zaretskii <eliz@gnu.org>
parents: 69255
diff changeset
260 (while spec
5fd1441a60f9 (edebug-basic-spec): New function for vetting file-local form specs.
Eli Zaretskii <eliz@gnu.org>
parents: 69255
diff changeset
261 (unless (edebug-basic-spec (car spec)) (throw 'basic nil))
5fd1441a60f9 (edebug-basic-spec): New function for vetting file-local form specs.
Eli Zaretskii <eliz@gnu.org>
parents: 69255
diff changeset
262 (setq spec (cdr spec)))
5fd1441a60f9 (edebug-basic-spec): New function for vetting file-local form specs.
Eli Zaretskii <eliz@gnu.org>
parents: 69255
diff changeset
263 t))
5fd1441a60f9 (edebug-basic-spec): New function for vetting file-local form specs.
Eli Zaretskii <eliz@gnu.org>
parents: 69255
diff changeset
264 ((symbolp spec)
5fd1441a60f9 (edebug-basic-spec): New function for vetting file-local form specs.
Eli Zaretskii <eliz@gnu.org>
parents: 69255
diff changeset
265 (unless (functionp spec) (get spec 'edebug-form-spec)))))
5fd1441a60f9 (edebug-basic-spec): New function for vetting file-local form specs.
Eli Zaretskii <eliz@gnu.org>
parents: 69255
diff changeset
266
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
267 ;;; Utilities
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
268
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
269 ;; Define edebug-gensym - from old cl.el
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
270 (defvar edebug-gensym-index 0
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
271 "Integer used by `edebug-gensym' to produce new names.")
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
272
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
273 (defun edebug-gensym (&optional prefix)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
274 "Generate a fresh uninterned symbol.
95287
6150694d72ec (edebug-setup-hook, edebug-all-defs, edebug-all-forms, edebug-eval-macro-args,
Juanma Barranquero <lekktu@gmail.com>
parents: 94655
diff changeset
275 There is an optional argument, PREFIX. PREFIX is the string
6150694d72ec (edebug-setup-hook, edebug-all-defs, edebug-all-forms, edebug-eval-macro-args,
Juanma Barranquero <lekktu@gmail.com>
parents: 94655
diff changeset
276 that begins the new name. Most people take just the default,
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
277 except when debugging needs suggest otherwise."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
278 (if (null prefix)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
279 (setq prefix "G"))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
280 (let ((newsymbol nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
281 (newname ""))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
282 (while (not newsymbol)
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
283 (setq newname (concat prefix (int-to-string edebug-gensym-index)))
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
284 (setq edebug-gensym-index (+ edebug-gensym-index 1))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
285 (if (not (intern-soft newname))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
286 (setq newsymbol (make-symbol newname))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
287 newsymbol))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
288
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
289 (defun edebug-lambda-list-keywordp (object)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
290 "Return t if OBJECT is a lambda list keyword.
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
291 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
292 (and (symbolp object)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
293 (= ?& (aref (symbol-name object) 0))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
294
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
295
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
296 (defun edebug-last-sexp ()
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
297 ;; Return the last sexp before point in current buffer.
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
298 ;; Assumes Emacs Lisp syntax is active.
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
299 (car
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
300 (read-from-string
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
301 (buffer-substring
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
302 (save-excursion
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
303 (forward-sexp -1)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
304 (point))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
305 (point)))))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
306
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
307 (defun edebug-window-list ()
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
308 "Return a list of windows, in order of `next-window'."
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
309 ;; This doesn't work for epoch.
30000
323c0e2c2032 (edebug-window-live-p, edebug-window-list)
Gerd Moellmann <gerd@gnu.org>
parents: 29202
diff changeset
310 (let (window-list)
51321
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
311 (walk-windows (lambda (w) (push w window-list)))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
312 (nreverse window-list)))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
313
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
314 ;; Not used.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
315 '(defun edebug-two-window-p ()
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
316 "Return t if there are two windows."
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
317 (and (not (one-window-p))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
318 (eq (selected-window)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
319 (next-window (next-window (selected-window))))))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
320
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
321 (defsubst edebug-lookup-function (object)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
322 (while (and (symbolp object) (fboundp object))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
323 (setq object (symbol-function object)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
324 object)
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
325
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
326 (defun edebug-macrop (object)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
327 "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
328 (setq object (edebug-lookup-function object))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
329 (if (and (listp object)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
330 (eq 'macro (car object))
51321
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
331 (functionp (cdr object)))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
332 object))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
333
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
334 (defun edebug-sort-alist (alist function)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
335 ;; Return the ALIST sorted with comparison function FUNCTION.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
336 ;; This uses 'sort so the sorting is destructive.
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
337 (sort alist (function
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
338 (lambda (e1 e2)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
339 (funcall function (car e1) (car e2))))))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
340
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
341 ;;(def-edebug-spec edebug-save-restriction t)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
342
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
343 ;; 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
344 '(defmacro edebug-save-restriction (&rest body)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
345 "Evaluate BODY while saving the current buffers restriction.
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
346 BODY may change buffer outside of current restriction, unlike
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
347 save-restriction. BODY may change the current buffer,
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
348 and the restriction will be restored to the original buffer,
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
349 and the current buffer remains current.
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
350 Return the result of the last expression in BODY."
26519
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
351 `(let ((edebug:s-r-beg (point-min-marker))
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
352 (edebug:s-r-end (point-max-marker)))
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
353 (unwind-protect
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
354 (progn ,@body)
104663
ae5e866fedd8 (edebug-display, edebug-outside-excursion):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103997
diff changeset
355 (with-current-buffer (marker-buffer edebug:s-r-beg)
26519
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
356 (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
357
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
358 ;;; Display
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
359
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
360 (defconst edebug-trace-buffer "*edebug-trace*"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
361 "Name of the buffer to put trace info in.")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
362
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
363 (defun edebug-pop-to-buffer (buffer &optional window)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
364 ;; Like pop-to-buffer, but select window where BUFFER was last shown.
77165
4ae89136374d (edebug-pop-to-buffer): Don't select window marked as dedicated.
Martin Rudalics <rudalics@gmx.at>
parents: 76782
diff changeset
365 ;; Select WINDOW if it is provided and still exists. Otherwise,
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
366 ;; if buffer is currently shown in several windows, choose one.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
367 ;; Otherwise, find a new window, possibly splitting one.
77165
4ae89136374d (edebug-pop-to-buffer): Don't select window marked as dedicated.
Martin Rudalics <rudalics@gmx.at>
parents: 76782
diff changeset
368 (setq window
4ae89136374d (edebug-pop-to-buffer): Don't select window marked as dedicated.
Martin Rudalics <rudalics@gmx.at>
parents: 76782
diff changeset
369 (cond
81391
0842cee3ad33 (edebug-pop-to-buffer, edebug-display): Remove redundant checks.
Juanma Barranquero <lekktu@gmail.com>
parents: 77165
diff changeset
370 ((and (edebug-window-live-p window)
77165
4ae89136374d (edebug-pop-to-buffer): Don't select window marked as dedicated.
Martin Rudalics <rudalics@gmx.at>
parents: 76782
diff changeset
371 (eq (window-buffer window) buffer))
4ae89136374d (edebug-pop-to-buffer): Don't select window marked as dedicated.
Martin Rudalics <rudalics@gmx.at>
parents: 76782
diff changeset
372 window)
4ae89136374d (edebug-pop-to-buffer): Don't select window marked as dedicated.
Martin Rudalics <rudalics@gmx.at>
parents: 76782
diff changeset
373 ((eq (window-buffer (selected-window)) buffer)
4ae89136374d (edebug-pop-to-buffer): Don't select window marked as dedicated.
Martin Rudalics <rudalics@gmx.at>
parents: 76782
diff changeset
374 ;; Selected window already displays BUFFER.
4ae89136374d (edebug-pop-to-buffer): Don't select window marked as dedicated.
Martin Rudalics <rudalics@gmx.at>
parents: 76782
diff changeset
375 (selected-window))
4ae89136374d (edebug-pop-to-buffer): Don't select window marked as dedicated.
Martin Rudalics <rudalics@gmx.at>
parents: 76782
diff changeset
376 ((edebug-get-buffer-window buffer))
4ae89136374d (edebug-pop-to-buffer): Don't select window marked as dedicated.
Martin Rudalics <rudalics@gmx.at>
parents: 76782
diff changeset
377 ((one-window-p 'nomini)
4ae89136374d (edebug-pop-to-buffer): Don't select window marked as dedicated.
Martin Rudalics <rudalics@gmx.at>
parents: 76782
diff changeset
378 ;; When there's one window only, split it.
4ae89136374d (edebug-pop-to-buffer): Don't select window marked as dedicated.
Martin Rudalics <rudalics@gmx.at>
parents: 76782
diff changeset
379 (split-window))
4ae89136374d (edebug-pop-to-buffer): Don't select window marked as dedicated.
Martin Rudalics <rudalics@gmx.at>
parents: 76782
diff changeset
380 ((let ((trace-window (get-buffer-window edebug-trace-buffer)))
4ae89136374d (edebug-pop-to-buffer): Don't select window marked as dedicated.
Martin Rudalics <rudalics@gmx.at>
parents: 76782
diff changeset
381 (catch 'found
4ae89136374d (edebug-pop-to-buffer): Don't select window marked as dedicated.
Martin Rudalics <rudalics@gmx.at>
parents: 76782
diff changeset
382 (dolist (elt (window-list nil 'nomini))
4ae89136374d (edebug-pop-to-buffer): Don't select window marked as dedicated.
Martin Rudalics <rudalics@gmx.at>
parents: 76782
diff changeset
383 (unless (or (eq elt (selected-window)) (eq elt trace-window)
4ae89136374d (edebug-pop-to-buffer): Don't select window marked as dedicated.
Martin Rudalics <rudalics@gmx.at>
parents: 76782
diff changeset
384 (window-dedicated-p elt))
4ae89136374d (edebug-pop-to-buffer): Don't select window marked as dedicated.
Martin Rudalics <rudalics@gmx.at>
parents: 76782
diff changeset
385 ;; Found a non-dedicated window not showing
4ae89136374d (edebug-pop-to-buffer): Don't select window marked as dedicated.
Martin Rudalics <rudalics@gmx.at>
parents: 76782
diff changeset
386 ;; `edebug-trace-buffer', use it.
4ae89136374d (edebug-pop-to-buffer): Don't select window marked as dedicated.
Martin Rudalics <rudalics@gmx.at>
parents: 76782
diff changeset
387 (throw 'found elt))))))
4ae89136374d (edebug-pop-to-buffer): Don't select window marked as dedicated.
Martin Rudalics <rudalics@gmx.at>
parents: 76782
diff changeset
388 ;; All windows are dedicated or show `edebug-trace-buffer', split
4ae89136374d (edebug-pop-to-buffer): Don't select window marked as dedicated.
Martin Rudalics <rudalics@gmx.at>
parents: 76782
diff changeset
389 ;; selected one.
4ae89136374d (edebug-pop-to-buffer): Don't select window marked as dedicated.
Martin Rudalics <rudalics@gmx.at>
parents: 76782
diff changeset
390 (t (split-window))))
4ae89136374d (edebug-pop-to-buffer): Don't select window marked as dedicated.
Martin Rudalics <rudalics@gmx.at>
parents: 76782
diff changeset
391 (select-window window)
4ae89136374d (edebug-pop-to-buffer): Don't select window marked as dedicated.
Martin Rudalics <rudalics@gmx.at>
parents: 76782
diff changeset
392 (set-window-buffer window buffer)
4ae89136374d (edebug-pop-to-buffer): Don't select window marked as dedicated.
Martin Rudalics <rudalics@gmx.at>
parents: 76782
diff changeset
393 (set-window-hscroll window 0);; should this be??
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
394 ;; 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
395 ;;(set-buffer buffer)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
396 )
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
397
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
398 (defun edebug-get-displayed-buffer-points ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
399 ;; 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
400 (let (list)
323c0e2c2032 (edebug-window-live-p, edebug-window-list)
Gerd Moellmann <gerd@gnu.org>
parents: 29202
diff changeset
401 (walk-windows (lambda (w)
323c0e2c2032 (edebug-window-live-p, edebug-window-list)
Gerd Moellmann <gerd@gnu.org>
parents: 29202
diff changeset
402 (unless (eq w (selected-window))
51321
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
403 (push (cons (window-buffer w)
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
404 (window-point w))
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
405 list))))
30000
323c0e2c2032 (edebug-window-live-p, edebug-window-list)
Gerd Moellmann <gerd@gnu.org>
parents: 29202
diff changeset
406 list))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
407
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
408
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
409 (defun edebug-set-buffer-points (buffer-points)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
410 ;; Restore the buffer-points created by edebug-get-displayed-buffer-points.
51321
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
411 (save-current-buffer
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
412 (mapcar (lambda (buf-point)
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
413 (when (buffer-live-p (car buf-point))
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
414 (set-buffer (car buf-point))
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
415 (goto-char (cdr buf-point))))
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
416 buffer-points)))
6512
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-current-windows (which-windows)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
419 ;; Get 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 which-windows)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
421 (mapcar (function (lambda (window)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
422 (if (edebug-window-live-p window)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
423 (list window
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
424 (window-buffer window)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
425 (window-point window)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
426 (window-start window)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
427 (window-hscroll window)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
428 which-windows)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
429 (current-window-configuration)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
430
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
431 (defun edebug-set-windows (window-info)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
432 ;; Set either a full window configuration or some window information.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
433 (if (listp window-info)
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
434 (mapcar (function
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
435 (lambda (one-window-info)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
436 (if one-window-info
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
437 (apply (function
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
438 (lambda (window buffer point start hscroll)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
439 (if (edebug-window-live-p window)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
440 (progn
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
441 (set-window-buffer window buffer)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
442 (set-window-point window point)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
443 (set-window-start window start)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
444 (set-window-hscroll window hscroll)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
445 one-window-info))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
446 window-info)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
447 (set-window-configuration window-info)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
448
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
449 (defalias 'edebug-get-buffer-window 'get-buffer-window)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
450 (defalias 'edebug-sit-for 'sit-for)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
451 (defalias 'edebug-input-pending-p 'input-pending-p)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
452
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
453
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
454 ;;; Redefine read and eval functions
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
455 ;; read is redefined to maybe instrument forms.
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
456 ;; 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
457
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
458 ;; Save the original read function
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
459 (or (fboundp 'edebug-original-read)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
460 (defalias 'edebug-original-read (symbol-function 'read)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
461
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 (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
463 "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
464 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
465 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
466 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
467 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
468 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
469 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
470 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
471 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
472
95287
6150694d72ec (edebug-setup-hook, edebug-all-defs, edebug-all-forms, edebug-eval-macro-args,
Juanma Barranquero <lekktu@gmail.com>
parents: 94655
diff changeset
473 This version, from Edebug, maybe instruments the expression. But the
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
474 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
475 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
476 `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
477 (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
478 (if (eq stream (current-buffer))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
479 (edebug-read-and-maybe-wrap-form)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
480 (edebug-original-read stream)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
481
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
482 (or (fboundp 'edebug-original-eval-defun)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
483 (defalias 'edebug-original-eval-defun (symbol-function 'eval-defun)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
484
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
485 ;; We should somehow arrange to be able to do this
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
486 ;; without actually replacing the eval-defun command.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
487 (defun edebug-eval-defun (edebug-it)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
488 "Evaluate the top-level form containing point, or after point.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
489
30054
72640301c1fe (edebug-eval-defun): Make doc string
Gerd Moellmann <gerd@gnu.org>
parents: 30000
diff changeset
490 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
491 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
492 already has some other value. (Normally `defvar' does not change the
56004
397f87132b70 (edebug-eval-defun): Add `defface'. Fix docstring.
Juri Linkov <juri@jurta.org>
parents: 55800
diff changeset
493 variable's value if it already has a value.) Treat `defcustom'
397f87132b70 (edebug-eval-defun): Add `defface'. Fix docstring.
Juri Linkov <juri@jurta.org>
parents: 55800
diff changeset
494 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
495
72640301c1fe (edebug-eval-defun): Make doc string
Gerd Moellmann <gerd@gnu.org>
parents: 30000
diff changeset
496 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
497
72640301c1fe (edebug-eval-defun): Make doc string
Gerd Moellmann <gerd@gnu.org>
parents: 30000
diff changeset
498 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
499 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
500 invoked without a prefix argument
72640301c1fe (edebug-eval-defun): Make doc string
Gerd Moellmann <gerd@gnu.org>
parents: 30000
diff changeset
501
95287
6150694d72ec (edebug-setup-hook, edebug-all-defs, edebug-all-forms, edebug-eval-macro-args,
Juanma Barranquero <lekktu@gmail.com>
parents: 94655
diff changeset
502 If acting on a `defun' for FUNCTION, and the function was instrumented,
6150694d72ec (edebug-setup-hook, edebug-all-defs, edebug-all-forms, edebug-eval-macro-args,
Juanma Barranquero <lekktu@gmail.com>
parents: 94655
diff changeset
503 `Edebug: FUNCTION' is printed in the minibuffer. If not instrumented,
6150694d72ec (edebug-setup-hook, edebug-all-defs, edebug-all-forms, edebug-eval-macro-args,
Juanma Barranquero <lekktu@gmail.com>
parents: 94655
diff changeset
504 just FUNCTION is printed.
30054
72640301c1fe (edebug-eval-defun): Make doc string
Gerd Moellmann <gerd@gnu.org>
parents: 30000
diff changeset
505
72640301c1fe (edebug-eval-defun): Make doc string
Gerd Moellmann <gerd@gnu.org>
parents: 30000
diff changeset
506 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
507 the minibuffer."
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
508 (interactive "P")
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
509 (let* ((edebugging (not (eq (not edebug-it) (not edebug-all-defs))))
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
510 (edebug-result)
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
511 (form
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
512 (let ((edebug-all-forms edebugging)
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
513 (edebug-all-defs (eq edebug-all-defs (not edebug-it))))
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
514 (edebug-read-top-level-form))))
32227
d22ae991ac5f Comment.
Dave Love <fx@gnu.org>
parents: 30805
diff changeset
515 ;; 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
516 ;; same, since that gets a macroexpanded form.
24024
2981304f5015 (edebug-eval-defun): Deal with defcustom
Dave Love <fx@gnu.org>
parents: 23587
diff changeset
517 (cond ((and (eq (car form) 'defvar)
2981304f5015 (edebug-eval-defun): Deal with defcustom
Dave Love <fx@gnu.org>
parents: 23587
diff changeset
518 (cdr-safe (cdr-safe form)))
2981304f5015 (edebug-eval-defun): Deal with defcustom
Dave Love <fx@gnu.org>
parents: 23587
diff changeset
519 ;; 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
520 (makunbound (nth 1 form)))
24024
2981304f5015 (edebug-eval-defun): Deal with defcustom
Dave Love <fx@gnu.org>
parents: 23587
diff changeset
521 ((and (eq (car form) 'defcustom)
2981304f5015 (edebug-eval-defun): Deal with defcustom
Dave Love <fx@gnu.org>
parents: 23587
diff changeset
522 (default-boundp (nth 1 form)))
2981304f5015 (edebug-eval-defun): Deal with defcustom
Dave Love <fx@gnu.org>
parents: 23587
diff changeset
523 ;; Force variable to be bound.
56004
397f87132b70 (edebug-eval-defun): Add `defface'. Fix docstring.
Juri Linkov <juri@jurta.org>
parents: 55800
diff changeset
524 (set-default (nth 1 form) (eval (nth 2 form))))
397f87132b70 (edebug-eval-defun): Add `defface'. Fix docstring.
Juri Linkov <juri@jurta.org>
parents: 55800
diff changeset
525 ((eq (car form) 'defface)
397f87132b70 (edebug-eval-defun): Add `defface'. Fix docstring.
Juri Linkov <juri@jurta.org>
parents: 55800
diff changeset
526 ;; Reset the face.
63639
da180163f2f6 (edebug-eval-defun):
Juri Linkov <juri@jurta.org>
parents: 63556
diff changeset
527 (setq face-new-frame-defaults
da180163f2f6 (edebug-eval-defun):
Juri Linkov <juri@jurta.org>
parents: 63556
diff changeset
528 (assq-delete-all (nth 1 form) face-new-frame-defaults))
56004
397f87132b70 (edebug-eval-defun): Add `defface'. Fix docstring.
Juri Linkov <juri@jurta.org>
parents: 55800
diff changeset
529 (put (nth 1 form) 'face-defface-spec nil)
63639
da180163f2f6 (edebug-eval-defun):
Juri Linkov <juri@jurta.org>
parents: 63556
diff changeset
530 ;; See comments in `eval-defun-1' for purpose of code below
da180163f2f6 (edebug-eval-defun):
Juri Linkov <juri@jurta.org>
parents: 63556
diff changeset
531 (setq form (prog1 `(prog1 ,form
da180163f2f6 (edebug-eval-defun):
Juri Linkov <juri@jurta.org>
parents: 63556
diff changeset
532 (put ',(nth 1 form) 'saved-face
da180163f2f6 (edebug-eval-defun):
Juri Linkov <juri@jurta.org>
parents: 63556
diff changeset
533 ',(get (nth 1 form) 'saved-face))
da180163f2f6 (edebug-eval-defun):
Juri Linkov <juri@jurta.org>
parents: 63556
diff changeset
534 (put ',(nth 1 form) 'customized-face
63989
a1d03660a223 (edebug-eval-defun): Remove unnecessary quotes.
Juri Linkov <juri@jurta.org>
parents: 63639
diff changeset
535 ,(nth 2 form)))
63639
da180163f2f6 (edebug-eval-defun):
Juri Linkov <juri@jurta.org>
parents: 63556
diff changeset
536 (put (nth 1 form) 'saved-face nil)))))
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
537 (setq edebug-result (eval form))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
538 (if (not edebugging)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
539 (princ edebug-result)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
540 edebug-result)))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
541
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
542
727
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 661
diff changeset
543 ;;;###autoload
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
544 (defalias 'edebug-defun 'edebug-eval-top-level-form)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
545
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
546 ;;;###autoload
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
547 (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
548 "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
549 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
550 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
551 using `eval-expression' (which see).
546f1e0c46c9 (edebug-eval-top-level-form): Use eval-expression.
Richard M. Stallman <rms@gnu.org>
parents: 46716
diff changeset
552
95287
6150694d72ec (edebug-setup-hook, edebug-all-defs, edebug-all-forms, edebug-eval-macro-args,
Juanma Barranquero <lekktu@gmail.com>
parents: 94655
diff changeset
553 If you do this on a function definition such as a defun or defmacro,
6150694d72ec (edebug-setup-hook, edebug-all-defs, edebug-all-forms, edebug-eval-macro-args,
Juanma Barranquero <lekktu@gmail.com>
parents: 94655
diff changeset
554 it defines the function and instruments its definition for Edebug,
6150694d72ec (edebug-setup-hook, edebug-all-defs, edebug-all-forms, edebug-eval-macro-args,
Juanma Barranquero <lekktu@gmail.com>
parents: 94655
diff changeset
555 so it will do Edebug stepping when called later. It displays
6150694d72ec (edebug-setup-hook, edebug-all-defs, edebug-all-forms, edebug-eval-macro-args,
Juanma Barranquero <lekktu@gmail.com>
parents: 94655
diff changeset
556 `Edebug: FUNCTION' in the echo area to indicate that FUNCTION is now
6150694d72ec (edebug-setup-hook, edebug-all-defs, edebug-all-forms, edebug-eval-macro-args,
Juanma Barranquero <lekktu@gmail.com>
parents: 94655
diff changeset
557 instrumented for Edebug.
46784
546f1e0c46c9 (edebug-eval-top-level-form): Use eval-expression.
Richard M. Stallman <rms@gnu.org>
parents: 46716
diff changeset
558
546f1e0c46c9 (edebug-eval-top-level-form): Use eval-expression.
Richard M. Stallman <rms@gnu.org>
parents: 46716
diff changeset
559 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
560 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
561 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
562 \(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
563 already is one.)"
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
564 (interactive)
46784
546f1e0c46c9 (edebug-eval-top-level-form): Use eval-expression.
Richard M. Stallman <rms@gnu.org>
parents: 46716
diff changeset
565 (eval-expression
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
566 ;; 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
567 ;; 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
568 (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
569 (edebug-all-defs t))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
570 (edebug-read-top-level-form))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
571
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
572
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
573 (defun edebug-read-top-level-form ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
574 (let ((starting-point (point)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
575 (end-of-defun)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
576 (beginning-of-defun)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
577 (prog1
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
578 (edebug-read-and-maybe-wrap-form)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
579 ;; Recover point, but only if no error occurred.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
580 (goto-char starting-point))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
581
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
582
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
583 ;; Compatibility with old versions.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
584 (defalias 'edebug-all-defuns 'edebug-all-defs)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
585
67780
6f62623c8c61 (edebug-all-defs, edebug-all-forms): Add autoload cookies.
Juri Linkov <juri@jurta.org>
parents: 67635
diff changeset
586 ;;;###autoload
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
587 (defun edebug-all-defs ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
588 "Toggle edebugging of all definitions."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
589 (interactive)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
590 (setq edebug-all-defs (not edebug-all-defs))
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
591 (message "Edebugging all definitions is %s."
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
592 (if edebug-all-defs "on" "off")))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
593
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
594
67780
6f62623c8c61 (edebug-all-defs, edebug-all-forms): Add autoload cookies.
Juri Linkov <juri@jurta.org>
parents: 67635
diff changeset
595 ;;;###autoload
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
596 (defun edebug-all-forms ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
597 "Toggle edebugging of all forms."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
598 (interactive)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
599 (setq edebug-all-forms (not edebug-all-forms))
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
600 (message "Edebugging all forms is %s."
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
601 (if edebug-all-forms "on" "off")))
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
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
604 (defun edebug-install-read-eval-functions ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
605 (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
606 ;; Don't install if already installed.
26049
e7c4cf80a64a (edebug-install-read-eval-functions)
Dave Love <fx@gnu.org>
parents: 25812
diff changeset
607 (unless load-read-function
e7c4cf80a64a (edebug-install-read-eval-functions)
Dave Love <fx@gnu.org>
parents: 25812
diff changeset
608 (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
609 (defalias 'eval-defun 'edebug-eval-defun)))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
610
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
611 (defun edebug-uninstall-read-eval-functions ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
612 (interactive)
26049
e7c4cf80a64a (edebug-install-read-eval-functions)
Dave Love <fx@gnu.org>
parents: 25812
diff changeset
613 (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
614 (defalias 'eval-defun (symbol-function 'edebug-original-eval-defun)))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
615
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
616
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
617 ;;; Edebug internal data
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
618
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
619 ;; 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
620 ;; buffer-local variable `edebug-form-data'.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
621
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
622 (make-variable-buffer-local 'edebug-form-data)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
623
41175
7a8a9f274e2c (edebug-form-data, edebug-offsets)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40475
diff changeset
624 (defvar edebug-form-data nil)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
625 ;; A list of entries associating symbols with buffer regions.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
626 ;; 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
627 ;; @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
628 ;; 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
629 ;; 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
630 ;; property list.
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 ;; 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
633 ;; 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
634 ;; list of a symbol.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
635
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
636 (defun edebug-make-form-data-entry (symbol begin end)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
637 (list symbol begin end))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
638
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
639 (defsubst edebug-form-data-name (entry)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
640 (car entry))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
641
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
642 (defsubst edebug-form-data-begin (entry)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
643 (nth 1 entry))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
644
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
645 (defsubst edebug-form-data-end (entry)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
646 (nth 2 entry))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
647
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
648 (defsubst edebug-set-form-data-entry (entry name begin end)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
649 (setcar entry name);; in case name is changed
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
650 (set-marker (nth 1 entry) begin)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
651 (set-marker (nth 2 entry) end))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
652
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
653 (defun edebug-get-form-data-entry (pnt &optional end-point)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
654 ;; 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
655 ;; If END-POINT is supplied, match must be exact.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
656 ;; Return `nil' if none found.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
657 (let ((rest edebug-form-data)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
658 closest-entry
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
659 (closest-dist 999999)) ;; need maxint here
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
660 (while (and rest (< 0 closest-dist))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
661 (let* ((entry (car rest))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
662 (begin (edebug-form-data-begin entry))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
663 (dist (- pnt begin)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
664 (setq rest (cdr rest))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
665 (if (and (<= 0 dist)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
666 (< dist closest-dist)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
667 (or (not end-point)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
668 (= end-point (edebug-form-data-end entry)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
669 (<= pnt (edebug-form-data-end entry)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
670 (setq closest-dist dist
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
671 closest-entry entry))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
672 closest-entry))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
673
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
674 ;; Also need to find all contained entries,
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
675 ;; 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
676
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
677 (defun edebug-form-data-symbol ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
678 ;; 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
679 ;; If point is not inside a edebuggable form, cause error.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
680 (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
681 (error "Not inside instrumented form")))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
682
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
683 (defun edebug-make-top-form-data-entry (new-entry)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
684 ;; 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
685 (edebug-clear-form-data-entry new-entry)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
686 (setq edebug-form-data (cons new-entry edebug-form-data)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
687
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
688 (defun edebug-clear-form-data-entry (entry)
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
689 ;; 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
690 ;; 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
691 (if entry
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
692 (progn
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
693 ;; Instead of this, we could just find all contained forms.
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
694 ;; (put (car entry) 'edebug nil) ;
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
695 ;; (mapcar 'edebug-clear-form-data-entry ; dangerous
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
696 ;; (get (car entry) 'edebug-dependents))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
697 ;; (set-marker (nth 1 entry) nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
698 ;; (set-marker (nth 2 entry) nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
699 (setq edebug-form-data (delq entry edebug-form-data)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
700
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
701 ;;; Parser utilities
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
702
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
703 (defun edebug-syntax-error (&rest args)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
704 ;; Signal an invalid-read-syntax with ARGS.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
705 (signal 'invalid-read-syntax args))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
706
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
707
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
708 (defconst edebug-read-syntax-table
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
709 ;; Lookup table for significant characters indicating the class of the
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
710 ;; 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
711 (let ((table (make-char-table 'syntax-table 'symbol))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
712 (i 0))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
713 (while (< i ?!)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
714 (aset table i 'space)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
715 (setq i (1+ i)))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
716 (aset table ?\( 'lparen)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
717 (aset table ?\) 'rparen)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
718 (aset table ?\' 'quote)
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
719 (aset table ?\` 'backquote)
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
720 (aset table ?\, 'comma)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
721 (aset table ?\" 'string)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
722 (aset table ?\? 'char)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
723 (aset table ?\[ 'lbracket)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
724 (aset table ?\] 'rbracket)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
725 (aset table ?\. 'dot)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
726 (aset table ?\# 'hash)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
727 ;; 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
728 ;; 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
729 table))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
730
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
731 (defun edebug-next-token-class ()
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
732 ;; 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
733 ;; lparen, rparen, dot, quote, backquote, comma, string, char, vector,
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
734 ;; or symbol.
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
735 (edebug-skip-whitespace)
25056
d29c2ded5971 Delete compatibility code.
Karl Heuer <kwzh@gnu.org>
parents: 24122
diff changeset
736 (if (and (eq (following-char) ?.)
d29c2ded5971 Delete compatibility code.
Karl Heuer <kwzh@gnu.org>
parents: 24122
diff changeset
737 (save-excursion
d29c2ded5971 Delete compatibility code.
Karl Heuer <kwzh@gnu.org>
parents: 24122
diff changeset
738 (forward-char 1)
57959
47b64fe4daa8 (edebug-next-token-class): Allow all symbol-constituent characters
Juri Linkov <juri@jurta.org>
parents: 56004
diff changeset
739 (or (and (eq (aref edebug-read-syntax-table (following-char))
47b64fe4daa8 (edebug-next-token-class): Allow all symbol-constituent characters
Juri Linkov <juri@jurta.org>
parents: 56004
diff changeset
740 'symbol)
47b64fe4daa8 (edebug-next-token-class): Allow all symbol-constituent characters
Juri Linkov <juri@jurta.org>
parents: 56004
diff changeset
741 (not (= (following-char) ?\;)))
47b64fe4daa8 (edebug-next-token-class): Allow all symbol-constituent characters
Juri Linkov <juri@jurta.org>
parents: 56004
diff changeset
742 (memq (following-char) '(?\, ?\.)))))
25056
d29c2ded5971 Delete compatibility code.
Karl Heuer <kwzh@gnu.org>
parents: 24122
diff changeset
743 'symbol
d29c2ded5971 Delete compatibility code.
Karl Heuer <kwzh@gnu.org>
parents: 24122
diff changeset
744 (aref edebug-read-syntax-table (following-char))))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
745
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
746
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
747 (defun edebug-skip-whitespace ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
748 ;; Leave point before the next token, skipping white space and comments.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
749 (skip-chars-forward " \t\r\n\f")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
750 (while (= (following-char) ?\;)
67357
ad09fcb8cef5 (edebug-skip-whitespace): read1:lread.c says
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64751
diff changeset
751 (skip-chars-forward "^\n") ; skip the comment
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
752 (skip-chars-forward " \t\r\n\f")))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
753
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
754
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
755 ;; Mostly obsolete reader; still used in one case.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
756
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
757 (defun edebug-read-sexp ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
758 ;; Read one sexp from the current buffer starting at point.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
759 ;; 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
760 ;; 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
761 ;; This works for reading anything legitimate, but it
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
762 ;; is gummed up by parser inconsistencies (bugs?)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
763 (let ((class (edebug-next-token-class)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
764 (cond
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
765 ;; 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
766 ;; 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
767 ((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
768 ((eq class 'string) (edebug-original-read (current-buffer)))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
769 ((eq class 'quote) (forward-char 1)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
770 (list 'quote (edebug-read-sexp)))
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
771 ((eq class 'backquote)
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
772 (list '\` (edebug-read-sexp)))
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
773 ((eq class 'comma)
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
774 (list '\, (edebug-read-sexp)))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
775 (t ; anything else, just read it.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
776 (edebug-original-read (current-buffer))))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
777
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
778 ;;; Offsets for reader
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
779
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
780 ;; Define a structure to represent offset positions of expressions.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
781 ;; Each offset structure looks like: (before . after) for constituents,
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
782 ;; or for structures that have elements: (before <subexpressions> . after)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
783 ;; where the <subexpressions> are the offset structures for subexpressions
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
784 ;; including the head of a list.
41175
7a8a9f274e2c (edebug-form-data, edebug-offsets)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40475
diff changeset
785 (defvar edebug-offsets nil)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
786
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
787 ;; Stack of offset structures in reverse order of the nesting.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
788 ;; 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
789 (defvar edebug-offsets-stack nil)
7a8a9f274e2c (edebug-form-data, edebug-offsets)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40475
diff changeset
790 (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
791
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
792 ;; 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
793 ;; 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
794 ;; must also be condensed.
41175
7a8a9f274e2c (edebug-form-data, edebug-offsets)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40475
diff changeset
795 (defvar edebug-read-dotted-list nil)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
796
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
797 (defsubst edebug-initialize-offsets ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
798 ;; Reinitialize offset recording.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
799 (setq edebug-current-offset nil))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
800
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
801 (defun edebug-store-before-offset (point)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
802 ;; 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
803 (let ((new-offset (list point)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
804 (if edebug-current-offset
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
805 (setcdr edebug-current-offset
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
806 (cons new-offset (cdr edebug-current-offset)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
807 ;; Otherwise, we are at the top level, so initialize.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
808 (setq edebug-offsets new-offset
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
809 edebug-offsets-stack nil
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
810 edebug-read-dotted-list nil))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
811 ;; Cons the new offset to the front of the stack.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
812 (setq edebug-offsets-stack (cons new-offset edebug-offsets-stack)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
813 edebug-current-offset new-offset)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
814 ))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
815
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
816 (defun edebug-store-after-offset (point)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
817 ;; Finalize the current offset struct by reversing it and
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
818 ;; store POINT as the after offset.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
819 (if (not edebug-read-dotted-list)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
820 ;; Just reverse the offsets of all subexpressions.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
821 (setcdr edebug-current-offset (nreverse (cdr edebug-current-offset)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
822
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
823 ;; 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
824 (setq edebug-read-dotted-list nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
825 ;; Drop the corresponding offset pair.
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
826 ;; 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
827 ;; with the cdr of last offset.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
828 (setcdr edebug-current-offset
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
829 (nconc (nreverse (cdr (cdr edebug-current-offset)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
830 (cdr (car (cdr edebug-current-offset))))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
831
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
832 ;; Now append the point using nconc.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
833 (setq edebug-current-offset (nconc edebug-current-offset point))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
834 ;; Pop the stack.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
835 (setq edebug-offsets-stack (cdr edebug-offsets-stack)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
836 edebug-current-offset (car edebug-offsets-stack)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
837
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
838 (defun edebug-ignore-offset ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
839 ;; Ignore the last created offset pair.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
840 (setcdr edebug-current-offset (cdr (cdr edebug-current-offset))))
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 (defmacro edebug-storing-offsets (point &rest body)
51331
cf0bc7d12c33 (edebug-storing-offsets): Move indent and debug to inside the macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51322
diff changeset
843 (declare (debug (form body)) (indent 1))
26519
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
844 `(unwind-protect
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
845 (progn
26519
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
846 (edebug-store-before-offset ,point)
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
847 ,@body)
26519
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
848 (edebug-store-after-offset (point))))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
849
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
850
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
851 ;;; Reader for Emacs Lisp.
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
852
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
853 ;; Uses edebug-next-token-class (and edebug-skip-whitespace) above.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
854
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
855 (defconst edebug-read-alist
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
856 '((symbol . edebug-read-symbol)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
857 (lparen . edebug-read-list)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
858 (string . edebug-read-string)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
859 (quote . edebug-read-quote)
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
860 (backquote . edebug-read-backquote)
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
861 (comma . edebug-read-comma)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
862 (lbracket . edebug-read-vector)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
863 (hash . edebug-read-function)
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
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
866 (defun edebug-read-storing-offsets (stream)
51331
cf0bc7d12c33 (edebug-storing-offsets): Move indent and debug to inside the macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51322
diff changeset
867 (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
868 (edebug-storing-offsets (point)
51331
cf0bc7d12c33 (edebug-storing-offsets): Move indent and debug to inside the macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51322
diff changeset
869 (funcall
cf0bc7d12c33 (edebug-storing-offsets): Move indent and debug to inside the macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51322
diff changeset
870 (or (cdr (assq (edebug-next-token-class) edebug-read-alist))
cf0bc7d12c33 (edebug-storing-offsets): Move indent and debug to inside the macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51322
diff changeset
871 ;; anything else, just read it.
cf0bc7d12c33 (edebug-storing-offsets): Move indent and debug to inside the macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51322
diff changeset
872 'edebug-original-read)
cf0bc7d12c33 (edebug-storing-offsets): Move indent and debug to inside the macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51322
diff changeset
873 stream))))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
874
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
875 (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
876 (edebug-original-read stream))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
877
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
878 (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
879 (edebug-original-read stream))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
880
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
881 (defun edebug-read-quote (stream)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
882 ;; Turn 'thing into (quote thing)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
883 (forward-char 1)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
884 (list
51331
cf0bc7d12c33 (edebug-storing-offsets): Move indent and debug to inside the macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51322
diff changeset
885 (edebug-storing-offsets (1- (point)) 'quote)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
886 (edebug-read-storing-offsets stream)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
887
51331
cf0bc7d12c33 (edebug-storing-offsets): Move indent and debug to inside the macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51322
diff changeset
888 (defvar edebug-read-backquote-level 0
cf0bc7d12c33 (edebug-storing-offsets): Move indent and debug to inside the macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51322
diff changeset
889 "If non-zero, we're in a new-style backquote.
cf0bc7d12c33 (edebug-storing-offsets): Move indent and debug to inside the macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51322
diff changeset
890 It should never be negative. This controls how we read comma constructs.")
cf0bc7d12c33 (edebug-storing-offsets): Move indent and debug to inside the macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51322
diff changeset
891
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
892 (defun edebug-read-backquote (stream)
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
893 ;; Turn `thing into (\` thing)
51331
cf0bc7d12c33 (edebug-storing-offsets): Move indent and debug to inside the macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51322
diff changeset
894 (forward-char 1)
cf0bc7d12c33 (edebug-storing-offsets): Move indent and debug to inside the macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51322
diff changeset
895 (list
cf0bc7d12c33 (edebug-storing-offsets): Move indent and debug to inside the macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51322
diff changeset
896 (edebug-storing-offsets (1- (point)) '\`)
cf0bc7d12c33 (edebug-storing-offsets): Move indent and debug to inside the macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51322
diff changeset
897 (let ((edebug-read-backquote-level (1+ edebug-read-backquote-level)))
cf0bc7d12c33 (edebug-storing-offsets): Move indent and debug to inside the macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51322
diff changeset
898 (edebug-read-storing-offsets stream))))
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
899
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
900 (defun edebug-read-comma (stream)
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
901 ;; Turn ,thing into (\, thing). Handle ,@ and ,. also.
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
902 (let ((opoint (point)))
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
903 (forward-char 1)
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
904 (let ((symbol '\,))
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
905 (cond ((eq (following-char) ?\.)
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
906 (setq symbol '\,\.)
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
907 (forward-char 1))
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
908 ((eq (following-char) ?\@)
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
909 (setq symbol '\,@)
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
910 (forward-char 1)))
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
911 ;; Generate the same structure of offsets we would have
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
912 ;; if the resulting list appeared verbatim in the input text.
51331
cf0bc7d12c33 (edebug-storing-offsets): Move indent and debug to inside the macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51322
diff changeset
913 (if (zerop edebug-read-backquote-level)
cf0bc7d12c33 (edebug-storing-offsets): Move indent and debug to inside the macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51322
diff changeset
914 (edebug-storing-offsets opoint symbol)
cf0bc7d12c33 (edebug-storing-offsets): Move indent and debug to inside the macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51322
diff changeset
915 (list
cf0bc7d12c33 (edebug-storing-offsets): Move indent and debug to inside the macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51322
diff changeset
916 (edebug-storing-offsets opoint symbol)
cf0bc7d12c33 (edebug-storing-offsets): Move indent and debug to inside the macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51322
diff changeset
917 (let ((edebug-read-backquote-level (1- edebug-read-backquote-level)))
cf0bc7d12c33 (edebug-storing-offsets): Move indent and debug to inside the macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51322
diff changeset
918 (edebug-read-storing-offsets stream)))))))
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
919
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
920 (defun edebug-read-function (stream)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
921 ;; Turn #'thing into (function thing)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
922 (forward-char 1)
33758
8c1e62157545 (edebug-version)
Dave Love <fx@gnu.org>
parents: 33709
diff changeset
923 (cond ((eq ?\' (following-char))
8c1e62157545 (edebug-version)
Dave Love <fx@gnu.org>
parents: 33709
diff changeset
924 (forward-char 1)
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
925 (list
51331
cf0bc7d12c33 (edebug-storing-offsets): Move indent and debug to inside the macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51322
diff changeset
926 (edebug-storing-offsets (- (point) 2)
33758
8c1e62157545 (edebug-version)
Dave Love <fx@gnu.org>
parents: 33709
diff changeset
927 (if (featurep 'cl) 'function* 'function))
8c1e62157545 (edebug-version)
Dave Love <fx@gnu.org>
parents: 33709
diff changeset
928 (edebug-read-storing-offsets stream)))
38730
098eb6e24910 (edebug-read-function): Fix handling of
Gerd Moellmann <gerd@gnu.org>
parents: 34854
diff changeset
929 ((memq (following-char) '(?: ?B ?O ?X ?b ?o ?x ?1 ?2 ?3 ?4 ?5 ?6
51331
cf0bc7d12c33 (edebug-storing-offsets): Move indent and debug to inside the macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51322
diff changeset
930 ?7 ?8 ?9 ?0))
38730
098eb6e24910 (edebug-read-function): Fix handling of
Gerd Moellmann <gerd@gnu.org>
parents: 34854
diff changeset
931 (backward-char 1)
33758
8c1e62157545 (edebug-version)
Dave Love <fx@gnu.org>
parents: 33709
diff changeset
932 (edebug-original-read stream))
8c1e62157545 (edebug-version)
Dave Love <fx@gnu.org>
parents: 33709
diff changeset
933 (t (edebug-syntax-error "Bad char after #"))))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
934
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
935 (defun edebug-read-list (stream)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
936 (forward-char 1) ; skip \(
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
937 (prog1
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
938 (let ((elements))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
939 (while (not (memq (edebug-next-token-class) '(rparen dot)))
51331
cf0bc7d12c33 (edebug-storing-offsets): Move indent and debug to inside the macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51322
diff changeset
940 (if (and (eq (edebug-next-token-class) 'backquote)
cf0bc7d12c33 (edebug-storing-offsets): Move indent and debug to inside the macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51322
diff changeset
941 (null elements)
cf0bc7d12c33 (edebug-storing-offsets): Move indent and debug to inside the macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51322
diff changeset
942 (zerop edebug-read-backquote-level))
cf0bc7d12c33 (edebug-storing-offsets): Move indent and debug to inside the macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51322
diff changeset
943 (progn
cf0bc7d12c33 (edebug-storing-offsets): Move indent and debug to inside the macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51322
diff changeset
944 ;; Old style backquote.
cf0bc7d12c33 (edebug-storing-offsets): Move indent and debug to inside the macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51322
diff changeset
945 (forward-char 1) ; Skip backquote.
cf0bc7d12c33 (edebug-storing-offsets): Move indent and debug to inside the macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51322
diff changeset
946 ;; Call edebug-storing-offsets here so that we
cf0bc7d12c33 (edebug-storing-offsets): Move indent and debug to inside the macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51322
diff changeset
947 ;; produce the same offsets we would have had
cf0bc7d12c33 (edebug-storing-offsets): Move indent and debug to inside the macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51322
diff changeset
948 ;; if the backquote were an ordinary symbol.
cf0bc7d12c33 (edebug-storing-offsets): Move indent and debug to inside the macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51322
diff changeset
949 (push (edebug-storing-offsets (1- (point)) '\`) elements))
cf0bc7d12c33 (edebug-storing-offsets): Move indent and debug to inside the macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51322
diff changeset
950 (push (edebug-read-storing-offsets stream) elements)))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
951 (setq elements (nreverse elements))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
952 (if (eq 'dot (edebug-next-token-class))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
953 (let (dotted-form)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
954 (forward-char 1) ; skip \.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
955 (setq dotted-form (edebug-read-storing-offsets stream))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
956 elements (nconc elements dotted-form)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
957 (if (not (eq (edebug-next-token-class) 'rparen))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
958 (edebug-syntax-error "Expected `)'"))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
959 (setq edebug-read-dotted-list (listp dotted-form))
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 elements)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
962 (forward-char 1) ; skip \)
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
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
965 (defun edebug-read-vector (stream)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
966 (forward-char 1) ; skip \[
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
967 (prog1
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
968 (let ((elements))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
969 (while (not (eq 'rbracket (edebug-next-token-class)))
51331
cf0bc7d12c33 (edebug-storing-offsets): Move indent and debug to inside the macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51322
diff changeset
970 (push (edebug-read-storing-offsets stream) elements))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
971 (apply 'vector (nreverse elements)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
972 (forward-char 1) ; skip \]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
973 ))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
974
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
975 ;;; 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
976
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
977 (defvar edebug-dotted-spec nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
978
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
979 (defun edebug-new-cursor (expressions offsets)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
980 ;; Return a new cursor for EXPRESSIONS with OFFSETS.
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
981 (if (vectorp expressions)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
982 (setq expressions (append expressions nil)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
983 (cons expressions offsets))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
984
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
985 (defsubst edebug-set-cursor (cursor expressions offsets)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
986 ;; Set the CURSOR's EXPRESSIONS and OFFSETS to the given.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
987 ;; Return the cursor.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
988 (setcar cursor expressions)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
989 (setcdr cursor offsets)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
990 cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
991
51332
2607d23dcfe2 Typo (no clue what happened).
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51331
diff changeset
992 (defun edebug-copy-cursor (cursor)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
993 ;; Copy the cursor using the same object and offsets.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
994 (cons (car cursor) (cdr cursor)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
995
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
996 (defsubst edebug-cursor-expressions (cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
997 (car cursor))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
998 (defsubst edebug-cursor-offsets (cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
999 (cdr cursor))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1000
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1001 (defsubst edebug-empty-cursor (cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1002 ;; 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
1003 (null (car 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-element (cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1006 ;; Return the top element at the cursor.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1007 ;; Assumes not empty.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1008 (car (car cursor)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1009
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1010 (defun edebug-top-element-required (cursor &rest error)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1011 ;; Check if a dotted form is required.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1012 (if edebug-dotted-spec (edebug-no-match cursor "Dot expected."))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1013 ;; Check if there is at least one more argument.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1014 (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
1015 ;; Return that top element.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1016 (edebug-top-element cursor))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1017
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1018 (defsubst edebug-top-offset (cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1019 ;; Return the top offset pair corresponding to the top element.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1020 (car (cdr cursor)))
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-move-cursor (cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1023 ;; 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
1024 ;; throw no-match if empty before moving.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1025 ;; This is a violation of the cursor encapsulation, but
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1026 ;; there is plenty of that going on while matching.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1027 ;; The following test should always fail.
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1028 (if (edebug-empty-cursor cursor)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1029 (edebug-no-match cursor "Not enough arguments."))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1030 (setcar cursor (cdr (car cursor)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1031 (setcdr cursor (cdr (cdr cursor)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1032 cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1033
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1034
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1035 (defun edebug-before-offset (cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1036 ;; Return the before offset of the cursor.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1037 ;; If there is nothing left in the offsets,
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1038 ;; return one less than the offset itself,
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1039 ;; which is the after offset for a list.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1040 (let ((offset (edebug-cursor-offsets cursor)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1041 (if (consp offset)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1042 (car (car offset))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1043 (1- offset))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1044
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1045 (defun edebug-after-offset (cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1046 ;; Return the after offset of the cursor object.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1047 (let ((offset (edebug-top-offset cursor)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1048 (while (consp offset)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1049 (setq offset (cdr offset)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1050 offset))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1051
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1052 ;;; The Parser
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1053
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1054 ;; The top level function for parsing forms is
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1055 ;; 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
1056 ;; 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
1057 ;; should appear to work like eval-defun.
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1058
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1059 ;; The basic plan is to surround each expression with a call to
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1060 ;; 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
1061 ;; all expressions. Thus an expression "exp" becomes:
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1062
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1063 ;; (edebug-after (edebug-before 1) 2 exp)
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1064
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1065 ;; 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
1066 ;; exp at offset 1 of the current function. The expression is
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1067 ;; evaluated, which may cause more edebug calls, and then point is
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1068 ;; moved to offset 2 after the end of exp.
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1069
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1070 ;; 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
1071 ;; edebug-enter, which supplies the function name and the actual
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1072 ;; arguments to the function. See functions edebug-enter, edebug-before,
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1073 ;; and edebug-after for more details.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1074
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1075 ;; Dynamically bound vars, left unbound, but globally declared.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1076 ;; This is to quiet the byte compiler.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1077
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1078 ;; Window data of the highest definition being wrapped.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1079 ;; This data is shared by all embedded definitions.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1080 (defvar edebug-top-window-data)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1081
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1082 (defvar edebug-&optional)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1083 (defvar edebug-&rest)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1084 (defvar edebug-gate nil) ;; whether no-match forces an error.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1085
41175
7a8a9f274e2c (edebug-form-data, edebug-offsets)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40475
diff changeset
1086 (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
1087 (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
1088
7a8a9f274e2c (edebug-form-data, edebug-offsets)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40475
diff changeset
1089 (defvar edebug-error-point nil)
7a8a9f274e2c (edebug-form-data, edebug-offsets)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40475
diff changeset
1090 (defvar edebug-best-error nil)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1091
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1092
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1093 (defun edebug-read-and-maybe-wrap-form ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1094 ;; 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
1095 ;; 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
1096
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1097 ;; Run the setup hook.
17458
eeff371bfe78 (edebug-read-and-maybe-wrap-form): Protect
Richard M. Stallman <rms@gnu.org>
parents: 17414
diff changeset
1098 ;; 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
1099 (let ((temp-hook edebug-setup-hook))
eeff371bfe78 (edebug-read-and-maybe-wrap-form): Protect
Richard M. Stallman <rms@gnu.org>
parents: 17414
diff changeset
1100 (setq edebug-setup-hook nil)
eeff371bfe78 (edebug-read-and-maybe-wrap-form): Protect
Richard M. Stallman <rms@gnu.org>
parents: 17414
diff changeset
1101 (run-hooks 'temp-hook))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1102
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1103 (let (result
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1104 edebug-top-window-data
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1105 edebug-def-name;; make sure it is locally nil
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1106 ;; I don't like these here!!
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1107 edebug-&optional
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1108 edebug-&rest
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1109 edebug-gate
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1110 edebug-best-error
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1111 edebug-error-point
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1112 no-match
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1113 ;; Do this once here instead of several times.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1114 (max-lisp-eval-depth (+ 800 max-lisp-eval-depth))
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1115 (max-specpdl-size (+ 2000 max-specpdl-size)))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1116 (setq no-match
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1117 (catch 'no-match
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1118 (setq result (edebug-read-and-maybe-wrap-form1))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1119 nil))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1120 (if no-match
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1121 (apply 'edebug-syntax-error no-match))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1122 result))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1123
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1124
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1125 (defun edebug-read-and-maybe-wrap-form1 ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1126 (let (spec
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1127 def-kind
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1128 defining-form-p
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1129 def-name
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1130 ;; 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
1131 ;; calls to edebug-read, they need to be here.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1132 edebug-offsets
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1133 edebug-offsets-stack
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1134 edebug-current-offset ; reset to nil
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1135 )
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1136 (save-excursion
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1137 (if (and (eq 'lparen (edebug-next-token-class))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1138 (eq 'symbol (progn (forward-char 1) (edebug-next-token-class))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1139 ;; 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
1140 (setq def-kind (edebug-original-read (current-buffer))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1141 spec (and (symbolp def-kind) (get-edebug-spec def-kind))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1142 defining-form-p (and (listp spec)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1143 (eq '&define (car spec)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1144 ;; 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
1145 def-name (if (and defining-form-p
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1146 (eq 'name (car (cdr spec)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1147 (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
1148 (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
1149 ;;;(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
1150 (cond
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1151 (defining-form-p
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1152 (if (or edebug-all-defs edebug-all-forms)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1153 ;; 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
1154 ;; then let edebug-list-form start it.
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1155 (let ((cursor (edebug-new-cursor
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1156 (list (edebug-read-storing-offsets (current-buffer)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1157 (list edebug-offsets))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1158 (car
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1159 (edebug-make-form-wrapper
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1160 cursor
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1161 (edebug-before-offset cursor)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1162 (1- (edebug-after-offset cursor))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1163 (list (cons (symbol-name def-kind) (cdr spec))))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1164
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1165 ;; Not edebugging this form, so reset the symbol's edebug
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1166 ;; 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
1167 ;; This only works for defs with simple names.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1168 (put def-name 'edebug (point-marker))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1169 ;; Also nil out dependent defs.
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1170 '(mapcar (function
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1171 (lambda (def)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1172 (put def-name 'edebug nil)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1173 (get def-name 'edebug-dependents))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1174 (edebug-read-sexp)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1175
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1176 ;; If all forms are being edebugged, explicitly wrap it.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1177 (edebug-all-forms
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1178 (let ((cursor (edebug-new-cursor
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1179 (list (edebug-read-storing-offsets (current-buffer)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1180 (list edebug-offsets))))
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1181 (edebug-make-form-wrapper
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1182 cursor
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1183 (edebug-before-offset cursor)
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1184 (edebug-after-offset cursor)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1185 nil)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1186
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1187 ;; Not a defining form, and not edebugging.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1188 (t (edebug-read-sexp)))
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
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1191
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1192 (defvar edebug-def-args) ; args of defining form.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1193 (defvar edebug-def-interactive) ; is it an emacs interactive function?
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1194 (defvar edebug-inside-func) ;; whether code is inside function context.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1195 ;; 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
1196
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1197 (defun edebug-interactive-p-name ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1198 ;; 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
1199 ;; status of interactive-p for this function.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1200 (intern (format "edebug-%s-interactive-p" edebug-def-name)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1201
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1202
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1203 (defun edebug-wrap-def-body (forms)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1204 "Wrap the FORMS of a definition body."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1205 (if edebug-def-interactive
26519
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
1206 `(let ((,(edebug-interactive-p-name)
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
1207 (interactive-p)))
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
1208 ,(edebug-make-enter-wrapper forms))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1209 (edebug-make-enter-wrapper forms)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1210
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1211
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1212 (defun edebug-make-enter-wrapper (forms)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1213 ;; Generate the enter wrapper for some forms of a definition.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1214 ;; 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
1215 ;; 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
1216 ;; 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
1217 ;; Do this after parsing since that may find a name.
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1218 (setq edebug-def-name
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1219 (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
1220 `(edebug-enter
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
1221 (quote ,edebug-def-name)
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1222 ,(if edebug-inside-func
26648
2cca1ed12a51 (edebug-make-enter-wrapper): Correct
Gerd Moellmann <gerd@gnu.org>
parents: 26519
diff changeset
1223 `(list
2cca1ed12a51 (edebug-make-enter-wrapper): Correct
Gerd Moellmann <gerd@gnu.org>
parents: 26519
diff changeset
1224 ;; Doesn't work with more than one def-body!!
2cca1ed12a51 (edebug-make-enter-wrapper): Correct
Gerd Moellmann <gerd@gnu.org>
parents: 26519
diff changeset
1225 ;; But the list will just be reversed.
2cca1ed12a51 (edebug-make-enter-wrapper): Correct
Gerd Moellmann <gerd@gnu.org>
parents: 26519
diff changeset
1226 ,@(nreverse edebug-def-args))
26519
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
1227 'nil)
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
1228 (function (lambda () ,@forms))
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
1229 ))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1230
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1231
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1232 (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
1233
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1234 (defvar edebug-offset-index) ; the next available offset index.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1235 (defvar edebug-offset-list) ; the list of offset positions.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1236
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1237 (defun edebug-inc-offset (offset)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1238 ;; modifies edebug-offset-index and edebug-offset-list
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1239 ;; accesses edebug-func-marc and buffer point
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1240 (prog1
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1241 edebug-offset-index
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1242 (setq edebug-offset-list (cons (- offset edebug-form-begin-marker)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1243 edebug-offset-list)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1244 edebug-offset-index (1+ edebug-offset-index))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1245
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 (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
1248 ;; 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
1249 ;; given FORM. Looks like:
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1250 ;; (edebug-after (edebug-before BEFORE-INDEX) AFTER-INDEX FORM)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1251 ;; Also increment the offset index for subsequent use.
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1252 (list 'edebug-after
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1253 (list 'edebug-before before-index)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1254 after-index form))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1255
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1256 (defun edebug-make-after-form (form after-index)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1257 ;; Like edebug-make-before-and-after-form, but only after.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1258 (list 'edebug-after 0 after-index form))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1259
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1260
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1261 (defun edebug-unwrap (sexp)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1262 "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
1263 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
1264 expressions; a `progn' form will be returned enclosing these forms."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1265 (if (consp sexp)
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1266 (cond
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1267 ((eq 'edebug-after (car sexp))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1268 (nth 3 sexp))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1269 ((eq 'edebug-enter (car sexp))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1270 (let ((forms (nthcdr 2 (nth 1 (nth 3 sexp)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1271 (if (> (length forms) 1)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1272 (cons 'progn forms) ;; could return (values forms) instead.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1273 (car forms))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1274 (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
1275 )
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1276 sexp))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1277
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1278 (defun edebug-unwrap* (sexp)
95287
6150694d72ec (edebug-setup-hook, edebug-all-defs, edebug-all-forms, edebug-eval-macro-args,
Juanma Barranquero <lekktu@gmail.com>
parents: 94655
diff changeset
1279 "Return the SEXP recursively unwrapped."
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1280 (let ((new-sexp (edebug-unwrap sexp)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1281 (while (not (eq sexp new-sexp))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1282 (setq sexp new-sexp
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1283 new-sexp (edebug-unwrap sexp)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1284 (if (consp new-sexp)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1285 (mapcar 'edebug-unwrap* new-sexp)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1286 new-sexp)))
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
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1289 (defun edebug-defining-form (cursor form-begin form-end speclist)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1290 ;; Process the defining form, starting outside the form.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1291 ;; The speclist is a generated list spec that looks like:
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1292 ;; (("def-symbol" defining-form-spec-sans-&define))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1293 ;; Skip the first offset.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1294 (edebug-set-cursor cursor (edebug-cursor-expressions cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1295 (cdr (edebug-cursor-offsets cursor)))
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1296 (edebug-make-form-wrapper
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1297 cursor
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1298 form-begin (1- form-end)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1299 speclist))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1300
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1301 (defun edebug-make-form-wrapper (cursor form-begin form-end
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1302 &optional speclist)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1303 ;; 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
1304 ;; 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
1305 ;; 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
1306 ;; 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
1307 (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
1308 ;; Set this marker before parsing.
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1309 (edebug-form-begin-marker
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1310 (if form-data-entry
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1311 (edebug-form-data-begin form-data-entry)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1312 ;; Buffer must be current-buffer for this to work:
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1313 (set-marker (make-marker) form-begin))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1314
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1315 (let (edebug-offset-list
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1316 (edebug-offset-index 0)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1317 result
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1318 ;; For definitions.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1319 ;; (edebug-containing-def-name edebug-def-name)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1320 ;; Get name from form-data, if any.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1321 (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
1322 edebug-def-name
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1323 edebug-def-args
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1324 edebug-def-interactive
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1325 edebug-inside-func;; whether wrapped code executes inside a function.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1326 )
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1327
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1328 (setq result
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1329 (if speclist
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1330 (edebug-match cursor speclist)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1331
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1332 ;; else wrap as an enter-form.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1333 (edebug-make-enter-wrapper (list (edebug-form cursor)))))
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1334
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1335 ;; 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
1336 (setq edebug-def-name
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1337 (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
1338
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1339 ;; Add this def as a dependent of containing def. Buggy.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1340 '(if (and edebug-containing-def-name
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1341 (not (get edebug-containing-def-name 'edebug-dependents)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1342 (put edebug-containing-def-name 'edebug-dependents
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1343 (cons edebug-def-name
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1344 (get edebug-containing-def-name
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1345 'edebug-dependents))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1346
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1347 ;; 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
1348 ;; In the latter case, pointers to the entry remain eq.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1349 (if (not form-data-entry)
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1350 (setq form-data-entry
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1351 (edebug-make-form-data-entry
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1352 edebug-def-name
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1353 edebug-form-begin-marker
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1354 ;; Buffer must be current-buffer.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1355 (set-marker (make-marker) form-end)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1356 ))
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1357 (edebug-set-form-data-entry
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1358 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
1359 form-begin form-end))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1360
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1361 ;; (message "defining: %s" edebug-def-name) (sit-for 2)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1362 (edebug-make-top-form-data-entry form-data-entry)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1363 (message "Edebug: %s" edebug-def-name)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1364 ;;(debug edebug-def-name)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1365
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1366 ;; Destructively reverse edebug-offset-list and make vector from it.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1367 (setq edebug-offset-list (vconcat (nreverse edebug-offset-list)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1368
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1369 ;; Side effects on the property list of edebug-def-name.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1370 (edebug-clear-frequency-count edebug-def-name)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1371 (edebug-clear-coverage edebug-def-name)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1372
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1373 ;; Set up the initial window data.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1374 (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
1375 (let ((window ;; Find the best window for this buffer.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1376 (or (get-buffer-window (current-buffer))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1377 (selected-window))))
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1378 (setq edebug-top-window-data
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1379 (cons window (window-start window)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1380
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1381 ;; Store the edebug data in symbol's property list.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1382 (put edebug-def-name 'edebug
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1383 ;; A struct or vector would be better here!!
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1384 (list edebug-form-begin-marker
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1385 nil ; clear breakpoints
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1386 edebug-offset-list
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1387 edebug-top-window-data
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1388 ))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1389 result
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1390 )))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1391
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 (defun edebug-clear-frequency-count (name)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1394 ;; Create initial frequency count vector.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1395 ;; 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
1396 (put name 'edebug-freq-count
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1397 (make-vector (length edebug-offset-list) 0)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1398
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1399
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1400 (defun edebug-clear-coverage (name)
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1401 ;; Create initial coverage vector.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1402 ;; 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
1403 (put name 'edebug-coverage
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1404 (make-vector (length edebug-offset-list) 'unknown)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1405
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1406
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1407 (defun edebug-form (cursor)
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1408 ;; Return the instrumented form for the following form.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1409 ;; 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
1410 (let* ((form (edebug-top-element-required cursor "Expected form"))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1411 (offset (edebug-top-offset cursor)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1412 (prog1
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1413 (cond
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1414 ((consp form)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1415 ;; 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
1416 (if (eq 'quote (car form))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1417 form
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1418 (let* ((head (car form))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1419 (spec (and (symbolp head) (get-edebug-spec head)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1420 (new-cursor (edebug-new-cursor form offset)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1421 ;; 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
1422 ;; An indirect spec would not work here, yet.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1423 (if (and (consp spec) (eq '&define (car spec)))
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1424 (edebug-defining-form
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1425 new-cursor
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1426 (car offset);; before the form
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1427 (edebug-after-offset cursor)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1428 (cons (symbol-name head) (cdr spec)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1429 ;; Wrap a regular form.
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1430 (edebug-make-before-and-after-form
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1431 (edebug-inc-offset (car offset))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1432 (edebug-list-form new-cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1433 ;; After processing the list form, the new-cursor is left
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1434 ;; with the offset after the form.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1435 (edebug-inc-offset (edebug-cursor-offsets new-cursor))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1436 )))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1437
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1438 ((symbolp form)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1439 (cond
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1440 ;; Check for constant symbols that don't get wrapped.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1441 ((or (memq form '(t nil))
28567
3ed20cb4c9b3 (edebug-keywordp): Remove. Change callers
Dave Love <fx@gnu.org>
parents: 28516
diff changeset
1442 (keywordp form))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1443 form)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1444
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1445 (t ;; just a variable
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1446 (edebug-make-after-form form (edebug-inc-offset (cdr offset))))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1447
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1448 ;; Anything else is self-evaluating.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1449 (t form))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1450 (edebug-move-cursor cursor))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1451
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1452
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1453 (defsubst edebug-forms (cursor) (edebug-match cursor '(&rest form)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1454 (defsubst edebug-sexps (cursor) (edebug-match cursor '(&rest sexp)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1455
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1456 (defsubst edebug-list-form-args (head cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1457 ;; 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
1458 ;; Helper for edebug-list-form
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1459 (let ((spec (get-edebug-spec head)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1460 (cond
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1461 (spec
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1462 (cond
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1463 ((consp spec)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1464 ;; It is a speclist.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1465 (let (edebug-best-error
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1466 edebug-error-point);; This may not be needed.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1467 (edebug-match-sublist cursor spec)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1468 ((eq t spec) (edebug-forms cursor))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1469 ((eq 0 spec) (edebug-sexps cursor))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1470 ((symbolp spec) (funcall spec cursor));; Not used by edebug,
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1471 ; but leave it in for compatibility.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1472 ))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1473 ;; No edebug-form-spec provided.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1474 ((edebug-macrop head)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1475 (if edebug-eval-macro-args
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1476 (edebug-forms cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1477 (edebug-sexps cursor)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1478 (t ;; Otherwise it is a function call.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1479 (edebug-forms cursor)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1480
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1481
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1482 (defun edebug-list-form (cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1483 ;; Return an instrumented form built from the list form.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1484 ;; 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
1485 (let ((head (edebug-top-element-required cursor "Expected elements"))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1486 ;; Prevent backtracking whenever instrumenting.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1487 (edebug-gate t)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1488 ;; A list form is never optional because it matches anything.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1489 (edebug-&optional nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1490 (edebug-&rest nil))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1491 ;; Skip the first offset.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1492 (edebug-set-cursor cursor (edebug-cursor-expressions cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1493 (cdr (edebug-cursor-offsets cursor)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1494 (cond
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1495 ((symbolp head)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1496 (cond
80025
f162659514ca Comment changes.
Richard M. Stallman <rms@gnu.org>
parents: 79704
diff changeset
1497 ((null head) nil) ; () is valid.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1498 ((eq head 'interactive-p)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1499 ;; Special case: replace (interactive-p) with variable
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1500 (setq edebug-def-interactive 'check-it)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1501 (edebug-move-cursor cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1502 (edebug-interactive-p-name))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1503 (t
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1504 (cons head (edebug-list-form-args
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1505 head (edebug-move-cursor cursor))))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1506
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1507 ((consp head)
78637
b917d8c56cca (edebug-list-form, edebug-match-symbol, \,)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78217
diff changeset
1508 (if (eq (car head) '\,)
51321
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
1509 ;; The head of a form should normally be a symbol or a lambda
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
1510 ;; expression but it can also be an unquote form to be filled
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
1511 ;; before evaluation. We evaluate the arguments anyway, on the
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
1512 ;; assumption that the unquote form will place a proper function
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
1513 ;; name (rather than a macro name).
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1514 (edebug-match cursor '(("," def-form) body))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1515 ;; Process anonymous function and args.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1516 ;; This assumes no anonymous macros.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1517 (edebug-match-specs cursor '(lambda-expr body) 'edebug-match-specs)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1518
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1519 (t (edebug-syntax-error
51321
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
1520 "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
1521 ))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1522
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1523 ;;; Matching of specs.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1524
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1525 (defvar edebug-after-dotted-spec nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1526
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1527 (defvar edebug-matching-depth 0) ;; initial value
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1528 (defconst edebug-max-depth 150) ;; maximum number of matching recursions.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1529
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1530
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1531 ;;; Failure to match
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1532
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1533 ;; This throws to no-match, if there are higher alternatives.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1534 ;; 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
1535 ;; with the two before- and after-offset functions.
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 (defun edebug-no-match (cursor &rest edebug-args)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1538 ;; 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
1539 ;; 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
1540 (setq edebug-error-point (or edebug-error-point
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1541 (edebug-before-offset cursor))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1542 edebug-best-error (or edebug-best-error edebug-args))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1543 (if (and edebug-gate (not edebug-&optional))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1544 (progn
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1545 (if edebug-error-point
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1546 (goto-char edebug-error-point))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1547 (apply 'edebug-syntax-error edebug-args))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1548 (funcall 'throw 'no-match edebug-args)))
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
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1551 (defun edebug-match (cursor specs)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1552 ;; Top level spec matching function.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1553 ;; Used also at each lower level of specs.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1554 (let (edebug-&optional
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1555 edebug-&rest
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1556 edebug-best-error
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1557 edebug-error-point
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1558 (edebug-gate edebug-gate) ;; locally bound to limit effect
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 (edebug-match-specs cursor specs 'edebug-match-specs)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1561
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1562
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1563 (defun edebug-match-one-spec (cursor spec)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1564 ;; Match one spec, which is not a keyword &-spec.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1565 (cond
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1566 ((symbolp spec) (edebug-match-symbol cursor spec))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1567 ((vectorp spec) (edebug-match cursor (append spec nil)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1568 ((stringp spec) (edebug-match-string cursor spec))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1569 ((listp spec) (edebug-match-list cursor spec))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1570 ))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1571
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1572
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1573 (defun edebug-match-specs (cursor specs remainder-handler)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1574 ;; Append results of matching the list of specs.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1575 ;; 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
1576 (let ((edebug-matching-depth
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1577 (if (> edebug-matching-depth edebug-max-depth)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1578 (error "too deep - perhaps infinite loop in spec?")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1579 (1+ edebug-matching-depth))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1580 (cond
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1581 ((null specs) nil)
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1582
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1583 ;; Is the spec dotted?
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1584 ((atom specs)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1585 (let ((edebug-dotted-spec t));; Containing spec list was dotted.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1586 (edebug-match-specs cursor (list 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 ;; Is the form dotted?
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1589 ((not (listp (edebug-cursor-expressions cursor)));; allow nil
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1590 (if (not edebug-dotted-spec)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1591 (edebug-no-match cursor "Dotted spec required."))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1592 ;; Cancel dotted spec and dotted form.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1593 (let ((edebug-dotted-spec)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1594 (this-form (edebug-cursor-expressions cursor))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1595 (this-offset (edebug-cursor-offsets cursor)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1596 ;; Wrap the form in a list, (by changing the cursor??)...
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1597 (edebug-set-cursor cursor (list this-form) this-offset)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1598 ;; and process normally, then unwrap the result.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1599 (car (edebug-match-specs cursor specs remainder-handler))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1600
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1601 (t;; Process normally.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1602 (let* ((spec (car specs))
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1603 (rest)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1604 (first-char (and (symbolp spec) (aref (symbol-name spec) 0))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1605 ;;(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
1606 (nconc
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1607 (cond
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1608 ((eq ?& first-char);; "&" symbols take all following specs.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1609 (funcall (get-edebug-spec spec) cursor (cdr specs)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1610 ((eq ?: first-char);; ":" symbols take one following spec.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1611 (setq rest (cdr (cdr specs)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1612 (funcall (get-edebug-spec spec) cursor (car (cdr specs))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1613 (t;; Any other normal spec.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1614 (setq rest (cdr specs))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1615 (edebug-match-one-spec cursor spec)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1616 (funcall remainder-handler cursor rest remainder-handler)))))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1617
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1618
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1619 ;; 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
1620 ;; 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
1621 ;; 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
1622 ;; We could use an internal obarray for these primitive specs.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1623
33709
bfee926318b1 (edebug-form-spec prop): use dolist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32227
diff changeset
1624 (dolist (pair '((&optional . edebug-match-&optional)
bfee926318b1 (edebug-form-spec prop): use dolist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32227
diff changeset
1625 (&rest . edebug-match-&rest)
bfee926318b1 (edebug-form-spec prop): use dolist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32227
diff changeset
1626 (&or . edebug-match-&or)
bfee926318b1 (edebug-form-spec prop): use dolist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32227
diff changeset
1627 (form . edebug-match-form)
bfee926318b1 (edebug-form-spec prop): use dolist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32227
diff changeset
1628 (sexp . edebug-match-sexp)
bfee926318b1 (edebug-form-spec prop): use dolist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32227
diff changeset
1629 (body . edebug-match-body)
bfee926318b1 (edebug-form-spec prop): use dolist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32227
diff changeset
1630 (&define . edebug-match-&define)
bfee926318b1 (edebug-form-spec prop): use dolist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32227
diff changeset
1631 (name . edebug-match-name)
bfee926318b1 (edebug-form-spec prop): use dolist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32227
diff changeset
1632 (:name . edebug-match-colon-name)
bfee926318b1 (edebug-form-spec prop): use dolist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32227
diff changeset
1633 (arg . edebug-match-arg)
bfee926318b1 (edebug-form-spec prop): use dolist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32227
diff changeset
1634 (def-body . edebug-match-def-body)
bfee926318b1 (edebug-form-spec prop): use dolist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32227
diff changeset
1635 (def-form . edebug-match-def-form)
bfee926318b1 (edebug-form-spec prop): use dolist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32227
diff changeset
1636 ;; Less frequently used:
bfee926318b1 (edebug-form-spec prop): use dolist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32227
diff changeset
1637 ;; (function . edebug-match-function)
bfee926318b1 (edebug-form-spec prop): use dolist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32227
diff changeset
1638 (lambda-expr . edebug-match-lambda-expr)
bfee926318b1 (edebug-form-spec prop): use dolist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32227
diff changeset
1639 (&not . edebug-match-&not)
bfee926318b1 (edebug-form-spec prop): use dolist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32227
diff changeset
1640 (&key . edebug-match-&key)
bfee926318b1 (edebug-form-spec prop): use dolist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32227
diff changeset
1641 (place . edebug-match-place)
bfee926318b1 (edebug-form-spec prop): use dolist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32227
diff changeset
1642 (gate . edebug-match-gate)
bfee926318b1 (edebug-form-spec prop): use dolist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32227
diff changeset
1643 ;; (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
1644 ))
bfee926318b1 (edebug-form-spec prop): use dolist.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32227
diff changeset
1645 (put (car pair) 'edebug-form-spec (cdr pair)))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1646
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1647 (defun edebug-match-symbol (cursor symbol)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1648 ;; Match a symbol spec.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1649 (let* ((spec (get-edebug-spec symbol)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1650 (cond
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1651 (spec
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1652 (if (consp spec)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1653 ;; It is an indirect spec.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1654 (edebug-match cursor spec)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1655 ;; Otherwise it should be the symbol name of a function.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1656 ;; 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
1657 (funcall spec cursor)))
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1658
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1659 ((null symbol) ;; special case this.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1660 (edebug-match-nil cursor))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1661
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1662 ((fboundp symbol) ; is it a predicate?
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1663 (let ((sexp (edebug-top-element-required cursor "Expected" symbol)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1664 ;; Special case for edebug-`.
78637
b917d8c56cca (edebug-list-form, edebug-match-symbol, \,)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78217
diff changeset
1665 (if (and (listp sexp) (eq (car sexp) '\,))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1666 (edebug-match cursor '(("," def-form)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1667 (if (not (funcall symbol sexp))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1668 (edebug-no-match cursor symbol "failed"))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1669 (edebug-move-cursor cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1670 (list sexp))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1671 (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
1672 )))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1673
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-sexp (cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1676 (list (prog1 (edebug-top-element-required cursor "Expected sexp")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1677 (edebug-move-cursor cursor))))
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-match-form (cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1680 (list (edebug-form cursor)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1681
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1682 (defalias 'edebug-match-place 'edebug-match-form)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1683 ;; Currently identical to edebug-match-form.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1684 ;; This is for common lisp setf-style place arguments.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1685
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1686 (defsubst edebug-match-body (cursor) (edebug-forms cursor))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1687
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1688 (defun edebug-match-&optional (cursor specs)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1689 ;; Keep matching until one spec fails.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1690 (edebug-&optional-wrapper cursor specs 'edebug-&optional-wrapper))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1691
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1692 (defun edebug-&optional-wrapper (cursor specs remainder-handler)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1693 (let (result
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1694 (edebug-&optional specs)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1695 (edebug-gate nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1696 (this-form (edebug-cursor-expressions cursor))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1697 (this-offset (edebug-cursor-offsets cursor)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1698 (if (null (catch 'no-match
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1699 (setq result
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1700 (edebug-match-specs cursor specs remainder-handler))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1701 ;; Returning nil means no no-match was thrown.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1702 nil))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1703 result
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1704 ;; 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
1705 (edebug-set-cursor cursor this-form this-offset)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1706 nil)))
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-&rest-wrapper (cursor specs remainder-handler)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1710 (if (null specs) (setq specs edebug-&rest))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1711 ;; Reuse the &optional handler with this as the remainder handler.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1712 (edebug-&optional-wrapper cursor specs remainder-handler))
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1713
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1714 (defun edebug-match-&rest (cursor specs)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1715 ;; Repeatedly use specs until failure.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1716 (let ((edebug-&rest specs) ;; remember these
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1717 edebug-best-error
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1718 edebug-error-point)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1719 (edebug-&rest-wrapper cursor specs 'edebug-&rest-wrapper)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1720
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1721
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1722 (defun edebug-match-&or (cursor specs)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1723 ;; Keep matching until one spec succeeds, and return its results.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1724 ;; If none match, fail.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1725 ;; 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
1726 (let ((original-specs specs)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1727 (this-form (edebug-cursor-expressions cursor))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1728 (this-offset (edebug-cursor-offsets cursor)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1729 (catch 'matched
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1730 (while specs
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1731 (catch 'no-match
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1732 (throw 'matched
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1733 (let (edebug-gate ;; only while matching each spec
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1734 edebug-best-error
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1735 edebug-error-point)
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1736 ;; Doesn't support e.g. &or symbolp &rest form
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1737 (edebug-match-one-spec cursor (car specs)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1738 ;; Match failed, so reset and try again.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1739 (setq specs (cdr specs))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1740 ;; Reset the cursor for the next match.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1741 (edebug-set-cursor cursor this-form this-offset))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1742 ;; All failed.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1743 (apply 'edebug-no-match cursor "Expected one of" original-specs))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1744 ))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1745
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 (defun edebug-match-&not (cursor specs)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1748 ;; If any specs match, then fail
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1749 (if (null (catch 'no-match
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1750 (let ((edebug-gate nil))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1751 (save-excursion
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1752 (edebug-match-&or cursor specs)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1753 nil))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1754 ;; This means something matched, so it is a no match.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1755 (edebug-no-match cursor "Unexpected"))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1756 ;; This means nothing matched, so it is OK.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1757 nil) ;; So, return nothing
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1758
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1759
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1760 (def-edebug-spec &key edebug-match-&key)
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-&key (cursor specs)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1763 ;; Following specs must look like (<name> <spec>) ...
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1764 ;; 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
1765 ;; 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
1766 (edebug-match-&rest
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1767 cursor
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1768 (cons '&or
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1769 (mapcar (function (lambda (pair)
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1770 (vector (format ":%s" (car pair))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1771 (car (cdr pair)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1772 specs))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1773
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1774
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1775 (defun edebug-match-gate (cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1776 ;; Simply set the gate to prevent backtracking at this level.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1777 (setq edebug-gate t)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1778 nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1779
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1780
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1781 (defun edebug-match-list (cursor specs)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1782 ;; 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
1783 (if edebug-dotted-spec
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1784 ;; After dotted spec but form did not contain dot,
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1785 ;; so match list spec elements as if spliced in.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1786 (prog1
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1787 (let ((edebug-dotted-spec))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1788 (edebug-match-specs cursor specs 'edebug-match-specs))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1789 ;; If it matched, really clear the dotted-spec flag.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1790 (setq edebug-dotted-spec nil))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1791 (let ((spec (car specs))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1792 (form (edebug-top-element-required cursor "Expected" specs)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1793 (cond
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1794 ((eq 'quote spec)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1795 (let ((spec (car (cdr specs))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1796 (cond
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1797 ((symbolp spec)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1798 ;; Special case: spec quotes a symbol to match.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1799 ;; Change in future. Use "..." instead.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1800 (if (not (eq spec form))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1801 (edebug-no-match cursor "Expected" spec))
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 (setq edebug-gate t)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1804 form)
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1805 (t
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1806 (error "Bad spec: %s" specs)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1807
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1808 ((listp form)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1809 (prog1
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1810 (list (edebug-match-sublist
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1811 ;; First offset is for the list form itself.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1812 ;; Treat nil as empty list.
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1813 (edebug-new-cursor form (cdr (edebug-top-offset cursor)))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1814 specs))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1815 (edebug-move-cursor cursor)))
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 ((and (eq 'vector spec) (vectorp form))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1818 ;; Special case: match a vector with the specs.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1819 (let ((result (edebug-match-sublist
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1820 (edebug-new-cursor
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1821 form (cdr (edebug-top-offset cursor)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1822 (cdr specs))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1823 (edebug-move-cursor cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1824 (list (apply 'vector result))))
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1825
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1826 (t (edebug-no-match cursor "Expected" specs)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1827 )))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1828
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1829
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1830 (defun edebug-match-sublist (cursor specs)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1831 ;; Match a sublist of specs.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1832 (let (edebug-&optional
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1833 ;;edebug-best-error
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1834 ;;edebug-error-point
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1835 )
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1836 (prog1
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1837 ;; 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
1838 (edebug-match-specs cursor specs 'edebug-match-specs)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1839 (if (not (edebug-empty-cursor cursor))
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1840 (if edebug-best-error
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1841 (apply 'edebug-no-match cursor edebug-best-error)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1842 ;; A failed &rest or &optional spec may leave some args.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1843 (edebug-no-match cursor "Failed matching" specs)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1844 )))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1845
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1846
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1847 (defun edebug-match-string (cursor spec)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1848 (let ((sexp (edebug-top-element-required cursor "Expected" spec)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1849 (if (not (eq (intern spec) sexp))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1850 (edebug-no-match cursor "Expected" spec)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1851 ;; Since it matched, failure means immediate error, unless &optional.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1852 (setq edebug-gate t)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1853 (edebug-move-cursor cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1854 (list sexp)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1855 )))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1856
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1857 (defun edebug-match-nil (cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1858 ;; There must be nothing left to match a nil.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1859 (if (not (edebug-empty-cursor cursor))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1860 (edebug-no-match cursor "Unmatched argument(s)")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1861 nil))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1862
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1863
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1864 (defun edebug-match-function (cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1865 (error "Use function-form instead of function in edebug spec"))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1866
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1867 (defun edebug-match-&define (cursor specs)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1868 ;; Match a defining form.
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1869 ;; Normally, &define is interpreted specially other places.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1870 ;; 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
1871 ;; 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
1872 (edebug-make-form-wrapper
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1873 cursor
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1874 (edebug-before-offset cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1875 ;; Find the last offset in the list.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1876 (let ((offsets (edebug-cursor-offsets cursor)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1877 (while (consp offsets) (setq offsets (cdr offsets)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1878 offsets)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1879 specs))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1880
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1881 (defun edebug-match-lambda-expr (cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1882 ;; The expression must be a function.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1883 ;; 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
1884 ;; that has an edebug-form-spec beginning with &define. In
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1885 ;; practice, only lambda expressions should be used.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1886 ;; I could add a &lambda specification to avoid confusion.
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1887 (let* ((sexp (edebug-top-element-required
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1888 cursor "Expected lambda expression"))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1889 (offset (edebug-top-offset cursor))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1890 (head (and (consp sexp) (car sexp)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1891 (spec (and (symbolp head) (get-edebug-spec head)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1892 (edebug-inside-func nil))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1893 ;; 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
1894 (if (and (consp spec) (eq '&define (car spec)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1895 (prog1
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1896 (list
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1897 (edebug-defining-form
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1898 (edebug-new-cursor sexp offset)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1899 (car offset);; before the sexp
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
1900 (edebug-after-offset cursor)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1901 (cons (symbol-name head) (cdr spec))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1902 (edebug-move-cursor cursor))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1903 (edebug-no-match cursor "Expected lambda expression")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1904 )))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1905
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1906
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1907 (defun edebug-match-name (cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1908 ;; Set the edebug-def-name bound in edebug-defining-form.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1909 (let ((name (edebug-top-element-required cursor "Expected name")))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1910 ;; Maybe strings and numbers could be used.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1911 (if (not (symbolp name))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1912 (edebug-no-match cursor "Symbol expected for name of definition"))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1913 (setq edebug-def-name
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1914 (if edebug-def-name
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1915 ;; Construct a new name by appending to previous name.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1916 (intern (format "%s@%s" edebug-def-name name))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1917 name))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1918 (edebug-move-cursor cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1919 (list name)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1920
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1921 (defun edebug-match-colon-name (cursor spec)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1922 ;; Set the edebug-def-name to the spec.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1923 (setq edebug-def-name
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1924 (if edebug-def-name
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1925 ;; Construct a new name by appending to previous name.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1926 (intern (format "%s@%s" edebug-def-name spec))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1927 spec))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1928 nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1929
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1930 (defun edebug-match-arg (cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1931 ;; set the def-args bound in edebug-defining-form
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1932 (let ((edebug-arg (edebug-top-element-required cursor "Expected arg")))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1933 (if (or (not (symbolp edebug-arg))
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1934 (edebug-lambda-list-keywordp edebug-arg))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1935 (edebug-no-match cursor "Bad argument:" edebug-arg))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1936 (edebug-move-cursor cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1937 (setq edebug-def-args (cons edebug-arg edebug-def-args))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1938 (list edebug-arg)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1939
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1940 (defun edebug-match-def-form (cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1941 ;; 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
1942 ;; 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
1943 ;; 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
1944 ;; Not to be used otherwise.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1945 (let ((edebug-inside-func nil))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1946 (list (edebug-make-enter-wrapper (list (edebug-form cursor))))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1947
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1948 (defun edebug-match-def-body (cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1949 ;; Like body but body is wrapped in edebug-enter form.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1950 ;; 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
1951 ;; Not to be used otherwise.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1952 (let ((edebug-inside-func t))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1953 (list (edebug-wrap-def-body (edebug-forms cursor)))))
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
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1956 ;;;; Edebug Form Specs
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1957 ;;; ==========================================================
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1958 ;;; See cl-specs.el for common lisp specs.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1959
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1960 ;;;;* Spec for def-edebug-spec
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1961 ;;; Out of date.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1962
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1963 (defun edebug-spec-p (object)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1964 "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
1965 (and (symbolp object)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1966 (get object 'edebug-form-spec)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1967
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1968 (def-edebug-spec def-edebug-spec
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1969 ;; 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
1970 (&define :name edebug-spec name
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1971 &or "nil" edebug-spec-p "t" "0" (&rest edebug-spec)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1972
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1973 (def-edebug-spec edebug-spec-list
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1974 ;; 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
1975 ((edebug-spec . [&or nil edebug-spec])))
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 (def-edebug-spec edebug-spec
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1978 (&or
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1979 (vector &rest edebug-spec) ; matches a vector
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1980 ("vector" &rest edebug-spec) ; matches a vector spec
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1981 ("quote" symbolp)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1982 edebug-spec-list
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1983 stringp
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1984 [edebug-lambda-list-keywordp &rest edebug-spec]
28567
3ed20cb4c9b3 (edebug-keywordp): Remove. Change callers
Dave Love <fx@gnu.org>
parents: 28516
diff changeset
1985 [keywordp gate edebug-spec]
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1986 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
1987 symbolp;; a predicate
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1988 ))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1989
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1990
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1991 ;;;* Emacs special forms and some functions.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1992
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1993 ;; quote expects only one argument, although it allows any number.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1994 (def-edebug-spec quote sexp)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1995
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1996 ;; The standard defining forms.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1997 (def-edebug-spec defconst defvar)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1998 (def-edebug-spec defvar (symbolp &optional form stringp))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1999
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2000 (def-edebug-spec defun
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2001 (&define name lambda-list
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2002 [&optional stringp]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2003 [&optional ("interactive" interactive)]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2004 def-body))
103885
adbe0e36df45 (edebug-setup-hook, edebug-all-forms)
Glenn Morris <rgm@gnu.org>
parents: 101015
diff changeset
2005 ;; FIXME? Isn't this missing the doc-string? Cf defun.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2006 (def-edebug-spec defmacro
51331
cf0bc7d12c33 (edebug-storing-offsets): Move indent and debug to inside the macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51322
diff changeset
2007 (&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
2008
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
2009 (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
2010
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2011 (def-edebug-spec lambda-list
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2012 (([&rest arg]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2013 [&optional ["&optional" arg &rest arg]]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2014 &optional ["&rest" arg]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2015 )))
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 (def-edebug-spec interactive
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2018 (&optional &or stringp def-form))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2019
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2020 ;; 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
2021 ;; This specially recognizes anonymous functions quoted with quote.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2022 (def-edebug-spec function-form
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2023 ;; form at the end could also handle "function",
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2024 ;; but recognize it specially to avoid wrapping function forms.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2025 (&or ([&or "quote" "function"] &or symbolp lambda-expr) form))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2026
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2027 ;; function expects a symbol or a lambda or macro expression
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2028 ;; A macro is allowed by Emacs.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2029 (def-edebug-spec function (&or symbolp lambda-expr))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2030
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2031 ;; lambda is a macro in emacs 19.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2032 (def-edebug-spec lambda (&define lambda-list
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2033 [&optional stringp]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2034 [&optional ("interactive" interactive)]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2035 def-body))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2036
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2037 ;; A macro expression is a lambda expression with "macro" prepended.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2038 (def-edebug-spec macro (&define "lambda" lambda-list def-body))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2039
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2040 ;; (def-edebug-spec anonymous-form ((&or ["lambda" lambda] ["macro" macro])))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2041
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2042 ;; Standard functions that take function-forms arguments.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2043 (def-edebug-spec mapcar (function-form form))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2044 (def-edebug-spec mapconcat (function-form form form))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2045 (def-edebug-spec mapatoms (function-form &optional form))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2046 (def-edebug-spec apply (function-form &rest form))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2047 (def-edebug-spec funcall (function-form &rest form))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2048
103885
adbe0e36df45 (edebug-setup-hook, edebug-all-forms)
Glenn Morris <rgm@gnu.org>
parents: 101015
diff changeset
2049 ;; FIXME? The manual has a gate here.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2050 (def-edebug-spec let
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2051 ((&rest &or (symbolp &optional form) symbolp)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2052 body))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2053
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2054 (def-edebug-spec let* let)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2055
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2056 (def-edebug-spec setq (&rest symbolp form))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2057 (def-edebug-spec setq-default setq)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2058
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2059 (def-edebug-spec cond (&rest (&rest form)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2060
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2061 (def-edebug-spec condition-case
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2062 (symbolp
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2063 form
18729
43149745d126 (condition-case): Fix edebug-form-spec to
Richard M. Stallman <rms@gnu.org>
parents: 18399
diff changeset
2064 &rest ([&or symbolp (&rest symbolp)] body)))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2065
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2066
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
2067 (def-edebug-spec \` (backquote-form))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2068
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
2069 ;; Supports quotes inside backquotes,
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2070 ;; but only at the top level inside unquotes.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2071 (def-edebug-spec backquote-form
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2072 (&or
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2073 ([&or "," ",@"] &or ("quote" backquote-form) form)
51321
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
2074 ;; The simple version:
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
2075 ;; (backquote-form &rest backquote-form)
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
2076 ;; doesn't handle (a . ,b). The straightforward fix:
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
2077 ;; (backquote-form . [&or nil backquote-form])
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
2078 ;; uses up too much stack space.
80025
f162659514ca Comment changes.
Richard M. Stallman <rms@gnu.org>
parents: 79704
diff changeset
2079 ;; Note that `(foo . ,@bar) is not valid, so we don't need to handle it.
51321
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
2080 (backquote-form [&rest [&not ","] backquote-form]
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
2081 . [&or nil backquote-form])
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2082 ;; If you use dotted forms in backquotes, replace the previous line
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2083 ;; with the following. This takes quite a bit more stack space, however.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2084 ;; (backquote-form . [&or nil backquote-form])
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2085 (vector &rest backquote-form)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2086 sexp))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2087
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2088 ;; Special version of backquote that instruments backquoted forms
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2089 ;; destined to be evaluated, usually as the result of a
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2090 ;; macroexpansion. Backquoted code can only have unquotes (, and ,@)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2091 ;; in places where list forms are allowed, and predicates. If the
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2092 ;; backquote is used in a macro, unquoted code that come from
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2093 ;; arguments must be instrumented, if at all, with def-form not def-body.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2094
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2095 ;; We could assume that all forms (not nested in other forms)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2096 ;; in arguments of macros should be def-forms, whether or not the macros
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2097 ;; are defined with edebug-` but this would be expensive.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2098
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2099 ;; ,@ might have some problems.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2100
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
2101 (defalias 'edebug-\` '\`) ;; same macro as regular backquote.
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
2102 (def-edebug-spec edebug-\` (def-form))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2103
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2104 ;; Assume immediate quote in unquotes mean backquote at next higher level.
78637
b917d8c56cca (edebug-list-form, edebug-match-symbol, \,)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78217
diff changeset
2105 (def-edebug-spec \, (&or ("quote" edebug-\`) def-form))
b917d8c56cca (edebug-list-form, edebug-match-symbol, \,)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78217
diff changeset
2106 (def-edebug-spec \,@ (&define ;; so (,@ form) is never wrapped.
49842
c785a7ac61c7 Fix character constants.
Juanma Barranquero <lekktu@gmail.com>
parents: 49598
diff changeset
2107 &or ("quote" edebug-\`) def-form))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2108
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2109 ;; New byte compiler.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2110 (def-edebug-spec defsubst defun)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2111 (def-edebug-spec dont-compile t)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2112 (def-edebug-spec eval-when-compile t)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2113 (def-edebug-spec eval-and-compile t)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2114
16374
b3b88a1ee6aa (save-selected-window, save-current-buffer)
Richard M. Stallman <rms@gnu.org>
parents: 16308
diff changeset
2115 (def-edebug-spec save-selected-window t)
b3b88a1ee6aa (save-selected-window, save-current-buffer)
Richard M. Stallman <rms@gnu.org>
parents: 16308
diff changeset
2116 (def-edebug-spec save-current-buffer t)
40475
3bf0c64f4520 (delay-mode-hooks): Add edebug-spec.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40464
diff changeset
2117 (def-edebug-spec delay-mode-hooks t)
16374
b3b88a1ee6aa (save-selected-window, save-current-buffer)
Richard M. Stallman <rms@gnu.org>
parents: 16308
diff changeset
2118 (def-edebug-spec with-temp-file t)
24122
73346cd4a77e (with-temp-message): Add def-edebug-spec call.
Richard M. Stallman <rms@gnu.org>
parents: 24024
diff changeset
2119 (def-edebug-spec with-temp-message t)
27296
6a6b75706812 (with-syntax-table): Add a def-edebug-spec.
Richard M. Stallman <rms@gnu.org>
parents: 26648
diff changeset
2120 (def-edebug-spec with-syntax-table t)
28516
b393b2d78c62 Fix specs for dolist, dotimes, push, pop, unless, when.
Dave Love <fx@gnu.org>
parents: 27483
diff changeset
2121 (def-edebug-spec push (form sexp))
b393b2d78c62 Fix specs for dolist, dotimes, push, pop, unless, when.
Dave Love <fx@gnu.org>
parents: 27483
diff changeset
2122 (def-edebug-spec pop (sexp))
16374
b3b88a1ee6aa (save-selected-window, save-current-buffer)
Richard M. Stallman <rms@gnu.org>
parents: 16308
diff changeset
2123
53198
5023ae2f95af Add edebug specs for macros `1value' and `noreturn'.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 52898
diff changeset
2124 (def-edebug-spec 1value (form))
5023ae2f95af Add edebug specs for macros `1value' and `noreturn'.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 52898
diff changeset
2125 (def-edebug-spec noreturn (form))
5023ae2f95af Add edebug specs for macros `1value' and `noreturn'.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 52898
diff changeset
2126
5023ae2f95af Add edebug specs for macros `1value' and `noreturn'.
Jonathan Yavner <jyavner@member.fsf.org>
parents: 52898
diff changeset
2127
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2128 ;; Anything else?
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2129
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2130
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2131 ;; Some miscellaneous specs for macros in public packages.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2132 ;; Send me yours.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2133
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2134 ;; advice.el by Hans Chalupsky (hans@cs.buffalo.edu)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2135
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2136 (def-edebug-spec ad-dolist ((symbolp form &optional form) body))
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
2137 (def-edebug-spec defadvice
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2138 (&define name ;; thing being advised.
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
2139 (name ;; class is [&or "before" "around" "after"
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
2140 ;; "activation" "deactivation"]
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2141 name ;; name of advice
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2142 &rest sexp ;; optional position and flags
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2143 )
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2144 [&optional stringp]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2145 [&optional ("interactive" interactive)]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2146 def-body))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2147
28567
3ed20cb4c9b3 (edebug-keywordp): Remove. Change callers
Dave Love <fx@gnu.org>
parents: 28516
diff changeset
2148 (def-edebug-spec easy-menu-define (symbolp body))
3ed20cb4c9b3 (edebug-keywordp): Remove. Change callers
Dave Love <fx@gnu.org>
parents: 28516
diff changeset
2149
3ed20cb4c9b3 (edebug-keywordp): Remove. Change callers
Dave Love <fx@gnu.org>
parents: 28516
diff changeset
2150 (def-edebug-spec with-custom-print body)
3ed20cb4c9b3 (edebug-keywordp): Remove. Change callers
Dave Love <fx@gnu.org>
parents: 28516
diff changeset
2151
3ed20cb4c9b3 (edebug-keywordp): Remove. Change callers
Dave Love <fx@gnu.org>
parents: 28516
diff changeset
2152 (def-edebug-spec sregexq (&rest sexp))
39515
da28750c22cd (rx): Add def-edebug-spec.
Gerd Moellmann <gerd@gnu.org>
parents: 39173
diff changeset
2153 (def-edebug-spec rx (&rest sexp))
28567
3ed20cb4c9b3 (edebug-keywordp): Remove. Change callers
Dave Love <fx@gnu.org>
parents: 28516
diff changeset
2154
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
2155 ;;; The debugger itself
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2156
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2157 (defvar edebug-active nil) ;; Non-nil when edebug is active
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2158
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2159 ;;; add minor-mode-alist entry
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2160 (or (assq 'edebug-active minor-mode-alist)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2161 (setq minor-mode-alist (cons (list 'edebug-active " *Debugging*")
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2162 minor-mode-alist)))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2163
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2164 (defvar edebug-stack nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2165 ;; Stack of active functions evaluated via edebug.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2166 ;; Should be nil at the top level.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2167
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2168 (defvar edebug-stack-depth -1)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2169 ;; Index of last edebug-stack item.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2170
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2171 (defvar edebug-offset-indices nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2172 ;; Stack of offset indices of visited edebug sexps.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2173 ;; Should be nil at the top level.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2174 ;; Each function adds one cons. Top is modified with setcar.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2175
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2176
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2177 (defvar edebug-entered nil
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2178 ;; Non-nil if edebug has already been entered at this recursive edit level.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2179 ;; This should stay nil at the top level.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2180 )
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2181
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2182 ;; Should these be options?
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2183 (defconst edebug-debugger 'edebug
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2184 ;; Name of function to use for debugging when error or quit occurs.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2185 ;; Set this to 'debug if you want to debug edebug.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2186 )
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2187
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2188
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2189 ;; Dynamically bound variables, declared globally but left unbound.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2190 (defvar edebug-function) ; the function being executed. change name!!
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2191 (defvar edebug-args) ; the arguments of the function
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2192 (defvar edebug-data) ; the edebug data for the function
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2193 (defvar edebug-value) ; the result of the expression
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2194 (defvar edebug-after-index)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2195 (defvar edebug-def-mark) ; the mark for the definition
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2196 (defvar edebug-freq-count) ; the count of expression visits.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2197 (defvar edebug-coverage) ; the coverage results of each expression of function.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2198
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2199 (defvar edebug-buffer) ; which buffer the function is in.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2200 (defvar edebug-result) ; the result of the function call returned by body
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2201 (defvar edebug-outside-executing-macro)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2202 (defvar edebug-outside-defining-kbd-macro)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2203
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2204 (defvar edebug-execution-mode 'step) ; Current edebug mode set by user.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2205 (defvar edebug-next-execution-mode nil) ; Use once instead of initial mode.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2206
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2207 (defvar edebug-outside-debug-on-error) ; the value of debug-on-error outside
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2208 (defvar edebug-outside-debug-on-quit) ; the value of debug-on-quit outside
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2209
19930
1e0f347ee021 (edebug-enter): Save, and bind to nil,
Richard M. Stallman <rms@gnu.org>
parents: 18729
diff changeset
2210 (defvar edebug-outside-overriding-local-map)
1e0f347ee021 (edebug-enter): Save, and bind to nil,
Richard M. Stallman <rms@gnu.org>
parents: 18729
diff changeset
2211 (defvar edebug-outside-overriding-terminal-local-map)
1e0f347ee021 (edebug-enter): Save, and bind to nil,
Richard M. Stallman <rms@gnu.org>
parents: 18729
diff changeset
2212
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2213 (defvar edebug-outside-pre-command-hook)
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2214 (defvar edebug-outside-post-command-hook)
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2215
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2216 (defvar cl-lexical-debug) ;; Defined in cl.el
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2217
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2218 ;;; Handling signals
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2219
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2220 (defun edebug-signal (edebug-signal-name edebug-signal-data)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2221 "Signal an error. Args are SIGNAL-NAME, and associated DATA.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2222 A signal name is a symbol with an `error-conditions' property
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2223 that is a list of condition names.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2224 A handler for any of those names will get to handle this signal.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2225 The symbol `error' should always be one of them.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2226
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2227 DATA should be a list. Its elements are printed as part of the error message.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2228 If the signal is handled, DATA is made available to the handler.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2229 See `condition-case'.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2230
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2231 This is the Edebug replacement for the standard `signal'. It should
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2232 only be active while Edebug is. It checks `debug-on-error' to see
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2233 whether it should call the debugger. When execution is resumed, the
95287
6150694d72ec (edebug-setup-hook, edebug-all-defs, edebug-all-forms, edebug-eval-macro-args,
Juanma Barranquero <lekktu@gmail.com>
parents: 94655
diff changeset
2234 error is signaled again.
6150694d72ec (edebug-setup-hook, edebug-all-defs, edebug-all-forms, edebug-eval-macro-args,
Juanma Barranquero <lekktu@gmail.com>
parents: 94655
diff changeset
2235 \n(fn SIGNAL-NAME DATA)"
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2236 (if (and (listp debug-on-error) (memq edebug-signal-name debug-on-error))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2237 (edebug 'error (cons edebug-signal-name edebug-signal-data)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2238 ;; If we reach here without another non-local exit, then send signal again.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2239 ;; i.e. the signal is not continuable, yet.
18017
4c3a2b58fd72 (edebug-signal): Avoid infinite recursion.
Richard M. Stallman <rms@gnu.org>
parents: 17650
diff changeset
2240 ;; Avoid infinite recursion.
4c3a2b58fd72 (edebug-signal): Avoid infinite recursion.
Richard M. Stallman <rms@gnu.org>
parents: 17650
diff changeset
2241 (let ((signal-hook-function nil))
4c3a2b58fd72 (edebug-signal): Avoid infinite recursion.
Richard M. Stallman <rms@gnu.org>
parents: 17650
diff changeset
2242 (signal edebug-signal-name edebug-signal-data)))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2243
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2244 ;;; Entering Edebug
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2245
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2246 (defun edebug-enter (edebug-function edebug-args edebug-body)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2247 ;; Entering FUNC. The arguments are ARGS, and the body is BODY.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2248 ;; Setup edebug variables and evaluate BODY. This function is called
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
2249 ;; 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
2250 ;; Return the result of BODY.
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2251
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2252 ;; Is this the first time we are entering edebug since
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2253 ;; lower-level recursive-edit command?
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2254 ;; More precisely, this tests whether Edebug is currently active.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2255 (if (not edebug-entered)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2256 (let ((edebug-entered t)
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
2257 ;; Binding max-lisp-eval-depth here is OK,
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2258 ;; but not inside an unwind-protect.
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2259 ;; Doing it here also keeps it from growing too large.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2260 (max-lisp-eval-depth (+ 100 max-lisp-eval-depth)) ; too much??
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2261 (max-specpdl-size (+ 200 max-specpdl-size))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2262
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2263 (debugger edebug-debugger) ; only while edebug is active.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2264 (edebug-outside-debug-on-error debug-on-error)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2265 (edebug-outside-debug-on-quit debug-on-quit)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2266 ;; Binding these may not be the right thing to do.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2267 ;; We want to allow the global values to be changed.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2268 (debug-on-error (or debug-on-error edebug-on-error))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2269 (debug-on-quit edebug-on-quit)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2270
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2271 ;; Lexical bindings must be uncompiled for this to work.
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2272 (cl-lexical-debug t)
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2273
19930
1e0f347ee021 (edebug-enter): Save, and bind to nil,
Richard M. Stallman <rms@gnu.org>
parents: 18729
diff changeset
2274 (edebug-outside-overriding-local-map overriding-local-map)
1e0f347ee021 (edebug-enter): Save, and bind to nil,
Richard M. Stallman <rms@gnu.org>
parents: 18729
diff changeset
2275 (edebug-outside-overriding-terminal-local-map
1e0f347ee021 (edebug-enter): Save, and bind to nil,
Richard M. Stallman <rms@gnu.org>
parents: 18729
diff changeset
2276 overriding-terminal-local-map)
1e0f347ee021 (edebug-enter): Save, and bind to nil,
Richard M. Stallman <rms@gnu.org>
parents: 18729
diff changeset
2277
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2278 ;; Save the outside value of executing macro. (here??)
15302
c23c9712ef5c Use executing-kbd-macro, not executing-macro.
Karl Heuer <kwzh@gnu.org>
parents: 14846
diff changeset
2279 (edebug-outside-executing-macro executing-kbd-macro)
52535
f40f0d207133 (edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2280 (edebug-outside-pre-command-hook
f40f0d207133 (edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2281 (edebug-var-status 'pre-command-hook))
f40f0d207133 (edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2282 (edebug-outside-post-command-hook
f40f0d207133 (edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2283 (edebug-var-status 'post-command-hook)))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2284 (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
2285 (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
2286 ;; 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
2287 ;; non-nil. Again, local binding may not be best.
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
2288 (executing-kbd-macro
15302
c23c9712ef5c Use executing-kbd-macro, not executing-macro.
Karl Heuer <kwzh@gnu.org>
parents: 14846
diff changeset
2289 (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
2290
19930
1e0f347ee021 (edebug-enter): Save, and bind to nil,
Richard M. Stallman <rms@gnu.org>
parents: 18729
diff changeset
2291 ;; 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
2292 (overriding-local-map nil)
1e0f347ee021 (edebug-enter): Save, and bind to nil,
Richard M. Stallman <rms@gnu.org>
parents: 18729
diff changeset
2293 (overriding-terminal-local-map nil)
1e0f347ee021 (edebug-enter): Save, and bind to nil,
Richard M. Stallman <rms@gnu.org>
parents: 18729
diff changeset
2294
16308
2334a3d634c0 (edebug-original-signal): Don't define it.
Richard M. Stallman <rms@gnu.org>
parents: 16299
diff changeset
2295 (signal-hook-function 'edebug-signal)
2334a3d634c0 (edebug-original-signal): Don't define it.
Richard M. Stallman <rms@gnu.org>
parents: 16299
diff changeset
2296
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2297 ;; 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
2298 ;; 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
2299 ;; 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
2300 (pre-command-hook nil)
16299
0e4f99bad2ec (pre-command-hook, post-command-hook): Defvars deleted.
Richard M. Stallman <rms@gnu.org>
parents: 15782
diff changeset
2301 (post-command-hook nil))
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
2302 (setq edebug-execution-mode (or edebug-next-execution-mode
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
2303 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
2304 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
2305 edebug-next-execution-mode nil)
16308
2334a3d634c0 (edebug-original-signal): Don't define it.
Richard M. Stallman <rms@gnu.org>
parents: 16299
diff changeset
2306 (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
2307 ;; Reset global variables in case outside value was changed.
52535
f40f0d207133 (edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2308 (setq executing-kbd-macro edebug-outside-executing-macro)
f40f0d207133 (edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2309 (edebug-restore-status
f40f0d207133 (edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2310 'post-command-hook edebug-outside-post-command-hook)
f40f0d207133 (edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2311 (edebug-restore-status
f40f0d207133 (edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2312 'pre-command-hook edebug-outside-pre-command-hook)))
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
2313
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2314 (let* ((edebug-data (get edebug-function 'edebug))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2315 (edebug-def-mark (car edebug-data)) ; mark at def start
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2316 (edebug-freq-count (get edebug-function 'edebug-freq-count))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2317 (edebug-coverage (get edebug-function 'edebug-coverage))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2318 (edebug-buffer (marker-buffer edebug-def-mark))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2319
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2320 (edebug-stack (cons edebug-function edebug-stack))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2321 (edebug-offset-indices (cons 0 edebug-offset-indices))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2322 )
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2323 (if (get edebug-function 'edebug-on-entry)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2324 (progn
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2325 (setq edebug-execution-mode 'step)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2326 (if (eq (get edebug-function 'edebug-on-entry) 'temp)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2327 (put edebug-function 'edebug-on-entry nil))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2328 (if edebug-trace
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2329 (edebug-enter-trace edebug-body)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2330 (funcall edebug-body))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2331 )))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2332
52535
f40f0d207133 (edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2333 (defun edebug-var-status (var)
f40f0d207133 (edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2334 "Return a cons cell describing the status of VAR's current binding.
f40f0d207133 (edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2335 The purpose of this function is so you can properly undo
f40f0d207133 (edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2336 subsequent changes to the same binding, by passing the status
f40f0d207133 (edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2337 cons cell to `edebug-restore-status'. The status cons cell
f40f0d207133 (edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2338 has the form (LOCUS . VALUE), where LOCUS can be a buffer
f40f0d207133 (edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2339 \(for a buffer-local binding), a frame (for a frame-local binding),
f40f0d207133 (edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2340 or nil (if the default binding is current)."
f40f0d207133 (edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2341 (cons (variable-binding-locus var)
f40f0d207133 (edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2342 (symbol-value var)))
f40f0d207133 (edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2343
f40f0d207133 (edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2344 (defun edebug-restore-status (var status)
f40f0d207133 (edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2345 "Reset VAR based on STATUS.
95287
6150694d72ec (edebug-setup-hook, edebug-all-defs, edebug-all-forms, edebug-eval-macro-args,
Juanma Barranquero <lekktu@gmail.com>
parents: 94655
diff changeset
2346 STATUS should be a list returned by `edebug-var-status'."
52535
f40f0d207133 (edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2347 (let ((locus (car status))
f40f0d207133 (edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2348 (value (cdr status)))
f40f0d207133 (edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2349 (cond ((bufferp locus)
f40f0d207133 (edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2350 (if (buffer-live-p locus)
f40f0d207133 (edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2351 (with-current-buffer locus
f40f0d207133 (edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2352 (set var value))))
f40f0d207133 (edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2353 ((framep locus)
f40f0d207133 (edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2354 (modify-frame-parameters locus (list (cons var value))))
f40f0d207133 (edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2355 (t
f40f0d207133 (edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
2356 (set var value)))))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2357
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2358 (defun edebug-enter-trace (edebug-body)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2359 (let ((edebug-stack-depth (1+ edebug-stack-depth))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2360 edebug-result)
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
2361 (edebug-print-trace-before
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2362 (format "%s args: %s" edebug-function edebug-args))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2363 (prog1 (setq edebug-result (funcall edebug-body))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2364 (edebug-print-trace-after
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2365 (format "%s result: %s" edebug-function edebug-result)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2366
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2367 (def-edebug-spec edebug-tracing (form body))
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 (defmacro edebug-tracing (msg &rest body)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2370 "Print MSG in *edebug-trace* before and after evaluating BODY.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2371 The result of BODY is also printed."
26519
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
2372 `(let ((edebug-stack-depth (1+ edebug-stack-depth))
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
2373 edebug-result)
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
2374 (edebug-print-trace-before ,msg)
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
2375 (prog1 (setq edebug-result (progn ,@body))
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
2376 (edebug-print-trace-after
26519
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
2377 (format "%s result: %s" ,msg edebug-result)))))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2378
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2379 (defun edebug-print-trace-before (msg)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2380 "Function called to print trace info before expression evaluation.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2381 MSG is printed after `::::{ '."
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2382 (edebug-trace-display
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2383 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
2384
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2385 (defun edebug-print-trace-after (msg)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2386 "Function called to print trace info after expression evaluation.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2387 MSG is printed after `::::} '."
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2388 (edebug-trace-display
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2389 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
2390
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2391
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2392
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2393 (defun edebug-slow-before (edebug-before-index)
64222
ceb9ed49f7bb (edebug-slow-after, edebug-slow-before): Do nothing if edebug-active.
Richard M. Stallman <rms@gnu.org>
parents: 64212
diff changeset
2394 (unless edebug-active
ceb9ed49f7bb (edebug-slow-after, edebug-slow-before): Do nothing if edebug-active.
Richard M. Stallman <rms@gnu.org>
parents: 64212
diff changeset
2395 ;; Debug current function given BEFORE position.
ceb9ed49f7bb (edebug-slow-after, edebug-slow-before): Do nothing if edebug-active.
Richard M. Stallman <rms@gnu.org>
parents: 64212
diff changeset
2396 ;; Called from functions compiled with edebug-eval-top-level-form.
ceb9ed49f7bb (edebug-slow-after, edebug-slow-before): Do nothing if edebug-active.
Richard M. Stallman <rms@gnu.org>
parents: 64212
diff changeset
2397 ;; Return the before index.
ceb9ed49f7bb (edebug-slow-after, edebug-slow-before): Do nothing if edebug-active.
Richard M. Stallman <rms@gnu.org>
parents: 64212
diff changeset
2398 (setcar edebug-offset-indices edebug-before-index)
ceb9ed49f7bb (edebug-slow-after, edebug-slow-before): Do nothing if edebug-active.
Richard M. Stallman <rms@gnu.org>
parents: 64212
diff changeset
2399
ceb9ed49f7bb (edebug-slow-after, edebug-slow-before): Do nothing if edebug-active.
Richard M. Stallman <rms@gnu.org>
parents: 64212
diff changeset
2400 ;; Increment frequency count
ceb9ed49f7bb (edebug-slow-after, edebug-slow-before): Do nothing if edebug-active.
Richard M. Stallman <rms@gnu.org>
parents: 64212
diff changeset
2401 (aset edebug-freq-count edebug-before-index
ceb9ed49f7bb (edebug-slow-after, edebug-slow-before): Do nothing if edebug-active.
Richard M. Stallman <rms@gnu.org>
parents: 64212
diff changeset
2402 (1+ (aref edebug-freq-count edebug-before-index)))
ceb9ed49f7bb (edebug-slow-after, edebug-slow-before): Do nothing if edebug-active.
Richard M. Stallman <rms@gnu.org>
parents: 64212
diff changeset
2403
ceb9ed49f7bb (edebug-slow-after, edebug-slow-before): Do nothing if edebug-active.
Richard M. Stallman <rms@gnu.org>
parents: 64212
diff changeset
2404 (if (or (not (memq edebug-execution-mode '(Go-nonstop next)))
ceb9ed49f7bb (edebug-slow-after, edebug-slow-before): Do nothing if edebug-active.
Richard M. Stallman <rms@gnu.org>
parents: 64212
diff changeset
2405 (edebug-input-pending-p))
ceb9ed49f7bb (edebug-slow-after, edebug-slow-before): Do nothing if edebug-active.
Richard M. Stallman <rms@gnu.org>
parents: 64212
diff changeset
2406 (edebug-debugger edebug-before-index 'before nil)))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2407 edebug-before-index)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2408
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2409 (defun edebug-fast-before (edebug-before-index)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2410 ;; Do nothing.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2411 )
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2412
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2413 (defun edebug-slow-after (edebug-before-index edebug-after-index edebug-value)
64222
ceb9ed49f7bb (edebug-slow-after, edebug-slow-before): Do nothing if edebug-active.
Richard M. Stallman <rms@gnu.org>
parents: 64212
diff changeset
2414 (if edebug-active
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2415 edebug-value
64222
ceb9ed49f7bb (edebug-slow-after, edebug-slow-before): Do nothing if edebug-active.
Richard M. Stallman <rms@gnu.org>
parents: 64212
diff changeset
2416 ;; Debug current function given AFTER position and VALUE.
ceb9ed49f7bb (edebug-slow-after, edebug-slow-before): Do nothing if edebug-active.
Richard M. Stallman <rms@gnu.org>
parents: 64212
diff changeset
2417 ;; Called from functions compiled with edebug-eval-top-level-form.
ceb9ed49f7bb (edebug-slow-after, edebug-slow-before): Do nothing if edebug-active.
Richard M. Stallman <rms@gnu.org>
parents: 64212
diff changeset
2418 ;; Return VALUE.
ceb9ed49f7bb (edebug-slow-after, edebug-slow-before): Do nothing if edebug-active.
Richard M. Stallman <rms@gnu.org>
parents: 64212
diff changeset
2419 (setcar edebug-offset-indices edebug-after-index)
ceb9ed49f7bb (edebug-slow-after, edebug-slow-before): Do nothing if edebug-active.
Richard M. Stallman <rms@gnu.org>
parents: 64212
diff changeset
2420
ceb9ed49f7bb (edebug-slow-after, edebug-slow-before): Do nothing if edebug-active.
Richard M. Stallman <rms@gnu.org>
parents: 64212
diff changeset
2421 ;; Increment frequency count
ceb9ed49f7bb (edebug-slow-after, edebug-slow-before): Do nothing if edebug-active.
Richard M. Stallman <rms@gnu.org>
parents: 64212
diff changeset
2422 (aset edebug-freq-count edebug-after-index
ceb9ed49f7bb (edebug-slow-after, edebug-slow-before): Do nothing if edebug-active.
Richard M. Stallman <rms@gnu.org>
parents: 64212
diff changeset
2423 (1+ (aref edebug-freq-count edebug-after-index)))
ceb9ed49f7bb (edebug-slow-after, edebug-slow-before): Do nothing if edebug-active.
Richard M. Stallman <rms@gnu.org>
parents: 64212
diff changeset
2424 (if edebug-test-coverage (edebug-update-coverage))
ceb9ed49f7bb (edebug-slow-after, edebug-slow-before): Do nothing if edebug-active.
Richard M. Stallman <rms@gnu.org>
parents: 64212
diff changeset
2425
ceb9ed49f7bb (edebug-slow-after, edebug-slow-before): Do nothing if edebug-active.
Richard M. Stallman <rms@gnu.org>
parents: 64212
diff changeset
2426 (if (and (eq edebug-execution-mode 'Go-nonstop)
ceb9ed49f7bb (edebug-slow-after, edebug-slow-before): Do nothing if edebug-active.
Richard M. Stallman <rms@gnu.org>
parents: 64212
diff changeset
2427 (not (edebug-input-pending-p)))
ceb9ed49f7bb (edebug-slow-after, edebug-slow-before): Do nothing if edebug-active.
Richard M. Stallman <rms@gnu.org>
parents: 64212
diff changeset
2428 ;; Just return result.
ceb9ed49f7bb (edebug-slow-after, edebug-slow-before): Do nothing if edebug-active.
Richard M. Stallman <rms@gnu.org>
parents: 64212
diff changeset
2429 edebug-value
ceb9ed49f7bb (edebug-slow-after, edebug-slow-before): Do nothing if edebug-active.
Richard M. Stallman <rms@gnu.org>
parents: 64212
diff changeset
2430 (edebug-debugger edebug-after-index 'after edebug-value)
ceb9ed49f7bb (edebug-slow-after, edebug-slow-before): Do nothing if edebug-active.
Richard M. Stallman <rms@gnu.org>
parents: 64212
diff changeset
2431 )))
6512
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-fast-after (edebug-before-index edebug-after-index edebug-value)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2434 ;; Do nothing but return the value.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2435 edebug-value)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2436
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2437 (defun edebug-run-slow ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2438 (defalias 'edebug-before 'edebug-slow-before)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2439 (defalias 'edebug-after 'edebug-slow-after))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2440
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2441 ;; This is not used, yet.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2442 (defun edebug-run-fast ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2443 (defalias 'edebug-before 'edebug-fast-before)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2444 (defalias 'edebug-after 'edebug-fast-after))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2445
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2446 (edebug-run-slow)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2447
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2448
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2449 (defun edebug-update-coverage ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2450 (let ((old-result (aref edebug-coverage edebug-after-index)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2451 (cond
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2452 ((eq 'ok-coverage old-result))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2453 ((eq 'unknown old-result)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2454 (aset edebug-coverage edebug-after-index edebug-value))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2455 ;; Test if a different result.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2456 ((not (eq edebug-value old-result))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2457 (aset edebug-coverage edebug-after-index 'ok-coverage)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2458
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2459
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2460 ;; Dynamically declared unbound variables.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2461 (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
2462 (defvar edebug-breakpoints)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2463 (defvar edebug-break-data) ; break data for current function.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2464 (defvar edebug-break) ; whether a break occurred.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2465 (defvar edebug-global-break) ; whether a global break occurred.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2466 (defvar edebug-break-condition) ; whether the breakpoint is conditional.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2467
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2468 (defvar edebug-break-result nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2469 (defvar edebug-global-break-result nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2470
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2471
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2472 (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
2473 (if inhibit-redisplay
f9f0026b4c12 (edebug-debugger): If inside redisplay, just return.
Richard M. Stallman <rms@gnu.org>
parents: 44518
diff changeset
2474 ;; 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
2475 edebug-value
f9f0026b4c12 (edebug-debugger): If inside redisplay, just return.
Richard M. Stallman <rms@gnu.org>
parents: 44518
diff changeset
2476 ;; Check breakpoints and pending input.
f9f0026b4c12 (edebug-debugger): If inside redisplay, just return.
Richard M. Stallman <rms@gnu.org>
parents: 44518
diff changeset
2477 ;; 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
2478 ;; Return edebug-value.
f9f0026b4c12 (edebug-debugger): If inside redisplay, just return.
Richard M. Stallman <rms@gnu.org>
parents: 44518
diff changeset
2479 (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
2480 (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
2481 (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
2482 (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
2483 (edebug-global-break
f9f0026b4c12 (edebug-debugger): If inside redisplay, just return.
Richard M. Stallman <rms@gnu.org>
parents: 44518
diff changeset
2484 (if edebug-global-break-condition
f9f0026b4c12 (edebug-debugger): If inside redisplay, just return.
Richard M. Stallman <rms@gnu.org>
parents: 44518
diff changeset
2485 (condition-case nil
f9f0026b4c12 (edebug-debugger): If inside redisplay, just return.
Richard M. Stallman <rms@gnu.org>
parents: 44518
diff changeset
2486 (setq edebug-global-break-result
f9f0026b4c12 (edebug-debugger): If inside redisplay, just return.
Richard M. Stallman <rms@gnu.org>
parents: 44518
diff changeset
2487 (eval edebug-global-break-condition))
f9f0026b4c12 (edebug-debugger): If inside redisplay, just return.
Richard M. Stallman <rms@gnu.org>
parents: 44518
diff changeset
2488 (error nil))))
f9f0026b4c12 (edebug-debugger): If inside redisplay, just return.
Richard M. Stallman <rms@gnu.org>
parents: 44518
diff changeset
2489 (edebug-break))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2490
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2491 ;;; (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
2492 ;; Test whether we should break.
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
2493 (setq edebug-break
46716
f9f0026b4c12 (edebug-debugger): If inside redisplay, just return.
Richard M. Stallman <rms@gnu.org>
parents: 44518
diff changeset
2494 (or edebug-global-break
f9f0026b4c12 (edebug-debugger): If inside redisplay, just return.
Richard M. Stallman <rms@gnu.org>
parents: 44518
diff changeset
2495 (and edebug-break-data
f9f0026b4c12 (edebug-debugger): If inside redisplay, just return.
Richard M. Stallman <rms@gnu.org>
parents: 44518
diff changeset
2496 (or (not edebug-break-condition)
f9f0026b4c12 (edebug-debugger): If inside redisplay, just return.
Richard M. Stallman <rms@gnu.org>
parents: 44518
diff changeset
2497 (setq edebug-break-result
f9f0026b4c12 (edebug-debugger): If inside redisplay, just return.
Richard M. Stallman <rms@gnu.org>
parents: 44518
diff changeset
2498 (eval edebug-break-condition))))))
f9f0026b4c12 (edebug-debugger): If inside redisplay, just return.
Richard M. Stallman <rms@gnu.org>
parents: 44518
diff changeset
2499 (if (and edebug-break
f9f0026b4c12 (edebug-debugger): If inside redisplay, just return.
Richard M. Stallman <rms@gnu.org>
parents: 44518
diff changeset
2500 (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
2501 ;; Delete the breakpoint.
f9f0026b4c12 (edebug-debugger): If inside redisplay, just return.
Richard M. Stallman <rms@gnu.org>
parents: 44518
diff changeset
2502 (setcdr edebug-data
f9f0026b4c12 (edebug-debugger): If inside redisplay, just return.
Richard M. Stallman <rms@gnu.org>
parents: 44518
diff changeset
2503 (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
2504 (cdr (cdr edebug-data)))))
f9f0026b4c12 (edebug-debugger): If inside redisplay, just return.
Richard M. Stallman <rms@gnu.org>
parents: 44518
diff changeset
2505
f9f0026b4c12 (edebug-debugger): If inside redisplay, just return.
Richard M. Stallman <rms@gnu.org>
parents: 44518
diff changeset
2506 ;; Display if mode is not go, continue, or Continue-fast
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
2507 ;; 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
2508 (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
2509 edebug-break
f9f0026b4c12 (edebug-debugger): If inside redisplay, just return.
Richard M. Stallman <rms@gnu.org>
parents: 44518
diff changeset
2510 (edebug-input-pending-p))
f9f0026b4c12 (edebug-debugger): If inside redisplay, just return.
Richard M. Stallman <rms@gnu.org>
parents: 44518
diff changeset
2511 (edebug-display)) ; <--------------- display
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
2512
46716
f9f0026b4c12 (edebug-debugger): If inside redisplay, just return.
Richard M. Stallman <rms@gnu.org>
parents: 44518
diff changeset
2513 edebug-value
f9f0026b4c12 (edebug-debugger): If inside redisplay, just return.
Richard M. Stallman <rms@gnu.org>
parents: 44518
diff changeset
2514 )))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2515
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2516
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2517 ;; window-start now stored with each function.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2518 ;;(defvar edebug-window-start nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2519 ;; Remember where each buffers' window starts between edebug calls.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2520 ;; This is to avoid spurious recentering.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2521 ;; Does this still need to be buffer-local??
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2522 ;;(setq-default edebug-window-start nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2523 ;;(make-variable-buffer-local 'edebug-window-start)
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
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2526 ;; Dynamically declared unbound vars
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2527 (defvar edebug-point) ; the point in edebug buffer
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2528 (defvar edebug-outside-buffer) ; the current-buffer outside of edebug
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2529 (defvar edebug-outside-point) ; the point outside of edebug
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2530 (defvar edebug-outside-mark) ; the mark outside of edebug
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2531 (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
2532 (defvar edebug-outside-windows) ; outside window configuration
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2533 (defvar edebug-eval-buffer) ; for the evaluation list.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2534 (defvar edebug-outside-o-a-p) ; outside overlay-arrow-position
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2535 (defvar edebug-outside-o-a-s) ; outside overlay-arrow-string
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2536 (defvar edebug-outside-c-i-e-a) ; outside cursor-in-echo-area
67780
6f62623c8c61 (edebug-all-defs, edebug-all-forms): Add autoload cookies.
Juri Linkov <juri@jurta.org>
parents: 67635
diff changeset
2537 (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
2538
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2539 (defvar edebug-eval-list nil) ;; List of expressions to evaluate.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2540
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2541 (defvar edebug-previous-result nil) ;; Last result returned.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2542
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2543 ;; 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
2544 (defalias 'edebug-mark-marker 'mark-marker)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2545
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2546
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2547 (defun edebug-display ()
54499
b7693565f757 (edebug-display): Bring up a debug trace if the source location can't be found.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 53198
diff changeset
2548 (unless (marker-position edebug-def-mark)
b7693565f757 (edebug-display): Bring up a debug trace if the source location can't be found.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 53198
diff changeset
2549 ;; The buffer holding the source has been killed.
b7693565f757 (edebug-display): Bring up a debug trace if the source location can't be found.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 53198
diff changeset
2550 ;; Let's at least show a backtrace so the user can figure out
b7693565f757 (edebug-display): Bring up a debug trace if the source location can't be found.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 53198
diff changeset
2551 ;; which function we're talking about.
b7693565f757 (edebug-display): Bring up a debug trace if the source location can't be found.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 53198
diff changeset
2552 (debug))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2553 ;; Setup windows for edebug, determine mode, maybe enter recursive-edit.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2554 ;; Uses local variables of edebug-enter, edebug-before, edebug-after
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2555 ;; and edebug-debugger.
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2556 (let ((edebug-active t) ; for minor mode alist
64222
ceb9ed49f7bb (edebug-slow-after, edebug-slow-before): Do nothing if edebug-active.
Richard M. Stallman <rms@gnu.org>
parents: 64212
diff changeset
2557 (edebug-with-timeout-suspend (with-timeout-suspend))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2558 edebug-stop ; should we enter recursive-edit
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2559 (edebug-point (+ edebug-def-mark
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2560 (aref (nth 2 edebug-data) edebug-offset-index)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2561 edebug-buffer-outside-point ; current point in edebug-buffer
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2562 ;; window displaying edebug-buffer
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2563 (edebug-window-data (nth 3 edebug-data))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2564 (edebug-outside-window (selected-window))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2565 (edebug-outside-buffer (current-buffer))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2566 (edebug-outside-point (point))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2567 (edebug-outside-mark (edebug-mark))
72344
79197e6c8618 * emacs-lisp/edebug.el (edebug-recursive-edit): Don't save and
Chong Yidong <cyd@stupidchicken.com>
parents: 71852
diff changeset
2568 (edebug-outside-unread-command-events unread-command-events)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2569 edebug-outside-windows ; window or screen configuration
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2570 edebug-buffer-points
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
2571
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2572 edebug-eval-buffer ; declared here so we can kill it below
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2573 (edebug-eval-result-list (and edebug-eval-list
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2574 (edebug-eval-result-list)))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2575 edebug-trace-window
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2576 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
2577
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2578 (edebug-outside-o-a-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
2579 (edebug-outside-o-a-s overlay-arrow-string)
67780
6f62623c8c61 (edebug-all-defs, edebug-all-forms): Add autoload cookies.
Juri Linkov <juri@jurta.org>
parents: 67635
diff changeset
2580 (edebug-outside-c-i-e-a cursor-in-echo-area)
104663
ae5e866fedd8 (edebug-display, edebug-outside-excursion):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103997
diff changeset
2581 (edebug-outside-d-c-i-n-s-w
ae5e866fedd8 (edebug-display, edebug-outside-excursion):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103997
diff changeset
2582 (default-value '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
2583 (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
2584 (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
2585 (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
2586 (cursor-in-echo-area nil)
72347
494f2c627b5b Minor fix to last change.
Chong Yidong <cyd@stupidchicken.com>
parents: 72344
diff changeset
2587 (unread-command-events unread-command-events)
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2588 ;; 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
2589 )
104663
ae5e866fedd8 (edebug-display, edebug-outside-excursion):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103997
diff changeset
2590 (setq-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
2591 (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
2592 (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
2593 (error "Buffer defining %s not found" edebug-function)))
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
2594
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2595 (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
2596 ;; 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
2597 (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
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 (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
2600 ;; Save windows now before we modify them.
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
2601 (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
2602 (edebug-current-windows edebug-save-windows)))
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
2603
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2604 (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
2605 (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
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 ;; First move the edebug buffer point to edebug-point
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
2608 ;; 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
2609 ;; 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
2610 ;;(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
2611 ;;(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
2612
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 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
2614 ;; 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
2615 (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
2616 (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
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 ;; Now display eval list, if any.
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
2619 ;; 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
2620 ;; 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
2621 (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
2622 ;; 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
2623 (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
2624 (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
2625
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2626 (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
2627 (goto-char edebug-point)
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
2628
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2629 (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
2630 ;; 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
2631 ;; 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
2632 (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
2633 (let ((debug-on-error nil))
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
2634 (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
2635 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
2636 )))
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2637
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2638 (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
2639 (edebug-adjust-window (cdr edebug-window-data)))
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
2640
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2641 ;; Test if there is input, not including keyboard macros.
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
2642 (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
2643 (progn
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2644 (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
2645 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
2646 (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
2647 ;; (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
2648 ))
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2649 ;; 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
2650 (edebug-overlay-arrow)
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
2651
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2652 (cond
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2653 ((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
2654 ;; 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
2655 (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
2656 (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
2657 (beep)
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 '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
2659 (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
2660 (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
2661 (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 (cond
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2663 (edebug-global-break
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
2664 (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
2665 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
2666 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
2667 (edebug-break-condition
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
2668 (message "Break: %s => %s"
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
2669 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
2670 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
2671 ((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
2672 (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
2673 (t)))
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2674
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2675 (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
2676
72347
494f2c627b5b Minor fix to last change.
Chong Yidong <cyd@stupidchicken.com>
parents: 72344
diff changeset
2677 (setq unread-command-events nil)
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2678 (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
2679 (progn
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2680 ;; 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
2681 (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
2682 (not (eq edebug-execution-mode 'Continue-fast)))
69255
651c5e7479de (edebug-display): Use `edebug-sit-for-seconds' value instead of a literal
Eli Zaretskii <eliz@gnu.org>
parents: 68648
diff changeset
2683 (edebug-sit-for edebug-sit-for-seconds)) ; Show message.
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2684 (edebug-previous-result)))
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
2685
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 (cond
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2687 (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
2688 (cond
69255
651c5e7479de (edebug-display): Use `edebug-sit-for-seconds' value instead of a literal
Eli Zaretskii <eliz@gnu.org>
parents: 68648
diff changeset
2689 ((eq edebug-execution-mode 'continue)
651c5e7479de (edebug-display): Use `edebug-sit-for-seconds' value instead of a literal
Eli Zaretskii <eliz@gnu.org>
parents: 68648
diff changeset
2690 (edebug-sit-for edebug-sit-for-seconds))
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2691 ((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
2692 (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
2693 ;; 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
2694 ((eq edebug-execution-mode 'trace)
18376
9ae76ef113f6 (edebug-sit-for-seconds): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 18017
diff changeset
2695 (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
2696 ((eq edebug-execution-mode 'Trace-fast)
72344
79197e6c8618 * emacs-lisp/edebug.el (edebug-recursive-edit): Don't save and
Chong Yidong <cyd@stupidchicken.com>
parents: 71852
diff changeset
2697 (edebug-sit-for 0))) ; Force update and continue.
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
2698
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2699 (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
2700 (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
2701 (memq edebug-execution-mode '(step next))
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
2702 (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
2703 (progn
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2704 ;; (setq edebug-execution-mode 'step)
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
2705 ;; (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
2706 (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
2707
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2708 ;; 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
2709 (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
2710 (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
2711 (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
2712 ;; 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
2713 (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
2714 (progn
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2715 (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
2716 (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
2717
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2718 ;; 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
2719 ;; 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
2720 (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
2721 (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
2722 (setq edebug-trace-window-start
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
2723 (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
2724 (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
2725
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2726 ;; 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
2727 (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
2728 (progn
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2729 (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
2730
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2731 ;; 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
2732 ;; 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
2733 ;; 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
2734 (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
2735 (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
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 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
2738 (if edebug-trace-window
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
2739 (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
2740 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
2741
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2742 ;; 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
2743 (let ((window (car edebug-window-data)))
81391
0842cee3ad33 (edebug-pop-to-buffer, edebug-display): Remove redundant checks.
Juanma Barranquero <lekktu@gmail.com>
parents: 77165
diff changeset
2744 (if (and (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
2745 (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
2746 (progn
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
2747 (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
2748 '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
2749 ;; 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
2750 ;; Needed in addition to setting the buffer point
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
2751 ;; - 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
2752 ;; 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
2753 ;; 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
2754 ;; (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
2755 )))
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2756
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2757 ;; 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
2758 ;; (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
2759 )
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2760 ;; 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
2761 ;; 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
2762 ;; 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
2763 (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
2764 (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
2765 ) ; 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
2766
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2767 ;; Restore current buffer always, in case application needs it.
76782
f960587873db (edebug-display): Don't go to edebug-outside-buffer if it is dead.
Richard M. Stallman <rms@gnu.org>
parents: 76298
diff changeset
2768 (if (buffer-name edebug-outside-buffer)
f960587873db (edebug-display): Don't go to edebug-outside-buffer if it is dead.
Richard M. Stallman <rms@gnu.org>
parents: 76298
diff changeset
2769 (set-buffer edebug-outside-buffer))
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2770 ;; 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
2771 ;; Needed even if restoring windows because
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
2772 ;; that doesn't restore point and mark in the current buffer.
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
2773 ;; 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
2774 (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
2775 (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
2776 (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
2777 ;; 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
2778 (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
2779 ) ; 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
2780 ;; 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
2781
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2782 ;; Restore edebug-buffer's outside point.
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
2783 ;; (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
2784 ;; edebug-buffer-outside-point)
104663
ae5e866fedd8 (edebug-display, edebug-outside-excursion):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103997
diff changeset
2785 (with-current-buffer edebug-buffer
ae5e866fedd8 (edebug-display, edebug-outside-excursion):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103997
diff changeset
2786 (goto-char edebug-buffer-outside-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
2787 ;; ... nothing more.
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2788 )
64222
ceb9ed49f7bb (edebug-slow-after, edebug-slow-before): Do nothing if edebug-active.
Richard M. Stallman <rms@gnu.org>
parents: 64212
diff changeset
2789 (with-timeout-unsuspend edebug-with-timeout-suspend)
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2790 ;; Reset global variables to outside values in case they were changed.
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2791 (setq
72344
79197e6c8618 * emacs-lisp/edebug.el (edebug-recursive-edit): Don't save and
Chong Yidong <cyd@stupidchicken.com>
parents: 71852
diff changeset
2792 unread-command-events edebug-outside-unread-command-events
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2793 overlay-arrow-position edebug-outside-o-a-p
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2794 overlay-arrow-string edebug-outside-o-a-s
104663
ae5e866fedd8 (edebug-display, edebug-outside-excursion):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103997
diff changeset
2795 cursor-in-echo-area edebug-outside-c-i-e-a)
ae5e866fedd8 (edebug-display, edebug-outside-excursion):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103997
diff changeset
2796 (setq-default cursor-in-non-selected-windows edebug-outside-d-c-i-n-s-w)
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2797 )))
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2798
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2799
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2800 (defvar edebug-number-of-recursions 0)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2801 ;; Number of recursive edits started by edebug.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2802 ;; Should be 0 at the top level.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2803
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2804 (defvar edebug-recursion-depth 0)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2805 ;; Value of recursion-depth when edebug was called.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2806
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2807 ;; Dynamically declared unbound vars
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2808 (defvar edebug-outside-match-data) ; match data outside of edebug
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2809 (defvar edebug-backtrace-buffer) ; each recursive edit gets its own
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
2810 (defvar edebug-inside-windows)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2811 (defvar edebug-interactive-p)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2812
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2813 (defvar edebug-outside-map)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2814 (defvar edebug-outside-standard-output)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2815 (defvar edebug-outside-standard-input)
25812
edf16534a337 (edebug-outside-current-prefix-arg):
Phillip Rulon <pjr@gnu.org>
parents: 25056
diff changeset
2816 (defvar edebug-outside-current-prefix-arg)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2817 (defvar edebug-outside-last-command)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2818 (defvar edebug-outside-this-command)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2819
6671
5b26038687ed (edebug-emacs-19-specific): Renamed from edebug-fsf19-specific.
Richard M. Stallman <rms@gnu.org>
parents: 6666
diff changeset
2820 ;; 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
2821 ;; 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
2822 ;; 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
2823 ;; 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
2824
103885
adbe0e36df45 (edebug-setup-hook, edebug-all-forms)
Glenn Morris <rgm@gnu.org>
parents: 101015
diff changeset
2825 ;; Emacs 18 FIXME
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2826 (defvar edebug-outside-unread-command-char)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2827
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2828 ;; Emacs 19.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2829 (defvar edebug-outside-last-command-event)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2830 (defvar edebug-outside-unread-command-events)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2831 (defvar edebug-outside-last-input-event)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2832 (defvar edebug-outside-last-event-frame)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2833 (defvar edebug-outside-last-nonmenu-event)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2834 (defvar edebug-outside-track-mouse)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2835
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2836 ;; Disable byte compiler warnings about unread-command-char and -event
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2837 ;; (maybe works with byte-compile-version 2.22 at least)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2838 (defvar edebug-unread-command-char-warning)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2839 (defvar edebug-unread-command-event-warning)
103885
adbe0e36df45 (edebug-setup-hook, edebug-all-forms)
Glenn Morris <rgm@gnu.org>
parents: 101015
diff changeset
2840 (eval-when-compile ; FIXME
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2841 (setq edebug-unread-command-char-warning
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2842 (get 'unread-command-char 'byte-obsolete-variable))
33758
8c1e62157545 (edebug-version)
Dave Love <fx@gnu.org>
parents: 33709
diff changeset
2843 (put 'unread-command-char 'byte-obsolete-variable nil))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2844
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2845 (defun edebug-recursive-edit ()
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2846 ;; Start up a recursive edit inside of edebug.
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2847 ;; 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
2848 ;; Assume that none of the variables below are buffer-local.
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2849 (let ((edebug-buffer-read-only buffer-read-only)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2850 ;; match-data must be done in the outside buffer
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2851 (edebug-outside-match-data
104663
ae5e866fedd8 (edebug-display, edebug-outside-excursion):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103997
diff changeset
2852 (with-current-buffer edebug-outside-buffer ; in case match buffer different
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2853 (match-data)))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2854
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2855 ;;(edebug-number-of-recursions (1+ edebug-number-of-recursions))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2856 (edebug-recursion-depth (recursion-depth))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2857 edebug-entered ; bind locally to nil
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2858 (edebug-interactive-p nil) ; again non-interactive
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2859 edebug-backtrace-buffer ; each recursive edit gets its own
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2860 ;; The window configuration may be saved and restored
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2861 ;; during a recursive-edit
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2862 edebug-inside-windows
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2863
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2864 (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
2865
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2866 (edebug-outside-standard-output standard-output)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2867 (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
2868 (edebug-outside-defining-kbd-macro defining-kbd-macro)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2869
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2870 (edebug-outside-last-command last-command)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2871 (edebug-outside-this-command this-command)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2872
103885
adbe0e36df45 (edebug-setup-hook, edebug-all-forms)
Glenn Morris <rgm@gnu.org>
parents: 101015
diff changeset
2873 (edebug-outside-unread-command-char unread-command-char) ; FIXME
25812
edf16534a337 (edebug-outside-current-prefix-arg):
Phillip Rulon <pjr@gnu.org>
parents: 25056
diff changeset
2874 (edebug-outside-current-prefix-arg current-prefix-arg)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2875
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2876 (edebug-outside-last-input-event last-input-event)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2877 (edebug-outside-last-command-event last-command-event)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2878 (edebug-outside-last-event-frame last-event-frame)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2879 (edebug-outside-last-nonmenu-event last-nonmenu-event)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2880 (edebug-outside-track-mouse track-mouse)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2881 )
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2882
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2883 (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
2884 (let (
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2885 ;; 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
2886 ;; We could set these to the values for previous edebug call.
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
2887 (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
2888 (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
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 ;; 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
2891 (unread-command-char -1)
25812
edf16534a337 (edebug-outside-current-prefix-arg):
Phillip Rulon <pjr@gnu.org>
parents: 25056
diff changeset
2892 (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
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 ;; 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
2895 (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
2896 (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
2897 (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
2898 (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
2899 (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
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 ;; 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
2902 (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
2903 (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
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 ;; Don't keep defining a kbd macro.
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
2906 (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
2907 (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
2908
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2909 ;; others??
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2910 )
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 (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
2913 (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
2914 (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
2915
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2916 (setq buffer-read-only t)
16308
2334a3d634c0 (edebug-original-signal): Don't define it.
Richard M. Stallman <rms@gnu.org>
parents: 16299
diff changeset
2917 (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
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 (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
2920 (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
2921 (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
2922
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2923 ;; 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
2924 (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
2925 (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
2926 (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
2927 ;; 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
2928 (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
2929
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2930 ;; 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
2931 ;; (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
2932
21162
6c70fa8e1a5d (edebug-recursive-edit)
Richard M. Stallman <rms@gnu.org>
parents: 20832
diff changeset
2933 (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
2934
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2935 ;; 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
2936 ;; 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
2937 (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
2938 (progn
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2939 (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
2940 (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
2941 (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
2942 (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
2943 (use-local-map edebug-outside-map)
76298
872a30c0f872 (edebug-kill-buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents: 75346
diff changeset
2944 (remove-hook 'kill-buffer-hook 'edebug-kill-buffer t)
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2945 )
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2946 ;; 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
2947 (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
2948 ));; 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
2949
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2950 ;; 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
2951 (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
2952 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
2953 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
2954 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
2955 unread-command-char edebug-outside-unread-command-char
25812
edf16534a337 (edebug-outside-current-prefix-arg):
Phillip Rulon <pjr@gnu.org>
parents: 25056
diff changeset
2956 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
2957 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
2958 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
2959 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
2960 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
2961
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2962 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
2963 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
2964 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
2965 ))
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2966 ))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2967
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2968
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2969 ;;; Display related functions
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2970
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2971 (defun edebug-adjust-window (old-start)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2972 ;; 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
2973 ;;; (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
2974 ;;; (selected-window) old-start (window-start) (point)) (sit-for 5)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2975 (if (not (pos-visible-in-window-p))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2976 (progn
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2977 ;; First try old-start
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2978 (if old-start
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2979 (set-window-start (selected-window) old-start))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2980 (if (not (pos-visible-in-window-p))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2981 (progn
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2982 ;; (message "resetting window start") (sit-for 2)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2983 (set-window-start
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2984 (selected-window)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2985 (save-excursion
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2986 (forward-line
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2987 (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
2988 (- (/ (window-height) 2)) ; center the line moving forward
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2989 ))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2990 (beginning-of-line)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2991 (point)))))))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2992 (window-start))
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
2993
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2994
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2995
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2996 (defconst edebug-arrow-alist
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2997 '((Continue-fast . "=")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2998 (Trace-fast . "-")
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2999 (continue . ">")
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3000 (trace . "->")
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3001 (step . "=>")
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3002 (next . "=>")
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3003 (go . "<>")
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3004 (Go-nonstop . "..") ; not used
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3005 )
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3006 "Association list of arrows for each edebug mode.")
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3007
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3008 (defun edebug-overlay-arrow ()
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3009 ;; 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
3010 ;; 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
3011 ;; 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
3012 (let ((pos (save-excursion (beginning-of-line) (point))))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3013 (setq overlay-arrow-string
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3014 (cdr (assq edebug-execution-mode edebug-arrow-alist)))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3015 (setq overlay-arrow-position (make-marker))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3016 (set-marker overlay-arrow-position pos (current-buffer))))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3017
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3018
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3019 (defun edebug-toggle-save-all-windows ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3020 "Toggle the saving and restoring of all windows.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3021 Also, each time you toggle it on, the inside and outside window
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3022 configurations become the same as the current configuration."
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3023 (interactive)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3024 (setq edebug-save-windows (not edebug-save-windows))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3025 (if edebug-save-windows
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3026 (setq edebug-inside-windows
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3027 (setq edebug-outside-windows
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3028 (edebug-current-windows
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3029 edebug-save-windows))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3030 (message "Window saving is %s for all windows."
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3031 (if edebug-save-windows "on" "off")))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3032
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3033 (defmacro edebug-changing-windows (&rest body)
26519
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3034 `(let ((window (selected-window)))
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3035 (setq edebug-inside-windows (edebug-current-windows t))
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3036 (edebug-set-windows edebug-outside-windows)
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3037 ,@body;; Code to change edebug-save-windows
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
3038 (setq edebug-outside-windows (edebug-current-windows
26519
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3039 edebug-save-windows))
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3040 ;; Problem: what about outside windows that are deleted inside?
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3041 (edebug-set-windows edebug-inside-windows)))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3042
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3043 (defun edebug-toggle-save-selected-window ()
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
3044 "Toggle the saving and restoring of the selected window.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3045 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
3046 configurations become the same as the current configuration."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3047 (interactive)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3048 (cond
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3049 ((eq t edebug-save-windows)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3050 ;; Save all outside windows except the selected one.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3051 ;; Remove (selected-window) from outside-windows.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3052 (edebug-changing-windows
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3053 (setq edebug-save-windows (delq window (edebug-window-list)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3054
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3055 ((memq (selected-window) edebug-save-windows)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3056 (setq edebug-outside-windows
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3057 (delq (assq (selected-window) edebug-outside-windows)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3058 edebug-outside-windows))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3059 (setq edebug-save-windows
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3060 (delq (selected-window) edebug-save-windows)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3061 (t ; Save a new window.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3062 (edebug-changing-windows
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3063 (setq edebug-save-windows (cons window edebug-save-windows)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3064
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3065 (message "Window saving is %s for %s."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3066 (if (memq (selected-window) edebug-save-windows)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3067 "on" "off")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3068 (selected-window)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3069
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3070 (defun edebug-toggle-save-windows (arg)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3071 "Toggle the saving and restoring of windows.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3072 With prefix, toggle for just the selected window.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3073 Otherwise, toggle for all windows."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3074 (interactive "P")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3075 (if arg
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3076 (edebug-toggle-save-selected-window)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3077 (edebug-toggle-save-all-windows)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3078
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3079
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3080 (defun edebug-where ()
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3081 "Show the debug windows and where we stopped in the program."
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3082 (interactive)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3083 (if (not edebug-active)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3084 (error "Edebug is not active"))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3085 ;; Restore the window configuration to what it last was inside.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3086 ;; But it is not always set. - experiment
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3087 ;;(if edebug-inside-windows
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3088 ;; (edebug-set-windows edebug-inside-windows))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3089 (edebug-pop-to-buffer edebug-buffer)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3090 (goto-char edebug-point))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3091
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3092 (defun edebug-view-outside ()
103885
adbe0e36df45 (edebug-setup-hook, edebug-all-forms)
Glenn Morris <rgm@gnu.org>
parents: 101015
diff changeset
3093 "Change to the outside window configuration.
adbe0e36df45 (edebug-setup-hook, edebug-all-forms)
Glenn Morris <rgm@gnu.org>
parents: 101015
diff changeset
3094 Use `edebug-where' to return."
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3095 (interactive)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3096 (if (not edebug-active)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3097 (error "Edebug is not active"))
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
3098 (setq edebug-inside-windows
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3099 (edebug-current-windows edebug-save-windows))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3100 (edebug-set-windows edebug-outside-windows)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3101 (goto-char edebug-outside-point)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3102 (message "Window configuration outside of Edebug. Return with %s"
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3103 (substitute-command-keys "\\<global-map>\\[edebug-where]")))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3104
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3105
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3106 (defun edebug-bounce-point (arg)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3107 "Bounce the point in the outside current buffer.
103885
adbe0e36df45 (edebug-setup-hook, edebug-all-forms)
Glenn Morris <rgm@gnu.org>
parents: 101015
diff changeset
3108 If prefix argument ARG is supplied, sit for that many seconds
adbe0e36df45 (edebug-setup-hook, edebug-all-forms)
Glenn Morris <rgm@gnu.org>
parents: 101015
diff changeset
3109 before returning. The default is one second."
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3110 (interactive "p")
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3111 (if (not edebug-active)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3112 (error "Edebug is not active"))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3113 (save-excursion
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3114 ;; If the buffer's currently displayed, avoid set-window-configuration.
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3115 (save-window-excursion
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3116 (edebug-pop-to-buffer edebug-outside-buffer)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3117 (goto-char edebug-outside-point)
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
3118 (message "Current buffer: %s Point: %s Mark: %s"
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
3119 (current-buffer) (point)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3120 (if (marker-buffer (edebug-mark-marker))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3121 (marker-position (edebug-mark-marker)) "<not set>"))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3122 (edebug-sit-for arg)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3123 (edebug-pop-to-buffer edebug-buffer (car edebug-window-data)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3124
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3125
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
3126 ;; 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
3127 ;; 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
3128
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3129 '(defvar edebug-display-buffer-list nil
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3130 "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
3131
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3132 '(defun edebug-display-buffer (buffer)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3133 "Toggle display of a buffer inside of edebug."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3134 (interactive "bBuffer: ")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3135 (let ((already-displaying (memq buffer edebug-display-buffer-list)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3136 (setq edebug-display-buffer-list
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3137 (if already-displaying
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3138 (delq buffer edebug-display-buffer-list)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3139 (cons buffer edebug-display-buffer-list)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3140 (message "Displaying %s %s" buffer
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3141 (if already-displaying "off" "on"))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3142
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3143 ;;; Breakpoint related functions
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3144
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3145 (defun edebug-find-stop-point ()
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3146 ;; Return (function . index) of the nearest edebug stop point.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3147 (let* ((edebug-def-name (edebug-form-data-symbol))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3148 (edebug-data
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3149 (let ((data (get edebug-def-name 'edebug)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3150 (if (or (null data) (markerp data))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3151 (error "%s is not instrumented for Edebug" edebug-def-name))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3152 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
3153 ;; pull out parts of edebug-data.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3154 (edebug-def-mark (car edebug-data))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3155 ;; (edebug-breakpoints (car (cdr edebug-data)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3156
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3157 (offset-vector (nth 2 edebug-data))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3158 (offset (- (save-excursion
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3159 (if (looking-at "[ \t]")
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3160 ;; skip backwards until non-whitespace, or bol
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3161 (skip-chars-backward " \t"))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3162 (point))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3163 edebug-def-mark))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3164 len i)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3165 ;; 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
3166 (setq len (length offset-vector))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3167 (setq i 0)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3168 (while (and (< i len) (> offset (aref offset-vector i)))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3169 (setq i (1+ i)))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3170 (if (and (< i len)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3171 (<= offset (aref offset-vector i)))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3172 ;; return the relevant info
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3173 (cons edebug-def-name i)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3174 (message "Point is not on an expression in %s."
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3175 edebug-def-name)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3176 )))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3177
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3178
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3179 (defun edebug-next-breakpoint ()
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3180 "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
3181 (interactive)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3182 (let ((edebug-stop-point (edebug-find-stop-point)))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3183 (if edebug-stop-point
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3184 (let* ((edebug-def-name (car edebug-stop-point))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3185 (index (cdr edebug-stop-point))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3186 (edebug-data (get edebug-def-name 'edebug))
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
3187
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3188 ;; pull out parts of edebug-data
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3189 (edebug-def-mark (car edebug-data))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3190 (edebug-breakpoints (car (cdr edebug-data)))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3191 (offset-vector (nth 2 edebug-data))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3192 breakpoint)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3193 (if (not edebug-breakpoints)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3194 (message "No breakpoints in this function.")
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3195 (let ((breaks edebug-breakpoints))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3196 (while (and breaks
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3197 (<= (car (car breaks)) index))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3198 (setq breaks (cdr breaks)))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3199 (setq breakpoint
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3200 (if breaks
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3201 (car breaks)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3202 ;; goto the first breakpoint
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3203 (car edebug-breakpoints)))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3204 (goto-char (+ edebug-def-mark
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3205 (aref offset-vector (car breakpoint))))
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
3206
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
3207 (message "%s"
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
3208 (concat (if (nth 2 breakpoint)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3209 "Temporary " "")
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3210 (if (car (cdr breakpoint))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3211 (format "Condition: %s"
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3212 (edebug-safe-prin1-to-string
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3213 (car (cdr breakpoint))))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3214 "")))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3215 ))))))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3216
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3217
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3218 (defun edebug-modify-breakpoint (flag &optional condition temporary)
63439
de8468617bbf (edebug-all-defs, edebug-initial-mode, edebug-print-length)
Luc Teirlinck <teirllm@auburn.edu>
parents: 63303
diff changeset
3219 "Modify the breakpoint for the form at point or after it.
de8468617bbf (edebug-all-defs, edebug-initial-mode, edebug-print-length)
Luc Teirlinck <teirllm@auburn.edu>
parents: 63303
diff changeset
3220 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
3221 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
3222 the breakpoint. "
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3223 (let ((edebug-stop-point (edebug-find-stop-point)))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3224 (if edebug-stop-point
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3225 (let* ((edebug-def-name (car edebug-stop-point))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3226 (index (cdr edebug-stop-point))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3227 (edebug-data (get edebug-def-name 'edebug))
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
3228
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3229 ;; pull out parts of edebug-data
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3230 (edebug-def-mark (car edebug-data))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3231 (edebug-breakpoints (car (cdr edebug-data)))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3232 (offset-vector (nth 2 edebug-data))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3233 present)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3234 ;; delete it either way
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3235 (setq present (assq index edebug-breakpoints))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3236 (setq edebug-breakpoints (delq present edebug-breakpoints))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3237 (if flag
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3238 (progn
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3239 ;; add it to the list and resort
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3240 (setq edebug-breakpoints
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3241 (edebug-sort-alist
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3242 (cons
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3243 (list index condition temporary)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3244 edebug-breakpoints) '<))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3245 (if condition
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3246 (message "Breakpoint set in %s with condition: %s"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3247 edebug-def-name condition)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3248 (message "Breakpoint set in %s" edebug-def-name)))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3249 (if present
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3250 (message "Breakpoint unset in %s" edebug-def-name)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3251 (message "No breakpoint here")))
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
3252
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3253 (setcar (cdr edebug-data) edebug-breakpoints)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3254 (goto-char (+ edebug-def-mark (aref offset-vector index)))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3255 ))))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3256
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3257 (defun edebug-set-breakpoint (arg)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3258 "Set the breakpoint of nearest sexp.
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3259 With prefix argument, make it a temporary breakpoint."
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3260 (interactive "P")
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3261 (edebug-modify-breakpoint t nil arg))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3262
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3263 (defun edebug-unset-breakpoint ()
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3264 "Clear the breakpoint of nearest sexp."
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3265 (interactive)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3266 (edebug-modify-breakpoint nil))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3267
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3268
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3269 (defun edebug-set-global-break-condition (expression)
103885
adbe0e36df45 (edebug-setup-hook, edebug-all-forms)
Glenn Morris <rgm@gnu.org>
parents: 101015
diff changeset
3270 "Set `edebug-global-break-condition' to EXPRESSION."
58602
2864ad32d866 (edebug-set-global-break-condition):
Juri Linkov <juri@jurta.org>
parents: 58589
diff changeset
3271 (interactive
2864ad32d866 (edebug-set-global-break-condition):
Juri Linkov <juri@jurta.org>
parents: 58589
diff changeset
3272 (list
2864ad32d866 (edebug-set-global-break-condition):
Juri Linkov <juri@jurta.org>
parents: 58589
diff changeset
3273 (let ((initial (and edebug-global-break-condition
2864ad32d866 (edebug-set-global-break-condition):
Juri Linkov <juri@jurta.org>
parents: 58589
diff changeset
3274 (format "%s" edebug-global-break-condition))))
2864ad32d866 (edebug-set-global-break-condition):
Juri Linkov <juri@jurta.org>
parents: 58589
diff changeset
3275 (read-from-minibuffer
2864ad32d866 (edebug-set-global-break-condition):
Juri Linkov <juri@jurta.org>
parents: 58589
diff changeset
3276 "Global Condition: " initial read-expression-map t
2864ad32d866 (edebug-set-global-break-condition):
Juri Linkov <juri@jurta.org>
parents: 58589
diff changeset
3277 (if (equal (car read-expression-history) initial)
2864ad32d866 (edebug-set-global-break-condition):
Juri Linkov <juri@jurta.org>
parents: 58589
diff changeset
3278 '(read-expression-history . 1)
2864ad32d866 (edebug-set-global-break-condition):
Juri Linkov <juri@jurta.org>
parents: 58589
diff changeset
3279 'read-expression-history)))))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3280 (setq edebug-global-break-condition expression))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3281
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3282
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3283 ;;; Mode switching functions
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3284
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3285 (defun edebug-set-mode (mode shortmsg msg)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3286 ;; Set the edebug mode to MODE.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3287 ;; Display SHORTMSG, or MSG if not within edebug.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3288 (if (eq (1+ edebug-recursion-depth) (recursion-depth))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3289 (progn
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3290 (setq edebug-execution-mode mode)
87170
e50a2e215441 * erc-stamp.el (erc-echo-timestamp):
David Kastrup <dak@gnu.org>
parents: 85311
diff changeset
3291 (message "%s" shortmsg)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3292 ;; Continue execution
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3293 (exit-recursive-edit))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3294 ;; This is not terribly useful!!
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3295 (setq edebug-next-execution-mode mode)
87170
e50a2e215441 * erc-stamp.el (erc-echo-timestamp):
David Kastrup <dak@gnu.org>
parents: 85311
diff changeset
3296 (message "%s" msg)))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3297
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3298
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3299 (defalias 'edebug-step-through-mode 'edebug-step-mode)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3300
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3301 (defun edebug-step-mode ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3302 "Proceed to next stop point."
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3303 (interactive)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3304 (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
3305
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3306 (defun edebug-next-mode ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3307 "Proceed to next `after' stop point."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3308 (interactive)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3309 (edebug-set-mode 'next "" "Edebug will stop after next eval."))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3310
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3311 (defun edebug-go-mode (arg)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3312 "Go, evaluating until break.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3313 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
3314 (interactive "P")
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3315 (if arg
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3316 (edebug-set-breakpoint t))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3317 (edebug-set-mode 'go "Go..." "Edebug will go until break."))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3318
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3319 (defun edebug-Go-nonstop-mode ()
103885
adbe0e36df45 (edebug-setup-hook, edebug-all-forms)
Glenn Morris <rgm@gnu.org>
parents: 101015
diff changeset
3320 "Go, evaluating without debugging.
adbe0e36df45 (edebug-setup-hook, edebug-all-forms)
Glenn Morris <rgm@gnu.org>
parents: 101015
diff changeset
3321 You can use `edebug-stop', or any editing command, to stop."
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3322 (interactive)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3323 (edebug-set-mode 'Go-nonstop "Go-Nonstop..."
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3324 "Edebug will not stop at breaks."))
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
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3327 (defun edebug-trace-mode ()
103885
adbe0e36df45 (edebug-setup-hook, edebug-all-forms)
Glenn Morris <rgm@gnu.org>
parents: 101015
diff changeset
3328 "Begin trace mode.
adbe0e36df45 (edebug-setup-hook, edebug-all-forms)
Glenn Morris <rgm@gnu.org>
parents: 101015
diff changeset
3329 Pauses for `edebug-sit-for-seconds' at each stop point."
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3330 (interactive)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3331 (edebug-set-mode 'trace "Tracing..." "Edebug will trace with pause."))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3332
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3333 (defun edebug-Trace-fast-mode ()
103885
adbe0e36df45 (edebug-setup-hook, edebug-all-forms)
Glenn Morris <rgm@gnu.org>
parents: 101015
diff changeset
3334 "Trace with no wait at each step.
adbe0e36df45 (edebug-setup-hook, edebug-all-forms)
Glenn Morris <rgm@gnu.org>
parents: 101015
diff changeset
3335 Updates the display at each stop point, but does not pause."
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3336 (interactive)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3337 (edebug-set-mode 'Trace-fast
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3338 "Trace fast..." "Edebug will trace without pause."))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3339
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3340 (defun edebug-continue-mode ()
103885
adbe0e36df45 (edebug-setup-hook, edebug-all-forms)
Glenn Morris <rgm@gnu.org>
parents: 101015
diff changeset
3341 "Begin continue mode.
adbe0e36df45 (edebug-setup-hook, edebug-all-forms)
Glenn Morris <rgm@gnu.org>
parents: 101015
diff changeset
3342 Pauses for `edebug-sit-for-seconds' at each break point."
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3343 (interactive)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3344 (edebug-set-mode 'continue "Continue..."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3345 "Edebug will pause at breakpoints."))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3346
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3347 (defun edebug-Continue-fast-mode ()
103885
adbe0e36df45 (edebug-setup-hook, edebug-all-forms)
Glenn Morris <rgm@gnu.org>
parents: 101015
diff changeset
3348 "Trace with no wait at each step.
adbe0e36df45 (edebug-setup-hook, edebug-all-forms)
Glenn Morris <rgm@gnu.org>
parents: 101015
diff changeset
3349 Updates the display at each break point, but does not pause."
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3350 (interactive)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3351 (edebug-set-mode 'Continue-fast "Continue fast..."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3352 "Edebug will stop and go at breakpoints."))
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 ;; The following use the mode changing commands and breakpoints.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3356
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3357
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3358 (defun edebug-goto-here ()
63556
96c3254c37c5 (edebug-goto-here): Doc fix.
Luc Teirlinck <teirllm@auburn.edu>
parents: 63439
diff changeset
3359 "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
3360 (interactive)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3361 (edebug-go-mode t))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3362
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3363
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3364 (defun edebug-stop ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3365 "Stop execution and do not continue.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3366 Useful for exiting from trace or continue loop."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3367 (interactive)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3368 (message "Stop"))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3369
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3370
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3371 '(defun edebug-forward ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3372 "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
3373 (interactive)
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
3374 (edebug-set-mode
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3375 'forward "Forward"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3376 "Edebug will stop after exiting the next expression."))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3377
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3378
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3379 (defun edebug-forward-sexp (arg)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3380 "Proceed from the current point to the end of the ARGth sexp ahead.
103885
adbe0e36df45 (edebug-setup-hook, edebug-all-forms)
Glenn Morris <rgm@gnu.org>
parents: 101015
diff changeset
3381 If there are not ARG sexps ahead, then do `edebug-step-out'."
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3382 (interactive "p")
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3383 (condition-case nil
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3384 (let ((parse-sexp-ignore-comments t))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3385 ;; Call forward-sexp repeatedly until done or failure.
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3386 (forward-sexp arg)
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 (edebug-step-out)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3390 )))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3391
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3392 (defun edebug-step-out ()
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3393 "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
3394 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
3395 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
3396 (interactive)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3397 (condition-case nil
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3398 (let ((parse-sexp-ignore-comments t))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3399 (up-list 1)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3400 (save-excursion
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3401 ;; Is there still a containing expression?
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3402 (up-list 1))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3403 (edebug-go-mode t))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3404 (error
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3405 ;; 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
3406 (let ((start-point (point)))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3407 ;; (up-list 1)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3408 (down-list -1)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3409 (if (= (point) start-point)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3410 (edebug-step-mode) ; No more at this level, so step.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3411 (edebug-go-mode t)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3412 )))))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3413
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3414 (defun edebug-instrument-function (func)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3415 ;; Func should be a function symbol.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3416 ;; 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
3417 (let ((func-marker (get func 'edebug)))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3418 (cond
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3419 ((markerp func-marker)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3420 ;; It is uninstrumented, so instrument it.
40475
3bf0c64f4520 (delay-mode-hooks): Add edebug-spec.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40464
diff changeset
3421 (with-current-buffer (marker-buffer func-marker)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3422 (goto-char func-marker)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3423 (edebug-eval-top-level-form)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3424 func))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3425 ((consp func-marker)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3426 (message "%s is already instrumented." func)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3427 func)
40475
3bf0c64f4520 (delay-mode-hooks): Add edebug-spec.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40464
diff changeset
3428 (t
3bf0c64f4520 (delay-mode-hooks): Add edebug-spec.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40464
diff changeset
3429 (let ((loc (find-function-noselect func)))
71852
81b8b2bb63de (edebug-instrument-function): Err if find-function-noselect gives no position.
Richard M. Stallman <rms@gnu.org>
parents: 71727
diff changeset
3430 (unless (cdr loc)
81b8b2bb63de (edebug-instrument-function): Err if find-function-noselect gives no position.
Richard M. Stallman <rms@gnu.org>
parents: 71727
diff changeset
3431 (error "Could not find the definition in its file"))
40475
3bf0c64f4520 (delay-mode-hooks): Add edebug-spec.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40464
diff changeset
3432 (with-current-buffer (car loc)
3bf0c64f4520 (delay-mode-hooks): Add edebug-spec.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40464
diff changeset
3433 (goto-char (cdr loc))
3bf0c64f4520 (delay-mode-hooks): Add edebug-spec.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40464
diff changeset
3434 (edebug-eval-top-level-form)
3bf0c64f4520 (delay-mode-hooks): Add edebug-spec.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40464
diff changeset
3435 func))))))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3436
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3437 (defun edebug-instrument-callee ()
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
3438 "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
3439 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
3440 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
3441 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
3442 (interactive)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3443 (if (not (looking-at "\("))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3444 (error "You must be before a list form")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3445 (let ((func
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3446 (save-excursion
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3447 (down-list 1)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3448 (if (looking-at "\(")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3449 (edebug-form-data-name
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3450 (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
3451 (edebug-original-read (current-buffer))))))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3452 (edebug-instrument-function func))))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3453
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3454
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3455 (defun edebug-step-in ()
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
3456 "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
3457 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
3458 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
3459 (interactive)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3460 (let ((func (edebug-instrument-callee)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3461 (if func
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3462 (progn
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3463 (edebug-on-entry func 'temp)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3464 (edebug-go-mode nil)))))
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-on-entry (function &optional flag)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3467 "Cause Edebug to stop when FUNCTION is called.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3468 With prefix argument, make this temporary so it is automatically
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3469 cancelled the first time the function is entered."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3470 (interactive "aEdebug on entry to: \nP")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3471 ;; Could store this in the edebug data instead.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3472 (put function 'edebug-on-entry (if flag 'temp t)))
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 (defun cancel-edebug-on-entry (function)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3475 (interactive "aEdebug on entry to: ")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3476 (put function 'edebug-on-entry nil))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3477
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
3478
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 (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
3480 (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
3481 '(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
3482 ;; Also need edebug-cancel-debug-on-entry
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3483
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3484 '(defun edebug-debug-on-entry (function)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3485 "Request FUNCTION to invoke debugger each time it is called.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3486 If the user continues, FUNCTION's execution proceeds.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3487 Works by modifying the definition of FUNCTION,
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3488 which must be written in Lisp, not predefined.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3489 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
3490 Redefining FUNCTION also does that.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3491
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3492 This version is from Edebug. If the function is instrumented for
33758
8c1e62157545 (edebug-version)
Dave Love <fx@gnu.org>
parents: 33709
diff changeset
3493 Edebug, it calls `edebug-on-entry'."
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3494 (interactive "aDebug on entry (to function): ")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3495 (let ((func-data (get function 'edebug)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3496 (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
3497 (edebug-original-debug-on-entry function)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3498 (edebug-on-entry function))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3499
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3500
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3501 (defun edebug-top-level-nonstop ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3502 "Set mode to Go-nonstop, and exit to top-level.
95287
6150694d72ec (edebug-setup-hook, edebug-all-defs, edebug-all-forms, edebug-eval-macro-args,
Juanma Barranquero <lekktu@gmail.com>
parents: 94655
diff changeset
3503 This is useful for exiting even if `unwind-protect' code may be executed."
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3504 (interactive)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3505 (setq edebug-execution-mode 'Go-nonstop)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3506 (top-level))
661
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
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3509 ;;(defun edebug-exit-out ()
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3510 ;; "Go until the current function exits."
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3511 ;; (interactive)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3512 ;; (edebug-set-mode 'exiting "Exit..."))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3513
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3514
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3515 ;;; The following initial mode setting definitions are not used yet.
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3516
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3517 '(defconst edebug-initial-mode-alist
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3518 '((edebug-Continue-fast . Continue-fast)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3519 (edebug-Trace-fast . Trace-fast)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3520 (edebug-continue . continue)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3521 (edebug-trace . trace)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3522 (edebug-go . go)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3523 (edebug-step-through . step)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3524 (edebug-Go-nonstop . Go-nonstop)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3525 )
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3526 "Association list between commands and the modes they set.")
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3527
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3528
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3529 '(defun edebug-set-initial-mode ()
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3530 "Ask for the initial mode of the enclosing function.
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3531 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
3532 edebug-mode."
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3533 (interactive)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3534 (let* ((this-function (edebug-which-function))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3535 (keymap (if (eq edebug-mode-map (current-local-map))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3536 edebug-mode-map))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3537 (old-mode (or (get this-function 'edebug-initial-mode)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3538 edebug-initial-mode))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3539 (key (read-key-sequence
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3540 (format
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3541 "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
3542 this-function
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3543 old-mode
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3544 (where-is-internal
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3545 (car (rassq old-mode edebug-initial-mode-alist))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3546 keymap 'firstonly
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3547 ))))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3548 (mode (cdr (assq (key-binding key) edebug-initial-mode-alist)))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3549 )
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3550 (if (and mode
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3551 (or (get this-function 'edebug-initial-mode)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3552 (not (eq mode edebug-initial-mode))))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3553 (progn
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3554 (put this-function 'edebug-initial-mode mode)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3555 (message "Initial mode for %s is now: %s"
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3556 this-function mode))
5126
30682388c4cf Delete periods from error messages.
Richard M. Stallman <rms@gnu.org>
parents: 5125
diff changeset
3557 (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
3558 )))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3559
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3560 ;;; Evaluation of expressions
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3561
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3562 (def-edebug-spec edebug-outside-excursion t)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3563
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3564 (defmacro edebug-outside-excursion (&rest body)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3565 "Evaluate an expression list in the outside context.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3566 Return the result of the last expression."
26519
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3567 `(save-excursion ; of current-buffer
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3568 (if edebug-save-windows
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3569 (progn
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
3570 ;; After excursion, we will
26519
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3571 ;; restore to current window configuration.
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3572 (setq edebug-inside-windows
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3573 (edebug-current-windows edebug-save-windows))
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3574 ;; Restore outside windows.
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3575 (edebug-set-windows edebug-outside-windows)))
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3576
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3577 (set-buffer edebug-buffer) ; why?
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3578 ;; (use-local-map edebug-outside-map)
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3579 (set-match-data edebug-outside-match-data)
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3580 ;; Restore outside context.
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3581 (let (;; (edebug-inside-map (current-local-map)) ;; restore map??
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3582 (last-command-event edebug-outside-last-command-event)
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3583 (last-command edebug-outside-last-command)
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3584 (this-command edebug-outside-this-command)
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3585 (unread-command-char edebug-outside-unread-command-char)
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3586 (unread-command-events edebug-outside-unread-command-events)
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3587 (current-prefix-arg edebug-outside-current-prefix-arg)
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3588 (last-input-event edebug-outside-last-input-event)
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3589 (last-event-frame edebug-outside-last-event-frame)
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3590 (last-nonmenu-event edebug-outside-last-nonmenu-event)
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3591 (track-mouse edebug-outside-track-mouse)
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3592 (standard-output edebug-outside-standard-output)
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3593 (standard-input edebug-outside-standard-input)
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3594
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3595 (executing-kbd-macro edebug-outside-executing-macro)
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3596 (defining-kbd-macro edebug-outside-defining-kbd-macro)
52535
f40f0d207133 (edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
3597 ;; Get the values out of the saved statuses.
f40f0d207133 (edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
3598 (pre-command-hook (cdr edebug-outside-pre-command-hook))
f40f0d207133 (edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
3599 (post-command-hook (cdr edebug-outside-post-command-hook))
26519
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3600
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3601 ;; See edebug-display
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3602 (overlay-arrow-position edebug-outside-o-a-p)
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3603 (overlay-arrow-string edebug-outside-o-a-s)
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3604 (cursor-in-echo-area edebug-outside-c-i-e-a)
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3605 )
104663
ae5e866fedd8 (edebug-display, edebug-outside-excursion):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103997
diff changeset
3606 (setq-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
3607 (unwind-protect
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3608 (save-excursion ; of edebug-buffer
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3609 (set-buffer edebug-outside-buffer)
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3610 (goto-char edebug-outside-point)
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3611 (if (marker-buffer (edebug-mark-marker))
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3612 (set-marker (edebug-mark-marker) edebug-outside-mark))
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3613 ,@body)
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3614
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3615 ;; Back to edebug-buffer. Restore rest of inside context.
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3616 ;; (use-local-map edebug-inside-map)
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3617 (if edebug-save-windows
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3618 ;; Restore inside windows.
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3619 (edebug-set-windows edebug-inside-windows))
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3620
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3621 ;; Save values that may have been changed.
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
3622 (setq
26519
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3623 edebug-outside-last-command-event last-command-event
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3624 edebug-outside-last-command last-command
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3625 edebug-outside-this-command this-command
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3626 edebug-outside-unread-command-char unread-command-char
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3627 edebug-outside-unread-command-events unread-command-events
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3628 edebug-outside-current-prefix-arg current-prefix-arg
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3629 edebug-outside-last-input-event last-input-event
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3630 edebug-outside-last-event-frame last-event-frame
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3631 edebug-outside-last-nonmenu-event last-nonmenu-event
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3632 edebug-outside-track-mouse track-mouse
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3633 edebug-outside-standard-output standard-output
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3634 edebug-outside-standard-input standard-input
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3635
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3636 edebug-outside-executing-macro executing-kbd-macro
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3637 edebug-outside-defining-kbd-macro defining-kbd-macro
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3638
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3639 edebug-outside-o-a-p overlay-arrow-position
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3640 edebug-outside-o-a-s overlay-arrow-string
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3641 edebug-outside-c-i-e-a cursor-in-echo-area
104663
ae5e866fedd8 (edebug-display, edebug-outside-excursion):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103997
diff changeset
3642 edebug-outside-d-c-i-n-s-w (default-value
ae5e866fedd8 (edebug-display, edebug-outside-excursion):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103997
diff changeset
3643 'cursor-in-non-selected-windows)
ae5e866fedd8 (edebug-display, edebug-outside-excursion):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103997
diff changeset
3644 )
52535
f40f0d207133 (edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
3645
f40f0d207133 (edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
3646 ;; Restore the outside saved values; don't alter
f40f0d207133 (edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
3647 ;; the outside binding loci.
f40f0d207133 (edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
3648 (setcdr edebug-outside-pre-command-hook pre-command-hook)
f40f0d207133 (edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
3649 (setcdr edebug-outside-post-command-hook post-command-hook)
f40f0d207133 (edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
3650
104663
ae5e866fedd8 (edebug-display, edebug-outside-excursion):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 103997
diff changeset
3651 (setq-default cursor-in-non-selected-windows t)
52535
f40f0d207133 (edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
3652 )) ; let
26519
693b53fde264 Use new backquote syntax.
Gerd Moellmann <gerd@gnu.org>
parents: 26049
diff changeset
3653 ))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3654
103997
f0176ca49d34 (cl-debug-env): Only define for compiler.
Glenn Morris <rgm@gnu.org>
parents: 103885
diff changeset
3655 (defvar cl-debug-env) ; defined in cl; non-nil when lexical env used.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3656
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3657 (defun edebug-eval (edebug-expr)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3658 ;; Are there cl lexical variables active?
103997
f0176ca49d34 (cl-debug-env): Only define for compiler.
Glenn Morris <rgm@gnu.org>
parents: 103885
diff changeset
3659 (if (bound-and-true-p cl-debug-env)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3660 (eval (cl-macroexpand-all edebug-expr cl-debug-env))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3661 (eval edebug-expr)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3662
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3663 (defun edebug-safe-eval (edebug-expr)
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
3664 ;; Evaluate EXPR safely.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3665 ;; 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
3666 (condition-case edebug-err
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3667 (edebug-eval edebug-expr)
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
3668 (error (edebug-format "%s: %s" ;; could
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3669 (get (car edebug-err) 'error-message)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3670 (car (cdr edebug-err))))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3671
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
3672 ;;; Printing
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
3673
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3674
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3675 (defun edebug-report-error (edebug-value)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3676 ;; Print an error message like command level does.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3677 ;; 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
3678 (message "%s: %s"
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3679 (or (get (car edebug-value) 'error-message)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3680 (format "peculiar error (%s)" (car edebug-value)))
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
3681 (mapconcat (function (lambda (edebug-arg)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3682 ;; continuing after an error may
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3683 ;; complain about edebug-arg. why??
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3684 (prin1-to-string edebug-arg)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3685 (cdr edebug-value) ", ")))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3686
103997
f0176ca49d34 (cl-debug-env): Only define for compiler.
Glenn Morris <rgm@gnu.org>
parents: 103885
diff changeset
3687 (defvar print-readably) ; defined by lemacs
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
3688 ;; 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
3689 ;; 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
3690
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3691 (defun edebug-safe-prin1-to-string (value)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3692 (let ((print-escape-newlines t)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3693 (print-length (or edebug-print-length print-length))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3694 (print-level (or edebug-print-level print-level))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3695 (print-circle (or edebug-print-circle print-circle))
103997
f0176ca49d34 (cl-debug-env): Only define for compiler.
Glenn Morris <rgm@gnu.org>
parents: 103885
diff changeset
3696 (print-readably nil)) ; lemacs uses this.
67635
70e76c30ddcc * emacs-lisp/edebug.el (edebug-safe-prin1-to-string): Capture
Chong Yidong <cyd@stupidchicken.com>
parents: 67357
diff changeset
3697 (condition-case nil
70e76c30ddcc * emacs-lisp/edebug.el (edebug-safe-prin1-to-string): Capture
Chong Yidong <cyd@stupidchicken.com>
parents: 67357
diff changeset
3698 (edebug-prin1-to-string value)
70e76c30ddcc * emacs-lisp/edebug.el (edebug-safe-prin1-to-string): Capture
Chong Yidong <cyd@stupidchicken.com>
parents: 67357
diff changeset
3699 (error "#Apparently circular structure#"))))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3700
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3701 (defun edebug-compute-previous-result (edebug-previous-value)
54499
b7693565f757 (edebug-display): Bring up a debug trace if the source location can't be found.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 53198
diff changeset
3702 (if edebug-unwrap-results
b7693565f757 (edebug-display): Bring up a debug trace if the source location can't be found.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 53198
diff changeset
3703 (setq edebug-previous-value
b7693565f757 (edebug-display): Bring up a debug trace if the source location can't be found.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 53198
diff changeset
3704 (edebug-unwrap* edebug-previous-value)))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3705 (setq edebug-previous-result
54499
b7693565f757 (edebug-display): Bring up a debug trace if the source location can't be found.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 53198
diff changeset
3706 (concat "Result: "
b7693565f757 (edebug-display): Bring up a debug trace if the source location can't be found.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 53198
diff changeset
3707 (edebug-safe-prin1-to-string edebug-previous-value)
55800
c9243f2a022c * emacs-lisp/edebug.el (edebug-compute-previous-result)
Juri Linkov <juri@jurta.org>
parents: 54499
diff changeset
3708 (eval-expression-print-format edebug-previous-value))))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3709
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3710 (defun edebug-previous-result ()
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3711 "Print the previous result."
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3712 (interactive)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3713 (message "%s" edebug-previous-result))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3714
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
3715 ;;; Read, Eval and Print
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3716
79006
808dc3e8a755 (edebug-install-custom-print-funcs)
Richard M. Stallman <rms@gnu.org>
parents: 78637
diff changeset
3717 (defalias 'edebug-prin1 'prin1)
808dc3e8a755 (edebug-install-custom-print-funcs)
Richard M. Stallman <rms@gnu.org>
parents: 78637
diff changeset
3718 (defalias 'edebug-print 'print)
808dc3e8a755 (edebug-install-custom-print-funcs)
Richard M. Stallman <rms@gnu.org>
parents: 78637
diff changeset
3719 (defalias 'edebug-prin1-to-string 'prin1-to-string)
808dc3e8a755 (edebug-install-custom-print-funcs)
Richard M. Stallman <rms@gnu.org>
parents: 78637
diff changeset
3720 (defalias 'edebug-format 'format)
808dc3e8a755 (edebug-install-custom-print-funcs)
Richard M. Stallman <rms@gnu.org>
parents: 78637
diff changeset
3721 (defalias 'edebug-message 'message)
808dc3e8a755 (edebug-install-custom-print-funcs)
Richard M. Stallman <rms@gnu.org>
parents: 78637
diff changeset
3722
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3723 (defun edebug-eval-expression (edebug-expr)
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
3724 "Evaluate an expression in the outside environment.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3725 If interactive, prompt for the expression.
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3726 Print result in minibuffer."
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
3727 (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
3728 "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
3729 'read-expression-history)))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3730 (princ
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3731 (edebug-outside-excursion
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3732 (setq values (cons (edebug-eval edebug-expr) values))
55800
c9243f2a022c * emacs-lisp/edebug.el (edebug-compute-previous-result)
Juri Linkov <juri@jurta.org>
parents: 54499
diff changeset
3733 (concat (edebug-safe-prin1-to-string (car values))
c9243f2a022c * emacs-lisp/edebug.el (edebug-compute-previous-result)
Juri Linkov <juri@jurta.org>
parents: 54499
diff changeset
3734 (eval-expression-print-format (car values))))))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3735
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3736 (defun edebug-eval-last-sexp ()
63439
de8468617bbf (edebug-all-defs, edebug-initial-mode, edebug-print-length)
Luc Teirlinck <teirllm@auburn.edu>
parents: 63303
diff changeset
3737 "Evaluate sexp before point in the outside environment.
de8468617bbf (edebug-all-defs, edebug-initial-mode, edebug-print-length)
Luc Teirlinck <teirllm@auburn.edu>
parents: 63303
diff changeset
3738 Print value in minibuffer."
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3739 (interactive)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3740 (edebug-eval-expression (edebug-last-sexp)))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3741
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3742 (defun edebug-eval-print-last-sexp ()
63439
de8468617bbf (edebug-all-defs, edebug-initial-mode, edebug-print-length)
Luc Teirlinck <teirllm@auburn.edu>
parents: 63303
diff changeset
3743 "Evaluate sexp before point in outside environment; insert value.
52535
f40f0d207133 (edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
3744 This prints the value into current buffer."
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3745 (interactive)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3746 (let* ((edebug-form (edebug-last-sexp))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3747 (edebug-result-string
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
3748 (edebug-outside-excursion
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3749 (edebug-safe-prin1-to-string (edebug-safe-eval edebug-form))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3750 (standard-output (current-buffer)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3751 (princ "\n")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3752 ;; princ the string to get rid of quotes.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3753 (princ edebug-result-string)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3754 (princ "\n")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3755 ))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3756
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
3757 ;;; Edebug Minor Mode
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3758
103997
f0176ca49d34 (cl-debug-env): Only define for compiler.
Glenn Morris <rgm@gnu.org>
parents: 103885
diff changeset
3759 ;; FIXME eh?
52535
f40f0d207133 (edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
3760 (defvar gud-inhibit-global-bindings
f40f0d207133 (edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
3761 "*Non-nil means don't do global rebindings of C-x C-a subcommands.")
f40f0d207133 (edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
3762
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3763 ;; Global GUD bindings for all emacs-lisp-mode buffers.
52535
f40f0d207133 (edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
3764 (unless gud-inhibit-global-bindings
f40f0d207133 (edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
3765 (define-key emacs-lisp-mode-map "\C-x\C-a\C-s" 'edebug-step-mode)
f40f0d207133 (edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
3766 (define-key emacs-lisp-mode-map "\C-x\C-a\C-n" 'edebug-next-mode)
f40f0d207133 (edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
3767 (define-key emacs-lisp-mode-map "\C-x\C-a\C-c" 'edebug-go-mode)
f40f0d207133 (edebug-var-status, edebug-restore-status): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
3768 (define-key emacs-lisp-mode-map "\C-x\C-a\C-l" 'edebug-where))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3769
51321
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
3770 (defvar edebug-mode-map
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
3771 (let ((map (copy-keymap emacs-lisp-mode-map)))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3772 ;; control
51321
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
3773 (define-key map " " 'edebug-step-mode)
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
3774 (define-key map "n" 'edebug-next-mode)
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
3775 (define-key map "g" 'edebug-go-mode)
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
3776 (define-key map "G" 'edebug-Go-nonstop-mode)
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
3777 (define-key map "t" 'edebug-trace-mode)
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
3778 (define-key map "T" 'edebug-Trace-fast-mode)
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
3779 (define-key map "c" 'edebug-continue-mode)
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
3780 (define-key map "C" 'edebug-Continue-fast-mode)
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
3781
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
3782 ;;(define-key map "f" 'edebug-forward) not implemented
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
3783 (define-key map "f" 'edebug-forward-sexp)
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
3784 (define-key map "h" 'edebug-goto-here)
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
3785
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
3786 (define-key map "I" 'edebug-instrument-callee)
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
3787 (define-key map "i" 'edebug-step-in)
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
3788 (define-key map "o" 'edebug-step-out)
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
3789
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3790 ;; quitting and stopping
51321
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
3791 (define-key map "q" 'top-level)
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
3792 (define-key map "Q" 'edebug-top-level-nonstop)
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
3793 (define-key map "a" 'abort-recursive-edit)
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
3794 (define-key map "S" 'edebug-stop)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3795
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3796 ;; breakpoints
51321
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
3797 (define-key map "b" 'edebug-set-breakpoint)
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
3798 (define-key map "u" 'edebug-unset-breakpoint)
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
3799 (define-key map "B" 'edebug-next-breakpoint)
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
3800 (define-key map "x" 'edebug-set-conditional-breakpoint)
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
3801 (define-key map "X" 'edebug-set-global-break-condition)
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
3802
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3803 ;; evaluation
51321
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
3804 (define-key map "r" 'edebug-previous-result)
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
3805 (define-key map "e" 'edebug-eval-expression)
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
3806 (define-key map "\C-x\C-e" 'edebug-eval-last-sexp)
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
3807 (define-key map "E" 'edebug-visit-eval-list)
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
3808
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3809 ;; views
51321
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
3810 (define-key map "w" 'edebug-where)
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
3811 (define-key map "v" 'edebug-view-outside) ;; maybe obsolete??
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
3812 (define-key map "p" 'edebug-bounce-point)
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
3813 (define-key map "P" 'edebug-view-outside) ;; same as v
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
3814 (define-key map "W" 'edebug-toggle-save-windows)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3815
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3816 ;; misc
51321
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
3817 (define-key map "?" 'edebug-help)
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
3818 (define-key map "d" 'edebug-backtrace)
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
3819
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
3820 (define-key map "-" 'negative-argument)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3821
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3822 ;; statistics
51321
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
3823 (define-key map "=" 'edebug-temp-display-freq-count)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3824
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3825 ;; GUD bindings
51321
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
3826 (define-key map "\C-c\C-s" 'edebug-step-mode)
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
3827 (define-key map "\C-c\C-n" 'edebug-next-mode)
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
3828 (define-key map "\C-c\C-c" 'edebug-go-mode)
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
3829
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
3830 (define-key map "\C-x " 'edebug-set-breakpoint)
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
3831 (define-key map "\C-c\C-d" 'edebug-unset-breakpoint)
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
3832 (define-key map "\C-c\C-t"
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
3833 (lambda () (interactive) (edebug-set-breakpoint t)))
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
3834 (define-key map "\C-c\C-l" 'edebug-where)
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
3835 map))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3836
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3837 ;; Autoloading these global bindings doesn't make sense because
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3838 ;; 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
3839
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3840 (defvar global-edebug-prefix "\^XX"
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3841 "Prefix key for global edebug commands, available from any buffer.")
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3842
51321
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
3843 (defvar global-edebug-map
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
3844 (let ((map (make-sparse-keymap)))
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
3845
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
3846 (define-key map " " 'edebug-step-mode)
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
3847 (define-key map "g" 'edebug-go-mode)
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
3848 (define-key map "G" 'edebug-Go-nonstop-mode)
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
3849 (define-key map "t" 'edebug-trace-mode)
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
3850 (define-key map "T" 'edebug-Trace-fast-mode)
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
3851 (define-key map "c" 'edebug-continue-mode)
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
3852 (define-key map "C" 'edebug-Continue-fast-mode)
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
3853
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
3854 ;; breakpoints
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
3855 (define-key map "b" 'edebug-set-breakpoint)
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
3856 (define-key map "u" 'edebug-unset-breakpoint)
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
3857 (define-key map "x" 'edebug-set-conditional-breakpoint)
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
3858 (define-key map "X" 'edebug-set-global-break-condition)
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
3859
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
3860 ;; views
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
3861 (define-key map "w" 'edebug-where)
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
3862 (define-key map "W" 'edebug-toggle-save-windows)
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
3863
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
3864 ;; quitting
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
3865 (define-key map "q" 'top-level)
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
3866 (define-key map "Q" 'edebug-top-level-nonstop)
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
3867 (define-key map "a" 'abort-recursive-edit)
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
3868
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
3869 ;; statistics
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
3870 (define-key map "=" 'edebug-display-freq-count)
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
3871 map)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3872 "Global map of edebug commands, available from any buffer.")
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3873
51321
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
3874 (global-unset-key global-edebug-prefix)
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
3875 (global-set-key global-edebug-prefix global-edebug-map)
e005bbe7be9e (edebug-window-list): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49842
diff changeset
3876
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3877
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3878 (defun edebug-help ()
103885
adbe0e36df45 (edebug-setup-hook, edebug-all-forms)
Glenn Morris <rgm@gnu.org>
parents: 101015
diff changeset
3879 "Describe `edebug-mode'."
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3880 (interactive)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3881 (describe-function 'edebug-mode))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3882
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3883 (defun edebug-mode ()
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3884 "Mode for Emacs Lisp buffers while in Edebug.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3885
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3886 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
3887 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
3888 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
3889 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
3890
67780
6f62623c8c61 (edebug-all-defs, edebug-all-forms): Add autoload cookies.
Juri Linkov <juri@jurta.org>
parents: 67635
diff changeset
3891 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
3892
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3893 The edebug buffer commands:
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3894 \\{edebug-mode-map}
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3895
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3896 Global commands prefixed by `global-edebug-prefix':
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3897 \\{global-edebug-map}
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3898
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3899 Options:
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3900 edebug-setup-hook
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3901 edebug-all-defs
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3902 edebug-all-forms
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3903 edebug-save-windows
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3904 edebug-save-displayed-buffer-points
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3905 edebug-initial-mode
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3906 edebug-trace
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3907 edebug-test-coverage
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3908 edebug-continue-kbd-macro
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3909 edebug-print-length
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3910 edebug-print-level
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3911 edebug-print-circle
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3912 edebug-on-error
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3913 edebug-on-quit
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3914 edebug-on-signal
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3915 edebug-unwrap-results
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3916 edebug-global-break-condition
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3917 "
76298
872a30c0f872 (edebug-kill-buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents: 75346
diff changeset
3918 ;; If the user kills the buffer in which edebug is currently active,
872a30c0f872 (edebug-kill-buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents: 75346
diff changeset
3919 ;; exit to top level, because the edebug command loop can't usefully
872a30c0f872 (edebug-kill-buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents: 75346
diff changeset
3920 ;; continue running in such a case.
872a30c0f872 (edebug-kill-buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents: 75346
diff changeset
3921 (add-hook 'kill-buffer-hook 'edebug-kill-buffer nil t)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3922 (use-local-map edebug-mode-map))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3923
76298
872a30c0f872 (edebug-kill-buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents: 75346
diff changeset
3924 (defun edebug-kill-buffer ()
872a30c0f872 (edebug-kill-buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents: 75346
diff changeset
3925 "Used on `kill-buffer-hook' when Edebug is operating in a buffer of Lisp code."
872a30c0f872 (edebug-kill-buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents: 75346
diff changeset
3926 (let (kill-buffer-hook)
872a30c0f872 (edebug-kill-buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents: 75346
diff changeset
3927 (kill-buffer (current-buffer)))
872a30c0f872 (edebug-kill-buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents: 75346
diff changeset
3928 (top-level))
872a30c0f872 (edebug-kill-buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents: 75346
diff changeset
3929
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
3930 ;;; edebug eval list mode
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
3931
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3932 ;; 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
3933
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3934 (defun edebug-eval-result-list ()
95287
6150694d72ec (edebug-setup-hook, edebug-all-defs, edebug-all-forms, edebug-eval-macro-args,
Juanma Barranquero <lekktu@gmail.com>
parents: 94655
diff changeset
3935 "Return a list of evaluations of `edebug-eval-list'."
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3936 ;; 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
3937 ;; 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
3938 (let ((edebug-execution-mode 'Go-nonstop)
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
3939 (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
3940 (mapcar 'edebug-safe-eval edebug-eval-list)))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3941
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3942 (defun edebug-eval-display-list (edebug-eval-result-list)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3943 ;; Assumes edebug-eval-buffer exists.
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3944 (let ((edebug-eval-list-temp edebug-eval-list)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3945 (standard-output edebug-eval-buffer)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3946 (edebug-comment-line
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3947 (format ";%s\n" (make-string (- (window-width) 2) ?-))))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3948 (set-buffer edebug-eval-buffer)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3949 (erase-buffer)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3950 (while edebug-eval-list-temp
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3951 (prin1 (car edebug-eval-list-temp)) (terpri)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3952 (prin1 (car edebug-eval-result-list)) (terpri)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3953 (princ edebug-comment-line)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3954 (setq edebug-eval-list-temp (cdr edebug-eval-list-temp))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3955 (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
3956 (edebug-pop-to-buffer edebug-eval-buffer)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3957 ))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3958
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3959 (defun edebug-create-eval-buffer ()
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3960 (if (not (and edebug-eval-buffer (buffer-name edebug-eval-buffer)))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3961 (progn
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3962 (set-buffer (setq edebug-eval-buffer (get-buffer-create "*edebug*")))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3963 (edebug-eval-mode))))
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 ;; Should generalize this to be callable outside of edebug
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3966 ;; with calls in user functions, e.g. (edebug-eval-display)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3967
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3968 (defun edebug-eval-display (edebug-eval-result-list)
95287
6150694d72ec (edebug-setup-hook, edebug-all-defs, edebug-all-forms, edebug-eval-macro-args,
Juanma Barranquero <lekktu@gmail.com>
parents: 94655
diff changeset
3969 "Display expressions and evaluations in EDEBUG-EVAL-RESULT-LIST.
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3970 It modifies the context by popping up the eval display."
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3971 (if edebug-eval-result-list
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3972 (progn
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3973 (edebug-create-eval-buffer)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3974 (edebug-eval-display-list edebug-eval-result-list)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3975 )))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3976
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3977 (defun edebug-eval-redisplay ()
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3978 "Redisplay eval list in outside environment.
95287
6150694d72ec (edebug-setup-hook, edebug-all-defs, edebug-all-forms, edebug-eval-macro-args,
Juanma Barranquero <lekktu@gmail.com>
parents: 94655
diff changeset
3979 May only be called from within `edebug-recursive-edit'."
661
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-outside-excursion
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3982 (edebug-eval-display-list (edebug-eval-result-list))
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
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3985 (defun edebug-visit-eval-list ()
103885
adbe0e36df45 (edebug-setup-hook, edebug-all-forms)
Glenn Morris <rgm@gnu.org>
parents: 101015
diff changeset
3986 "Switch to the evaluation list buffer \"*edebug*\"."
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3987 (interactive)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3988 (edebug-eval-redisplay)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3989 (edebug-pop-to-buffer edebug-eval-buffer))
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-update-eval-list ()
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3993 "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
3994 (interactive)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3995 (let ((starting-point (point))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3996 new-list)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3997 (goto-char (point-min))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3998 ;; get the first expression
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3999 (edebug-skip-whitespace)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4000 (if (not (eobp))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4001 (progn
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4002 (forward-sexp 1)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4003 (setq new-list (cons (edebug-last-sexp) new-list))))
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
4004
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4005 (while (re-search-forward "^;" nil t)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4006 (forward-line 1)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4007 (skip-chars-forward " \t\n\r")
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4008 (if (and (/= ?\; (following-char))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4009 (not (eobp)))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4010 (progn
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4011 (forward-sexp 1)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4012 (setq new-list (cons (edebug-last-sexp) new-list)))))
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
4013
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4014 (setq edebug-eval-list (nreverse new-list))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4015 (edebug-eval-redisplay)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4016 (goto-char starting-point)))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4017
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4018
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4019 (defun edebug-delete-eval-item ()
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4020 "Delete the item under point and redisplay."
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4021 ;; could add arg to do repeatedly
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4022 (interactive)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4023 (if (re-search-backward "^;" nil 'nofail)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4024 (forward-line 1))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4025 (delete-region
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4026 (point) (progn (re-search-forward "^;" nil 'nofail)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4027 (beginning-of-line)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4028 (point)))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4029 (edebug-update-eval-list))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4030
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4031
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4032
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4033 (defvar edebug-eval-mode-map nil
20078
0fc1437e7427 (edebug-eval-mode): Nicer mode-name value.
Karl Heuer <kwzh@gnu.org>
parents: 19930
diff changeset
4034 "Keymap for Edebug Eval mode. Superset of Lisp Interaction mode.")
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4035
63303
297abad3d613 (edebug-eval-mode-map): Don't copy lisp-interaction-mode-map but make
Lute Kamstra <lute@gnu.org>
parents: 58602
diff changeset
4036 (unless edebug-eval-mode-map
297abad3d613 (edebug-eval-mode-map): Don't copy lisp-interaction-mode-map but make
Lute Kamstra <lute@gnu.org>
parents: 58602
diff changeset
4037 (setq edebug-eval-mode-map (make-sparse-keymap))
297abad3d613 (edebug-eval-mode-map): Don't copy lisp-interaction-mode-map but make
Lute Kamstra <lute@gnu.org>
parents: 58602
diff changeset
4038 (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
4039
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4040 (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
4041 (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
4042 (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
4043 (define-key edebug-eval-mode-map "\C-x\C-e" 'edebug-eval-last-sexp)
63303
297abad3d613 (edebug-eval-mode-map): Don't copy lisp-interaction-mode-map but make
Lute Kamstra <lute@gnu.org>
parents: 58602
diff changeset
4044 (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
4045
17650
dbcf0b5d5265 (edebug-eval-mode): Add a mode-class property.
Richard M. Stallman <rms@gnu.org>
parents: 17458
diff changeset
4046 (put 'edebug-eval-mode 'mode-class 'special)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4047
63303
297abad3d613 (edebug-eval-mode-map): Don't copy lisp-interaction-mode-map but make
Lute Kamstra <lute@gnu.org>
parents: 58602
diff changeset
4048 (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
4049 "Mode for evaluation list buffer while in Edebug.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4050
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4051 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
4052 global key bindings to several Edebug specific commands. E.g.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4053 `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
4054 buffer and \\<global-map>\\[edebug-step-mode] in any buffer.
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4055
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4056 Eval list buffer commands:
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4057 \\{edebug-eval-mode-map}
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4058
67780
6f62623c8c61 (edebug-all-defs, edebug-all-forms): Add autoload cookies.
Juri Linkov <juri@jurta.org>
parents: 67635
diff changeset
4059 Global commands prefixed by `global-edebug-prefix':
63303
297abad3d613 (edebug-eval-mode-map): Don't copy lisp-interaction-mode-map but make
Lute Kamstra <lute@gnu.org>
parents: 58602
diff changeset
4060 \\{global-edebug-map}")
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4061
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
4062 ;;; Interface with standard debugger.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4063
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4064 ;; (setq debugger 'edebug) ; to use the edebug debugger
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4065 ;; (setq debugger 'debug) ; use the standard debugger
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4066
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4067 ;; 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
4068 ;; 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
4069 ;; edebug is not dependent on this, yet.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4070
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4071 (defun edebug (&optional edebug-arg-mode &rest debugger-args)
95287
6150694d72ec (edebug-setup-hook, edebug-all-defs, edebug-all-forms, edebug-eval-macro-args,
Juanma Barranquero <lekktu@gmail.com>
parents: 94655
diff changeset
4072 "Replacement for `debug'.
6150694d72ec (edebug-setup-hook, edebug-all-defs, edebug-all-forms, edebug-eval-macro-args,
Juanma Barranquero <lekktu@gmail.com>
parents: 94655
diff changeset
4073 If we are running an edebugged function, show where we last were.
6150694d72ec (edebug-setup-hook, edebug-all-defs, edebug-all-forms, edebug-eval-macro-args,
Juanma Barranquero <lekktu@gmail.com>
parents: 94655
diff changeset
4074 Otherwise call `debug' normally."
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4075 ;; (message "entered: %s depth: %s edebug-recursion-depth: %s"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4076 ;; edebug-entered (recursion-depth) edebug-recursion-depth) (sit-for 1)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4077 (if (and edebug-entered ; anything active?
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4078 (eq (recursion-depth) edebug-recursion-depth))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4079 (let (;; Where were we before the error occurred?
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4080 (edebug-offset-index (car edebug-offset-indices))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4081 ;; Bind variables required by edebug-display
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4082 (edebug-value (car debugger-args))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4083 edebug-breakpoints
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4084 edebug-break-data
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4085 edebug-break-condition
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4086 edebug-global-break
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4087 (edebug-break (null edebug-arg-mode)) ;; if called explicitly
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4088 )
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4089 (edebug-display)
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
4090 (if (eq edebug-arg-mode 'error)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4091 nil
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4092 edebug-value))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4093
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4094 ;; Otherwise call debug normally.
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4095 ;; Still need to remove extraneous edebug calls from stack.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4096 (apply 'debug edebug-arg-mode debugger-args)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4097 ))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4098
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 (defun edebug-backtrace ()
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4101 "Display a non-working backtrace. Better than nothing..."
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4102 (interactive)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4103 (if (or (not edebug-backtrace-buffer)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4104 (null (buffer-name edebug-backtrace-buffer)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4105 (setq edebug-backtrace-buffer
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4106 (generate-new-buffer "*Backtrace*"))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4107 ;; else, could just display edebug-backtrace-buffer
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4108 )
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4109 (with-output-to-temp-buffer (buffer-name edebug-backtrace-buffer)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4110 (setq edebug-backtrace-buffer standard-output)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4111 (let ((print-escape-newlines t)
103885
adbe0e36df45 (edebug-setup-hook, edebug-all-forms)
Glenn Morris <rgm@gnu.org>
parents: 101015
diff changeset
4112 (print-length 50) ; FIXME cf edebug-safe-prin1-to-string
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4113 last-ok-point)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4114 (backtrace)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4115
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
4116 ;; Clean up the backtrace.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4117 ;; Not quite right for current edebug scheme.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4118 (set-buffer edebug-backtrace-buffer)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4119 (setq truncate-lines t)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4120 (goto-char (point-min))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4121 (setq last-ok-point (point))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4122 (if t (progn
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4123
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4124 ;; Delete interspersed edebug internals.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4125 (while (re-search-forward "^ \(?edebug" nil t)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4126 (beginning-of-line)
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
4127 (cond
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4128 ((looking-at "^ \(edebug-after")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4129 ;; Previous lines may contain code, so just delete this line
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4130 (setq last-ok-point (point))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4131 (forward-line 1)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4132 (delete-region last-ok-point (point)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4133
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4134 ((looking-at "^ edebug")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4135 (forward-line 1)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4136 (delete-region last-ok-point (point))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4137 )))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4138 )))))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4139
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4140
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
4141 ;;; Trace display
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4142
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4143 (defun edebug-trace-display (buf-name fmt &rest args)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4144 "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
4145 The buffer is created if it does not exist.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4146 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
4147 ;; e.g.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4148 ;; (edebug-trace-display "*trace-point*"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4149 ;; "saving: point = %s window-start = %s"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4150 ;; (point) (window-start))
15782
096142df0b36 (edebug-trace-display): Save and restore current buffer.
Richard M. Stallman <rms@gnu.org>
parents: 15302
diff changeset
4151 (let* ((oldbuf (current-buffer))
096142df0b36 (edebug-trace-display): Save and restore current buffer.
Richard M. Stallman <rms@gnu.org>
parents: 15302
diff changeset
4152 (selected-window (selected-window))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4153 (buffer (get-buffer-create buf-name))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4154 buf-window)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4155 ;; (message "before pop-to-buffer") (sit-for 1)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4156 (edebug-pop-to-buffer buffer)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4157 (setq truncate-lines t)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4158 (setq buf-window (selected-window))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4159 (goto-char (point-max))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4160 (insert (apply 'edebug-format fmt args) "\n")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4161 ;; Make it visible.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4162 (vertical-motion (- 1 (window-height)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4163 (set-window-start buf-window (point))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4164 (goto-char (point-max))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4165 ;; (set-window-point buf-window (point))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4166 ;; (edebug-sit-for 0)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4167 (bury-buffer buffer)
15782
096142df0b36 (edebug-trace-display): Save and restore current buffer.
Richard M. Stallman <rms@gnu.org>
parents: 15302
diff changeset
4168 (select-window selected-window)
096142df0b36 (edebug-trace-display): Save and restore current buffer.
Richard M. Stallman <rms@gnu.org>
parents: 15302
diff changeset
4169 (set-buffer oldbuf))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4170 buf-name)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4171
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4172
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4173 (defun edebug-trace (fmt &rest args)
95287
6150694d72ec (edebug-setup-hook, edebug-all-defs, edebug-all-forms, edebug-eval-macro-args,
Juanma Barranquero <lekktu@gmail.com>
parents: 94655
diff changeset
4174 "Convenience call to `edebug-trace-display' using `edebug-trace-buffer'."
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4175 (apply 'edebug-trace-display edebug-trace-buffer fmt args))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4176
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4177
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
4178 ;;; Frequency count and coverage
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4179
103885
adbe0e36df45 (edebug-setup-hook, edebug-all-forms)
Glenn Morris <rgm@gnu.org>
parents: 101015
diff changeset
4180 ;; FIXME should this use overlays instead?
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4181 (defun edebug-display-freq-count ()
52898
1b8e800b5b2a (edebug-display-freq-count): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 52535
diff changeset
4182 "Display the frequency count data for each line of the current definition.
95287
6150694d72ec (edebug-setup-hook, edebug-all-defs, edebug-all-forms, edebug-eval-macro-args,
Juanma Barranquero <lekktu@gmail.com>
parents: 94655
diff changeset
4183 The frequency counts are inserted as comment lines after each line,
6150694d72ec (edebug-setup-hook, edebug-all-defs, edebug-all-forms, edebug-eval-macro-args,
Juanma Barranquero <lekktu@gmail.com>
parents: 94655
diff changeset
4184 and you can undo all insertions with one `undo' command.
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 The counts are inserted starting under the `(' before an expression
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4187 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
4188 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
4189 the same line.
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 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
4192 are `eq', the char `=' will be appended after the count
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4193 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
4194 expression only evaluated once.
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 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
4197 reinstrument it."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4198 (interactive)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4199 (let* ((function (edebug-form-data-symbol))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4200 (counts (get function 'edebug-freq-count))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4201 (coverages (get function 'edebug-coverage))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4202 (data (get function 'edebug))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4203 (def-mark (car data)) ; mark at def start
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4204 (edebug-points (nth 2 data))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4205 (i (1- (length edebug-points)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4206 (last-index)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4207 (first-index)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4208 (start-of-line)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4209 (start-of-count-line)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4210 (last-count)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4211 )
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4212 (save-excursion
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4213 ;; Traverse in reverse order so offsets are correct.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4214 (while (<= 0 i)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4215 ;; Start at last expression in line.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4216 (goto-char (+ def-mark (aref edebug-points i)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4217 (beginning-of-line)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4218 (setq start-of-line (- (point) def-mark)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4219 last-index i)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4220
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4221 ;; Find all indexes on same line.
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
4222 (while (and (<= 0 (setq i (1- i)))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4223 (<= start-of-line (aref edebug-points i))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4224 ;; Insert all the indices for this line.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4225 (forward-line 1)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4226 (setq start-of-count-line (point)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4227 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
4228 last-count -1) ; cause first count to always appear.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4229 (insert ";#")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4230 ;; i == first-index still
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4231 (while (<= (setq i (1+ i)) last-index)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4232 (let ((count (aref counts i))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4233 (coverage (aref coverages i))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4234 (col (save-excursion
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4235 (goto-char (+ (aref edebug-points i) def-mark))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4236 (- (current-column)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4237 (if (= ?\( (following-char)) 0 1)))))
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
4238 (insert (make-string
64029
d4866c35bebd (edebug): Finish `defgroup' description with period.
Juanma Barranquero <lekktu@gmail.com>
parents: 63989
diff changeset
4239 (max 0 (- col (- (point) start-of-count-line))) ?\s)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4240 (if (and (< 0 count)
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
4241 (not (memq coverage
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4242 '(unknown ok-coverage))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4243 "=" "")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4244 (if (= count last-count) "" (int-to-string count))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4245 " ")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4246 (setq last-count count)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4247 (insert "\n")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4248 (setq i first-index)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4249
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4250 (defun edebug-temp-display-freq-count ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4251 "Temporarily display the frequency count data for the current definition.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4252 It is removed when you hit any char."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4253 ;; 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
4254 (interactive)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4255 (let ((buffer-read-only nil))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4256 (undo-boundary)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4257 (edebug-display-freq-count)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4258 (setq unread-command-char (read-char))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4259 (undo)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4260
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4261
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
4262 ;;; Menus
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4263
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4264 (defun edebug-toggle (variable)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4265 (set variable (not (eval variable)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4266 (message "%s: %s" variable (eval variable)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4267
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4268 ;; 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
4269 ;; the easy-menu-define macro call is compiled correctly.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4270 (require 'easymenu)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4271
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4272 (defconst edebug-mode-menus
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4273 '("Edebug"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4274 ["Stop" edebug-stop t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4275 ["Step" edebug-step-mode t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4276 ["Next" edebug-next-mode t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4277 ["Trace" edebug-trace-mode t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4278 ["Trace Fast" edebug-Trace-fast-mode t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4279 ["Continue" edebug-continue-mode t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4280 ["Continue Fast" edebug-Continue-fast-mode t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4281 ["Go" edebug-go-mode t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4282 ["Go Nonstop" edebug-Go-nonstop-mode t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4283 "----"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4284 ["Help" edebug-help t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4285 ["Abort" abort-recursive-edit t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4286 ["Quit to Top Level" top-level t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4287 ["Quit Nonstop" edebug-top-level-nonstop 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 ("Jumps"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4290 ["Forward Sexp" edebug-forward-sexp t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4291 ["Step In" edebug-step-in t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4292 ["Step Out" edebug-step-out t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4293 ["Goto Here" edebug-goto-here t])
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4294
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4295 ("Breaks"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4296 ["Set Breakpoint" edebug-set-breakpoint t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4297 ["Unset Breakpoint" edebug-unset-breakpoint t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4298 ["Set Conditional Breakpoint" edebug-set-conditional-breakpoint t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4299 ["Set Global Break Condition" edebug-set-global-break-condition t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4300 ["Show Next Breakpoint" edebug-next-breakpoint t])
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4301
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4302 ("Views"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4303 ["Where am I?" edebug-where t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4304 ["Bounce to Current Point" edebug-bounce-point t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4305 ["View Outside Windows" edebug-view-outside t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4306 ["Previous Result" edebug-previous-result t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4307 ["Show Backtrace" edebug-backtrace t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4308 ["Display Freq Count" edebug-display-freq-count t])
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4309
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4310 ("Eval"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4311 ["Expression" edebug-eval-expression t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4312 ["Last Sexp" edebug-eval-last-sexp t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4313 ["Visit Eval List" edebug-visit-eval-list 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 ("Options"
33758
8c1e62157545 (edebug-version)
Dave Love <fx@gnu.org>
parents: 33709
diff changeset
4316 ["Edebug All Defs" edebug-all-defs
8c1e62157545 (edebug-version)
Dave Love <fx@gnu.org>
parents: 33709
diff changeset
4317 :style toggle :selected edebug-all-defs]
8c1e62157545 (edebug-version)
Dave Love <fx@gnu.org>
parents: 33709
diff changeset
4318 ["Edebug All Forms" edebug-all-forms
8c1e62157545 (edebug-version)
Dave Love <fx@gnu.org>
parents: 33709
diff changeset
4319 :style toggle :selected edebug-all-forms]
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4320 "----"
33758
8c1e62157545 (edebug-version)
Dave Love <fx@gnu.org>
parents: 33709
diff changeset
4321 ["Tracing" (edebug-toggle 'edebug-trace)
8c1e62157545 (edebug-version)
Dave Love <fx@gnu.org>
parents: 33709
diff changeset
4322 :style toggle :selected edebug-trace]
8c1e62157545 (edebug-version)
Dave Love <fx@gnu.org>
parents: 33709
diff changeset
4323 ["Test Coverage" (edebug-toggle 'edebug-test-coverage)
8c1e62157545 (edebug-version)
Dave Love <fx@gnu.org>
parents: 33709
diff changeset
4324 :style toggle :selected edebug-test-coverage]
8c1e62157545 (edebug-version)
Dave Love <fx@gnu.org>
parents: 33709
diff changeset
4325 ["Save Windows" edebug-toggle-save-windows
8c1e62157545 (edebug-version)
Dave Love <fx@gnu.org>
parents: 33709
diff changeset
4326 :style toggle :selected edebug-save-windows]
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
4327 ["Save Point"
33758
8c1e62157545 (edebug-version)
Dave Love <fx@gnu.org>
parents: 33709
diff changeset
4328 (edebug-toggle 'edebug-save-displayed-buffer-points)
8c1e62157545 (edebug-version)
Dave Love <fx@gnu.org>
parents: 33709
diff changeset
4329 :style toggle :selected edebug-save-displayed-buffer-points]
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4330 ))
33758
8c1e62157545 (edebug-version)
Dave Love <fx@gnu.org>
parents: 33709
diff changeset
4331 "Menus for Edebug.")
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4332
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4333
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
4334 ;;; Emacs version specific code
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
4335
40464
f1e32a9da9a8 (edebug-window-live-p): Always alias to window-live-p.
Richard M. Stallman <rms@gnu.org>
parents: 39515
diff changeset
4336 (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
4337
f1e32a9da9a8 (edebug-window-live-p): Always alias to window-live-p.
Richard M. Stallman <rms@gnu.org>
parents: 39515
diff changeset
4338 (defun edebug-mark ()
58589
f72b92ec53da Comment changes.
Richard M. Stallman <rms@gnu.org>
parents: 57959
diff changeset
4339 (mark t))
40464
f1e32a9da9a8 (edebug-window-live-p): Always alias to window-live-p.
Richard M. Stallman <rms@gnu.org>
parents: 39515
diff changeset
4340
f1e32a9da9a8 (edebug-window-live-p): Always alias to window-live-p.
Richard M. Stallman <rms@gnu.org>
parents: 39515
diff changeset
4341 (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
4342 "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
4343 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
4344 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
4345 ;; (interactive "P\nxCondition: ")
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
4346 (interactive
40464
f1e32a9da9a8 (edebug-window-live-p): Always alias to window-live-p.
Richard M. Stallman <rms@gnu.org>
parents: 39515
diff changeset
4347 (list
f1e32a9da9a8 (edebug-window-live-p): Always alias to window-live-p.
Richard M. Stallman <rms@gnu.org>
parents: 39515
diff changeset
4348 current-prefix-arg
58602
2864ad32d866 (edebug-set-global-break-condition):
Juri Linkov <juri@jurta.org>
parents: 58589
diff changeset
4349 ;; 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
4350 (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
4351 (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
4352 (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
4353 (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
4354 (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
4355 (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
4356 (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
4357 (edebug-break-condition (car (cdr edebug-break-data)))
58602
2864ad32d866 (edebug-set-global-break-condition):
Juri Linkov <juri@jurta.org>
parents: 58589
diff changeset
4358 (initial (and edebug-break-condition
2864ad32d866 (edebug-set-global-break-condition):
Juri Linkov <juri@jurta.org>
parents: 58589
diff changeset
4359 (format "%s" edebug-break-condition))))
2864ad32d866 (edebug-set-global-break-condition):
Juri Linkov <juri@jurta.org>
parents: 58589
diff changeset
4360 (read-from-minibuffer
2864ad32d866 (edebug-set-global-break-condition):
Juri Linkov <juri@jurta.org>
parents: 58589
diff changeset
4361 "Condition: " initial read-expression-map t
2864ad32d866 (edebug-set-global-break-condition):
Juri Linkov <juri@jurta.org>
parents: 58589
diff changeset
4362 (if (equal (car read-expression-history) initial)
2864ad32d866 (edebug-set-global-break-condition):
Juri Linkov <juri@jurta.org>
parents: 58589
diff changeset
4363 '(read-expression-history . 1)
2864ad32d866 (edebug-set-global-break-condition):
Juri Linkov <juri@jurta.org>
parents: 58589
diff changeset
4364 '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
4365 (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
4366
41175
7a8a9f274e2c (edebug-form-data, edebug-offsets)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40475
diff changeset
4367 (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
4368
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
4369 ;;; Byte-compiler
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
4370
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4371 ;; Extension for bytecomp to resolve undefined function references.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4372 ;; Requires new byte compiler.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4373
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4374 ;; Reenable byte compiler warnings about unread-command-char and -event.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4375 ;; Disabled before edebug-recursive-edit.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4376 (eval-when-compile
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4377 (if edebug-unread-command-char-warning
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
4378 (put 'unread-command-char 'byte-obsolete-variable
33758
8c1e62157545 (edebug-version)
Dave Love <fx@gnu.org>
parents: 33709
diff changeset
4379 edebug-unread-command-char-warning)))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4380
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 ;; 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
4383 ;; We only want to evaluate when actually byte compiling.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4384 ;; 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
4385 (if (featurep 'byte-compile) (progn
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4386
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4387 (defun byte-compile-resolve-functions (funcs)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4388 "Say it is OK for the named functions to be unresolved."
84898
11d8147c948d (byte-compile-resolve-functions): Use `mapc' rather than `mapcar'.
Juanma Barranquero <lekktu@gmail.com>
parents: 82907
diff changeset
4389 (mapc
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
4390 (function
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4391 (lambda (func)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4392 (setq byte-compile-unresolved-functions
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4393 (delq (assq func byte-compile-unresolved-functions)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4394 byte-compile-unresolved-functions))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4395 funcs)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4396 nil)
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
4397
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4398 '(defun byte-compile-resolve-free-references (vars)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4399 "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
4400 (mapcar
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
4401 (function
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4402 (lambda (var)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4403 (setq byte-compile-free-references
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4404 (delq var byte-compile-free-references))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4405 vars)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4406 nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4407
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4408 '(defun byte-compile-resolve-free-assignments (vars)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4409 "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
4410 (mapcar
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
4411 (function
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4412 (lambda (var)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4413 (setq byte-compile-free-assignments
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4414 (delq var byte-compile-free-assignments))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4415 vars)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4416 nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4417
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
4418 (byte-compile-resolve-functions
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
4419 '(reporter-submit-bug-report
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
4420 edebug-gensym ;; also in cl.el
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4421 ;; Interfaces to standard functions.
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
4422 edebug-original-eval-defun
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4423 edebug-original-read
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4424 edebug-get-buffer-window
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4425 edebug-mark
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4426 edebug-mark-marker
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
4427 edebug-input-pending-p
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4428 edebug-sit-for
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
4429 edebug-prin1-to-string
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4430 edebug-format
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4431 ;; lemacs
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4432 zmacs-deactivate-region
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4433 popup-menu
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4434 ;; CL
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4435 cl-macroexpand-all
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
4436 ;; 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
4437 byte-compile-resolve-functions
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4438 ))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4439
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4440 '(byte-compile-resolve-free-references
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4441 '(read-expression-history
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4442 read-expression-map))
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 '(byte-compile-resolve-free-assignments
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4445 '(read-expression-history))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4446
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4447 )))
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
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
4450 ;;; Autoloading of Edebug accessories
6512
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 (if (featurep 'cl)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4453 (add-hook 'edebug-setup-hook
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4454 (function (lambda () (require 'cl-specs))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4455 ;; 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
4456 (add-hook 'cl-load-hook
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4457 (function (lambda () (require 'cl-specs)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4458
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47660
diff changeset
4459 ;;; 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
4460 (if (featurep 'cl-read)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4461 (add-hook 'edebug-setup-hook
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4462 (function (lambda () (require 'edebug-cl-read))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4463 ;; 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
4464 (add-hook 'cl-read-load-hooks
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4465 (function (lambda () (require 'edebug-cl-read)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4466
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4467
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
4468 ;;; Finalize Loading
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4469
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4470 ;;; Finally, hook edebug into the rest of Emacs.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4471 ;;; There are probably some other things that could go here.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4472
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4473 ;; Install edebug read and eval functions.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4474 (edebug-install-read-eval-functions)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4475
3350
c9689f8d0574 Provide edebug.
Richard M. Stallman <rms@gnu.org>
parents: 2629
diff changeset
4476 (provide 'edebug)
c9689f8d0574 Provide edebug.
Richard M. Stallman <rms@gnu.org>
parents: 2629
diff changeset
4477
93975
1e3a407766b9 Fix up comment convention on the arch-tag lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92148
diff changeset
4478 ;; arch-tag: 19c8d05c-4554-426e-ac72-e0fa1fcb0808
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4479 ;;; edebug.el ends here