annotate lisp/emacs-lisp/edebug.el @ 17126:f8d7263cce09

(init_syntax_once): Add trick to avoid compiler warning of "comparison is always 1 ...".
author Kenichi Handa <handa@m17n.org>
date Fri, 28 Feb 1997 01:38:57 +0000
parents b91256aecd79
children f967f12c8ec8
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
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
3 ;; Copyright (C) 1988,'89,'90,'91,'92,'93,'94,'95 Free Software Foundation, Inc
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4
846
20674ae6bf52 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 778
diff changeset
5 ;; Author: Daniel LaLiberte <liberte@cs.uiuc.edu>
2247
2c7997f249eb Add or correct keywords
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1821
diff changeset
6 ;; Keywords: lisp, tools, maint
846
20674ae6bf52 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 778
diff changeset
7
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
8 ;; LCD Archive Entry:
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
9 ;; edebug|Daniel LaLiberte|liberte@cs.uiuc.edu
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
10 ;; |A source level debugger for Emacs Lisp.
16744
b91256aecd79 (edebug-read-symbol, edebug-read-string): Don't back up after reading.
Richard M. Stallman <rms@gnu.org>
parents: 16550
diff changeset
11 ;; |$Date: 1996/11/09 21:48:07 $|$Revision: 3.12 $|~/modes/edebug.el|
2307
10e417efb12a Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2247
diff changeset
12
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
13 ;; This file is part of GNU Emacs.
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
14
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
15 ;; GNU Emacs is free software; you can redistribute it and/or modify
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
16 ;; it under the terms of the GNU General Public License as published by
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
17 ;; the Free Software Foundation; either version 2, or (at your option)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
18 ;; any later version.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
19
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
20 ;; 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
21 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
22 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
23 ;; GNU General Public License for more details.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
24
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
25 ;; You should have received a copy of the GNU General Public License
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
26 ;; along with GNU Emacs; see the file COPYING. If not, write to the
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
27 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
28 ;; Boston, MA 02111-1307, USA.
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
29
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
30 ;;; Commentary:
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
31
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
32 ;; This minor mode allows programmers to step through Emacs Lisp
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
33 ;; source code while executing functions. You can also set
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
34 ;; breakpoints, trace (stopping at each expression), evaluate
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
35 ;; expressions as if outside Edebug, reevaluate and display a list of
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
36 ;; expressions, trap errors normally caught by debug, and display a
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
37 ;; debug style backtrace.
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
38
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
39 ;;; Installation
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
40 ;; =============
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
41
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
42 ;; Put edebug.el in some directory in your load-path and
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
43 ;; byte-compile it. Also read the beginning of edebug-epoch.el,
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
44 ;; cl-specs.el, and edebug-cl-read.el if they apply to you.
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
45
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
46 ;; Unless you are using Emacs 19 which is already set up to use Edebug,
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
47 ;; put the following forms in your .emacs file.
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
48 ;; (define-key emacs-lisp-mode-map "\C-xx" 'edebug-eval-top-level-form)
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
49 ;; (autoload 'edebug-eval-top-level-form "edebug")
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
50
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
51 ;; 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
52 ;; (setq edebug-global-prefix "\C-xX")
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 ;; Other options, are described in the manual.
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
55
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
56 ;; In previous versions of Edebug, users were directed to set
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
57 ;; `debugger' to `edebug-debug'. This is no longer necessary
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
58 ;; since Edebug automatically sets it whenever Edebug is active.
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
59
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
60 ;;; Minimal Instructions
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
61 ;; =====================
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
62
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
63 ;; First evaluate a defun with C-xx, then run the function. Step
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
64 ;; through the code with SPC, mark breakpoints with b, go until a
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
65 ;; breakpoint is reached with g, and quit execution with q. Use the
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
66 ;; "?" command in edebug to describe other commands. See edebug.tex
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
67 ;; or the Emacs 19 Lisp Reference Manual for more instructions.
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
68
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
69 ;; Send me your enhancements, ideas, bugs, or fixes.
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
70 ;; For bugs, you can call edebug-submit-bug-report if you have reporter.el.
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
71 ;; There is an edebug mailing list if you want to keep up
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
72 ;; with the latest developments. Requests to: edebug-request@cs.uiuc.edu
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
73
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
74 ;; Daniel LaLiberte 217-398-4114
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
75 ;; University of Illinois, Urbana-Champaign
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
76 ;; Department of Computer Science
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
77 ;; 1304 W Springfield
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
78 ;; Urbana, IL 61801
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
79
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
80 ;; uiucdcs!liberte
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
81 ;; liberte@cs.uiuc.edu
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
82
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
83 ;; For the early revision history, see edebug-history.
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
84
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
85 ;;; Code:
6512
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 (defconst edebug-version
16744
b91256aecd79 (edebug-read-symbol, edebug-read-string): Don't back up after reading.
Richard M. Stallman <rms@gnu.org>
parents: 16550
diff changeset
88 (let ((raw-version "$Revision: 3.12 $"))
6732
8ee6fe9b9fe9 (edebug-version): Delete third arg of string-match.
Richard M. Stallman <rms@gnu.org>
parents: 6671
diff changeset
89 (substring raw-version (string-match "[0-9.]*" raw-version)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
90 (match-end 0))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
91
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
92 (require 'backquote)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
93
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
94 ;; Emacs 18 doesn't have defalias.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
95 (eval-and-compile
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
96 (or (fboundp 'defalias) (fset 'defalias 'fset)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
97
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
98
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
99 ;;; Bug reporting
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
100
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
101 (defconst edebug-maintainer-address "liberte@cs.uiuc.edu")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
102
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
103 (defun edebug-submit-bug-report ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
104 "Submit, via mail, a bug report on edebug."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
105 (interactive)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
106 (require 'reporter)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
107 (and (y-or-n-p "Do you really want to submit a report on edebug? ")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
108 (reporter-submit-bug-report
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
109 edebug-maintainer-address
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
110 (concat "edebug.el " edebug-version)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
111 (list 'edebug-setup-hook
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
112 'edebug-all-defs
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
113 'edebug-all-forms
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
114 'edebug-eval-macro-args
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
115 'edebug-stop-before-symbols
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
116 'edebug-save-windows
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
117 'edebug-save-displayed-buffer-points
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
118 'edebug-initial-mode
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
119 'edebug-trace
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
120 'edebug-test-coverage
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
121 'edebug-continue-kbd-macro
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
122 'edebug-print-length
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
123 'edebug-print-level
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
124 'edebug-print-circle
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
125 ))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
126
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
127 ;;; Options
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
128
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
129 (defvar edebug-setup-hook nil
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
130 "*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
131 Each time it is set to a new value, Edebug will call those functions
f1d73d12436e checked in with -k by liberte at 1994/04/09 20:57:56
Daniel LaLiberte <liberte@gnu.org>
parents: 6732
diff changeset
132 once and then `edebug-setup-hook' is reset to nil. You could use this
f1d73d12436e checked in with -k by liberte at 1994/04/09 20:57:56
Daniel LaLiberte <liberte@gnu.org>
parents: 6732
diff changeset
133 to load up Edebug specifications associated with a package you are
f1d73d12436e checked in with -k by liberte at 1994/04/09 20:57:56
Daniel LaLiberte <liberte@gnu.org>
parents: 6732
diff changeset
134 using but only when you also use Edebug.")
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
135
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
136 (defvar edebug-all-defs nil
6761
f1d73d12436e checked in with -k by liberte at 1994/04/09 20:57:56
Daniel LaLiberte <liberte@gnu.org>
parents: 6732
diff changeset
137 "*If non-nil, evaluation of any defining forms will instrument for Edebug.
f1d73d12436e checked in with -k by liberte at 1994/04/09 20:57:56
Daniel LaLiberte <liberte@gnu.org>
parents: 6732
diff changeset
138 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
139 `eval-current-buffer'. `eval-region' is also called by
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
140 `eval-last-sexp', and `eval-print-last-sexp'.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
141
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
142 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
143 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
144 \(make-local-variable 'edebug-all-defs) in your
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
145 `emacs-lisp-mode-hook'.")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
146
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
147 (defvar edebug-all-forms nil
6761
f1d73d12436e checked in with -k by liberte at 1994/04/09 20:57:56
Daniel LaLiberte <liberte@gnu.org>
parents: 6732
diff changeset
148 "*Non-nil evaluation of all forms will instrument for Edebug.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
149 This doesn't apply to loading or evaluations in the minibuffer.
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
150 Use the command `edebug-all-forms' to toggle the value of this option.")
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
151
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
152 (defvar edebug-eval-macro-args nil
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
153 "*Non-nil means all macro call arguments may be evaluated.
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
154 If this variable is nil, the default, Edebug will *not* wrap
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
155 macro call arguments as if they will be evaluated.
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
156 For each macro, a `edebug-form-spec' overrides this option.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
157 So to specify exceptions for macros that have some arguments evaluated
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
158 and some not, you should specify an `edebug-form-spec'.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
159
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
160 This option is going away soon.")
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
161
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
162 (defvar edebug-stop-before-symbols nil
6761
f1d73d12436e checked in with -k by liberte at 1994/04/09 20:57:56
Daniel LaLiberte <liberte@gnu.org>
parents: 6732
diff changeset
163 "*Non-nil causes Edebug to stop before symbols as well as after.
f1d73d12436e checked in with -k by liberte at 1994/04/09 20:57:56
Daniel LaLiberte <liberte@gnu.org>
parents: 6732
diff changeset
164 In any case, a breakpoint or interrupt may stop before a symbol.
f1d73d12436e checked in with -k by liberte at 1994/04/09 20:57:56
Daniel LaLiberte <liberte@gnu.org>
parents: 6732
diff changeset
165
f1d73d12436e checked in with -k by liberte at 1994/04/09 20:57:56
Daniel LaLiberte <liberte@gnu.org>
parents: 6732
diff changeset
166 This option is going away soon.")
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
167
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
168 (defvar edebug-save-windows t
6761
f1d73d12436e checked in with -k by liberte at 1994/04/09 20:57:56
Daniel LaLiberte <liberte@gnu.org>
parents: 6732
diff changeset
169 "*If non-nil, Edebug saves and restores the window configuration.
f1d73d12436e checked in with -k by liberte at 1994/04/09 20:57:56
Daniel LaLiberte <liberte@gnu.org>
parents: 6732
diff changeset
170 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
171 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
172
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
173 If the value is a list, only the listed windows are saved and
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
174 restored.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
175
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
176 `edebug-toggle-save-windows' may be used to change this variable.")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
177
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
178 (defvar edebug-save-displayed-buffer-points nil
6761
f1d73d12436e checked in with -k by liberte at 1994/04/09 20:57:56
Daniel LaLiberte <liberte@gnu.org>
parents: 6732
diff changeset
179 "*If non-nil, save and restore point in all displayed buffers.
f1d73d12436e checked in with -k by liberte at 1994/04/09 20:57:56
Daniel LaLiberte <liberte@gnu.org>
parents: 6732
diff changeset
180
f1d73d12436e checked in with -k by liberte at 1994/04/09 20:57:56
Daniel LaLiberte <liberte@gnu.org>
parents: 6732
diff changeset
181 Saving and restoring point in other buffers is necessary if you are
f1d73d12436e checked in with -k by liberte at 1994/04/09 20:57:56
Daniel LaLiberte <liberte@gnu.org>
parents: 6732
diff changeset
182 debugging code that changes the point of a buffer which is displayed
f1d73d12436e checked in with -k by liberte at 1994/04/09 20:57:56
Daniel LaLiberte <liberte@gnu.org>
parents: 6732
diff changeset
183 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
184 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
185
6761
f1d73d12436e checked in with -k by liberte at 1994/04/09 20:57:56
Daniel LaLiberte <liberte@gnu.org>
parents: 6732
diff changeset
186 Saving and restoring point in all buffers is expensive, since it
f1d73d12436e checked in with -k by liberte at 1994/04/09 20:57:56
Daniel LaLiberte <liberte@gnu.org>
parents: 6732
diff changeset
187 requires selecting each window twice, so enable this only if you need
f1d73d12436e checked in with -k by liberte at 1994/04/09 20:57:56
Daniel LaLiberte <liberte@gnu.org>
parents: 6732
diff changeset
188 it.")
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
189
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
190 (defvar edebug-initial-mode 'step
6761
f1d73d12436e checked in with -k by liberte at 1994/04/09 20:57:56
Daniel LaLiberte <liberte@gnu.org>
parents: 6732
diff changeset
191 "*Initial execution mode for Edebug, if non-nil. If this variable
f1d73d12436e checked in with -k by liberte at 1994/04/09 20:57:56
Daniel LaLiberte <liberte@gnu.org>
parents: 6732
diff changeset
192 is non-@code{nil}, it specifies the initial execution mode for Edebug
f1d73d12436e checked in with -k by liberte at 1994/04/09 20:57:56
Daniel LaLiberte <liberte@gnu.org>
parents: 6732
diff changeset
193 when it is first activated. Possible values are step, next, go,
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
194 Go-nonstop, trace, Trace-fast, continue, and Continue-fast.")
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
195
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
196 (defvar edebug-trace nil
6761
f1d73d12436e checked in with -k by liberte at 1994/04/09 20:57:56
Daniel LaLiberte <liberte@gnu.org>
parents: 6732
diff changeset
197 "*Non-nil means display a trace of function entry and exit.
f1d73d12436e checked in with -k by liberte at 1994/04/09 20:57:56
Daniel LaLiberte <liberte@gnu.org>
parents: 6732
diff changeset
198 Tracing output is displayed in a buffer named `*edebug-trace*', one
f1d73d12436e checked in with -k by liberte at 1994/04/09 20:57:56
Daniel LaLiberte <liberte@gnu.org>
parents: 6732
diff changeset
199 function entry or exit per line, indented by the recursion level.
f1d73d12436e checked in with -k by liberte at 1994/04/09 20:57:56
Daniel LaLiberte <liberte@gnu.org>
parents: 6732
diff changeset
200
f1d73d12436e checked in with -k by liberte at 1994/04/09 20:57:56
Daniel LaLiberte <liberte@gnu.org>
parents: 6732
diff changeset
201 You can customize by replacing functions `edebug-print-trace-before'
f1d73d12436e checked in with -k by liberte at 1994/04/09 20:57:56
Daniel LaLiberte <liberte@gnu.org>
parents: 6732
diff changeset
202 and `edebug-print-trace-after'.")
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
203
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
204 (defvar edebug-test-coverage nil
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
205 "*If non-nil, Edebug tests coverage of all expressions debugged.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
206 This is done by comparing the result of each expression
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
207 with the previous result. Coverage is considered OK if two different
6761
f1d73d12436e checked in with -k by liberte at 1994/04/09 20:57:56
Daniel LaLiberte <liberte@gnu.org>
parents: 6732
diff changeset
208 results are found.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
209
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
210 Use `edebug-display-freq-count' to display the frequency count and
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
211 coverage information for a definition.")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
212
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
213 (defvar edebug-continue-kbd-macro nil
6761
f1d73d12436e checked in with -k by liberte at 1994/04/09 20:57:56
Daniel LaLiberte <liberte@gnu.org>
parents: 6732
diff changeset
214 "*If non-nil, continue defining or executing any keyboard macro.
f1d73d12436e checked in with -k by liberte at 1994/04/09 20:57:56
Daniel LaLiberte <liberte@gnu.org>
parents: 6732
diff changeset
215 Use this with caution since it is not debugged.")
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
216
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
217
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
218 (defvar edebug-print-length 50
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
219 "*Default value of `print-length' to use while printing results in Edebug.")
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
220 (defvar edebug-print-level 50
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
221 "*Default value of `print-level' to use while printing results in Edebug.")
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
222 (defvar edebug-print-circle t
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
223 "*Default value of `print-circle' to use while printing results in Edebug.")
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
224
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
225 (defvar edebug-unwrap-results nil
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
226 "*Non-nil if Edebug should unwrap results of expressions.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
227 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
228 are instrumented expressions. But don't do this when results might be
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
229 circular or an infinite loop will result.")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
230
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
231 (defvar edebug-on-error t
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
232 "*Value bound to `debug-on-error' while Edebug is active.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
233
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
234 If `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
235
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
236 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
237 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
238 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
239 signals that *are* handled since they would otherwise be missed.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
240 After execution is resumed, the error is signaled again.")
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 (defvar edebug-on-quit t
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
243 "*Value bound to `debug-on-quit' while Edebug is active.")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
244
6761
f1d73d12436e checked in with -k by liberte at 1994/04/09 20:57:56
Daniel LaLiberte <liberte@gnu.org>
parents: 6732
diff changeset
245 (defvar edebug-global-break-condition nil
f1d73d12436e checked in with -k by liberte at 1994/04/09 20:57:56
Daniel LaLiberte <liberte@gnu.org>
parents: 6732
diff changeset
246 "*If non-nil, an expression to test for at every stop point.
f1d73d12436e checked in with -k by liberte at 1994/04/09 20:57:56
Daniel LaLiberte <liberte@gnu.org>
parents: 6732
diff changeset
247 If the result is non-nil, then break. Errors are ignored.")
f1d73d12436e checked in with -k by liberte at 1994/04/09 20:57:56
Daniel LaLiberte <liberte@gnu.org>
parents: 6732
diff changeset
248
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
249 ;;; Form spec utilities.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
250
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
251 ;;;###autoload
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
252 (defmacro def-edebug-spec (symbol spec)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
253 "Set the edebug-form-spec property of SYMBOL according to SPEC.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
254 Both SYMBOL and SPEC are unevaluated. The SPEC can be 0, t, a symbol
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
255 \(naming a function), or a list."
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
256 (` (put (quote (, symbol)) 'edebug-form-spec (quote (, spec)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
257
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
258 (defmacro def-edebug-form-spec (symbol spec-form)
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
259 "For compatibility with old version. Use `def-edebug-spec' instead."
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
260 (message "Obsolete: use def-edebug-spec instead.")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
261 (def-edebug-spec symbol (eval spec-form)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
262
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
263 (defun get-edebug-spec (symbol)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
264 ;; Get the spec of symbol resolving all indirection.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
265 (let ((edebug-form-spec (get symbol 'edebug-form-spec))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
266 indirect)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
267 (while (and (symbolp edebug-form-spec)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
268 (setq indirect (get edebug-form-spec 'edebug-form-spec)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
269 ;; (edebug-trace "indirection: %s" edebug-form-spec)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
270 (setq edebug-form-spec indirect))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
271 edebug-form-spec
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
272 ))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
273
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
274 ;;; Utilities
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
275
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
276 ;; Define edebug-gensym - from old cl.el
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
277 (defvar edebug-gensym-index 0
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
278 "Integer used by `edebug-gensym' to produce new names.")
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
279
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
280 (defun edebug-gensym (&optional prefix)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
281 "Generate a fresh uninterned symbol.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
282 There is an optional argument, PREFIX. PREFIX is the
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
283 string that begins the new name. Most people take just the default,
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
284 except when debugging needs suggest otherwise."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
285 (if (null prefix)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
286 (setq prefix "G"))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
287 (let ((newsymbol nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
288 (newname ""))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
289 (while (not newsymbol)
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
290 (setq newname (concat prefix (int-to-string edebug-gensym-index)))
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
291 (setq edebug-gensym-index (+ edebug-gensym-index 1))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
292 (if (not (intern-soft newname))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
293 (setq newsymbol (make-symbol newname))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
294 newsymbol))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
295
6761
f1d73d12436e checked in with -k by liberte at 1994/04/09 20:57:56
Daniel LaLiberte <liberte@gnu.org>
parents: 6732
diff changeset
296 ;; Only used by CL-like code.
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
297 (defun edebug-keywordp (object)
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
298 "Return t if OBJECT is a keyword.
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
299 A keyword is a symbol that starts with `:'."
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
300 (and (symbolp object)
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
301 (= ?: (aref (symbol-name object) 0))))
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
302
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
303 (defun edebug-lambda-list-keywordp (object)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
304 "Return t if OBJECT is a lambda list keyword.
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
305 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
306 (and (symbolp object)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
307 (= ?& (aref (symbol-name object) 0))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
308
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
309
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
310 (defun edebug-last-sexp ()
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
311 ;; Return the last sexp before point in current buffer.
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
312 ;; Assumes Emacs Lisp syntax is active.
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
313 (car
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
314 (read-from-string
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
315 (buffer-substring
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
316 (save-excursion
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
317 (forward-sexp -1)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
318 (point))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
319 (point)))))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
320
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
321 (defun edebug-window-list ()
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
322 "Return a list of windows, in order of `next-window'."
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
323 ;; This doesn't work for epoch.
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
324 (let* ((first-window (selected-window))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
325 (window-list (list first-window))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
326 (next (next-window first-window)))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
327 (while (not (eq next first-window))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
328 (setq window-list (cons next window-list))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
329 (setq next (next-window next)))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
330 (nreverse window-list)))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
331
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
332 (defun edebug-window-live-p (window)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
333 "Return non-nil if WINDOW is visible."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
334 (let* ((first-window (selected-window))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
335 (next (next-window first-window t)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
336 (while (not (or (eq next window)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
337 (eq next first-window)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
338 (setq next (next-window next t)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
339 (eq next window)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
340
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
341 ;; Not used.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
342 '(defun edebug-two-window-p ()
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
343 "Return t if there are two windows."
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
344 (and (not (one-window-p))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
345 (eq (selected-window)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
346 (next-window (next-window (selected-window))))))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
347
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
348 (defsubst edebug-lookup-function (object)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
349 (while (and (symbolp object) (fboundp object))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
350 (setq object (symbol-function object)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
351 object)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
352
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
353 (defun edebug-macrop (object)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
354 "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
355 (setq object (edebug-lookup-function object))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
356 (if (and (listp object)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
357 (eq 'macro (car object))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
358 (edebug-functionp (cdr object)))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
359 object))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
360
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
361 (defun edebug-functionp (object)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
362 "Returns the function named by OBJECT, or nil if it is not a function."
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
363 (setq object (edebug-lookup-function object))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
364 (if (or (subrp object)
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
365 (byte-code-function-p object)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
366 (and (listp object)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
367 (eq (car object) 'lambda)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
368 (listp (car (cdr object)))))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
369 object))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
370
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
371 (defun edebug-sort-alist (alist function)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
372 ;; Return the ALIST sorted with comparison function FUNCTION.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
373 ;; This uses 'sort so the sorting is destructive.
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
374 (sort alist (function
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
375 (lambda (e1 e2)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
376 (funcall function (car e1) (car e2))))))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
377
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
378 ;;(def-edebug-spec edebug-save-restriction t)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
379
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
380 ;; 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
381 '(defmacro edebug-save-restriction (&rest body)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
382 "Evaluate BODY while saving the current buffers restriction.
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
383 BODY may change buffer outside of current restriction, unlike
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
384 save-restriction. BODY may change the current buffer,
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
385 and the restriction will be restored to the original buffer,
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
386 and the current buffer remains current.
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
387 Return the result of the last expression in BODY."
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
388 (` (let ((edebug:s-r-beg (point-min-marker))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
389 (edebug:s-r-end (point-max-marker)))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
390 (unwind-protect
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
391 (progn (,@ body))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
392 (save-excursion
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
393 (set-buffer (marker-buffer edebug:s-r-beg))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
394 (narrow-to-region edebug:s-r-beg edebug:s-r-end))))))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
395
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
396 ;;; Display
6512
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 (defconst edebug-trace-buffer "*edebug-trace*"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
399 "Name of the buffer to put trace info in.")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
400
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
401 (defun edebug-pop-to-buffer (buffer &optional window)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
402 ;; Like pop-to-buffer, but select window where BUFFER was last shown.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
403 ;; Select WINDOW if it provided and it still exists. Otherwise,
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
404 ;; if buffer is currently shown in several windows, choose one.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
405 ;; Otherwise, find a new window, possibly splitting one.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
406 (setq window (if (and (windowp window) (edebug-window-live-p window)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
407 (eq (window-buffer window) buffer))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
408 window
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
409 (if (eq (window-buffer (selected-window)) buffer)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
410 (selected-window)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
411 (edebug-get-buffer-window buffer))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
412 (if window
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
413 (select-window window)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
414 (if (one-window-p)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
415 (split-window))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
416 ;; (message "next window: %s" (next-window)) (sit-for 1)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
417 (if (eq (get-buffer-window edebug-trace-buffer) (next-window))
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
418 ;; Don't select trace window
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
419 nil
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
420 (select-window (next-window))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
421 (set-window-buffer (selected-window) buffer)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
422 (set-window-hscroll (selected-window) 0);; should this be??
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
423 ;; 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
424 ;;(set-buffer buffer)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
425 )
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
426
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
427
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
428 (defun edebug-get-displayed-buffer-points ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
429 ;; Return a list of buffer point pairs, for all displayed buffers.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
430 (save-excursion
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
431 (let* ((first-window (selected-window))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
432 (next (next-window first-window))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
433 (buffer-point-list nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
434 buffer)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
435 (while (not (eq next first-window))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
436 (set-buffer (setq buffer (window-buffer next)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
437 (setq buffer-point-list
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
438 (cons (cons buffer (point)) buffer-point-list))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
439 (setq next (next-window next)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
440 buffer-point-list)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
441
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
442
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
443 (defun edebug-set-buffer-points (buffer-points)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
444 ;; Restore the buffer-points created by edebug-get-displayed-buffer-points.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
445 (let ((current-buffer (current-buffer)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
446 (mapcar (function (lambda (buf-point)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
447 (if (buffer-name (car buf-point)) ; still exists
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
448 (progn
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
449 (set-buffer (car buf-point))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
450 (goto-char (cdr buf-point))))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
451 buffer-points)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
452 (set-buffer current-buffer)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
453
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
454 (defun edebug-current-windows (which-windows)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
455 ;; Get either a full window configuration or some window information.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
456 (if (listp which-windows)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
457 (mapcar (function (lambda (window)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
458 (if (edebug-window-live-p window)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
459 (list window
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
460 (window-buffer window)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
461 (window-point window)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
462 (window-start window)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
463 (window-hscroll window)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
464 which-windows)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
465 (current-window-configuration)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
466
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
467 (defun edebug-set-windows (window-info)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
468 ;; Set either a full window configuration or some window information.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
469 (if (listp window-info)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
470 (mapcar (function
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
471 (lambda (one-window-info)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
472 (if one-window-info
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
473 (apply (function
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
474 (lambda (window buffer point start hscroll)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
475 (if (edebug-window-live-p window)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
476 (progn
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
477 (set-window-buffer window buffer)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
478 (set-window-point window point)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
479 (set-window-start window start)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
480 (set-window-hscroll window hscroll)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
481 one-window-info))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
482 window-info)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
483 (set-window-configuration window-info)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
484
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
485 (defalias 'edebug-get-buffer-window 'get-buffer-window)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
486 (defalias 'edebug-sit-for 'sit-for)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
487 (defalias 'edebug-input-pending-p 'input-pending-p)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
488
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
489
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
490 ;;; Redefine read and eval functions
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
491 ;; read is redefined to maybe instrument forms.
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
492 ;; 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
493
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
494 ;; Use the Lisp version of eval-region.
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
495 (require 'eval-reg "eval-reg")
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
496
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
497 ;; Save the original read function
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
498 (or (fboundp 'edebug-original-read)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
499 (defalias 'edebug-original-read (symbol-function 'read)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
500
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
501 (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
502 "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
503 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
504 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
505 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
506 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
507 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
508 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
509 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
510 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
511
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
512 This version, from Edebug, maybe instruments the expression. But the
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
513 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
514 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
515 `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
516 (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
517 (if (eq stream (current-buffer))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
518 (edebug-read-and-maybe-wrap-form)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
519 (edebug-original-read stream)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
520
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
521 (or (fboundp 'edebug-original-eval-defun)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
522 (defalias 'edebug-original-eval-defun (symbol-function 'eval-defun)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
523
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
524 ;; We should somehow arrange to be able to do this
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
525 ;; without actually replacing the eval-defun command.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
526 (defun edebug-eval-defun (edebug-it)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
527 "Evaluate the top-level form containing point, or after point.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
528
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
529 This version, from Edebug, has the following differences: With a
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
530 prefix argument instrument the code for Edebug. If `edebug-all-defs' is
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
531 non-nil, then the code is instrumented *unless* there is a prefix
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
532 argument. If instrumenting, it prints: `Edebug: FUNCTIONNAME'.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
533 Otherwise, it prints in the minibuffer."
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
534 (interactive "P")
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
535 (let* ((edebugging (not (eq (not edebug-it) (not edebug-all-defs))))
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
536 (edebug-result)
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
537 (form
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
538 (let ((edebug-all-forms edebugging)
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
539 (edebug-all-defs (eq edebug-all-defs (not edebug-it))))
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
540 (edebug-read-top-level-form))))
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
541 (if (and (eq (car form) 'defvar)
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
542 (cdr-safe (cdr-safe form)))
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
543 (setq form (cons 'defconst (cdr form))))
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
544 (setq edebug-result (eval form))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
545 (if (not edebugging)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
546 (princ edebug-result)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
547 edebug-result)))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
548
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
549
727
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 661
diff changeset
550 ;;;###autoload
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
551 (defalias 'edebug-defun 'edebug-eval-top-level-form)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
552
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
553 ;;;###autoload
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
554 (defun edebug-eval-top-level-form ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
555 "Evaluate a top level form, such as a defun or defmacro.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
556 This is like `eval-defun', but the code is always instrumented for Edebug.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
557 Print its name in the minibuffer and leave point where it is,
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
558 or if an error occurs, leave point after it with mark at the original point."
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
559 (interactive)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
560 (eval
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
561 ;; 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
562 ;; 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
563 (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
564 (edebug-all-defs t))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
565 (edebug-read-top-level-form))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
566
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
567
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
568 (defun edebug-read-top-level-form ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
569 (let ((starting-point (point)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
570 (end-of-defun)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
571 (beginning-of-defun)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
572 (prog1
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
573 (edebug-read-and-maybe-wrap-form)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
574 ;; Recover point, but only if no error occurred.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
575 (goto-char starting-point))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
576
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
577
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
578 ;; Compatibility with old versions.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
579 (defalias 'edebug-all-defuns 'edebug-all-defs)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
580
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
581 (defun edebug-all-defs ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
582 "Toggle edebugging of all definitions."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
583 (interactive)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
584 (setq edebug-all-defs (not edebug-all-defs))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
585 (message "Edebugging all definitions is %s."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
586 (if edebug-all-defs "on" "off")))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
587
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
588
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
589 (defun edebug-all-forms ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
590 "Toggle edebugging of all forms."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
591 (interactive)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
592 (setq edebug-all-forms (not edebug-all-forms))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
593 (message "Edebugging all forms is %s."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
594 (if edebug-all-forms "on" "off")))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
595
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
596
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
597 (defun edebug-install-read-eval-functions ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
598 (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
599 ;; Don't install if already installed.
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
600 (if (eq (symbol-function 'read) 'edebug-read) nil
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
601 (elisp-eval-region-install)
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
602 (defalias 'read 'edebug-read)
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
603 (defalias 'eval-defun 'edebug-eval-defun)))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
604
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
605 (defun edebug-uninstall-read-eval-functions ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
606 (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
607 (elisp-eval-region-uninstall)
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
608 (defalias 'read (symbol-function 'edebug-original-read))
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 (symbol-function 'edebug-original-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
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
612 ;;; Edebug internal data
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
613
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
614 ;; The internal data that is needed for edebugging is kept in the
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
615 ;; buffer-local variable `edebug-form-data'.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
616
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
617 (make-variable-buffer-local 'edebug-form-data)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
618
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
619 (defconst edebug-form-data nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
620 ;; A list of entries associating symbols with buffer regions.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
621 ;; 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
622 ;; @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
623 ;; 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
624 ;; 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
625 ;; property list.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
626
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
627 ;; 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
628 ;; 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
629 ;; list of a symbol.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
630
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
631 (defun edebug-make-form-data-entry (symbol begin end)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
632 (list symbol begin end))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
633
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
634 (defsubst edebug-form-data-name (entry)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
635 (car entry))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
636
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
637 (defsubst edebug-form-data-begin (entry)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
638 (nth 1 entry))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
639
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
640 (defsubst edebug-form-data-end (entry)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
641 (nth 2 entry))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
642
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
643 (defsubst edebug-set-form-data-entry (entry name begin end)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
644 (setcar entry name);; in case name is changed
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
645 (set-marker (nth 1 entry) begin)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
646 (set-marker (nth 2 entry) end))
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 (defun edebug-get-form-data-entry (pnt &optional end-point)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
649 ;; 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
650 ;; If END-POINT is supplied, match must be exact.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
651 ;; Return `nil' if none found.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
652 (let ((rest edebug-form-data)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
653 closest-entry
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
654 (closest-dist 999999)) ;; need maxint here
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
655 (while (and rest (< 0 closest-dist))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
656 (let* ((entry (car rest))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
657 (begin (edebug-form-data-begin entry))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
658 (dist (- pnt begin)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
659 (setq rest (cdr rest))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
660 (if (and (<= 0 dist)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
661 (< dist closest-dist)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
662 (or (not end-point)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
663 (= end-point (edebug-form-data-end entry)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
664 (<= pnt (edebug-form-data-end entry)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
665 (setq closest-dist dist
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
666 closest-entry entry))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
667 closest-entry))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
668
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
669 ;; Also need to find all contained entries,
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
670 ;; 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
671
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
672 (defun edebug-form-data-symbol ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
673 ;; 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
674 ;; If point is not inside a edebuggable form, cause error.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
675 (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
676 (error "Not inside instrumented form")))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
677
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
678 (defun edebug-make-top-form-data-entry (new-entry)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
679 ;; 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
680 (edebug-clear-form-data-entry new-entry)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
681 (setq edebug-form-data (cons new-entry edebug-form-data)))
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-clear-form-data-entry (entry)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
684 ;; If non-nil, clear ENTRY out of the form data.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
685 ;; 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
686 (if entry
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
687 (progn
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
688 ;; Instead of this, we could just find all contained forms.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
689 ;; (put (car entry) 'edebug nil) ;
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
690 ;; (mapcar 'edebug-clear-form-data-entry ; dangerous
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
691 ;; (get (car entry) 'edebug-dependents))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
692 ;; (set-marker (nth 1 entry) nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
693 ;; (set-marker (nth 2 entry) nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
694 (setq edebug-form-data (delq entry edebug-form-data)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
695
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
696 ;;; Parser utilities
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
697
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
698 (defun edebug-syntax-error (&rest args)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
699 ;; Signal an invalid-read-syntax with ARGS.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
700 (signal 'invalid-read-syntax args))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
701
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 (defconst edebug-read-syntax-table
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
704 ;; Lookup table for significant characters indicating the class of the
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
705 ;; token that follows. This is not a \"real\" syntax table.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
706 (let ((table (make-vector 256 'symbol))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
707 (i 0))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
708 (while (< i ?!)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
709 (aset table i 'space)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
710 (setq i (1+ i)))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
711 (aset table ?\( 'lparen)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
712 (aset table ?\) 'rparen)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
713 (aset table ?\' 'quote)
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
714 (aset table ?\` 'backquote)
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
715 (aset table ?\, 'comma)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
716 (aset table ?\" 'string)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
717 (aset table ?\? 'char)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
718 (aset table ?\[ 'lbracket)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
719 (aset table ?\] 'rbracket)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
720 (aset table ?\. 'dot)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
721 (aset table ?\# 'hash)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
722 ;; 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
723 ;; 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
724 table))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
725
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
726 (defun edebug-next-token-class ()
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
727 ;; 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
728 ;; lparen, rparen, dot, quote, backquote, comma, string, char, vector,
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
729 ;; or symbol.
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
730 (edebug-skip-whitespace)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
731 (aref edebug-read-syntax-table (following-char)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
732
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
733
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
734 (defun edebug-skip-whitespace ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
735 ;; Leave point before the next token, skipping white space and comments.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
736 (skip-chars-forward " \t\r\n\f")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
737 (while (= (following-char) ?\;)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
738 ;; \r is counted as a comment terminator to support selective display.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
739 (skip-chars-forward "^\n\r") ; skip the comment
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
740 (skip-chars-forward " \t\r\n\f")))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
741
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
742
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
743 ;; Mostly obsolete reader; still used in one case.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
744
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
745 (defun edebug-read-sexp ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
746 ;; Read one sexp from the current buffer starting at point.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
747 ;; 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
748 ;; 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
749 ;; This works for reading anything legitimate, but it
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
750 ;; is gummed up by parser inconsistencies (bugs?)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
751 (let ((class (edebug-next-token-class)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
752 (cond
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
753 ;; 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
754 ;; 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
755 ((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
756 ((eq class 'string) (edebug-original-read (current-buffer)))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
757 ((eq class 'quote) (forward-char 1)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
758 (list 'quote (edebug-read-sexp)))
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
759 ((eq class 'backquote)
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
760 (list '\` (edebug-read-sexp)))
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
761 ((eq class 'comma)
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
762 (list '\, (edebug-read-sexp)))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
763 (t ; anything else, just read it.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
764 (edebug-original-read (current-buffer))))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
765
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
766 ;;; Offsets for reader
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
767
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
768 ;; Define a structure to represent offset positions of expressions.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
769 ;; Each offset structure looks like: (before . after) for constituents,
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
770 ;; or for structures that have elements: (before <subexpressions> . after)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
771 ;; where the <subexpressions> are the offset structures for subexpressions
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
772 ;; including the head of a list.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
773 (defconst edebug-offsets nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
774
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
775 ;; Stack of offset structures in reverse order of the nesting.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
776 ;; This is used to get back to previous levels.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
777 (defconst edebug-offsets-stack nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
778 (defconst edebug-current-offset nil) ; Top of the stack, for convenience.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
779
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
780 ;; 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
781 ;; 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
782 ;; must also be condensed.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
783 (defconst edebug-read-dotted-list nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
784
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
785 (defsubst edebug-initialize-offsets ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
786 ;; Reinitialize offset recording.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
787 (setq edebug-current-offset nil))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
788
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
789 (defun edebug-store-before-offset (point)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
790 ;; 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
791 (let ((new-offset (list point)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
792 (if edebug-current-offset
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
793 (setcdr edebug-current-offset
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
794 (cons new-offset (cdr edebug-current-offset)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
795 ;; Otherwise, we are at the top level, so initialize.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
796 (setq edebug-offsets new-offset
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
797 edebug-offsets-stack nil
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
798 edebug-read-dotted-list nil))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
799 ;; Cons the new offset to the front of the stack.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
800 (setq edebug-offsets-stack (cons new-offset edebug-offsets-stack)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
801 edebug-current-offset new-offset)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
802 ))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
803
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
804 (defun edebug-store-after-offset (point)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
805 ;; Finalize the current offset struct by reversing it and
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
806 ;; store POINT as the after offset.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
807 (if (not edebug-read-dotted-list)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
808 ;; Just reverse the offsets of all subexpressions.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
809 (setcdr edebug-current-offset (nreverse (cdr edebug-current-offset)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
810
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
811 ;; 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
812 (setq edebug-read-dotted-list nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
813 ;; Drop the corresponding offset pair.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
814 ;; That is, nconc the reverse of the rest of the offsets
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
815 ;; with the cdr of last offset.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
816 (setcdr edebug-current-offset
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
817 (nconc (nreverse (cdr (cdr edebug-current-offset)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
818 (cdr (car (cdr edebug-current-offset))))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
819
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
820 ;; Now append the point using nconc.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
821 (setq edebug-current-offset (nconc edebug-current-offset point))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
822 ;; Pop the stack.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
823 (setq edebug-offsets-stack (cdr edebug-offsets-stack)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
824 edebug-current-offset (car edebug-offsets-stack)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
825
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
826 (defun edebug-ignore-offset ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
827 ;; Ignore the last created offset pair.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
828 (setcdr edebug-current-offset (cdr (cdr edebug-current-offset))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
829
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
830 (def-edebug-spec edebug-storing-offsets (form body))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
831 (put 'edebug-storing-offsets 'lisp-indent-hook 1)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
832
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
833 (defmacro edebug-storing-offsets (point &rest body)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
834 (` (unwind-protect
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
835 (progn
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
836 (edebug-store-before-offset (, point))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
837 (,@ body))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
838 (edebug-store-after-offset (point)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
839
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
840
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
841 ;;; Reader for Emacs Lisp.
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
842
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
843 ;; Uses edebug-next-token-class (and edebug-skip-whitespace) above.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
844
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
845 (defconst edebug-read-alist
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
846 '((symbol . edebug-read-symbol)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
847 (lparen . edebug-read-list)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
848 (string . edebug-read-string)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
849 (quote . edebug-read-quote)
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
850 (backquote . edebug-read-backquote)
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
851 (comma . edebug-read-comma)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
852 (lbracket . edebug-read-vector)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
853 (hash . edebug-read-function)
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
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
856 (defun edebug-read-storing-offsets (stream)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
857 (let ((class (edebug-next-token-class))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
858 func
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
859 edebug-read-dotted-list) ; see edebug-store-after-offset
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
860 (edebug-storing-offsets (point)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
861 (if (setq func (assq class edebug-read-alist))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
862 (funcall (cdr func) stream)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
863 ;; anything else, just read it.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
864 (edebug-original-read stream))
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
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
867 (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
868 (edebug-original-read stream))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
869
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
870 (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
871 (edebug-original-read stream))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
872
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
873 (defun edebug-read-quote (stream)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
874 ;; Turn 'thing into (quote thing)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
875 (forward-char 1)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
876 (list
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
877 (edebug-storing-offsets (point) 'quote)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
878 (edebug-read-storing-offsets stream)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
879
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
880 (defun edebug-read-backquote (stream)
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
881 ;; Turn `thing into (\` thing)
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
882 (let ((opoint (point)))
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
883 (forward-char 1)
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
884 ;; Generate the same structure of offsets we would have
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
885 ;; if the resulting list appeared verbatim in the input text.
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
886 (edebug-storing-offsets opoint
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
887 (list
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
888 (edebug-storing-offsets opoint '\`)
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
889 (edebug-read-storing-offsets stream)))))
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
890
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
891 (defvar edebug-read-backquote-new nil
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
892 "Non-nil if reading the inside of a new-style backquote with no parens around it.
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
893 Value of nil means reading the inside of an old-style backquote construct
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
894 which is surrounded by an extra set of parentheses.
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
895 This controls how we read comma constructs.")
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
896
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
897 (defun edebug-read-comma (stream)
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
898 ;; Turn ,thing into (\, thing). Handle ,@ and ,. also.
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
899 (let ((opoint (point)))
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
900 (forward-char 1)
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
901 (let ((symbol '\,))
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
902 (cond ((eq (following-char) ?\.)
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
903 (setq symbol '\,\.)
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
904 (forward-char 1))
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
905 ((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 ;; Generate the same structure of offsets we would have
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
909 ;; if the resulting list appeared verbatim in the input text.
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
910 (if edebug-read-backquote-new
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
911 (list
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
912 (edebug-storing-offsets opoint symbol)
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
913 (edebug-read-storing-offsets stream))
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
914 (edebug-storing-offsets opoint symbol)))))
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
915
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
916 (defun edebug-read-function (stream)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
917 ;; Turn #'thing into (function thing)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
918 (forward-char 1)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
919 (if (/= ?\' (following-char)) (edebug-syntax-error "Bad char"))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
920 (forward-char 1)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
921 (list
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
922 (edebug-storing-offsets (point)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
923 (if (featurep 'cl) 'function* 'function))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
924 (edebug-read-storing-offsets stream)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
925
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
926 (defun edebug-read-list (stream)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
927 (forward-char 1) ; skip \(
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
928 (prog1
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
929 (let ((elements))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
930 (while (not (memq (edebug-next-token-class) '(rparen dot)))
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
931 (if (eq (edebug-next-token-class) 'backquote)
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
932 (let ((edebug-read-backquote-new (not (null elements)))
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
933 (opoint (point)))
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
934 (if edebug-read-backquote-new
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
935 (setq elements (cons (edebug-read-backquote stream) elements))
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
936 (forward-char 1) ; Skip backquote.
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
937 ;; Call edebug-storing-offsets here so that we
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
938 ;; produce the same offsets we would have had
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
939 ;; if the backquote were an ordinary symbol.
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
940 (setq elements (cons (edebug-storing-offsets opoint '\`)
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
941 elements))))
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
942 (setq elements (cons (edebug-read-storing-offsets stream) elements))))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
943 (setq elements (nreverse elements))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
944 (if (eq 'dot (edebug-next-token-class))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
945 (let (dotted-form)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
946 (forward-char 1) ; skip \.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
947 (setq dotted-form (edebug-read-storing-offsets stream))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
948 elements (nconc elements dotted-form)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
949 (if (not (eq (edebug-next-token-class) 'rparen))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
950 (edebug-syntax-error "Expected `)'"))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
951 (setq edebug-read-dotted-list (listp dotted-form))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
952 ))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
953 elements)
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 ))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
956
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
957 (defun edebug-read-vector (stream)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
958 (forward-char 1) ; skip \[
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
959 (prog1
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
960 (let ((elements))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
961 (while (not (eq 'rbracket (edebug-next-token-class)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
962 (setq elements (cons (edebug-read-storing-offsets stream) elements)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
963 (apply 'vector (nreverse elements)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
964 (forward-char 1) ; skip \]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
965 ))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
966
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
967 ;;; 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
968
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
969 (defvar edebug-dotted-spec nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
970
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
971 (defun edebug-new-cursor (expressions offsets)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
972 ;; Return a new cursor for EXPRESSIONS with OFFSETS.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
973 (if (vectorp expressions)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
974 (setq expressions (append expressions nil)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
975 (cons expressions offsets))
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 (defsubst edebug-set-cursor (cursor expressions offsets)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
978 ;; Set the CURSOR's EXPRESSIONS and OFFSETS to the given.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
979 ;; Return the cursor.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
980 (setcar cursor expressions)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
981 (setcdr cursor offsets)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
982 cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
983
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
984 '(defun edebug-copy-cursor (cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
985 ;; Copy the cursor using the same object and offsets.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
986 (cons (car cursor) (cdr cursor)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
987
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
988 (defsubst edebug-cursor-expressions (cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
989 (car cursor))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
990 (defsubst edebug-cursor-offsets (cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
991 (cdr cursor))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
992
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
993 (defsubst edebug-empty-cursor (cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
994 ;; 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
995 (null (car cursor)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
996
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
997 (defsubst edebug-top-element (cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
998 ;; Return the top element at the cursor.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
999 ;; Assumes not empty.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1000 (car (car cursor)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1001
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1002 (defun edebug-top-element-required (cursor &rest error)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1003 ;; Check if a dotted form is required.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1004 (if edebug-dotted-spec (edebug-no-match cursor "Dot expected."))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1005 ;; Check if there is at least one more argument.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1006 (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
1007 ;; Return that top element.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1008 (edebug-top-element cursor))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1009
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1010 (defsubst edebug-top-offset (cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1011 ;; Return the top offset pair corresponding to the top element.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1012 (car (cdr cursor)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1013
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1014 (defun edebug-move-cursor (cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1015 ;; 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
1016 ;; throw no-match if empty before moving.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1017 ;; This is a violation of the cursor encapsulation, but
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1018 ;; there is plenty of that going on while matching.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1019 ;; The following test should always fail.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1020 (if (edebug-empty-cursor cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1021 (edebug-no-match cursor "Not enough arguments."))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1022 (setcar cursor (cdr (car cursor)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1023 (setcdr cursor (cdr (cdr cursor)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1024 cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1025
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1026
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1027 (defun edebug-before-offset (cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1028 ;; Return the before offset of the cursor.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1029 ;; If there is nothing left in the offsets,
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1030 ;; return one less than the offset itself,
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1031 ;; which is the after offset for a list.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1032 (let ((offset (edebug-cursor-offsets cursor)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1033 (if (consp offset)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1034 (car (car offset))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1035 (1- offset))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1036
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1037 (defun edebug-after-offset (cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1038 ;; Return the after offset of the cursor object.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1039 (let ((offset (edebug-top-offset cursor)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1040 (while (consp offset)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1041 (setq offset (cdr offset)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1042 offset))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1043
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1044 ;;; The Parser
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1045
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1046 ;; The top level function for parsing forms is
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1047 ;; 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
1048 ;; 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
1049 ;; should appear to work like eval-defun.
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1050
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1051 ;; 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
1052 ;; 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
1053 ;; all expressions. Thus an expression "exp" becomes:
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1054
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1055 ;; (edebug-after (edebug-before 1) 2 exp)
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1056
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1057 ;; 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
1058 ;; exp at offset 1 of the current function. The expression is
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1059 ;; evaluated, which may cause more edebug calls, and then point is
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1060 ;; moved to offset 2 after the end of exp.
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1061
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1062 ;; 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
1063 ;; edebug-enter, which supplies the function name and the actual
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1064 ;; arguments to the function. See functions edebug-enter, edebug-before,
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1065 ;; and edebug-after for more details.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1066
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1067 ;; Dynamically bound vars, left unbound, but globally declared.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1068 ;; This is to quiet the byte compiler.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1069
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1070 ;; Window data of the highest definition being wrapped.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1071 ;; This data is shared by all embedded definitions.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1072 (defvar edebug-top-window-data)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1073
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1074 (defvar edebug-&optional)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1075 (defvar edebug-&rest)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1076 (defvar edebug-gate nil) ;; whether no-match forces an error.
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 (defconst edebug-def-name nil) ; name of definition, used by interactive-form
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1079 (defconst edebug-old-def-name nil) ; previous name of containing definition.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1080
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1081 (defconst edebug-error-point nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1082 (defconst edebug-best-error nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1083
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1084
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1085 (defun edebug-read-and-maybe-wrap-form ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1086 ;; 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
1087 ;; 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
1088
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1089 ;; Run the setup hook.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1090 (run-hooks 'edebug-setup-hook)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1091 (setq edebug-setup-hook nil)
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 (let (result
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1094 edebug-top-window-data
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1095 edebug-def-name;; make sure it is locally nil
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1096 ;; I don't like these here!!
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1097 edebug-&optional
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1098 edebug-&rest
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1099 edebug-gate
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1100 edebug-best-error
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1101 edebug-error-point
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1102 no-match
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1103 ;; Do this once here instead of several times.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1104 (max-lisp-eval-depth (+ 800 max-lisp-eval-depth))
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1105 (max-specpdl-size (+ 2000 max-specpdl-size)))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1106 (setq no-match
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1107 (catch 'no-match
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1108 (setq result (edebug-read-and-maybe-wrap-form1))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1109 nil))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1110 (if no-match
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1111 (apply 'edebug-syntax-error no-match))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1112 result))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1113
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1114
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1115 (defun edebug-read-and-maybe-wrap-form1 ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1116 (let (spec
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1117 def-kind
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1118 defining-form-p
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1119 def-name
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1120 ;; 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
1121 ;; calls to edebug-read, they need to be here.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1122 edebug-offsets
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1123 edebug-offsets-stack
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1124 edebug-current-offset ; reset to nil
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1125 )
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1126 (save-excursion
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1127 (if (and (eq 'lparen (edebug-next-token-class))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1128 (eq 'symbol (progn (forward-char 1) (edebug-next-token-class))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1129 ;; 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
1130 (setq def-kind (edebug-original-read (current-buffer))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1131 spec (and (symbolp def-kind) (get-edebug-spec def-kind))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1132 defining-form-p (and (listp spec)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1133 (eq '&define (car spec)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1134 ;; This is incorrect in general!! But OK most of the time.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1135 def-name (if (and defining-form-p
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1136 (eq 'name (car (cdr spec)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1137 (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
1138 (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
1139 ;;;(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
1140 (cond
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1141 (defining-form-p
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1142 (if (or edebug-all-defs edebug-all-forms)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1143 ;; 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
1144 ;; then let edebug-list-form start it.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1145 (let ((cursor (edebug-new-cursor
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1146 (list (edebug-read-storing-offsets (current-buffer)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1147 (list edebug-offsets))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1148 (car
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1149 (edebug-make-form-wrapper
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1150 cursor
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1151 (edebug-before-offset cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1152 (1- (edebug-after-offset cursor))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1153 (list (cons (symbol-name def-kind) (cdr spec))))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1154
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1155 ;; Not edebugging this form, so reset the symbol's edebug
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1156 ;; 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
1157 ;; This only works for defs with simple names.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1158 (put def-name 'edebug (point-marker))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1159 ;; Also nil out dependent defs.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1160 '(mapcar (function
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1161 (lambda (def)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1162 (put def-name 'edebug nil)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1163 (get def-name 'edebug-dependents))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1164 (edebug-read-sexp)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1165
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1166 ;; If all forms are being edebugged, explicitly wrap it.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1167 (edebug-all-forms
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1168 (let ((cursor (edebug-new-cursor
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1169 (list (edebug-read-storing-offsets (current-buffer)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1170 (list edebug-offsets))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1171 (edebug-make-form-wrapper
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1172 cursor
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1173 (edebug-before-offset cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1174 (edebug-after-offset cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1175 nil)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1176
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1177 ;; Not a defining form, and not edebugging.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1178 (t (edebug-read-sexp)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1179 ))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1180
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1181
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1182 (defvar edebug-def-args) ; args of defining form.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1183 (defvar edebug-def-interactive) ; is it an emacs interactive function?
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1184 (defvar edebug-inside-func) ;; whether code is inside function context.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1185 ;; 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
1186
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1187 (defun edebug-interactive-p-name ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1188 ;; 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
1189 ;; status of interactive-p for this function.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1190 (intern (format "edebug-%s-interactive-p" edebug-def-name)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1191
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1192
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1193 (defun edebug-wrap-def-body (forms)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1194 "Wrap the FORMS of a definition body."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1195 (if edebug-def-interactive
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1196 (` (let (((, (edebug-interactive-p-name))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1197 (interactive-p)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1198 (, (edebug-make-enter-wrapper forms))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1199 (edebug-make-enter-wrapper forms)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1200
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1201
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1202 (defun edebug-make-enter-wrapper (forms)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1203 ;; Generate the enter wrapper for some forms of a definition.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1204 ;; 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
1205 ;; 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
1206 ;; 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
1207 ;; Do this after parsing since that may find a name.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1208 (setq edebug-def-name
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1209 (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
1210 (` (edebug-enter
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1211 (quote (, edebug-def-name))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1212 (, (if edebug-inside-func
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1213 (` (list (,@
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1214 ;; Doesn't work with more than one def-body!!
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1215 ;; But the list will just be reversed.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1216 (nreverse edebug-def-args))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1217 'nil))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1218 (function (lambda () (,@ forms)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1219 )))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1220
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1221
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1222 (defvar edebug-form-begin-marker) ; the mark for def being instrumented
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1223
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1224 (defvar edebug-offset-index) ; the next available offset index.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1225 (defvar edebug-offset-list) ; the list of offset positions.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1226
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1227 (defun edebug-inc-offset (offset)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1228 ;; modifies edebug-offset-index and edebug-offset-list
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1229 ;; accesses edebug-func-marc and buffer point
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1230 (prog1
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1231 edebug-offset-index
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1232 (setq edebug-offset-list (cons (- offset edebug-form-begin-marker)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1233 edebug-offset-list)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1234 edebug-offset-index (1+ edebug-offset-index))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1235
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1236
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1237 (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
1238 ;; Return the edebug form for the current function at offset BEFORE-INDEX
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1239 ;; given FORM. Looks like:
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1240 ;; (edebug-after (edebug-before BEFORE-INDEX) AFTER-INDEX FORM)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1241 ;; Also increment the offset index for subsequent use.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1242 ;; if (not edebug-stop-before-symbols) and form is a symbol,
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1243 ;; then don't call edebug-before.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1244 (list 'edebug-after
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1245 (list 'edebug-before before-index)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1246 after-index form))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1247
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1248 (defun edebug-make-after-form (form after-index)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1249 ;; Like edebug-make-before-and-after-form, but only after.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1250 (list 'edebug-after 0 after-index form))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1251
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1252
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1253 (defun edebug-unwrap (sexp)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1254 "Return the unwrapped SEXP or return it as is if it is not wrapped.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1255 The SEXP might be the result of wrapping a body, which is a list of
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1256 expressions; a `progn' form will be returned enclosing these forms."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1257 (if (consp sexp)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1258 (cond
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1259 ((eq 'edebug-after (car sexp))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1260 (nth 3 sexp))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1261 ((eq 'edebug-enter (car sexp))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1262 (let ((forms (nthcdr 2 (nth 1 (nth 3 sexp)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1263 (if (> (length forms) 1)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1264 (cons 'progn forms) ;; could return (values forms) instead.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1265 (car forms))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1266 (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
1267 )
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1268 sexp))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1269
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1270 (defun edebug-unwrap* (sexp)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1271 "Return the sexp recursively unwrapped."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1272 (let ((new-sexp (edebug-unwrap sexp)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1273 (while (not (eq sexp new-sexp))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1274 (setq sexp new-sexp
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1275 new-sexp (edebug-unwrap sexp)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1276 (if (consp new-sexp)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1277 (mapcar 'edebug-unwrap* new-sexp)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1278 new-sexp)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1279
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1280
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1281 (defun edebug-defining-form (cursor form-begin form-end speclist)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1282 ;; Process the defining form, starting outside the form.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1283 ;; The speclist is a generated list spec that looks like:
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1284 ;; (("def-symbol" defining-form-spec-sans-&define))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1285 ;; Skip the first offset.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1286 (edebug-set-cursor cursor (edebug-cursor-expressions cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1287 (cdr (edebug-cursor-offsets cursor)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1288 (edebug-make-form-wrapper
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1289 cursor
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1290 form-begin (1- form-end)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1291 speclist))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1292
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1293 (defun edebug-make-form-wrapper (cursor form-begin form-end
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1294 &optional speclist)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1295 ;; 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
1296 ;; 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
1297 ;; 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
1298 ;; 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
1299 (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
1300 ;; Set this marker before parsing.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1301 (edebug-form-begin-marker
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1302 (if form-data-entry
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1303 (edebug-form-data-begin form-data-entry)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1304 ;; Buffer must be current-buffer for this to work:
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1305 (set-marker (make-marker) form-begin))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1306
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1307 (let (edebug-offset-list
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1308 (edebug-offset-index 0)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1309 result
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1310 ;; For definitions.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1311 ;; (edebug-containing-def-name edebug-def-name)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1312 ;; Get name from form-data, if any.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1313 (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
1314 edebug-def-name
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1315 edebug-def-args
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1316 edebug-def-interactive
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1317 edebug-inside-func;; whether wrapped code executes inside a function.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1318 )
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1319
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1320 (setq result
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1321 (if speclist
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1322 (edebug-match cursor speclist)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1323
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1324 ;; else wrap as an enter-form.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1325 (edebug-make-enter-wrapper (list (edebug-form cursor)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1326
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1327 ;; Set the name here if it was not set by edebug-make-enter-wrapper.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1328 (setq edebug-def-name
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1329 (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
1330
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1331 ;; Add this def as a dependent of containing def. Buggy.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1332 '(if (and edebug-containing-def-name
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1333 (not (get edebug-containing-def-name 'edebug-dependents)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1334 (put edebug-containing-def-name 'edebug-dependents
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1335 (cons edebug-def-name
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1336 (get edebug-containing-def-name
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1337 'edebug-dependents))))
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 ;; 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
1340 ;; In the latter case, pointers to the entry remain eq.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1341 (if (not form-data-entry)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1342 (setq form-data-entry
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1343 (edebug-make-form-data-entry
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1344 edebug-def-name
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1345 edebug-form-begin-marker
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1346 ;; Buffer must be current-buffer.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1347 (set-marker (make-marker) form-end)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1348 ))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1349 (edebug-set-form-data-entry
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1350 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
1351 form-begin form-end))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1352
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1353 ;; (message "defining: %s" edebug-def-name) (sit-for 2)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1354 (edebug-make-top-form-data-entry form-data-entry)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1355 (message "Edebug: %s" edebug-def-name)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1356 ;;(debug edebug-def-name)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1357
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1358 ;; Destructively reverse edebug-offset-list and make vector from it.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1359 (setq edebug-offset-list (vconcat (nreverse edebug-offset-list)))
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 ;; Side effects on the property list of edebug-def-name.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1362 (edebug-clear-frequency-count edebug-def-name)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1363 (edebug-clear-coverage edebug-def-name)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1364
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1365 ;; Set up the initial window data.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1366 (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
1367 (let ((window ;; Find the best window for this buffer.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1368 (or (get-buffer-window (current-buffer))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1369 (selected-window))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1370 (setq edebug-top-window-data
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1371 (cons window (window-start window)))))
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 ;; Store the edebug data in symbol's property list.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1374 (put edebug-def-name 'edebug
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1375 ;; A struct or vector would be better here!!
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1376 (list edebug-form-begin-marker
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1377 nil ; clear breakpoints
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1378 edebug-offset-list
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1379 edebug-top-window-data
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 result
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1382 )))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1383
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1384
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1385 (defun edebug-clear-frequency-count (name)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1386 ;; Create initial frequency count vector.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1387 ;; 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
1388 (put name 'edebug-freq-count
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1389 (make-vector (length edebug-offset-list) 0)))
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 (defun edebug-clear-coverage (name)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1393 ;; Create initial coverage vector.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1394 ;; Only need one per expression, but it is simpler to use stop points.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1395 (put name 'edebug-coverage
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1396 (make-vector (length edebug-offset-list) 'unknown)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1397
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1398
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1399 (defun edebug-form (cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1400 ;; Return the instrumented form for the following form.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1401 ;; 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
1402 (let* ((form (edebug-top-element-required cursor "Expected form"))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1403 (offset (edebug-top-offset cursor)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1404 (prog1
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1405 (cond
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1406 ((consp form)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1407 ;; 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
1408 (if (eq 'quote (car form))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1409 form
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1410 (let* ((head (car form))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1411 (spec (and (symbolp head) (get-edebug-spec head)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1412 (new-cursor (edebug-new-cursor form offset)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1413 ;; 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
1414 ;; An indirect spec would not work here, yet.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1415 (if (and (consp spec) (eq '&define (car spec)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1416 (edebug-defining-form
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1417 new-cursor
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1418 (car offset);; before the form
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1419 (edebug-after-offset cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1420 (cons (symbol-name head) (cdr spec)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1421 ;; Wrap a regular form.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1422 (edebug-make-before-and-after-form
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1423 (edebug-inc-offset (car offset))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1424 (edebug-list-form new-cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1425 ;; After processing the list form, the new-cursor is left
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1426 ;; with the offset after the form.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1427 (edebug-inc-offset (edebug-cursor-offsets new-cursor))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1428 )))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1429
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1430 ((symbolp form)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1431 (cond
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1432 ;; Check for constant symbols that don't get wrapped.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1433 ((or (memq form '(t nil))
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1434 (and (fboundp 'edebug-keywordp) (edebug-keywordp form)))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1435 form)
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 ;; This option may go away.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1438 (edebug-stop-before-symbols
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1439 (edebug-make-before-and-after-form
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1440 (edebug-inc-offset (car offset))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1441 form
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1442 (edebug-inc-offset (cdr offset))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1443 ))
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 ((null head) nil) ; () is legal.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1496
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1497 ((symbolp head)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1498 (cond
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1499 ((null head)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1500 (edebug-syntax-error "nil head"))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1501 ((eq head 'interactive-p)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1502 ;; Special case: replace (interactive-p) with variable
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1503 (setq edebug-def-interactive 'check-it)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1504 (edebug-move-cursor cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1505 (edebug-interactive-p-name))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1506 (t
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1507 (cons head (edebug-list-form-args
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1508 head (edebug-move-cursor cursor))))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1509
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1510 ((consp head)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1511 (if (and (listp head) (eq (car head) ',))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1512 (edebug-match cursor '(("," def-form) body))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1513 ;; Process anonymous function and args.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1514 ;; This assumes no anonymous macros.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1515 (edebug-match-specs cursor '(lambda-expr body) 'edebug-match-specs)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1516
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1517 (t (edebug-syntax-error
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1518 "Head of list form must be a symbol or lambda expression.")))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1519 ))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1520
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1521 ;;; Matching of specs.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1522
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1523 (defvar edebug-after-dotted-spec nil)
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-matching-depth 0) ;; initial value
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1526 (defconst edebug-max-depth 150) ;; maximum number of matching recursions.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1527
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1528
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1529 ;;; Failure to match
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1530
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1531 ;; This throws to no-match, if there are higher alternatives.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1532 ;; 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
1533 ;; with the two before- and after-offset functions.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1534
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1535 (defun edebug-no-match (cursor &rest edebug-args)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1536 ;; 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
1537 ;; 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
1538 (setq edebug-error-point (or edebug-error-point
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1539 (edebug-before-offset cursor))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1540 edebug-best-error (or edebug-best-error edebug-args))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1541 (if (and edebug-gate (not edebug-&optional))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1542 (progn
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1543 (if edebug-error-point
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1544 (goto-char edebug-error-point))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1545 (apply 'edebug-syntax-error edebug-args))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1546 (funcall 'throw 'no-match edebug-args)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1547
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1548
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1549 (defun edebug-match (cursor specs)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1550 ;; Top level spec matching function.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1551 ;; Used also at each lower level of specs.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1552 (let (edebug-&optional
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1553 edebug-&rest
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1554 edebug-best-error
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1555 edebug-error-point
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1556 (edebug-gate edebug-gate) ;; locally bound to limit effect
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1557 )
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1558 (edebug-match-specs cursor specs 'edebug-match-specs)))
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
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1561 (defun edebug-match-one-spec (cursor spec)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1562 ;; Match one spec, which is not a keyword &-spec.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1563 (cond
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1564 ((symbolp spec) (edebug-match-symbol cursor spec))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1565 ((vectorp spec) (edebug-match cursor (append spec nil)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1566 ((stringp spec) (edebug-match-string cursor spec))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1567 ((listp spec) (edebug-match-list cursor spec))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1568 ))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1569
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 (defun edebug-match-specs (cursor specs remainder-handler)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1572 ;; Append results of matching the list of specs.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1573 ;; The first spec is handled and the remainder-handler handles the rest.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1574 (let ((edebug-matching-depth
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1575 (if (> edebug-matching-depth edebug-max-depth)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1576 (error "too deep - perhaps infinite loop in spec?")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1577 (1+ edebug-matching-depth))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1578 (cond
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1579 ((null specs) nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1580
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1581 ;; Is the spec dotted?
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1582 ((atom specs)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1583 (let ((edebug-dotted-spec t));; Containing spec list was dotted.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1584 (edebug-match-specs cursor (list specs) remainder-handler)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1585
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1586 ;; Is the form dotted?
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1587 ((not (listp (edebug-cursor-expressions cursor)));; allow nil
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1588 (if (not edebug-dotted-spec)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1589 (edebug-no-match cursor "Dotted spec required."))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1590 ;; Cancel dotted spec and dotted form.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1591 (let ((edebug-dotted-spec)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1592 (this-form (edebug-cursor-expressions cursor))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1593 (this-offset (edebug-cursor-offsets cursor)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1594 ;; Wrap the form in a list, (by changing the cursor??)...
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1595 (edebug-set-cursor cursor (list this-form) this-offset)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1596 ;; and process normally, then unwrap the result.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1597 (car (edebug-match-specs cursor specs remainder-handler))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1598
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1599 (t;; Process normally.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1600 (let* ((spec (car specs))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1601 (rest)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1602 (first-char (and (symbolp spec) (aref (symbol-name spec) 0))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1603 ;;(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
1604 (nconc
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1605 (cond
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1606 ((eq ?& first-char);; "&" symbols take all following specs.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1607 (funcall (get-edebug-spec spec) cursor (cdr specs)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1608 ((eq ?: first-char);; ":" symbols take one following spec.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1609 (setq rest (cdr (cdr specs)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1610 (funcall (get-edebug-spec spec) cursor (car (cdr specs))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1611 (t;; Any other normal spec.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1612 (setq rest (cdr specs))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1613 (edebug-match-one-spec cursor spec)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1614 (funcall remainder-handler cursor rest remainder-handler)))))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1615
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1616
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1617 ;; 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
1618 ;; 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
1619 ;; 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
1620 ;; We could use an internal obarray for these primitive specs.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1621
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1622 (mapcar
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1623 (function (lambda (pair)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1624 (put (car pair) 'edebug-form-spec (cdr pair))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1625 '((&optional . edebug-match-&optional)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1626 (&rest . edebug-match-&rest)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1627 (&or . edebug-match-&or)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1628 (form . edebug-match-form)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1629 (sexp . edebug-match-sexp)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1630 (body . edebug-match-body)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1631 (&define . edebug-match-&define)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1632 (name . edebug-match-name)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1633 (:name . edebug-match-colon-name)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1634 (arg . edebug-match-arg)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1635 (def-body . edebug-match-def-body)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1636 (def-form . edebug-match-def-form)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1637 ;; Less frequently used:
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1638 ;; (function . edebug-match-function)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1639 (lambda-expr . edebug-match-lambda-expr)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1640 (&not . edebug-match-&not)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1641 (&key . edebug-match-&key)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1642 (place . edebug-match-place)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1643 (gate . edebug-match-gate)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1644 ;; (nil . edebug-match-nil) not this one - special case it.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1645 ))
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
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1651 (spec
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)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1658
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
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1662 ((fboundp symbol) ; is it a predicate?
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-`.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1665 (if (and (listp sexp) (eq (car sexp) ',))
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))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1713
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1714 (defun edebug-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
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1758
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.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1766 (edebug-match-&rest
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1767 cursor
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1768 (cons '&or
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1769 (mapcar (function (lambda (pair)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1770 (vector (format ":%s" (car pair))
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
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1784 ;; After dotted spec but form did not contain dot,
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)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1805 (t
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
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1810 (list (edebug-match-sublist
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.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1813 (edebug-new-cursor form (cdr (edebug-top-offset cursor)))
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
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1820 (edebug-new-cursor
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))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1825
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 )
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1836 (prog1
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))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1840 (if edebug-best-error
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
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1873 cursor
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
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1885 ;; practice, only lambda expressions should be used.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1886 ;; I could add a &lambda specification to avoid confusion.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1887 (let* ((sexp (edebug-top-element-required
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
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1897 (edebug-defining-form
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
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1900 (edebug-after-offset cursor)
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.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1970 (&define :name edebug-spec name
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]
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
1985 ;; [edebug-keywordp gate edebug-spec] ;; need edebug-keywordp for this.
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))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2005 (def-edebug-spec defmacro
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2006 (&define name lambda-list def-body))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2007
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
2008 (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
2009
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2010 (def-edebug-spec lambda-list
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2011 (([&rest arg]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2012 [&optional ["&optional" arg &rest arg]]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2013 &optional ["&rest" arg]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2014 )))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2015
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2016 (def-edebug-spec interactive
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2017 (&optional &or stringp def-form))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2018
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2019 ;; 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
2020 ;; This specially recognizes anonymous functions quoted with quote.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2021 (def-edebug-spec function-form
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2022 ;; form at the end could also handle "function",
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2023 ;; but recognize it specially to avoid wrapping function forms.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2024 (&or ([&or "quote" "function"] &or symbolp lambda-expr) form))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2025
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2026 ;; function expects a symbol or a lambda or macro expression
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2027 ;; A macro is allowed by Emacs.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2028 (def-edebug-spec function (&or symbolp lambda-expr))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2029
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2030 ;; lambda is a macro in emacs 19.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2031 (def-edebug-spec lambda (&define lambda-list
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2032 [&optional stringp]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2033 [&optional ("interactive" interactive)]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2034 def-body))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2035
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2036 ;; A macro expression is a lambda expression with "macro" prepended.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2037 (def-edebug-spec macro (&define "lambda" lambda-list def-body))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2038
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2039 ;; (def-edebug-spec anonymous-form ((&or ["lambda" lambda] ["macro" macro])))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2040
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2041 ;; Standard functions that take function-forms arguments.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2042 (def-edebug-spec mapcar (function-form form))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2043 (def-edebug-spec mapconcat (function-form form form))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2044 (def-edebug-spec mapatoms (function-form &optional form))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2045 (def-edebug-spec apply (function-form &rest form))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2046 (def-edebug-spec funcall (function-form &rest form))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2047
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2048 (def-edebug-spec let
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2049 ((&rest &or (symbolp &optional form) symbolp)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2050 body))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2051
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2052 (def-edebug-spec let* let)
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 setq (&rest symbolp form))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2055 (def-edebug-spec setq-default setq)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2056
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2057 (def-edebug-spec cond (&rest (&rest form)))
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 condition-case
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2060 (symbolp
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2061 form
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2062 &rest (symbolp body)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2063
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2064
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
2065 (def-edebug-spec \` (backquote-form))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2066
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2067 ;; Supports quotes inside backquotes,
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2068 ;; but only at the top level inside unquotes.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2069 (def-edebug-spec backquote-form
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2070 (&or
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2071 ([&or "," ",@"] &or ("quote" backquote-form) form)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2072 (backquote-form &rest backquote-form)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2073 ;; 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
2074 ;; 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
2075 ;; (backquote-form . [&or nil backquote-form])
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2076 (vector &rest backquote-form)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2077 sexp))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2078
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2079 ;; Special version of backquote that instruments backquoted forms
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2080 ;; destined to be evaluated, usually as the result of a
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2081 ;; macroexpansion. Backquoted code can only have unquotes (, and ,@)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2082 ;; 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
2083 ;; 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
2084 ;; 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
2085
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2086 ;; 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
2087 ;; 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
2088 ;; are defined with edebug-` but this would be expensive.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2089
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2090 ;; ,@ might have some problems.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2091
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
2092 (defalias 'edebug-\` '\`) ;; same macro as regular backquote.
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
2093 (def-edebug-spec edebug-\` (def-form))
6512
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 ;; Assume immediate quote in unquotes mean backquote at next higher level.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2096 (def-edebug-spec , (&or ("quote" edebug-`) def-form))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2097 (def-edebug-spec ,@ (&define ;; so (,@ form) is never wrapped.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2098 &or ("quote" edebug-`) def-form))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2099
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2100 ;; New byte compiler.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2101 (def-edebug-spec defsubst defun)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2102 (def-edebug-spec dont-compile t)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2103 (def-edebug-spec eval-when-compile t)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2104 (def-edebug-spec eval-and-compile t)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2105
16374
b3b88a1ee6aa (save-selected-window, save-current-buffer)
Richard M. Stallman <rms@gnu.org>
parents: 16308
diff changeset
2106 (def-edebug-spec save-selected-window t)
b3b88a1ee6aa (save-selected-window, save-current-buffer)
Richard M. Stallman <rms@gnu.org>
parents: 16308
diff changeset
2107 (def-edebug-spec save-current-buffer t)
b3b88a1ee6aa (save-selected-window, save-current-buffer)
Richard M. Stallman <rms@gnu.org>
parents: 16308
diff changeset
2108 (def-edebug-spec save-match-data t)
b3b88a1ee6aa (save-selected-window, save-current-buffer)
Richard M. Stallman <rms@gnu.org>
parents: 16308
diff changeset
2109 (def-edebug-spec with-output-to-string t)
b3b88a1ee6aa (save-selected-window, save-current-buffer)
Richard M. Stallman <rms@gnu.org>
parents: 16308
diff changeset
2110 (def-edebug-spec with-current-buffer t)
16550
158dd5ed6ae8 (combine-after-change-calls): New def-edebug-spec.
Richard M. Stallman <rms@gnu.org>
parents: 16374
diff changeset
2111 (def-edebug-spec combine-after-change-calls t)
16374
b3b88a1ee6aa (save-selected-window, save-current-buffer)
Richard M. Stallman <rms@gnu.org>
parents: 16308
diff changeset
2112 (def-edebug-spec with-temp-file t)
b3b88a1ee6aa (save-selected-window, save-current-buffer)
Richard M. Stallman <rms@gnu.org>
parents: 16308
diff changeset
2113 (def-edebug-spec with-temp-buffer t)
b3b88a1ee6aa (save-selected-window, save-current-buffer)
Richard M. Stallman <rms@gnu.org>
parents: 16308
diff changeset
2114
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2115 ;; Anything else?
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2116
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2117
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2118 ;; Some miscellaneous specs for macros in public packages.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2119 ;; Send me yours.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2120
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2121 ;; advice.el by Hans Chalupsky (hans@cs.buffalo.edu)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2122
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2123 (def-edebug-spec ad-dolist ((symbolp form &optional form) body))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2124 (def-edebug-spec defadvice
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2125 (&define name ;; thing being advised.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2126 (name ;; class is [&or "before" "around" "after"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2127 ;; "activation" "deactivation"]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2128 name ;; name of advice
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2129 &rest sexp ;; optional position and flags
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 [&optional stringp]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2132 [&optional ("interactive" interactive)]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2133 def-body))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2134
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
2135 ;;; The debugger itself
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2136
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2137 (defvar edebug-active nil) ;; Non-nil when edebug is active
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2138
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2139 ;;; add minor-mode-alist entry
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2140 (or (assq 'edebug-active minor-mode-alist)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2141 (setq minor-mode-alist (cons (list 'edebug-active " *Debugging*")
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2142 minor-mode-alist)))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2143
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2144 (defvar edebug-stack nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2145 ;; Stack of active functions evaluated via edebug.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2146 ;; Should be nil at the top level.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2147
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2148 (defvar edebug-stack-depth -1)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2149 ;; Index of last edebug-stack item.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2150
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2151 (defvar edebug-offset-indices nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2152 ;; Stack of offset indices of visited edebug sexps.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2153 ;; Should be nil at the top level.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2154 ;; Each function adds one cons. Top is modified with setcar.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2155
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2156
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2157 (defvar edebug-entered nil
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2158 ;; 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
2159 ;; This should stay nil at the top level.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2160 )
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2161
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2162 ;; Should these be options?
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2163 (defconst edebug-debugger 'edebug
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2164 ;; 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
2165 ;; Set this to 'debug if you want to debug edebug.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2166 )
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2167
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2168
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2169 ;; Dynamically bound variables, declared globally but left unbound.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2170 (defvar edebug-function) ; the function being executed. change name!!
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2171 (defvar edebug-args) ; the arguments of the function
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2172 (defvar edebug-data) ; the edebug data for the function
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2173 (defvar edebug-value) ; the result of the expression
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2174 (defvar edebug-after-index)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2175 (defvar edebug-def-mark) ; the mark for the definition
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2176 (defvar edebug-freq-count) ; the count of expression visits.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2177 (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
2178
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2179 (defvar edebug-buffer) ; which buffer the function is in.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2180 (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
2181 (defvar edebug-outside-executing-macro)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2182 (defvar edebug-outside-defining-kbd-macro)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2183
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2184 (defvar edebug-execution-mode 'step) ; Current edebug mode set by user.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2185 (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
2186
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2187 (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
2188 (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
2189
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2190 (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
2191 (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
2192
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2193 (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
2194
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2195 ;;; Handling signals
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2196
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2197 (defun edebug-signal (edebug-signal-name edebug-signal-data)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2198 "Signal an error. Args are SIGNAL-NAME, and associated DATA.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2199 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
2200 that is a list of condition names.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2201 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
2202 The symbol `error' should always be one of them.
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 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
2205 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
2206 See `condition-case'.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2207
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2208 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
2209 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
2210 whether it should call the debugger. When execution is resumed, the
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2211 error is signaled again."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2212 (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
2213 (edebug 'error (cons edebug-signal-name edebug-signal-data)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2214 ;; 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
2215 ;; i.e. the signal is not continuable, yet.
16308
2334a3d634c0 (edebug-original-signal): Don't define it.
Richard M. Stallman <rms@gnu.org>
parents: 16299
diff changeset
2216 (signal edebug-signal-name edebug-signal-data))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2217
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2218 ;;; Entering Edebug
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-enter (edebug-function edebug-args edebug-body)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2221 ;; 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
2222 ;; Setup edebug variables and evaluate BODY. This function is called
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2223 ;; when a function evaluated with edebug-eval-top-level-form is entered.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2224 ;; Return the result of BODY.
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2225
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2226 ;; Is this the first time we are entering edebug since
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2227 ;; lower-level recursive-edit command?
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2228 ;; More precisely, this tests whether Edebug is currently active.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2229 (if (not edebug-entered)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2230 (let ((edebug-entered t)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2231 ;; 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
2232 ;; 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
2233 ;; 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
2234 (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
2235 (max-specpdl-size (+ 200 max-specpdl-size))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2236
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2237 (debugger edebug-debugger) ; only while edebug is active.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2238 (edebug-outside-debug-on-error debug-on-error)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2239 (edebug-outside-debug-on-quit debug-on-quit)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2240 ;; Binding these may not be the right thing to do.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2241 ;; We want to allow the global values to be changed.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2242 (debug-on-error (or debug-on-error edebug-on-error))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2243 (debug-on-quit edebug-on-quit)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2244
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2245 ;; 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
2246 (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
2247
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2248 ;; 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
2249 (edebug-outside-executing-macro executing-kbd-macro)
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2250 (edebug-outside-pre-command-hook pre-command-hook)
16299
0e4f99bad2ec (pre-command-hook, post-command-hook): Defvars deleted.
Richard M. Stallman <rms@gnu.org>
parents: 15782
diff changeset
2251 (edebug-outside-post-command-hook post-command-hook))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2252 (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
2253 (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
2254 ;; 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
2255 ;; non-nil. Again, local binding may not be best.
15302
c23c9712ef5c Use executing-kbd-macro, not executing-macro.
Karl Heuer <kwzh@gnu.org>
parents: 14846
diff changeset
2256 (executing-kbd-macro
c23c9712ef5c Use executing-kbd-macro, not executing-macro.
Karl Heuer <kwzh@gnu.org>
parents: 14846
diff changeset
2257 (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
2258
16308
2334a3d634c0 (edebug-original-signal): Don't define it.
Richard M. Stallman <rms@gnu.org>
parents: 16299
diff changeset
2259 (signal-hook-function 'edebug-signal)
2334a3d634c0 (edebug-original-signal): Don't define it.
Richard M. Stallman <rms@gnu.org>
parents: 16299
diff changeset
2260
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2261 ;; 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
2262 ;; 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
2263 ;; 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
2264 (pre-command-hook nil)
16299
0e4f99bad2ec (pre-command-hook, post-command-hook): Defvars deleted.
Richard M. Stallman <rms@gnu.org>
parents: 15782
diff changeset
2265 (post-command-hook nil))
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2266 (setq edebug-execution-mode (or edebug-next-execution-mode
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2267 edebug-initial-mode
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2268 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
2269 edebug-next-execution-mode nil)
16308
2334a3d634c0 (edebug-original-signal): Don't define it.
Richard M. Stallman <rms@gnu.org>
parents: 16299
diff changeset
2270 (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
2271 ;; Reset global variables in case outside value was changed.
15302
c23c9712ef5c Use executing-kbd-macro, not executing-macro.
Karl Heuer <kwzh@gnu.org>
parents: 14846
diff changeset
2272 (setq executing-kbd-macro edebug-outside-executing-macro
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
2273 pre-command-hook edebug-outside-pre-command-hook
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
2274 post-command-hook edebug-outside-post-command-hook
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2275 )))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2276
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2277 (let* ((edebug-data (get edebug-function 'edebug))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2278 (edebug-def-mark (car edebug-data)) ; mark at def start
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2279 (edebug-freq-count (get edebug-function 'edebug-freq-count))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2280 (edebug-coverage (get edebug-function 'edebug-coverage))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2281 (edebug-buffer (marker-buffer edebug-def-mark))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2282
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2283 (edebug-stack (cons edebug-function edebug-stack))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2284 (edebug-offset-indices (cons 0 edebug-offset-indices))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2285 )
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2286 (if (get edebug-function 'edebug-on-entry)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2287 (progn
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2288 (setq edebug-execution-mode 'step)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2289 (if (eq (get edebug-function 'edebug-on-entry) 'temp)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2290 (put edebug-function 'edebug-on-entry nil))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2291 (if edebug-trace
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2292 (edebug-enter-trace edebug-body)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2293 (funcall edebug-body))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2294 )))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2295
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2296
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2297 (defun edebug-enter-trace (edebug-body)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2298 (let ((edebug-stack-depth (1+ edebug-stack-depth))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2299 edebug-result)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2300 (edebug-print-trace-before
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2301 (format "%s args: %s" edebug-function edebug-args))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2302 (prog1 (setq edebug-result (funcall edebug-body))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2303 (edebug-print-trace-after
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2304 (format "%s result: %s" edebug-function edebug-result)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2305
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2306 (def-edebug-spec edebug-tracing (form body))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2307
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2308 (defmacro edebug-tracing (msg &rest body)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2309 "Print MSG in *edebug-trace* before and after evaluating BODY.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2310 The result of BODY is also printed."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2311 (` (let ((edebug-stack-depth (1+ edebug-stack-depth))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2312 edebug-result)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2313 (edebug-print-trace-before (, msg))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2314 (prog1 (setq edebug-result (progn (,@ body)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2315 (edebug-print-trace-after
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2316 (format "%s result: %s" (, msg) edebug-result))))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2317
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2318 (defun edebug-print-trace-before (msg)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2319 "Function called to print trace info before expression evaluation.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2320 MSG is printed after `::::{ '."
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2321 (edebug-trace-display
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2322 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
2323
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2324 (defun edebug-print-trace-after (msg)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2325 "Function called to print trace info after expression evaluation.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2326 MSG is printed after `::::} '."
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2327 (edebug-trace-display
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2328 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
2329
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2330
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2331
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2332 (defun edebug-slow-before (edebug-before-index)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2333 ;; Debug current function given BEFORE position.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2334 ;; Called from functions compiled with edebug-eval-top-level-form.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2335 ;; Return the before index.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2336 (setcar edebug-offset-indices edebug-before-index)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2337
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2338 ;; Increment frequency count
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2339 (aset edebug-freq-count edebug-before-index
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2340 (1+ (aref edebug-freq-count edebug-before-index)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2341
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2342 (if (or (not (memq edebug-execution-mode '(Go-nonstop next)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2343 (edebug-input-pending-p))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2344 (edebug-debugger edebug-before-index 'before nil))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2345 edebug-before-index)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2346
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2347 (defun edebug-fast-before (edebug-before-index)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2348 ;; Do nothing.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2349 )
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2350
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2351 (defun edebug-slow-after (edebug-before-index edebug-after-index edebug-value)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2352 ;; Debug current function given AFTER position and VALUE.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2353 ;; Called from functions compiled with edebug-eval-top-level-form.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2354 ;; Return VALUE.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2355 (setcar edebug-offset-indices edebug-after-index)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2356
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2357 ;; Increment frequency count
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2358 (aset edebug-freq-count edebug-after-index
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2359 (1+ (aref edebug-freq-count edebug-after-index)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2360 (if edebug-test-coverage (edebug-update-coverage))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2361
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2362 (if (and (eq edebug-execution-mode 'Go-nonstop)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2363 (not (edebug-input-pending-p)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2364 ;; Just return result.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2365 edebug-value
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2366 (edebug-debugger edebug-after-index 'after edebug-value)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2367 ))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2368
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2369 (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
2370 ;; Do nothing but return the value.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2371 edebug-value)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2372
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2373 (defun edebug-run-slow ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2374 (defalias 'edebug-before 'edebug-slow-before)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2375 (defalias 'edebug-after 'edebug-slow-after))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2376
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2377 ;; This is not used, yet.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2378 (defun edebug-run-fast ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2379 (defalias 'edebug-before 'edebug-fast-before)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2380 (defalias 'edebug-after 'edebug-fast-after))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2381
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2382 (edebug-run-slow)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2383
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2384
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2385 (defun edebug-update-coverage ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2386 (let ((old-result (aref edebug-coverage edebug-after-index)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2387 (cond
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2388 ((eq 'ok-coverage old-result))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2389 ((eq 'unknown old-result)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2390 (aset edebug-coverage edebug-after-index edebug-value))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2391 ;; Test if a different result.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2392 ((not (eq edebug-value old-result))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2393 (aset edebug-coverage edebug-after-index 'ok-coverage)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2394
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2395
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2396 ;; Dynamically declared unbound variables.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2397 (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
2398 (defvar edebug-breakpoints)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2399 (defvar edebug-break-data) ; break data for current function.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2400 (defvar edebug-break) ; whether a break occurred.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2401 (defvar edebug-global-break) ; whether a global break occurred.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2402 (defvar edebug-break-condition) ; whether the breakpoint is conditional.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2403
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2404 (defvar edebug-break-result nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2405 (defvar edebug-global-break-result nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2406
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2407
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2408 (defun edebug-debugger (edebug-offset-index edebug-arg-mode edebug-value)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2409 ;; Check breakpoints and pending input.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2410 ;; If edebug display should be updated, call edebug-display.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2411 ;; Return edebug-value.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2412 (let* (;; This needs to be here since breakpoints may be changed.
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2413 (edebug-breakpoints (car (cdr edebug-data))) ; list of breakpoints
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2414 (edebug-break-data (assq edebug-offset-index edebug-breakpoints))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2415 (edebug-break-condition (car (cdr edebug-break-data)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2416 (edebug-global-break
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2417 (if edebug-global-break-condition
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2418 (condition-case nil
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2419 (setq edebug-global-break-result
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2420 (eval edebug-global-break-condition))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2421 (error nil))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2422 (edebug-break))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2423
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2424 ;;; (edebug-trace "exp: %s" edebug-value)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2425 ;; Test whether we should break.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2426 (setq edebug-break
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2427 (or edebug-global-break
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2428 (and edebug-break-data
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2429 (or (not edebug-break-condition)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2430 (setq edebug-break-result
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2431 (eval edebug-break-condition))))))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2432 (if (and edebug-break
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2433 (nth 2 edebug-break-data)) ; is it temporary?
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2434 ;; Delete the breakpoint.
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2435 (setcdr edebug-data
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2436 (cons (delq edebug-break-data edebug-breakpoints)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2437 (cdr (cdr edebug-data)))))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2438
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2439 ;; Display if mode is not go, continue, or Continue-fast
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2440 ;; or break, or input is pending,
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2441 (if (or (not (memq edebug-execution-mode '(go continue Continue-fast)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2442 edebug-break
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2443 (edebug-input-pending-p))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2444 (edebug-display)) ; <--------------- display
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2445
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2446 edebug-value
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2447 ))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2448
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2449
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2450 ;; window-start now stored with each function.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2451 ;;(defvar edebug-window-start nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2452 ;; Remember where each buffers' window starts between edebug calls.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2453 ;; This is to avoid spurious recentering.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2454 ;; Does this still need to be buffer-local??
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2455 ;;(setq-default edebug-window-start nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2456 ;;(make-variable-buffer-local 'edebug-window-start)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2457
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2458
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2459 ;; Dynamically declared unbound vars
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2460 (defvar edebug-point) ; the point in edebug buffer
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2461 (defvar edebug-outside-buffer) ; the current-buffer outside of edebug
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2462 (defvar edebug-outside-point) ; the point outside of edebug
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2463 (defvar edebug-outside-mark) ; the mark outside of edebug
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2464 (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
2465 (defvar edebug-outside-windows) ; outside window configuration
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2466 (defvar edebug-eval-buffer) ; for the evaluation list.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2467 (defvar edebug-outside-o-a-p) ; outside overlay-arrow-position
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2468 (defvar edebug-outside-o-a-s) ; outside overlay-arrow-string
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2469 (defvar edebug-outside-c-i-e-a) ; outside cursor-in-echo-area
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2470
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2471 (defvar edebug-eval-list nil) ;; List of expressions to evaluate.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2472
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2473 (defvar edebug-previous-result nil) ;; Last result returned.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2474
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2475 ;; 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
2476 (defalias 'edebug-mark 'mark)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2477 (defalias 'edebug-mark-marker 'mark-marker)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2478
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2479
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2480 (defun edebug-display ()
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2481 ;; Setup windows for edebug, determine mode, maybe enter recursive-edit.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2482 ;; Uses local variables of edebug-enter, edebug-before, edebug-after
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2483 ;; and edebug-debugger.
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2484 (let ((edebug-active t) ; for minor mode alist
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2485 edebug-stop ; should we enter recursive-edit
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2486 (edebug-point (+ edebug-def-mark
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2487 (aref (nth 2 edebug-data) edebug-offset-index)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2488 edebug-buffer-outside-point ; current point in edebug-buffer
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2489 ;; window displaying edebug-buffer
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2490 (edebug-window-data (nth 3 edebug-data))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2491 (edebug-outside-window (selected-window))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2492 (edebug-outside-buffer (current-buffer))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2493 (edebug-outside-point (point))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2494 (edebug-outside-mark (edebug-mark))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2495 edebug-outside-windows ; window or screen configuration
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2496 edebug-buffer-points
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2497
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2498 edebug-eval-buffer ; declared here so we can kill it below
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2499 (edebug-eval-result-list (and edebug-eval-list
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2500 (edebug-eval-result-list)))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2501 edebug-trace-window
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2502 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
2503
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2504 (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
2505 (edebug-outside-o-a-s overlay-arrow-string)
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2506 (edebug-outside-c-i-e-a cursor-in-echo-area))
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2507 (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
2508 (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
2509 (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
2510 (cursor-in-echo-area nil)
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2511 ;; 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
2512 )
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2513 (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
2514 (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
2515 (error "Buffer defining %s not found" edebug-function)))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2516
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2517 (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
2518 ;; 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
2519 (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
2520
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2521 (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
2522 ;; Save windows now before we modify them.
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2523 (setq edebug-outside-windows
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2524 (edebug-current-windows edebug-save-windows)))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2525
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2526 (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
2527 (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
2528
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2529 ;; First move the edebug buffer point to edebug-point
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
2530 ;; 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
2531 ;; 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
2532 ;;(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
2533 ;;(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
2534
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2535 ;; 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
2536 ;; 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
2537 (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
2538 (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
2539
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2540 ;; Now display eval list, if any.
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2541 ;; This is done after the pop to edebug-buffer
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2542 ;; 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
2543 (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
2544 ;; 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
2545 (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
2546 (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
2547
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2548 (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
2549 (goto-char edebug-point)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2550
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2551 (if (eq '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
2552 ;; 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
2553 ;; 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
2554 (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
2555 (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
2556 (error "Source has changed - reevaluate definition of %s"
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2557 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
2558 )))
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2559
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2560 (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
2561 (edebug-adjust-window (cdr edebug-window-data)))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2562
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2563 ;; Test if there is input, not including keyboard macros.
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2564 (if (edebug-input-pending-p)
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2565 (progn
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2566 (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
2567 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
2568 (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
2569 ;; (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
2570 ))
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2571 ;; 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
2572 (edebug-overlay-arrow)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2573
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2574 (cond
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2575 ((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
2576 ;; 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
2577 (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
2578 (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
2579 (beep)
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2580 (if (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
2581 (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
2582 (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
2583 (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
2584 (cond
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2585 (edebug-global-break
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2586 (message "Global Break: %s => %s"
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2587 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
2588 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
2589 (edebug-break-condition
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2590 (message "Break: %s => %s"
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2591 edebug-break-condition
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2592 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
2593 ((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
2594 (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
2595 (t)))
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2596
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2597 (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
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 (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
2600 (progn
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2601 ;; 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
2602 (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
2603 (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
2604 (sit-for 1)) ; Show break message.
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2605 (edebug-previous-result)))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2606
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2607 (cond
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2608 (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
2609 (cond
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2610 ((eq edebug-execution-mode 'continue) (edebug-sit-for 1))
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2611 ((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
2612 (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
2613 ;; 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
2614 ((eq edebug-execution-mode 'trace)
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-sit-for 1)) ; Force update and pause.
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2616 ((eq edebug-execution-mode 'Trace-fast)
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2617 (edebug-sit-for 0)) ; Force update and continue.
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2618 )
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2619
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 (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
2621 (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
2622 (memq edebug-execution-mode '(step next))
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2623 (eq edebug-arg-mode 'error))
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2624 (progn
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2625 ;; (setq edebug-execution-mode 'step)
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
2626 ;; (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
2627 (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
2628
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2629 ;; 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
2630 (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
2631 (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
2632 (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
2633 ;; 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
2634 (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
2635 (progn
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2636 (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
2637 (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
2638
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2639 ;; 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
2640 ;; 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
2641 (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
2642 (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
2643 (setq edebug-trace-window-start
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2644 (and edebug-trace-window
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2645 (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
2646
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2647 ;; 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
2648 (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
2649 (progn
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-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
2651
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2652 ;; 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
2653 ;; 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
2654 ;; 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
2655 (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
2656 (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
2657
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2658 ;; 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
2659 (if edebug-trace-window
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2660 (set-window-start edebug-trace-window
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2661 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
2662
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2663 ;; 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
2664 (let ((window (car edebug-window-data)))
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2665 (if (and window (edebug-window-live-p window)
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2666 (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
2667 (progn
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2668 (set-window-start window (cdr edebug-window-data)
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2669 '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
2670 ;; 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
2671 ;; Needed in addition to setting the buffer point
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
2672 ;; - 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
2673 ;; 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
2674 ;; 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
2675 ;; (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
2676 )))
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2677
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2678 ;; 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
2679 ;; (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
2680 )
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2681 ;; 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
2682 ;; 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
2683 ;; 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
2684 (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
2685 (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
2686 ) ; 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
2687
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2688 ;; Restore current buffer always, in case application needs it.
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2689 (set-buffer edebug-outside-buffer)
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2690 ;; 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
2691 ;; Needed even if restoring windows because
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
2692 ;; that doesn't restore point and mark in the current buffer.
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
2693 ;; 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
2694 (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
2695 (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
2696 (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
2697 ;; 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
2698 (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
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 ;; 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
2701
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2702 ;; Restore edebug-buffer's outside point.
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2703 ;; (edebug-trace "restore edebug-buffer point: %s"
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2704 ;; edebug-buffer-outside-point)
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2705 (let ((current-buffer (current-buffer)))
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2706 (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
2707 (goto-char edebug-buffer-outside-point)
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2708 (set-buffer current-buffer))
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2709 ;; ... 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
2710 )
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2711 ;; 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
2712 (setq
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2713 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
2714 overlay-arrow-string edebug-outside-o-a-s
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2715 cursor-in-echo-area edebug-outside-c-i-e-a)
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2716 )))
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2717
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2718
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2719 (defvar edebug-number-of-recursions 0)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2720 ;; Number of recursive edits started by edebug.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2721 ;; Should be 0 at the top level.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2722
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2723 (defvar edebug-recursion-depth 0)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2724 ;; Value of recursion-depth when edebug was called.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2725
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2726 ;; Dynamically declared unbound vars
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2727 (defvar edebug-outside-match-data) ; match data outside of edebug
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2728 (defvar edebug-backtrace-buffer) ; each recursive edit gets its own
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2729 (defvar edebug-inside-windows)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2730 (defvar edebug-interactive-p)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2731
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2732 (defvar edebug-outside-map)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2733 (defvar edebug-outside-standard-output)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2734 (defvar edebug-outside-standard-input)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2735 (defvar edebug-outside-last-command-char)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2736 (defvar edebug-outside-last-command)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2737 (defvar edebug-outside-this-command)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2738 (defvar edebug-outside-last-input-char)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2739
6671
5b26038687ed (edebug-emacs-19-specific): Renamed from edebug-fsf19-specific.
Richard M. Stallman <rms@gnu.org>
parents: 6666
diff changeset
2740 ;; 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
2741 ;; 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
2742 ;; 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
2743 ;; 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
2744
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2745 ;; Emacs 18
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2746 (defvar edebug-outside-unread-command-char)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2747
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2748 ;; Lucid Emacs
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2749 (defvar edebug-outside-unread-command-event) ;; like unread-command-events
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2750 (defvar unread-command-event nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2751
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2752 ;; Emacs 19.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2753 (defvar edebug-outside-last-command-event)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2754 (defvar edebug-outside-unread-command-events)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2755 (defvar edebug-outside-last-input-event)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2756 (defvar edebug-outside-last-event-frame)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2757 (defvar edebug-outside-last-nonmenu-event)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2758 (defvar edebug-outside-track-mouse)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2759
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2760 ;; Disable byte compiler warnings about unread-command-char and -event
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2761 ;; (maybe works with byte-compile-version 2.22 at least)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2762 (defvar edebug-unread-command-char-warning)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2763 (defvar edebug-unread-command-event-warning)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2764 (eval-when-compile
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2765 (setq edebug-unread-command-char-warning
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2766 (get 'unread-command-char 'byte-obsolete-variable))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2767 (put 'unread-command-char 'byte-obsolete-variable nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2768 (setq edebug-unread-command-event-warning
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2769 (get 'unread-command-event 'byte-obsolete-variable))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2770 (put 'unread-command-event 'byte-obsolete-variable nil))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2771
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2772 (defun edebug-recursive-edit ()
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2773 ;; Start up a recursive edit inside of edebug.
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2774 ;; 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
2775 ;; Assume that none of the variables below are buffer-local.
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2776 (let ((edebug-buffer-read-only buffer-read-only)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2777 ;; match-data must be done in the outside buffer
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2778 (edebug-outside-match-data
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2779 (save-excursion ; might be unnecessary now??
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2780 (set-buffer edebug-outside-buffer) ; in case match buffer different
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2781 (match-data)))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2782
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2783 ;;(edebug-number-of-recursions (1+ edebug-number-of-recursions))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2784 (edebug-recursion-depth (recursion-depth))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2785 edebug-entered ; bind locally to nil
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2786 (edebug-interactive-p nil) ; again non-interactive
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2787 edebug-backtrace-buffer ; each recursive edit gets its own
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2788 ;; The window configuration may be saved and restored
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2789 ;; during a recursive-edit
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2790 edebug-inside-windows
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2791
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2792 (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
2793
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2794 (edebug-outside-standard-output standard-output)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2795 (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
2796 (edebug-outside-defining-kbd-macro defining-kbd-macro)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2797
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2798 (edebug-outside-last-command-char last-command-char)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2799 (edebug-outside-last-command last-command)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2800 (edebug-outside-this-command this-command)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2801 (edebug-outside-last-input-char last-input-char)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2802
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2803 (edebug-outside-unread-command-char unread-command-char)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2804
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2805 (edebug-outside-last-input-event last-input-event)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2806 (edebug-outside-last-command-event last-command-event)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2807 (edebug-outside-unread-command-event unread-command-event)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2808 (edebug-outside-unread-command-events unread-command-events)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2809 (edebug-outside-last-event-frame last-event-frame)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2810 (edebug-outside-last-nonmenu-event last-nonmenu-event)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2811 (edebug-outside-track-mouse track-mouse)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2812 )
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2813
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2814 (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
2815 (let (
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2816 ;; 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
2817 ;; We could set these to the values for previous edebug call.
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2818 (last-command-char last-command-char)
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2819 (last-command last-command)
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2820 (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
2821 (last-input-char last-input-char)
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2822
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2823 ;; 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
2824 (unread-command-char -1)
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2825
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2826 ;; 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
2827 (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
2828 (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
2829 (unread-command-event nil);; lemacs
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2830 (unread-command-events nil)
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2831 (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
2832 (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
2833 (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
2834
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2835 ;; 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
2836 (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
2837 (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
2838
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2839 ;; Don't keep defining a kbd macro.
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2840 (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
2841 (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
2842
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2843 ;; others??
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2844 )
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2845
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2846 (if (fboundp 'zmacs-deactivate-region);; for lemacs
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2847 (zmacs-deactivate-region))
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2848 (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
2849 (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
2850 (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
2851
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2852 (setq buffer-read-only t)
16308
2334a3d634c0 (edebug-original-signal): Don't define it.
Richard M. Stallman <rms@gnu.org>
parents: 16299
diff changeset
2853 (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
2854
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2855 (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
2856 (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
2857 (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
2858
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2859 ;; 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
2860 (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
2861 (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
2862 (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
2863 ;; 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
2864 (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
2865
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2866 ;; 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
2867 ;; (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
2868
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2869 (store-match-data edebug-outside-match-data)
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2870
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2871 ;; 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
2872 ;; 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
2873 (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
2874 (progn
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2875 (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
2876 (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
2877 (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
2878 (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
2879 (use-local-map edebug-outside-map)
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2880 )
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2881 ;; 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
2882 (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
2883 ));; 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
2884
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2885 ;; Reset global vars to outside values, in case they have been changed.
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2886 (setq
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2887 last-command-char edebug-outside-last-command-char
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2888 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
2889 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
2890 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
2891 unread-command-char edebug-outside-unread-command-char
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2892 unread-command-event edebug-outside-unread-command-event
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2893 unread-command-events edebug-outside-unread-command-events
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2894 last-input-char edebug-outside-last-input-char
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2895 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
2896 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
2897 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
2898 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
2899
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2900 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
2901 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
2902 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
2903 ))
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
2904 ))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2905
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2906
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2907 ;;; Display related functions
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2908
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2909 (defun edebug-adjust-window (old-start)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2910 ;; If pos is not visible, adjust current window to fit following context.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2911 ;;; (message "window: %s old-start: %s window-start: %s pos: %s"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2912 ;;; (selected-window) old-start (window-start) (point)) (sit-for 5)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2913 (if (not (pos-visible-in-window-p))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2914 (progn
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2915 ;; First try old-start
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2916 (if old-start
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2917 (set-window-start (selected-window) old-start))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2918 (if (not (pos-visible-in-window-p))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2919 (progn
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2920 ;; (message "resetting window start") (sit-for 2)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2921 (set-window-start
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2922 (selected-window)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2923 (save-excursion
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2924 (forward-line
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2925 (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
2926 (- (/ (window-height) 2)) ; center the line moving forward
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2927 ))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2928 (beginning-of-line)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2929 (point)))))))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2930 (window-start))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2931
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2932
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2933
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2934 (defconst edebug-arrow-alist
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2935 '((Continue-fast . "=")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2936 (Trace-fast . "-")
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2937 (continue . ">")
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2938 (trace . "->")
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2939 (step . "=>")
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2940 (next . "=>")
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2941 (go . "<>")
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2942 (Go-nonstop . "..") ; not used
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2943 )
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2944 "Association list of arrows for each edebug mode.")
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2945
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2946 (defun edebug-overlay-arrow ()
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2947 ;; Set up the overlay arrow at beginning-of-line in current buffer.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2948 ;; The arrow string is derived from edebug-arrow-alist and
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2949 ;; 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
2950 (let ((pos (save-excursion (beginning-of-line) (point))))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2951 (setq overlay-arrow-string
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2952 (cdr (assq edebug-execution-mode edebug-arrow-alist)))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2953 (setq overlay-arrow-position (make-marker))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2954 (set-marker overlay-arrow-position pos (current-buffer))))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2955
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2956
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2957 (defun edebug-toggle-save-all-windows ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2958 "Toggle the saving and restoring of all windows.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2959 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
2960 configurations become the same as the current configuration."
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2961 (interactive)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2962 (setq edebug-save-windows (not edebug-save-windows))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2963 (if edebug-save-windows
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2964 (setq edebug-inside-windows
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2965 (setq edebug-outside-windows
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2966 (edebug-current-windows
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2967 edebug-save-windows))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2968 (message "Window saving is %s for all windows."
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2969 (if edebug-save-windows "on" "off")))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2970
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2971 (defmacro edebug-changing-windows (&rest body)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2972 (` (let ((window (selected-window)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2973 (setq edebug-inside-windows (edebug-current-windows t))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2974 (edebug-set-windows edebug-outside-windows)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2975 (,@ body) ;; Code to change edebug-save-windows
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2976 (setq edebug-outside-windows (edebug-current-windows
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2977 edebug-save-windows))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2978 ;; Problem: what about outside windows that are deleted inside?
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2979 (edebug-set-windows edebug-inside-windows))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2980
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2981 (defun edebug-toggle-save-selected-window ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2982 "Toggle the saving and restoring of the selected window.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2983 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
2984 configurations become the same as the current configuration."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2985 (interactive)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2986 (cond
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2987 ((eq t edebug-save-windows)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2988 ;; Save all outside windows except the selected one.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2989 ;; Remove (selected-window) from outside-windows.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2990 (edebug-changing-windows
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2991 (setq edebug-save-windows (delq window (edebug-window-list)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2992
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2993 ((memq (selected-window) edebug-save-windows)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2994 (setq edebug-outside-windows
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2995 (delq (assq (selected-window) edebug-outside-windows)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2996 edebug-outside-windows))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2997 (setq edebug-save-windows
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2998 (delq (selected-window) edebug-save-windows)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2999 (t ; Save a new window.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3000 (edebug-changing-windows
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3001 (setq edebug-save-windows (cons window edebug-save-windows)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3002
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3003 (message "Window saving is %s for %s."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3004 (if (memq (selected-window) edebug-save-windows)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3005 "on" "off")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3006 (selected-window)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3007
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3008 (defun edebug-toggle-save-windows (arg)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3009 "Toggle the saving and restoring of windows.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3010 With prefix, toggle for just the selected window.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3011 Otherwise, toggle for all windows."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3012 (interactive "P")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3013 (if arg
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3014 (edebug-toggle-save-selected-window)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3015 (edebug-toggle-save-all-windows)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3016
661
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 (defun edebug-where ()
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3019 "Show the debug windows and where we stopped in the program."
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3020 (interactive)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3021 (if (not edebug-active)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3022 (error "Edebug is not active"))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3023 ;; Restore the window configuration to what it last was inside.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3024 ;; But it is not always set. - experiment
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3025 ;;(if edebug-inside-windows
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3026 ;; (edebug-set-windows edebug-inside-windows))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3027 (edebug-pop-to-buffer edebug-buffer)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3028 (goto-char edebug-point))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3029
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3030 (defun edebug-view-outside ()
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3031 "Change to the outside window configuration."
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3032 (interactive)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3033 (if (not edebug-active)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3034 (error "Edebug is not active"))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3035 (setq edebug-inside-windows
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3036 (edebug-current-windows edebug-save-windows))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3037 (edebug-set-windows edebug-outside-windows)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3038 (goto-char edebug-outside-point)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3039 (message "Window configuration outside of Edebug. Return with %s"
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3040 (substitute-command-keys "\\<global-map>\\[edebug-where]")))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3041
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3042
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3043 (defun edebug-bounce-point (arg)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3044 "Bounce the point in the outside current buffer.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3045 If prefix arg is supplied, sit for that many seconds before returning.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3046 The default is one second."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3047 (interactive "p")
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3048 (if (not edebug-active)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3049 (error "Edebug is not active"))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3050 (save-excursion
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3051 ;; If the buffer's currently displayed, avoid set-window-configuration.
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3052 (save-window-excursion
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3053 (edebug-pop-to-buffer edebug-outside-buffer)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3054 (goto-char edebug-outside-point)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3055 (message "Current buffer: %s Point: %s Mark: %s"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3056 (current-buffer) (point)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3057 (if (marker-buffer (edebug-mark-marker))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3058 (marker-position (edebug-mark-marker)) "<not set>"))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3059 (edebug-sit-for arg)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3060 (edebug-pop-to-buffer edebug-buffer (car edebug-window-data)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3061
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3062
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3063 ;; Joe Wells, here is a start at your idea of adding a buffer to the internal
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3064 ;; 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
3065
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3066 '(defvar edebug-display-buffer-list nil
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3067 "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
3068
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3069 '(defun edebug-display-buffer (buffer)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3070 "Toggle display of a buffer inside of edebug."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3071 (interactive "bBuffer: ")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3072 (let ((already-displaying (memq buffer edebug-display-buffer-list)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3073 (setq edebug-display-buffer-list
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3074 (if already-displaying
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3075 (delq buffer edebug-display-buffer-list)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3076 (cons buffer edebug-display-buffer-list)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3077 (message "Displaying %s %s" buffer
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3078 (if already-displaying "off" "on"))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3079
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3080 ;;; Breakpoint related functions
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3081
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3082 (defun edebug-find-stop-point ()
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3083 ;; Return (function . index) of the nearest edebug stop point.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3084 (let* ((edebug-def-name (edebug-form-data-symbol))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3085 (edebug-data
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3086 (let ((data (get edebug-def-name 'edebug)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3087 (if (or (null data) (markerp data))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3088 (error "%s is not instrumented for Edebug" edebug-def-name))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3089 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
3090 ;; pull out parts of edebug-data.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3091 (edebug-def-mark (car edebug-data))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3092 ;; (edebug-breakpoints (car (cdr edebug-data)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3093
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3094 (offset-vector (nth 2 edebug-data))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3095 (offset (- (save-excursion
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3096 (if (looking-at "[ \t]")
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3097 ;; skip backwards until non-whitespace, or bol
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3098 (skip-chars-backward " \t"))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3099 (point))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3100 edebug-def-mark))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3101 len i)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3102 ;; 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
3103 (setq len (length offset-vector))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3104 (setq i 0)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3105 (while (and (< i len) (> offset (aref offset-vector i)))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3106 (setq i (1+ i)))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3107 (if (and (< i len)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3108 (<= offset (aref offset-vector i)))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3109 ;; return the relevant info
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3110 (cons edebug-def-name i)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3111 (message "Point is not on an expression in %s."
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3112 edebug-def-name)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3113 )))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3114
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3115
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3116 (defun edebug-next-breakpoint ()
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3117 "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
3118 (interactive)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3119 (let ((edebug-stop-point (edebug-find-stop-point)))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3120 (if edebug-stop-point
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3121 (let* ((edebug-def-name (car edebug-stop-point))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3122 (index (cdr edebug-stop-point))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3123 (edebug-data (get edebug-def-name 'edebug))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3124
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3125 ;; pull out parts of edebug-data
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3126 (edebug-def-mark (car edebug-data))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3127 (edebug-breakpoints (car (cdr edebug-data)))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3128 (offset-vector (nth 2 edebug-data))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3129 breakpoint)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3130 (if (not edebug-breakpoints)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3131 (message "No breakpoints in this function.")
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3132 (let ((breaks edebug-breakpoints))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3133 (while (and breaks
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3134 (<= (car (car breaks)) index))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3135 (setq breaks (cdr breaks)))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3136 (setq breakpoint
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3137 (if breaks
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3138 (car breaks)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3139 ;; goto the first breakpoint
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3140 (car edebug-breakpoints)))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3141 (goto-char (+ edebug-def-mark
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3142 (aref offset-vector (car breakpoint))))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3143
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
3144 (message "%s"
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
3145 (concat (if (nth 2 breakpoint)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3146 "Temporary " "")
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3147 (if (car (cdr breakpoint))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3148 (format "Condition: %s"
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3149 (edebug-safe-prin1-to-string
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3150 (car (cdr breakpoint))))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3151 "")))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3152 ))))))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3153
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3154
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3155 (defun edebug-modify-breakpoint (flag &optional condition temporary)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3156 "Modify the breakpoint for the form at point or after it according
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3157 to FLAG: set if t, clear if nil. Then move to that point.
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3158 If CONDITION or TEMPORARY are non-nil, add those attributes to
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3159 the breakpoint. "
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3160 (let ((edebug-stop-point (edebug-find-stop-point)))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3161 (if edebug-stop-point
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3162 (let* ((edebug-def-name (car edebug-stop-point))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3163 (index (cdr edebug-stop-point))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3164 (edebug-data (get edebug-def-name 'edebug))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3165
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3166 ;; pull out parts of edebug-data
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3167 (edebug-def-mark (car edebug-data))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3168 (edebug-breakpoints (car (cdr edebug-data)))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3169 (offset-vector (nth 2 edebug-data))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3170 present)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3171 ;; delete it either way
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3172 (setq present (assq index edebug-breakpoints))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3173 (setq edebug-breakpoints (delq present edebug-breakpoints))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3174 (if flag
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3175 (progn
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3176 ;; add it to the list and resort
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3177 (setq edebug-breakpoints
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3178 (edebug-sort-alist
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3179 (cons
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3180 (list index condition temporary)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3181 edebug-breakpoints) '<))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3182 (if condition
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3183 (message "Breakpoint set in %s with condition: %s"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3184 edebug-def-name condition)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3185 (message "Breakpoint set in %s" edebug-def-name)))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3186 (if present
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3187 (message "Breakpoint unset in %s" edebug-def-name)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3188 (message "No breakpoint here")))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3189
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3190 (setcar (cdr edebug-data) edebug-breakpoints)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3191 (goto-char (+ edebug-def-mark (aref offset-vector index)))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3192 ))))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3193
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3194 (defun edebug-set-breakpoint (arg)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3195 "Set the breakpoint of nearest sexp.
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3196 With prefix argument, make it a temporary breakpoint."
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3197 (interactive "P")
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3198 (edebug-modify-breakpoint t nil arg))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3199
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3200 (defun edebug-unset-breakpoint ()
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3201 "Clear the breakpoint of nearest sexp."
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3202 (interactive)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3203 (edebug-modify-breakpoint nil))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3204
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3205
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3206 ;; For emacs 18, no read-expression-history
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3207 (defun edebug-set-conditional-breakpoint (arg condition)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3208 "Set a conditional breakpoint at nearest sexp.
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3209 The condition is evaluated in the outside context.
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3210 With prefix argument, make it a temporary breakpoint."
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3211 ;; (interactive "P\nxCondition: ")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3212 (interactive
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3213 (list
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3214 current-prefix-arg
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3215 ;; Edit previous condition as follows, but it is cumbersome:
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3216 (let ((edebug-stop-point (edebug-find-stop-point)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3217 (if edebug-stop-point
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3218 (let* ((edebug-def-name (car edebug-stop-point))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3219 (index (cdr edebug-stop-point))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3220 (edebug-data (get edebug-def-name 'edebug))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3221 (edebug-breakpoints (car (cdr edebug-data)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3222 (edebug-break-data (assq index edebug-breakpoints))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3223 (edebug-break-condition (car (cdr edebug-break-data))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3224 (read-minibuffer
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3225 (format "Condition in %s: " edebug-def-name)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3226 (if edebug-break-condition
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3227 (format "%s" edebug-break-condition)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3228 (format ""))))))))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3229 (edebug-modify-breakpoint t condition arg))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3230
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3231
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3232 (defun edebug-set-global-break-condition (expression)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3233 (interactive (list (read-minibuffer
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3234 "Global Condition: "
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3235 (format "%s" edebug-global-break-condition))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3236 (setq edebug-global-break-condition expression))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3237
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3238
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3239 ;;; Mode switching functions
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3240
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3241 (defun edebug-set-mode (mode shortmsg msg)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3242 ;; Set the edebug mode to MODE.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3243 ;; Display SHORTMSG, or MSG if not within edebug.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3244 (if (eq (1+ edebug-recursion-depth) (recursion-depth))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3245 (progn
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3246 (setq edebug-execution-mode mode)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3247 (message shortmsg)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3248 ;; Continue execution
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3249 (exit-recursive-edit))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3250 ;; This is not terribly useful!!
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3251 (setq edebug-next-execution-mode mode)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3252 (message msg)))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3253
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3254
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3255 (defalias 'edebug-step-through-mode 'edebug-step-mode)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3256
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3257 (defun edebug-step-mode ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3258 "Proceed to next stop point."
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3259 (interactive)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3260 (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
3261
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3262 (defun edebug-next-mode ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3263 "Proceed to next `after' stop point."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3264 (interactive)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3265 (edebug-set-mode 'next "" "Edebug will stop after next eval."))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3266
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3267 (defun edebug-go-mode (arg)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3268 "Go, evaluating until break.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3269 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
3270 (interactive "P")
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3271 (if arg
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3272 (edebug-set-breakpoint t))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3273 (edebug-set-mode 'go "Go..." "Edebug will go until break."))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3274
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3275 (defun edebug-Go-nonstop-mode ()
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3276 "Go, evaluating without debugging."
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3277 (interactive)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3278 (edebug-set-mode 'Go-nonstop "Go-Nonstop..."
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3279 "Edebug will not stop at breaks."))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3280
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 (defun edebug-trace-mode ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3283 "Begin trace mode."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3284 (interactive)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3285 (edebug-set-mode 'trace "Tracing..." "Edebug will trace with pause."))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3286
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3287 (defun edebug-Trace-fast-mode ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3288 "Trace with no wait at each step."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3289 (interactive)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3290 (edebug-set-mode 'Trace-fast
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3291 "Trace fast..." "Edebug will trace without pause."))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3292
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3293 (defun edebug-continue-mode ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3294 "Begin continue mode."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3295 (interactive)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3296 (edebug-set-mode 'continue "Continue..."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3297 "Edebug will pause at breakpoints."))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3298
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3299 (defun edebug-Continue-fast-mode ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3300 "Trace with no wait at each step."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3301 (interactive)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3302 (edebug-set-mode 'Continue-fast "Continue fast..."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3303 "Edebug will stop and go at breakpoints."))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3304
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3305 ;; ------------------------------------------------------------
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3306 ;; The following use the mode changing commands and breakpoints.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3307
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3308
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3309 (defun edebug-goto-here ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3310 "Proceed to this stop point."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3311 (interactive)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3312 (edebug-go-mode t))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3313
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3314
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3315 (defun edebug-stop ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3316 "Stop execution and do not continue.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3317 Useful for exiting from trace or continue loop."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3318 (interactive)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3319 (message "Stop"))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3320
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3321
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3322 '(defun edebug-forward ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3323 "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
3324 (interactive)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3325 (edebug-set-mode
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3326 'forward "Forward"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3327 "Edebug will stop after exiting the next expression."))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3328
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3329
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3330 (defun edebug-forward-sexp (arg)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3331 "Proceed from the current point to the end of the ARGth sexp ahead.
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3332 If there are not ARG sexps ahead, then do edebug-step-out."
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3333 (interactive "p")
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3334 (condition-case nil
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3335 (let ((parse-sexp-ignore-comments t))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3336 ;; Call forward-sexp repeatedly until done or failure.
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3337 (forward-sexp arg)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3338 (edebug-go-mode t))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3339 (error
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3340 (edebug-step-out)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3341 )))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3342
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3343 (defun edebug-step-out ()
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3344 "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
3345 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
3346 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
3347 (interactive)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3348 (condition-case nil
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3349 (let ((parse-sexp-ignore-comments t))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3350 (up-list 1)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3351 (save-excursion
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3352 ;; Is there still a containing expression?
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3353 (up-list 1))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3354 (edebug-go-mode t))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3355 (error
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3356 ;; 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
3357 (let ((start-point (point)))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3358 ;; (up-list 1)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3359 (down-list -1)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3360 (if (= (point) start-point)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3361 (edebug-step-mode) ; No more at this level, so step.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3362 (edebug-go-mode t)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3363 )))))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3364
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3365 (defun edebug-instrument-function (func)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3366 ;; Func should be a function symbol.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3367 ;; Return the function symbol, or nil if not instrumented.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3368 (let ((func-marker))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3369 (setq func-marker (get func 'edebug))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3370 (cond
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3371 ((markerp func-marker)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3372 ;; It is uninstrumented, so instrument it.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3373 (save-excursion
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3374 (set-buffer (marker-buffer func-marker))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3375 (goto-char func-marker)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3376 (edebug-eval-top-level-form)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3377 func))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3378 ((consp func-marker)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3379 (message "%s is already instrumented." func)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3380 func)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3381 (t
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3382 ;; We could try harder, e.g. do a tags search.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3383 (error "Don't know where %s is defined" func)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3384 nil))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3385
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3386 (defun edebug-instrument-callee ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3387 "Instrument the definition of the function or macro about to be called.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3388 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
3389 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
3390 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
3391 (interactive)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3392 (if (not (looking-at "\("))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3393 (error "You must be before a list form")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3394 (let ((func
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3395 (save-excursion
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3396 (down-list 1)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3397 (if (looking-at "\(")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3398 (edebug-form-data-name
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3399 (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
3400 (edebug-original-read (current-buffer))))))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3401 (edebug-instrument-function func))))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3402
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3403
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3404 (defun edebug-step-in ()
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3405 "Step into the definition of the function or macro about to be called.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3406 This first does `edebug-instrument-callee' to ensure that it is
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3407 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
3408 (interactive)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3409 (let ((func (edebug-instrument-callee)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3410 (if func
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3411 (progn
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3412 (edebug-on-entry func 'temp)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3413 (edebug-go-mode nil)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3414
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3415 (defun edebug-on-entry (function &optional flag)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3416 "Cause Edebug to stop when FUNCTION is called.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3417 With prefix argument, make this temporary so it is automatically
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3418 cancelled the first time the function is entered."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3419 (interactive "aEdebug on entry to: \nP")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3420 ;; Could store this in the edebug data instead.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3421 (put function 'edebug-on-entry (if flag 'temp t)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3422
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3423 (defun cancel-edebug-on-entry (function)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3424 (interactive "aEdebug on entry to: ")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3425 (put function 'edebug-on-entry nil))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3426
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3427
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
3428 (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
3429 (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
3430 '(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
3431 ;; Also need edebug-cancel-debug-on-entry
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3432
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3433 '(defun edebug-debug-on-entry (function)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3434 "Request FUNCTION to invoke debugger each time it is called.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3435 If the user continues, FUNCTION's execution proceeds.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3436 Works by modifying the definition of FUNCTION,
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3437 which must be written in Lisp, not predefined.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3438 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
3439 Redefining FUNCTION also does that.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3440
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3441 This version is from Edebug. If the function is instrumented for
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3442 Edebug, it calls `edebug-on-entry'"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3443 (interactive "aDebug on entry (to function): ")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3444 (let ((func-data (get function 'edebug)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3445 (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
3446 (edebug-original-debug-on-entry function)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3447 (edebug-on-entry function))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3448
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3449
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3450 (defun edebug-top-level-nonstop ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3451 "Set mode to Go-nonstop, and exit to top-level.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3452 This is useful for exiting even if unwind-protect code may be executed."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3453 (interactive)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3454 (setq edebug-execution-mode 'Go-nonstop)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3455 (top-level))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3456
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3457
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3458 ;;(defun edebug-exit-out ()
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3459 ;; "Go until the current function exits."
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3460 ;; (interactive)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3461 ;; (edebug-set-mode 'exiting "Exit..."))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3462
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3463
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3464 ;;; The following initial mode setting definitions are not used yet.
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3465
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3466 '(defconst edebug-initial-mode-alist
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3467 '((edebug-Continue-fast . Continue-fast)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3468 (edebug-Trace-fast . Trace-fast)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3469 (edebug-continue . continue)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3470 (edebug-trace . trace)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3471 (edebug-go . go)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3472 (edebug-step-through . step)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3473 (edebug-Go-nonstop . Go-nonstop)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3474 )
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3475 "Association list between commands and the modes they set.")
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3476
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3477
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3478 '(defun edebug-set-initial-mode ()
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3479 "Ask for the initial mode of the enclosing function.
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3480 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
3481 edebug-mode."
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3482 (interactive)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3483 (let* ((this-function (edebug-which-function))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3484 (keymap (if (eq edebug-mode-map (current-local-map))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3485 edebug-mode-map))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3486 (old-mode (or (get this-function 'edebug-initial-mode)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3487 edebug-initial-mode))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3488 (key (read-key-sequence
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3489 (format
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3490 "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
3491 this-function
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3492 old-mode
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3493 (where-is-internal
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3494 (car (rassq old-mode edebug-initial-mode-alist))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3495 keymap 'firstonly
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3496 ))))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3497 (mode (cdr (assq (key-binding key) edebug-initial-mode-alist)))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3498 )
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3499 (if (and mode
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3500 (or (get this-function 'edebug-initial-mode)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3501 (not (eq mode edebug-initial-mode))))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3502 (progn
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3503 (put this-function 'edebug-initial-mode mode)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3504 (message "Initial mode for %s is now: %s"
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3505 this-function mode))
5126
30682388c4cf Delete periods from error messages.
Richard M. Stallman <rms@gnu.org>
parents: 5125
diff changeset
3506 (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
3507 )))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3508
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3509 ;;; Evaluation of expressions
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3510
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3511 (def-edebug-spec edebug-outside-excursion t)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3513 (defmacro edebug-outside-excursion (&rest body)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3514 "Evaluate an expression list in the outside context.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3515 Return the result of the last expression."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3516 (` (save-excursion ; of current-buffer
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3517 (if edebug-save-windows
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3518 (progn
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3519 ;; After excursion, we will
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3520 ;; restore to current window configuration.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3521 (setq edebug-inside-windows
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3522 (edebug-current-windows edebug-save-windows))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3523 ;; Restore outside windows.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3524 (edebug-set-windows edebug-outside-windows)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3525
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3526 (set-buffer edebug-buffer) ; why?
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3527 ;; (use-local-map edebug-outside-map)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3528 (store-match-data edebug-outside-match-data)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3529 ;; Restore outside context.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3530 (let (;; (edebug-inside-map (current-local-map)) ;; restore map??
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3531 (last-command-char edebug-outside-last-command-char)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3532 (last-command-event edebug-outside-last-command-event)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3533 (last-command edebug-outside-last-command)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3534 (this-command edebug-outside-this-command)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3535 (unread-command-char edebug-outside-unread-command-char)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3536 (unread-command-event edebug-outside-unread-command-event)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3537 (unread-command-events edebug-outside-unread-command-events)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3538 (last-input-char edebug-outside-last-input-char)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3539 (last-input-event edebug-outside-last-input-event)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3540 (last-event-frame edebug-outside-last-event-frame)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3541 (last-nonmenu-event edebug-outside-last-nonmenu-event)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3542 (track-mouse edebug-outside-track-mouse)
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
3543 (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
3544 (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
3545
15302
c23c9712ef5c Use executing-kbd-macro, not executing-macro.
Karl Heuer <kwzh@gnu.org>
parents: 14846
diff changeset
3546 (executing-kbd-macro edebug-outside-executing-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
3547 (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
3548 (pre-command-hook 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
3549 (post-command-hook 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
3550
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
3551 ;; See edebug-display
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3552 (overlay-arrow-position edebug-outside-o-a-p)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3553 (overlay-arrow-string edebug-outside-o-a-s)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3554 (cursor-in-echo-area edebug-outside-c-i-e-a)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3555 )
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3556 (unwind-protect
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3557 (save-excursion ; of edebug-buffer
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3558 (set-buffer edebug-outside-buffer)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3559 (goto-char edebug-outside-point)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3560 (if (marker-buffer (edebug-mark-marker))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3561 (set-marker (edebug-mark-marker) edebug-outside-mark))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3562 (,@ body))
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 ;; Back to edebug-buffer. Restore rest of inside context.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3565 ;; (use-local-map edebug-inside-map)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3566 (if edebug-save-windows
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3567 ;; Restore inside windows.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3568 (edebug-set-windows edebug-inside-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
3569
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
3570 ;; Save values that may have been changed.
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
3571 (setq
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
3572 edebug-outside-last-command-char last-command-char
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
3573 edebug-outside-last-command-event 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
3574 edebug-outside-last-command last-command
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
3575 edebug-outside-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
3576 edebug-outside-unread-command-char 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
3577 edebug-outside-unread-command-event unread-command-event
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
3578 edebug-outside-unread-command-events unread-command-events
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
3579 edebug-outside-last-input-char last-input-char
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
3580 edebug-outside-last-input-event 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
3581 edebug-outside-last-event-frame 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
3582 edebug-outside-last-nonmenu-event 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
3583 edebug-outside-track-mouse 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
3584 edebug-outside-standard-output 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
3585 edebug-outside-standard-input 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
3586
15302
c23c9712ef5c Use executing-kbd-macro, not executing-macro.
Karl Heuer <kwzh@gnu.org>
parents: 14846
diff changeset
3587 edebug-outside-executing-macro executing-kbd-macro
6666
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
3588 edebug-outside-defining-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
3589 edebug-outside-pre-command-hook 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
3590 edebug-outside-post-command-hook 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
3591
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
3592 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
3593 edebug-outside-o-a-s overlay-arrow-string
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
3594 edebug-outside-c-i-e-a cursor-in-echo-area
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
3595 ))) ; let
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3596 )))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3597
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3598 (defvar cl-debug-env nil) ;; defined in cl; non-nil when lexical env used.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3599
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3600 (defun edebug-eval (edebug-expr)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3601 ;; Are there cl lexical variables active?
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3602 (if cl-debug-env
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3603 (eval (cl-macroexpand-all edebug-expr cl-debug-env))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3604 (eval edebug-expr)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3605
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3606 (defun edebug-safe-eval (edebug-expr)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3607 ;; Evaluate EXPR safely.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3608 ;; 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
3609 (condition-case edebug-err
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3610 (edebug-eval edebug-expr)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3611 (error (edebug-format "%s: %s" ;; could
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3612 (get (car edebug-err) 'error-message)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3613 (car (cdr edebug-err))))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3614
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
3615 ;;; Printing
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
3616
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3617 ;; Replace printing functions.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3618
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3619 ;; obsolete names
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3620 (defalias 'edebug-install-custom-print-funcs 'edebug-install-custom-print)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3621 (defalias 'edebug-reset-print-funcs 'edebug-uninstall-custom-print)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3622 (defalias 'edebug-uninstall-custom-print-funcs 'edebug-uninstall-custom-print)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3623
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3624 (defun edebug-install-custom-print ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3625 "Replace print functions used by Edebug with custom versions."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3626 ;; Modifying the custom print functions, or changing print-length,
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3627 ;; print-level, print-circle, custom-print-list or custom-print-vector
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3628 ;; have immediate effect.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3629 (interactive)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3630 (require 'cust-print)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3631 (defalias 'edebug-prin1 'custom-prin1)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3632 (defalias 'edebug-print 'custom-print)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3633 (defalias 'edebug-prin1-to-string 'custom-prin1-to-string)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3634 (defalias 'edebug-format 'custom-format)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3635 (defalias 'edebug-message 'custom-message)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3636 "Installed")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3637
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3638 (eval-and-compile
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3639 (defun edebug-uninstall-custom-print ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3640 "Replace edebug custom print functions with internal versions."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3641 (interactive)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3642 (defalias 'edebug-prin1 'prin1)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3643 (defalias 'edebug-print 'print)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3644 (defalias 'edebug-prin1-to-string 'prin1-to-string)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3645 (defalias 'edebug-format 'format)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3646 (defalias 'edebug-message 'message)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3647 "Uninstalled")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3648
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3649 ;; Default print functions are the same as Emacs'.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3650 (edebug-uninstall-custom-print))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3651
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3652
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3653 (defun edebug-report-error (edebug-value)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3654 ;; Print an error message like command level does.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3655 ;; This also prints the error name if it has no error-message.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3656 (message "%s: %s"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3657 (or (get (car edebug-value) 'error-message)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3658 (format "peculiar error (%s)" (car edebug-value)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3659 (mapconcat (function (lambda (edebug-arg)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3660 ;; continuing after an error may
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3661 ;; complain about edebug-arg. why??
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3662 (prin1-to-string edebug-arg)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3663 (cdr edebug-value) ", ")))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3664
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3665 ;; Define here in case they are not already defined.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3666 (defvar print-level nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3667 (defvar print-circle nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3668 (defvar print-readably) ;; defined by lemacs
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3669 ;; 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
3670 ;; 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
3671
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3672 (defun edebug-safe-prin1-to-string (value)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3673 (let ((print-escape-newlines t)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3674 (print-length (or edebug-print-length print-length))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3675 (print-level (or edebug-print-level print-level))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3676 (print-circle (or edebug-print-circle print-circle))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3677 (print-readably nil)) ;; lemacs uses this.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3678 (edebug-prin1-to-string value)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3679
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3680 (defun edebug-compute-previous-result (edebug-previous-value)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3681 (setq edebug-previous-result
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3682 (if (and (numberp edebug-previous-value)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3683 (< edebug-previous-value 256)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3684 (>= edebug-previous-value 0))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3685 (format "Result: %s = %s" edebug-previous-value
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3686 (single-key-description edebug-previous-value))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3687 (if edebug-unwrap-results
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3688 (setq edebug-previous-value
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3689 (edebug-unwrap* edebug-previous-value)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3690 (concat "Result: "
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3691 (edebug-safe-prin1-to-string edebug-previous-value)))))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3692
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3693 (defun edebug-previous-result ()
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3694 "Print the previous result."
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3695 (interactive)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3696 (message "%s" edebug-previous-result))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3697
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
3698 ;;; Read, Eval and Print
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3699
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3700 (defun edebug-eval-expression (edebug-expr)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3701 "Evaluate an expression in the outside environment.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3702 If interactive, prompt for the expression.
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3703 Print result in minibuffer."
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3704 (interactive "xEval: ")
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3705 (princ
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3706 (edebug-outside-excursion
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3707 (setq values (cons (edebug-eval edebug-expr) values))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3708 (edebug-safe-prin1-to-string (car values)))))
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-eval-last-sexp ()
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3711 "Evaluate sexp before point in the outside environment;
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3712 print value in minibuffer."
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3713 (interactive)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3714 (edebug-eval-expression (edebug-last-sexp)))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3715
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3716 (defun edebug-eval-print-last-sexp ()
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3717 "Evaluate sexp before point in the outside environment;
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3718 print value into current buffer."
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3719 (interactive)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3720 (let* ((edebug-form (edebug-last-sexp))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3721 (edebug-result-string
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3722 (edebug-outside-excursion
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3723 (edebug-safe-prin1-to-string (edebug-safe-eval edebug-form))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3724 (standard-output (current-buffer)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3725 (princ "\n")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3726 ;; princ the string to get rid of quotes.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3727 (princ edebug-result-string)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3728 (princ "\n")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3729 ))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3730
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
3731 ;;; Edebug Minor Mode
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3732
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3733 ;; Global GUD bindings for all emacs-lisp-mode buffers.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3734 (define-key emacs-lisp-mode-map "\C-x\C-a\C-s" 'edebug-step-mode)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3735 (define-key emacs-lisp-mode-map "\C-x\C-a\C-n" 'edebug-next-mode)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3736 (define-key emacs-lisp-mode-map "\C-x\C-a\C-c" 'edebug-go-mode)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3737 (define-key emacs-lisp-mode-map "\C-x\C-a\C-l" 'edebug-where)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3738
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3739
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3740 (defvar edebug-mode-map nil)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3741 (if edebug-mode-map
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3742 nil
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3743 (progn
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3744 (setq edebug-mode-map (copy-keymap emacs-lisp-mode-map))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3745 ;; control
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3746 (define-key edebug-mode-map " " 'edebug-step-mode)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3747 (define-key edebug-mode-map "n" 'edebug-next-mode)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3748 (define-key edebug-mode-map "g" 'edebug-go-mode)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3749 (define-key edebug-mode-map "G" 'edebug-Go-nonstop-mode)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3750 (define-key edebug-mode-map "t" 'edebug-trace-mode)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3751 (define-key edebug-mode-map "T" 'edebug-Trace-fast-mode)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3752 (define-key edebug-mode-map "c" 'edebug-continue-mode)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3753 (define-key edebug-mode-map "C" 'edebug-Continue-fast-mode)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3754
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3755 ;;(define-key edebug-mode-map "f" 'edebug-forward) not implemented
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3756 (define-key edebug-mode-map "f" 'edebug-forward-sexp)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3757 (define-key edebug-mode-map "h" 'edebug-goto-here)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3758
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3759 (define-key edebug-mode-map "I" 'edebug-instrument-callee)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3760 (define-key edebug-mode-map "i" 'edebug-step-in)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3761 (define-key edebug-mode-map "o" 'edebug-step-out)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3762
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3763 ;; quitting and stopping
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3764 (define-key edebug-mode-map "q" 'top-level)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3765 (define-key edebug-mode-map "Q" 'edebug-top-level-nonstop)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3766 (define-key edebug-mode-map "a" 'abort-recursive-edit)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3767 (define-key edebug-mode-map "S" 'edebug-stop)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3768
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3769 ;; breakpoints
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3770 (define-key edebug-mode-map "b" 'edebug-set-breakpoint)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3771 (define-key edebug-mode-map "u" 'edebug-unset-breakpoint)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3772 (define-key edebug-mode-map "B" 'edebug-next-breakpoint)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3773 (define-key edebug-mode-map "x" 'edebug-set-conditional-breakpoint)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3774 (define-key edebug-mode-map "X" 'edebug-set-global-break-condition)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3775
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3776 ;; evaluation
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3777 (define-key edebug-mode-map "r" 'edebug-previous-result)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3778 (define-key edebug-mode-map "e" 'edebug-eval-expression)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3779 (define-key edebug-mode-map "\C-x\C-e" 'edebug-eval-last-sexp)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3780 (define-key edebug-mode-map "E" 'edebug-visit-eval-list)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3781
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3782 ;; views
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3783 (define-key edebug-mode-map "w" 'edebug-where)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3784 (define-key edebug-mode-map "v" 'edebug-view-outside) ;; maybe obsolete??
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3785 (define-key edebug-mode-map "p" 'edebug-bounce-point)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3786 (define-key edebug-mode-map "P" 'edebug-view-outside) ;; same as v
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3787 (define-key edebug-mode-map "W" 'edebug-toggle-save-windows)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3788
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3789 ;; misc
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3790 (define-key edebug-mode-map "?" 'edebug-help)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3791 (define-key edebug-mode-map "d" 'edebug-backtrace)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3792
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3793 (define-key edebug-mode-map "-" 'negative-argument)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3794
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3795 ;; statistics
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3796 (define-key edebug-mode-map "=" 'edebug-temp-display-freq-count)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3797
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3798 ;; GUD bindings
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3799 (define-key edebug-mode-map "\C-c\C-s" 'edebug-step-mode)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3800 (define-key edebug-mode-map "\C-c\C-n" 'edebug-next-mode)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3801 (define-key edebug-mode-map "\C-c\C-c" 'edebug-go-mode)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3802
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3803 (define-key edebug-mode-map "\C-x " 'edebug-set-breakpoint)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3804 (define-key edebug-mode-map "\C-c\C-d" 'edebug-unset-breakpoint)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3805 (define-key edebug-mode-map "\C-c\C-t"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3806 (function (lambda () (edebug-set-breakpoint t))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3807 (define-key edebug-mode-map "\C-c\C-l" 'edebug-where)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3808 ))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3809
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3810 ;; Autoloading these global bindings doesn't make sense because
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3811 ;; 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
3812
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3813 (defvar global-edebug-prefix "\^XX"
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3814 "Prefix key for global edebug commands, available from any buffer.")
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3815
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3816 (defvar global-edebug-map nil
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3817 "Global map of edebug commands, available from any buffer.")
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3818
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3819 (if global-edebug-map
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3820 nil
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3821 (setq global-edebug-map (make-sparse-keymap))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3822
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3823 (global-unset-key global-edebug-prefix)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3824 (global-set-key global-edebug-prefix global-edebug-map)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3825
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3826 (define-key global-edebug-map " " 'edebug-step-mode)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3827 (define-key global-edebug-map "g" 'edebug-go-mode)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3828 (define-key global-edebug-map "G" 'edebug-Go-nonstop-mode)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3829 (define-key global-edebug-map "t" 'edebug-trace-mode)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3830 (define-key global-edebug-map "T" 'edebug-Trace-fast-mode)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3831 (define-key global-edebug-map "c" 'edebug-continue-mode)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3832 (define-key global-edebug-map "C" 'edebug-Continue-fast-mode)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3833
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3834 ;; breakpoints
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3835 (define-key global-edebug-map "b" 'edebug-set-breakpoint)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3836 (define-key global-edebug-map "u" 'edebug-unset-breakpoint)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3837 (define-key global-edebug-map "x" 'edebug-set-conditional-breakpoint)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3838 (define-key global-edebug-map "X" 'edebug-set-global-break-condition)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3839
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3840 ;; views
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3841 (define-key global-edebug-map "w" 'edebug-where)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3842 (define-key global-edebug-map "W" 'edebug-toggle-save-windows)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3843
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3844 ;; quitting
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3845 (define-key global-edebug-map "q" 'top-level)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3846 (define-key global-edebug-map "Q" 'edebug-top-level-nonstop)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3847 (define-key global-edebug-map "a" 'abort-recursive-edit)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3848
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3849 ;; statistics
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3850 (define-key global-edebug-map "=" 'edebug-display-freq-count)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3851 )
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3852
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3853 (defun edebug-help ()
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3854 (interactive)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3855 (describe-function 'edebug-mode))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3856
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3857 (defun edebug-mode ()
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3858 "Mode for Emacs Lisp buffers while in Edebug.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3859
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3860 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
3861 buffer) there are local and global key bindings to several Edebug
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3862 specific commands. E.g. `edebug-step-mode' is bound to \\[edebug-step-mode]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3863 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
3864
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3865 Also see bindings for the eval list buffer, *edebug*.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3866
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3867 The edebug buffer commands:
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3868 \\{edebug-mode-map}
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3869
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3870 Global commands prefixed by `global-edebug-prefix':
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3871 \\{global-edebug-map}
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3872
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3873 Options:
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3874 edebug-setup-hook
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3875 edebug-all-defs
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3876 edebug-all-forms
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3877 edebug-save-windows
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3878 edebug-save-displayed-buffer-points
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3879 edebug-initial-mode
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3880 edebug-trace
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3881 edebug-test-coverage
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3882 edebug-continue-kbd-macro
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3883 edebug-print-length
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3884 edebug-print-level
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3885 edebug-print-circle
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3886 edebug-on-error
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3887 edebug-on-quit
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3888 edebug-on-signal
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3889 edebug-unwrap-results
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3890 edebug-global-break-condition
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3891 "
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3892 (use-local-map edebug-mode-map))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3893
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
3894 ;;; edebug eval list mode
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
3895
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3896 ;; 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
3897
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3898 (defun edebug-eval-result-list ()
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3899 "Return a list of evaluations of edebug-eval-list"
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3900 ;; 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
3901 ;; 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
3902 (let ((edebug-execution-mode 'Go-nonstop)
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
3903 (edebug-trace nil))
c6430bc570f9 Numerous changes and bug fixes to bring it up to version 3.5.
Daniel LaLiberte <liberte@gnu.org>
parents: 6512
diff changeset
3904 (mapcar 'edebug-safe-eval edebug-eval-list)))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3905
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3906 (defun edebug-eval-display-list (edebug-eval-result-list)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3907 ;; Assumes edebug-eval-buffer exists.
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3908 (let ((edebug-eval-list-temp edebug-eval-list)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3909 (standard-output edebug-eval-buffer)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3910 (edebug-comment-line
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3911 (format ";%s\n" (make-string (- (window-width) 2) ?-))))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3912 (set-buffer edebug-eval-buffer)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3913 (erase-buffer)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3914 (while edebug-eval-list-temp
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3915 (prin1 (car edebug-eval-list-temp)) (terpri)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3916 (prin1 (car edebug-eval-result-list)) (terpri)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3917 (princ edebug-comment-line)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3918 (setq edebug-eval-list-temp (cdr edebug-eval-list-temp))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3919 (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
3920 (edebug-pop-to-buffer edebug-eval-buffer)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3921 ))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3922
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3923 (defun edebug-create-eval-buffer ()
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3924 (if (not (and edebug-eval-buffer (buffer-name edebug-eval-buffer)))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3925 (progn
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3926 (set-buffer (setq edebug-eval-buffer (get-buffer-create "*edebug*")))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3927 (edebug-eval-mode))))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3928
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3929 ;; Should generalize this to be callable outside of edebug
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3930 ;; with calls in user functions, e.g. (edebug-eval-display)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3931
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3932 (defun edebug-eval-display (edebug-eval-result-list)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3933 "Display expressions and evaluations in EVAL-LIST.
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3934 It modifies the context by popping up the eval display."
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3935 (if edebug-eval-result-list
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3936 (progn
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3937 (edebug-create-eval-buffer)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3938 (edebug-eval-display-list edebug-eval-result-list)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3939 )))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3940
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3941 (defun edebug-eval-redisplay ()
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3942 "Redisplay eval list in outside environment.
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3943 May only be called from within edebug-recursive-edit."
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3944 (edebug-create-eval-buffer)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3945 (edebug-outside-excursion
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3946 (edebug-eval-display-list (edebug-eval-result-list))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3947 ))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3948
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3949 (defun edebug-visit-eval-list ()
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3950 (interactive)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3951 (edebug-eval-redisplay)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3952 (edebug-pop-to-buffer edebug-eval-buffer))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3953
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3954
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3955 (defun edebug-update-eval-list ()
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3956 "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
3957 (interactive)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3958 (let ((starting-point (point))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3959 new-list)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3960 (goto-char (point-min))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3961 ;; get the first expression
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3962 (edebug-skip-whitespace)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3963 (if (not (eobp))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3964 (progn
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3965 (forward-sexp 1)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3966 (setq new-list (cons (edebug-last-sexp) new-list))))
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 (while (re-search-forward "^;" nil t)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3969 (forward-line 1)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3970 (skip-chars-forward " \t\n\r")
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3971 (if (and (/= ?\; (following-char))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3972 (not (eobp)))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3973 (progn
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3974 (forward-sexp 1)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3975 (setq new-list (cons (edebug-last-sexp) new-list)))))
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 (setq edebug-eval-list (nreverse new-list))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3978 (edebug-eval-redisplay)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3979 (goto-char starting-point)))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3980
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3981
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3982 (defun edebug-delete-eval-item ()
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3983 "Delete the item under point and redisplay."
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3984 ;; could add arg to do repeatedly
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3985 (interactive)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3986 (if (re-search-backward "^;" nil 'nofail)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3987 (forward-line 1))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3988 (delete-region
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3989 (point) (progn (re-search-forward "^;" nil 'nofail)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3990 (beginning-of-line)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3991 (point)))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3992 (edebug-update-eval-list))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3993
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3994
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3995
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3996 (defvar edebug-eval-mode-map nil
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3997 "Keymap for edebug-eval-mode. Superset of lisp-interaction-mode.")
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3998
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3999 (if edebug-eval-mode-map
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4000 nil
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4001 (setq edebug-eval-mode-map (copy-keymap lisp-interaction-mode-map))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4002
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4003 (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
4004 (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
4005 (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
4006 (define-key edebug-eval-mode-map "\C-x\C-e" 'edebug-eval-last-sexp)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4007 (define-key edebug-eval-mode-map "\C-j" 'edebug-eval-print-last-sexp)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4008 )
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4009
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4010
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4011 (defun edebug-eval-mode ()
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4012 "Mode for evaluation list buffer while in Edebug.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4013
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4014 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
4015 global key bindings to several Edebug specific commands. E.g.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4016 `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
4017 buffer and \\<global-map>\\[edebug-step-mode] in any buffer.
661
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 Eval list buffer commands:
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4020 \\{edebug-eval-mode-map}
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4021
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4022 Global commands prefixed by global-edebug-prefix:
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4023 \\{global-edebug-map}
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4024 "
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4025 (lisp-interaction-mode)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4026 (setq major-mode 'edebug-eval-mode)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4027 (setq mode-name "Edebug-Eval")
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4028 (use-local-map edebug-eval-mode-map))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4029
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
4030 ;;; Interface with standard debugger.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4031
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4032 ;; (setq debugger 'edebug) ; to use the edebug debugger
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4033 ;; (setq debugger 'debug) ; use the standard debugger
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4034
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4035 ;; 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
4036 ;; 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
4037 ;; edebug is not dependent on this, yet.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4038
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4039 (defun edebug (&optional edebug-arg-mode &rest debugger-args)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4040 "Replacement for debug.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4041 If we are running an edebugged function,
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4042 show where we last were. Otherwise call debug normally."
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4043 ;; (message "entered: %s depth: %s edebug-recursion-depth: %s"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4044 ;; edebug-entered (recursion-depth) edebug-recursion-depth) (sit-for 1)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4045 (if (and edebug-entered ; anything active?
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4046 (eq (recursion-depth) edebug-recursion-depth))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4047 (let (;; Where were we before the error occurred?
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4048 (edebug-offset-index (car edebug-offset-indices))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4049 ;; Bind variables required by edebug-display
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4050 (edebug-value (car debugger-args))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4051 edebug-breakpoints
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4052 edebug-break-data
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4053 edebug-break-condition
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4054 edebug-global-break
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4055 (edebug-break (null edebug-arg-mode)) ;; if called explicitly
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4056 )
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4057 (edebug-display)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4058 (if (eq edebug-arg-mode 'error)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4059 nil
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4060 edebug-value))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4061
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4062 ;; Otherwise call debug normally.
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4063 ;; Still need to remove extraneous edebug calls from stack.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4064 (apply 'debug edebug-arg-mode debugger-args)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4065 ))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4066
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4067
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4068 (defun edebug-backtrace ()
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4069 "Display a non-working backtrace. Better than nothing..."
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4070 (interactive)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4071 (if (or (not edebug-backtrace-buffer)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4072 (null (buffer-name edebug-backtrace-buffer)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4073 (setq edebug-backtrace-buffer
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4074 (generate-new-buffer "*Backtrace*"))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4075 ;; else, could just display edebug-backtrace-buffer
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4076 )
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4077 (with-output-to-temp-buffer (buffer-name edebug-backtrace-buffer)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4078 (setq edebug-backtrace-buffer standard-output)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4079 (let ((print-escape-newlines t)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4080 (print-length 50)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4081 last-ok-point)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4082 (backtrace)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4083
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4084 ;; Clean up the backtrace.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4085 ;; Not quite right for current edebug scheme.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4086 (set-buffer edebug-backtrace-buffer)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4087 (setq truncate-lines t)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4088 (goto-char (point-min))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4089 (setq last-ok-point (point))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4090 (if t (progn
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4091
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4092 ;; Delete interspersed edebug internals.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4093 (while (re-search-forward "^ \(?edebug" nil t)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4094 (beginning-of-line)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4095 (cond
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4096 ((looking-at "^ \(edebug-after")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4097 ;; Previous lines may contain code, so just delete this line
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4098 (setq last-ok-point (point))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4099 (forward-line 1)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4100 (delete-region last-ok-point (point)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4101
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4102 ((looking-at "^ edebug")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4103 (forward-line 1)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4104 (delete-region last-ok-point (point))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4105 )))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4106 )))))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4107
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4108
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
4109 ;;; Trace display
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4110
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4111 (defun edebug-trace-display (buf-name fmt &rest args)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4112 "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
4113 The buffer is created if it does not exist.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4114 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
4115 ;; e.g.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4116 ;; (edebug-trace-display "*trace-point*"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4117 ;; "saving: point = %s window-start = %s"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4118 ;; (point) (window-start))
15782
096142df0b36 (edebug-trace-display): Save and restore current buffer.
Richard M. Stallman <rms@gnu.org>
parents: 15302
diff changeset
4119 (let* ((oldbuf (current-buffer))
096142df0b36 (edebug-trace-display): Save and restore current buffer.
Richard M. Stallman <rms@gnu.org>
parents: 15302
diff changeset
4120 (selected-window (selected-window))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4121 (buffer (get-buffer-create buf-name))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4122 buf-window)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4123 ;; (message "before pop-to-buffer") (sit-for 1)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4124 (edebug-pop-to-buffer buffer)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4125 (setq truncate-lines t)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4126 (setq buf-window (selected-window))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4127 (goto-char (point-max))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4128 (insert (apply 'edebug-format fmt args) "\n")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4129 ;; Make it visible.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4130 (vertical-motion (- 1 (window-height)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4131 (set-window-start buf-window (point))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4132 (goto-char (point-max))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4133 ;; (set-window-point buf-window (point))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4134 ;; (edebug-sit-for 0)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4135 (bury-buffer buffer)
15782
096142df0b36 (edebug-trace-display): Save and restore current buffer.
Richard M. Stallman <rms@gnu.org>
parents: 15302
diff changeset
4136 (select-window selected-window)
096142df0b36 (edebug-trace-display): Save and restore current buffer.
Richard M. Stallman <rms@gnu.org>
parents: 15302
diff changeset
4137 (set-buffer oldbuf))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4138 buf-name)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4139
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4140
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4141 (defun edebug-trace (fmt &rest args)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4142 "Convenience call to edebug-trace-display using edebug-trace-buffer"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4143 (apply 'edebug-trace-display edebug-trace-buffer fmt args))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4144
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4145
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
4146 ;;; Frequency count and coverage
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4147
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4148 (defun edebug-display-freq-count ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4149 "Display the frequency count data for each line of the current
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4150 definition. The frequency counts are inserted as comment lines after
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4151 each line, and you can undo all insertions with one `undo' command.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4152
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4153 The counts are inserted starting under the `(' before an expression
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4154 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
4155 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
4156 the same line.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4157
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4158 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
4159 are `eq', the char `=' will be appended after the count
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4160 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
4161 expression only evaluated once.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4162
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4163 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
4164 reinstrument it."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4165 (interactive)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4166 (let* ((function (edebug-form-data-symbol))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4167 (counts (get function 'edebug-freq-count))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4168 (coverages (get function 'edebug-coverage))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4169 (data (get function 'edebug))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4170 (def-mark (car data)) ; mark at def start
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4171 (edebug-points (nth 2 data))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4172 (i (1- (length edebug-points)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4173 (last-index)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4174 (first-index)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4175 (start-of-line)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4176 (start-of-count-line)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4177 (last-count)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4178 )
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4179 (save-excursion
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4180 ;; Traverse in reverse order so offsets are correct.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4181 (while (<= 0 i)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4182 ;; Start at last expression in line.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4183 (goto-char (+ def-mark (aref edebug-points i)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4184 (beginning-of-line)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4185 (setq start-of-line (- (point) def-mark)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4186 last-index i)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4187
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4188 ;; Find all indexes on same line.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4189 (while (and (<= 0 (setq i (1- i)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4190 (<= start-of-line (aref edebug-points i))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4191 ;; Insert all the indices for this line.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4192 (forward-line 1)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4193 (setq start-of-count-line (point)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4194 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
4195 last-count -1) ; cause first count to always appear.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4196 (insert ";#")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4197 ;; i == first-index still
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4198 (while (<= (setq i (1+ i)) last-index)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4199 (let ((count (aref counts i))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4200 (coverage (aref coverages i))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4201 (col (save-excursion
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4202 (goto-char (+ (aref edebug-points i) def-mark))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4203 (- (current-column)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4204 (if (= ?\( (following-char)) 0 1)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4205 (insert (make-string
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4206 (max 0 (- col (- (point) start-of-count-line))) ?\ )
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4207 (if (and (< 0 count)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4208 (not (memq coverage
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4209 '(unknown ok-coverage))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4210 "=" "")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4211 (if (= count last-count) "" (int-to-string count))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4212 " ")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4213 (setq last-count count)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4214 (insert "\n")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4215 (setq i first-index)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4216
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4217 (defun edebug-temp-display-freq-count ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4218 "Temporarily display the frequency count data for the current definition.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4219 It is removed when you hit any char."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4220 ;; 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
4221 (interactive)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4222 (let ((buffer-read-only nil))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4223 (undo-boundary)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4224 (edebug-display-freq-count)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4225 (setq unread-command-char (read-char))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4226 (undo)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4227
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4228
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
4229 ;;; Menus
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4230
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4231 (defun edebug-toggle (variable)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4232 (set variable (not (eval variable)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4233 (message "%s: %s" variable (eval variable)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4234
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4235 ;; 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
4236 ;; the easy-menu-define macro call is compiled correctly.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4237 (require 'easymenu)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4238
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4239 (defconst edebug-mode-menus
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4240 '("Edebug"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4241 "----"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4242 ["Stop" edebug-stop t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4243 ["Step" edebug-step-mode t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4244 ["Next" edebug-next-mode t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4245 ["Trace" edebug-trace-mode t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4246 ["Trace Fast" edebug-Trace-fast-mode t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4247 ["Continue" edebug-continue-mode t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4248 ["Continue Fast" edebug-Continue-fast-mode t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4249 ["Go" edebug-go-mode t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4250 ["Go Nonstop" edebug-Go-nonstop-mode t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4251 "----"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4252 ["Help" edebug-help t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4253 ["Abort" abort-recursive-edit t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4254 ["Quit to Top Level" top-level t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4255 ["Quit Nonstop" edebug-top-level-nonstop t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4256 "----"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4257 ("Jumps"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4258 ["Forward Sexp" edebug-forward-sexp t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4259 ["Step In" edebug-step-in t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4260 ["Step Out" edebug-step-out t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4261 ["Goto Here" edebug-goto-here t])
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4262
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4263 ("Breaks"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4264 ["Set Breakpoint" edebug-set-breakpoint t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4265 ["Unset Breakpoint" edebug-unset-breakpoint t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4266 ["Set Conditional Breakpoint" edebug-set-conditional-breakpoint t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4267 ["Set Global Break Condition" edebug-set-global-break-condition t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4268 ["Show Next Breakpoint" edebug-next-breakpoint t])
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4269
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4270 ("Views"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4271 ["Where am I?" edebug-where t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4272 ["Bounce to Current Point" edebug-bounce-point t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4273 ["View Outside Windows" edebug-view-outside t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4274 ["Previous Result" edebug-previous-result t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4275 ["Show Backtrace" edebug-backtrace t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4276 ["Display Freq Count" edebug-display-freq-count t])
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4277
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4278 ("Eval"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4279 ["Expression" edebug-eval-expression t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4280 ["Last Sexp" edebug-eval-last-sexp t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4281 ["Visit Eval List" edebug-visit-eval-list t])
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4282
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4283 ("Options"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4284 ["Edebug All Defs" edebug-all-defs t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4285 ["Edebug All Forms" edebug-all-forms t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4286 "----"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4287 ["Toggle Tracing" (edebug-toggle 'edebug-trace) t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4288 ["Toggle Coverage Testing" (edebug-toggle 'edebug-test-coverage) t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4289 ["Toggle Window Saving" edebug-toggle-save-windows t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4290 ["Toggle Point Saving"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4291 (edebug-toggle 'edebug-save-displayed-buffer-points) t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4292 ))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4293 "Lemacs style menus for Edebug.")
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
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
4296 ;;; Emacs version specific code
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
4297
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4298 ;;; The default for all above is Emacs 18, because it is easier to compile
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4299 ;;; Emacs 18 code in Emacs 19 than vice versa. This default will
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4300 ;;; change once most people are using Emacs 19 or derivatives.
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 ;; Epoch specific code is in a separate file: edebug-epoch.el.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4303
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4304 ;; The byte-compiler will complain about changes in number of arguments
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4305 ;; to functions like mark and read-from-minibuffer. These warnings
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4306 ;; may be ignored because the right call should always be made.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4307
6671
5b26038687ed (edebug-emacs-19-specific): Renamed from edebug-fsf19-specific.
Richard M. Stallman <rms@gnu.org>
parents: 6666
diff changeset
4308 (defun edebug-emacs-19-specific ()
6512
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 (defalias 'edebug-window-live-p 'window-live-p)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4311
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4312 ;; Mark takes an argument in Emacs 19.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4313 (defun edebug-mark ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4314 (mark t));; Does this work for lemacs too?
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4315
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4316 (defun edebug-set-conditional-breakpoint (arg condition)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4317 "Set a conditional breakpoint at nearest sexp.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4318 The condition is evaluated in the outside context.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4319 With prefix argument, make it a temporary breakpoint."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4320 ;; (interactive "P\nxCondition: ")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4321 (interactive
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4322 (list
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4323 current-prefix-arg
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4324 ;; Read condition as follows; getting previous condition is cumbersome:
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4325 (let ((edebug-stop-point (edebug-find-stop-point)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4326 (if edebug-stop-point
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4327 (let* ((edebug-def-name (car edebug-stop-point))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4328 (index (cdr edebug-stop-point))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4329 (edebug-data (get edebug-def-name 'edebug))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4330 (edebug-breakpoints (car (cdr edebug-data)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4331 (edebug-break-data (assq index edebug-breakpoints))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4332 (edebug-break-condition (car (cdr edebug-break-data)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4333 (edebug-expression-history
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4334 ;; Prepend the current condition, if any.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4335 (if edebug-break-condition
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4336 (cons edebug-break-condition read-expression-history)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4337 read-expression-history)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4338 (prog1
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4339 (read-from-minibuffer
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4340 "Condition: " nil read-expression-map t
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4341 'edebug-expression-history)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4342 (setq read-expression-history edebug-expression-history)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4343 ))))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4344 (edebug-modify-breakpoint t condition arg))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4345
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4346 (defun edebug-eval-expression (edebug-expr)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4347 "Evaluate an expression in the outside environment.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4348 If interactive, prompt for the expression.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4349 Print result in minibuffer."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4350 (interactive (list (read-from-minibuffer
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4351 "Eval: " nil read-expression-map t
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4352 'read-expression-history)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4353 (princ
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4354 (edebug-outside-excursion
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4355 (setq values (cons (edebug-eval edebug-expr) values))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4356 (edebug-safe-prin1-to-string (car values)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4357
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
4358 (easy-menu-define edebug-menu edebug-mode-map "Edebug menus" edebug-mode-menus)
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
4359 (if window-system
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
4360 (x-popup-menu nil (lookup-key edebug-mode-map [menu-bar Edebug])))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4361 )
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4362
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4363
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4364 (defun edebug-lemacs-specific ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4365
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4366 ;; We need to bind zmacs-regions to nil around all calls to `mark' and
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4367 ;; `mark-marker' but don't bind it to nil before entering a recursive edit,
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4368 ;; that is, don't interfere with the binding the user might see while
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4369 ;; executing a command.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4370
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4371 (defvar zmacs-regions)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4372
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4373 (defun edebug-mark ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4374 (let ((zmacs-regions nil))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4375 (mark)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4376
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4377 (defun edebug-mark-marker ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4378 (let ((zmacs-regions nil));; for lemacs
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4379 (mark-marker)))
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
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4382 (defun edebug-mode-menu (event)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4383 (interactive "@event")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4384 (popup-menu edebug-mode-menus))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4385
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4386 (define-key edebug-mode-map 'button3 'edebug-mode-menu)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4387 )
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4388
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4389 (defun edebug-emacs-version-specific ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4390 (cond
6671
5b26038687ed (edebug-emacs-19-specific): Renamed from edebug-fsf19-specific.
Richard M. Stallman <rms@gnu.org>
parents: 6666
diff changeset
4391 ((string-match "Lucid" emacs-version);; Lucid Emacs
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4392 (edebug-lemacs-specific))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4393
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4394 ((and (boundp 'epoch::version) epoch::version)
6671
5b26038687ed (edebug-emacs-19-specific): Renamed from edebug-fsf19-specific.
Richard M. Stallman <rms@gnu.org>
parents: 6666
diff changeset
4395 (require 'edebug-epoch))
5b26038687ed (edebug-emacs-19-specific): Renamed from edebug-fsf19-specific.
Richard M. Stallman <rms@gnu.org>
parents: 6666
diff changeset
4396
5b26038687ed (edebug-emacs-19-specific): Renamed from edebug-fsf19-specific.
Richard M. Stallman <rms@gnu.org>
parents: 6666
diff changeset
4397 ((not (string-match "^18" emacs-version))
5b26038687ed (edebug-emacs-19-specific): Renamed from edebug-fsf19-specific.
Richard M. Stallman <rms@gnu.org>
parents: 6666
diff changeset
4398 (edebug-emacs-19-specific))))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4399
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4400 (edebug-emacs-version-specific)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4401
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4402
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
4403 ;;; Byte-compiler
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
4404
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4405 ;; Extension for bytecomp to resolve undefined function references.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4406 ;; Requires new byte compiler.
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 ;; Reenable byte compiler warnings about unread-command-char and -event.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4409 ;; Disabled before edebug-recursive-edit.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4410 (eval-when-compile
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4411 (if edebug-unread-command-char-warning
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4412 (put 'unread-command-char 'byte-obsolete-variable
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4413 edebug-unread-command-char-warning))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4414 (if edebug-unread-command-event-warning
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4415 (put 'unread-command-event 'byte-obsolete-variable
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4416 edebug-unread-command-event-warning)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4417
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4418 (eval-when-compile
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4419 ;; 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
4420 ;; We only want to evaluate when actually byte compiling.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4421 ;; 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
4422 (if (featurep 'byte-compile) (progn
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4423
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4424 (defun byte-compile-resolve-functions (funcs)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4425 "Say it is OK for the named functions to be unresolved."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4426 (mapcar
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4427 (function
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4428 (lambda (func)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4429 (setq byte-compile-unresolved-functions
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4430 (delq (assq func byte-compile-unresolved-functions)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4431 byte-compile-unresolved-functions))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4432 funcs)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4433 nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4434
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4435 '(defun byte-compile-resolve-free-references (vars)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4436 "Say it is OK for the named variables to be referenced."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4437 (mapcar
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4438 (function
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4439 (lambda (var)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4440 (setq byte-compile-free-references
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4441 (delq var byte-compile-free-references))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4442 vars)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4443 nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4444
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4445 '(defun byte-compile-resolve-free-assignments (vars)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4446 "Say it is OK for the named variables to be assigned."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4447 (mapcar
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4448 (function
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4449 (lambda (var)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4450 (setq byte-compile-free-assignments
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4451 (delq var byte-compile-free-assignments))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4452 vars)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4453 nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4454
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4455 (byte-compile-resolve-functions
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4456 '(reporter-submit-bug-report
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
4457 edebug-gensym ;; also in cl.el
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4458 ;; Interfaces to standard functions.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4459 edebug-original-eval-defun
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4460 edebug-original-read
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4461 edebug-get-buffer-window
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4462 edebug-mark
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4463 edebug-mark-marker
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4464 edebug-input-pending-p
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4465 edebug-sit-for
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4466 edebug-prin1-to-string
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4467 edebug-format
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4468 ;; lemacs
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4469 zmacs-deactivate-region
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4470 popup-menu
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4471 ;; CL
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4472 cl-macroexpand-all
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
4473 ;; 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
4474 byte-compile-resolve-functions
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4475 ))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4476
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4477 '(byte-compile-resolve-free-references
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4478 '(read-expression-history
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4479 read-expression-map))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4480
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4481 '(byte-compile-resolve-free-assignments
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4482 '(read-expression-history))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4483
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4484 )))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4485
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4486
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
4487 ;;; Autoloading of Edebug accessories
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4488
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4489 (if (featurep 'cl)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4490 (add-hook 'edebug-setup-hook
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4491 (function (lambda () (require 'cl-specs))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4492 ;; 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
4493 (add-hook 'cl-load-hook
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4494 (function (lambda () (require 'cl-specs)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4495
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
4496 ;;; 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
4497 (if (featurep 'cl-read)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4498 (add-hook 'edebug-setup-hook
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4499 (function (lambda () (require 'edebug-cl-read))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4500 ;; 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
4501 (add-hook 'cl-read-load-hooks
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4502 (function (lambda () (require 'edebug-cl-read)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4503
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4504
14846
e72246089ebc Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 6761
diff changeset
4505 ;;; Finalize Loading
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4506
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4507 ;;; Finally, hook edebug into the rest of Emacs.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4508 ;;; There are probably some other things that could go here.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4509
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4510 ;; Install edebug read and eval functions.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4511 (edebug-install-read-eval-functions)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4512
3350
c9689f8d0574 Provide edebug.
Richard M. Stallman <rms@gnu.org>
parents: 2629
diff changeset
4513 (provide 'edebug)
c9689f8d0574 Provide edebug.
Richard M. Stallman <rms@gnu.org>
parents: 2629
diff changeset
4514
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4515 ;;; edebug.el ends here