annotate lisp/emacs-lisp/edebug.el @ 6512:c79a6bf75daa

New version from author.
author Daniel LaLiberte <liberte@gnu.org>
date Thu, 24 Mar 1994 20:38:34 +0000
parents d90fbaccf96a
children c6430bc570f9
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1 ;;; edebug.el --- a source-level debugger for Emacs Lispl
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3 ;; Copyright (C) 1988,'89,'90,'91,'92,'93,'94 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.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
11 ;; |$Date: 1994/03/23 20:30:36 $|$Revision: 3.4 $|~/modes/edebug.el|
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
12
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
13 ;; Emacs maintainers: Please inform me of any changes to this code.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
14 ;; Better yet, ask me first.
2307
10e417efb12a Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2247
diff changeset
15
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
16 ;; This file is part of GNU Emacs.
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
17
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
18 ;; 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
19 ;; 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
20 ;; 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
21 ;; any later version.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
22
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
23 ;; 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
24 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
25 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
26 ;; GNU General Public License for more details.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
27
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
28 ;; You should have received a copy of the GNU General Public License
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
29 ;; along with GNU Emacs; see the file COPYING. If not, write to
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
30 ;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
31
846
20674ae6bf52 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 778
diff changeset
32 ;;;; Commentary:
20674ae6bf52 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 778
diff changeset
33
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
34 ;;; This minor mode allows programmers to step through Emacs Lisp
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
35 ;;; source code while executing functions. You can also set
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
36 ;;; breakpoints, trace (stopping at each expression), evaluate
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
37 ;;; expressions as if outside Edebug, reevaluate and display a list of
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
38 ;;; expressions, trap errors normally caught by debug, and display a
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
39 ;;; debug style backtrace.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
40
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
41 ;;;; Installation
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
42 ;;; =============
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
43
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
44 ;;; Put edebug.el in some directory in your load-path and
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
45 ;;; byte-compile it. Also read the beginning of edebug-epoch.el,
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
46 ;;; cl-specs.el, and edebug-cl-read.el if they apply to you.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
47
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
48 ;;; Unless you are using Emacs 19 which is already set up to use Edebug,
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
49 ;;; put the following forms in your .emacs file.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
50 ;;; (define-key emacs-lisp-mode-map "\C-xx" 'edebug-eval-top-level-form)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
51 ;;; (autoload 'edebug-eval-top-level-form "edebug")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
52
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
53 ;;; If you wish to change the default edebug global command prefix, change:
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
54 ;;; (setq edebug-global-prefix "\C-xX")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
55
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
56 ;;; Other options, are described in the manual.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
57
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
58 ;;; In previous versions of Edebug, users were directed to set
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
59 ;;; `debugger' to `edebug-debug'. This is no longer necessary
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
60 ;;; since Edebug automatically sets it whenever Edebug is active.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
61
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
62 ;;;; Minimal Instructions
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
63 ;;; =====================
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
64
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
65 ;;; First evaluate a defun with C-xx, then run the function. Step
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
66 ;;; through the code with SPC, mark breakpoints with b, go until a
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
67 ;;; breakpoint is reached with g, and quit execution with q. Use the
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
68 ;;; "?" command in edebug to describe other commands. See edebug.tex
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
69 ;;; or the Emacs 19 Lisp Reference Manual for more instructions.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
70
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
71 ;;; Send me your enhancements, ideas, bugs, or fixes.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
72 ;;; For bugs, you can call edebug-submit-bug-report if you have reporter.el.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
73 ;;; There is an edebug mailing list if you want to keep up
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
74 ;;; with the latest developments. Requests to: edebug-request@cs.uiuc.edu
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
75
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
76 ;;; Daniel LaLiberte 217-398-4114
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
77 ;;; University of Illinois, Urbana-Champaign
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
78 ;;; Department of Computer Science
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
79 ;;; 1304 W Springfield
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
80 ;;; Urbana, IL 61801
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
81
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
82 ;;; uiucdcs!liberte
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
83 ;;; liberte@cs.uiuc.edu
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
84
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
85 ;;; ===============================
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
86 ;;; $Header: /import/kaplan/kaplan/liberte/Edebug/RCS/edebug.el,v 3.4 1994/03/23 20:30:36 liberte Exp liberte $
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
87 ;;;
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
88 ;;; $Log: edebug.el,v $
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
89 ;;; Revision 3.4 1994/03/23 20:30:36 liberte
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
90 ;;; * Fixed trapping of handled signals.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
91 ;;; * Stop incrementing max-lisp-eval-depth and max-specpdl-size so much.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
92 ;;; * Change "i" command to really step in; new "I" command only instruments.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
93 ;;; Neither jumps back to current stop point anymore.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
94 ;;; * Added experimental edebug-on-entry and cancel-edebug-on-entry.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
95 ;;; * Always require easymenu, so it byte-compiles correctly.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
96 ;;; * Use elisp-eval-region package, which is also used by cl-read.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
97 ;;; * Simplified edebug-cl-read at the expense of complexifying cl-read.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
98 ;;; * Fix circular load problems with cl-specs and cl-read.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
99 ;;;
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
100 ;;; Revision 3.3 1994/02/21 21:35:11 liberte
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
101 ;;; * Byte compiles with fewer warnings.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
102 ;;; * Removed support for dotted lists in backquote - it's too expensive.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
103 ;;; * Added edebug-` for debugging backquoted code.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
104 ;;; * Renamed "fence" to "gate" because it inhibits backtracking.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
105 ;;; * Common menus for Emacs 19 and lemacs using easymenus.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
106 ;;; * Support Emacs 19 read-expression-history.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
107 ;;; * Support debugging of lexical bindings from cl.el, version 2.03.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
108 ;;; * Generalize tracing and add macro: edebug-tracing.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
109 ;;; * Correct live window checking.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
110 ;;; * Each definition remembers which window it was last debugged in.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
111 ;;; * Individual windows may be saved and restored.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
112 ;;; * Save and restore Emacs 19 events and mouse tracking.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
113 ;;; * Handled signals may be trapped by Edebug. But disabled for now.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
114 ;;;
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
115 ;;; Revision 3.2 1993/09/21 21:06:30 liberte
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
116 ;;; * Don't define keywordp if already defined (by cl.el).
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
117 ;;; * Clean up docs of edebug versions of eval-defun, eval-region, etc.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
118 ;;; * Add :name spec for specifying additional name components.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
119 ;;; * Replace "Not enough arguments" by what was expected.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
120 ;;; * Replace "Too many arguments" for a list spec to say what was expected.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
121 ;;; * Support &define again in middle of specs, (e.g. cl lambda expressions)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
122 ;;; * Fix "vector" specs to not be order dependent.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
123 ;;; * Simplify and correct spec of def-edebug-spec.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
124 ;;; * Require at least one arg after &optional in lambda-list.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
125 ;;; * Added edebug-cl-read.el to support cl read syntax, using cl-read.el.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
126 ;;; * Allow forms to start with \# and \` as well as \(, for cl-read.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
127 ;;; * Support #' for function quoting, used by lemacs.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
128 ;;; * Make GUD bindings for all emacs-lisp-mode buffers.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
129 ;;;
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
130 ;;; Revision 3.1 1993/08/04 16:25:05 liberte
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
131 ;;; * For compatability with older version of Edebug, I added
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
132 ;;; edebug-all-defuns and def-edebug-form-spec. Dont use them.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
133 ;;; * Fixed bad argument in def-edebug-spec.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
134 ;;; * Only use edebug-print-* options if non-nil.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
135 ;;; * Fixed edebug-display-freq-count.
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
136 ;;;
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
137 ;;; Revision 3.0 1993/07/17 22:15:39 liberte
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
138 ;;; * Added edebug-setup-hook called when edebug is used.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
139 ;;; * Added predicates: keywordp and lambda-list-keywordp.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
140 ;;; * Changed the name of custom-print.el to cust-print.el,
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
141 ;;; but Lisp variables and functions still use "custom-".
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
142 ;;; * Changed names of replacement eval functions (eval-region, etc) to
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
143 ;;; add "edebug-" prefix. Then replace the standard functions
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
144 ;;; in edebug-install-eval-functions called at end of file.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
145 ;;; * In edebug-eval-region, bind standard-output only while printing.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
146 ;;; * Change def-edebug-form to def-edebug-spec.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
147 ;;; * Replace the parser to first read the form with positions using
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
148 ;;; edebug-read, then parse its structure.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
149 ;;; * Parsing uses generalized "edebug-match-" functions for matching specs.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
150 ;;; * Generalize handling of keyword specs (e.g. &something) to implicitly
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
151 ;;; bracket all following specs.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
152 ;;; * Added new specs: arg, lambda-expr, place, gate, &key, and nil.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
153 ;;; * Changed arglist to lambda-list.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
154 ;;; * def-form macro does not assume arguments defined.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
155 ;;; * Added support for dotted forms (with dotted spec lists and nil),
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
156 ;;; vectors, and the new backquote that supports nested backquotes.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
157 ;;; * Added utilities edebug-unwrap and edebug-unwrap*
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
158 ;;; * Support emacs 19 "lambda" macros.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
159 ;;; * Moved cl.el support to cl-specs.el. Many fixes, thanks to Dave Gillespie.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
160 ;;; * Added specs for advice.el by Hans Chalupsky (hans@cs.buffalo.edu).
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
161 ;;; * Changed edebug-step-through-mode to edebug-step-mode.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
162 ;;; * Make setting of the initial execution mode outside of edebug change
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
163 ;;; the mode once, rather than using edebug-initial-mode.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
164 ;;; * Fix tracing so breakpoints stop.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
165 ;;; * Check while edebugging whether source was changed.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
166 ;;; * Fix edebug-step-in.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
167 ;;; * Added: edebug-print-length, edebug-print-level, edebug-print-circle.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
168 ;;; * Do all edebug evaluations safely (in condition-case) and
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
169 ;;; if custom-print is being used, print safely.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
170 ;;; * Add bindings compatible with GUD standard.
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
171 ;;;
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 ;;; For the rest of the revision history, see edebug-history.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
174
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
175 (defconst edebug-version
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
176 (let ((raw-version "$Revision: 3.4 $"))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
177 (substring raw-version (string-match "[0-9.]*" raw-version 11)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
178 (match-end 0))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
179
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
180 (require 'backquote)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
181
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
182 ;; Emacs 18 doesnt have defalias.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
183 (eval-and-compile
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
184 (or (fboundp 'defalias) (fset 'defalias 'fset)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
185
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
186
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
187 ;;;; Bug reporting
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
188 ;;; ==============
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
189
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
190 (defconst edebug-maintainer-address "liberte@cs.uiuc.edu")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
191
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
192 (defun edebug-submit-bug-report ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
193 "Submit, via mail, a bug report on edebug."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
194 (interactive)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
195 (require 'reporter)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
196 (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
197 (reporter-submit-bug-report
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
198 edebug-maintainer-address
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
199 (concat "edebug.el " edebug-version)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
200 (list 'edebug-setup-hook
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
201 'edebug-all-defs
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
202 'edebug-all-forms
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
203 'edebug-eval-macro-args
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
204 'edebug-stop-before-symbols
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
205 'edebug-save-windows
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
206 'edebug-save-displayed-buffer-points
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
207 'edebug-initial-mode
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
208 'edebug-trace
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
209 'edebug-test-coverage
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
210 'edebug-continue-kbd-macro
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
211 'edebug-print-length
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
212 'edebug-print-level
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
213 'edebug-print-circle
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
214 ))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
215
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 ;;;; Options
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
218 ;;; ===============================
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
219
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
220 (defvar edebug-setup-hook nil
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
221 "*Functions to call before edebug is used.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
222 Its value is reset to nil after being used, so each time it is set
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
223 to a new function, that function will be called once and only once.")
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-all-defs nil
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
226 "*If non-nil, evaluation of any defining forms will use Edebug.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
227 `eval-defun' without prefix arg and `eval-region' will use
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
228 `edebug-eval-top-level-form'.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
229
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
230 If nil, `eval-region' evaluates normally, but `eval-defun' with prefix arg
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
231 uses `edebug-eval-top-level-form'. `eval-region' is called by `eval-defun',
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
232 `eval-last-sexp', and `eval-print-last-sexp'.
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 You can use the command `edebug-all-defs' to toggle the value of this
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
235 variable. You may wish to make this variable local to each
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
236 buffer with (make-local-variable 'edebug-all-defs) in your
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
237 `emacs-lisp-mode-hook'.")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
238
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
239 (defvar edebug-all-forms nil
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
240 "*Non-nil means edebug the evaluation of all forms.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
241 This doesn't apply to loading or evaluations in the minibuffer.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
242 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
243
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
244 (defvar edebug-eval-macro-args nil
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
245 "*Non-nil means all macro call arguments may be evaluated.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
246 If this variable is nil, the default, edebug will *not* wrap
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
247 macro call arguments as if they will be evaluated.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
248 For each macro, a edebug-form-spec overrides this option.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
249 So to specify exceptions for macros that have some arguments evaluated
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
250 and some not, you should specify an edebug-form-spec.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
251
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
252 This option is going away soon.")
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
253
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
254 (defvar edebug-stop-before-symbols nil
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
255 "*Non-nil causes edebug to stop before symbols as well as after.
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
256 In any case, it is possible to stop before a symbol with a breakpoint or
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
257 interrupt.")
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
258
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
259 (defvar edebug-save-windows t
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
260 "*If non-nil, save and restore window configuration on edebug calls.
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
261 It takes some time to save and restore, so if your program does not care
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
262 what happens to the window configurations, it is better to set this
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
263 variable to nil.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
264
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
265 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
266 restored.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
267
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
268 `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
269
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
270 (defvar edebug-save-displayed-buffer-points nil
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
271 "*If non-nil, save and restore the points of all displayed buffers.
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
272
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
273 Saving and restoring buffer points is necessary if you are debugging
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
274 code that changes the point of a buffer which is displayed in a
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
275 non-selected window. If edebug or the user then selects the
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
276 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
277
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
278 But this is an expensive operation since it visits each
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
279 window and therefore each displayed buffer twice for each edebug call,
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
280 so it is best to avoid it if you can.")
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
281
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
282 (defvar edebug-initial-mode 'step
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
283 "*Initial execution mode for Edebug, if non-nil.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
284 This is used when edebug is first entered for each recursive-edit
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
285 level. Possible values are nil (which means leave
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
286 edebug-execution-mode as is), step, (the default), next, go,
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
287 Go-nonstop, trace, Trace-fast, continue, and Continue-fast.")
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
288
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
289 (defvar edebug-trace nil
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
290 "*Non-nil if edebug should show a trace of function entry and exit.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
291 Tracing output is displayed in a buffer named by the variable
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
292 edebug-trace-buffer, one function entry or exit per line, indented by
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
293 the stack depth. You can customize by replacing functions
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
294 edebug-print-trace-before and edebug-print-trace-after.")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
295
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
296 (defvar edebug-test-coverage nil
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
297 "*If non-nil, Edebug tests coverage of all expressions debugged.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
298 This is done by comparing the result of each expression
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
299 with the previous result. Coverage is considered OK if two different
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
300 results are found. So to sufficiently test the coverage of your code,
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
301 try to execute it under conditions that evaluate all expressions more
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
302 than once, and produce different results for each expression.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
303
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
304 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
305 coverage information for a definition.")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
306
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
307 (defvar edebug-continue-kbd-macro nil
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
308 "*If non-nil, continue executing any keyboard macro that is
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
309 executing outside. Use this with caution since it is not debugged.")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
310
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
311 (defvar edebug-global-break-condition nil
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
312 "*If non-nil, an expression to test for at every stop point.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
313 If the result is non-nil, then break. Errors are ignored.")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
314
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
315
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
316 (defvar edebug-print-length 50
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
317 "*Default value of print-length to use while printing results in edebug.")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
318 (defvar edebug-print-level 50
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
319 "*Default value of print-level to use while printing results in edebug.")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
320 (defvar edebug-print-circle t
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
321 "*Default value of print-circle to use while printing results in edebug.")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
322
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
323 (defvar edebug-unwrap-results nil
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
324 "*Non-nil if Edebug should unwrap results of expressions.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
325 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
326 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
327 circular or an infinite loop will result.")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
328
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
329 (defvar edebug-on-error t
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
330 "*Value bound to `debug-on-error' while Edebug is active.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
331
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
332 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
333
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
334 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
335 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
336 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
337 signals that *are* handled since they would otherwise be missed.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
338 After execution is resumed, the error is signaled again.")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
339
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
340 (defvar edebug-on-quit t
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
341 "*Value bound to `debug-on-quit' while Edebug is active.")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
342
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
343 ;;;; Form spec utilities.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
344 ;;; ===============================
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
345
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
346 ;;;###autoload
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
347 (defmacro def-edebug-spec (symbol spec)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
348 "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
349 Both SYMBOL and SPEC are unevaluated. The SPEC can be 0, t, a symbol
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
350 (naming a function), or a list."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
351 (` (put (quote (, symbol)) 'edebug-form-spec (quote (, spec)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
352
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
353 (defmacro def-edebug-form-spec (symbol spec-form)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
354 "For compatibility with old version. Use def-edebug-spec instead."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
355 (message "Obsolete: use def-edebug-spec instead.")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
356 (def-edebug-spec symbol (eval spec-form)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
357
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
358 (defun get-edebug-spec (symbol)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
359 ;; Get the spec of symbol resolving all indirection.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
360 (let ((edebug-form-spec (get symbol 'edebug-form-spec))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
361 indirect)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
362 (while (and (symbolp edebug-form-spec)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
363 (setq indirect (get edebug-form-spec 'edebug-form-spec)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
364 ;; (edebug-trace "indirection: %s" edebug-form-spec)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
365 (setq edebug-form-spec indirect))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
366 edebug-form-spec
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
367 ))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
368
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
369
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
370 ;;;; Utilities
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
371 ;;; ===============================
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
372
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
373 (if (not (fboundp 'gensym))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
374 (progn
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
375
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
376 ;; Define gensym - from old cl.el
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
377 (defvar *gensym-index* 0
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
378 "Integer used by gensym to produce new names.")
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 (defun gensym (&optional prefix)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
381 "Generate a fresh uninterned symbol.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
382 There is an optional argument, PREFIX. PREFIX is the
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
383 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
384 except when debugging needs suggest otherwise."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
385 (if (null prefix)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
386 (setq prefix "G"))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
387 (let ((newsymbol nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
388 (newname ""))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
389 (while (not newsymbol)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
390 (setq newname (concat prefix *gensym-index*))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
391 (setq *gensym-index* (+ *gensym-index* 1))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
392 (if (not (intern-soft newname))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
393 (setq newsymbol (make-symbol newname))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
394 newsymbol))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
395 ))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
396
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
397 (if (not (fboundp 'keywordp))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
398 (defun keywordp (object)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
399 "Return t if OBJECT is a keyword.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
400 A keyword is a symbol that starts with "":""."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
401 (and (symbolp object)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
402 (= ?: (aref (symbol-name object) 0)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
403
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
404 (defun lambda-list-keywordp (object)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
405 "Return t if OBJECT is a lambda list keyword.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
406 A lambda list keyword is a symbol that starts with ""&""."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
407 (and (symbolp object)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
408 (= ?& (aref (symbol-name object) 0))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
409
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
410
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
411 (defun edebug-last-sexp ()
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
412 ;; Return the last sexp before point in current buffer.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
413 Assumes elisp syntax is active.
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
414 (car
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
415 (read-from-string
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
416 (buffer-substring
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
417 (save-excursion
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
418 (forward-sexp -1)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
419 (point))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
420 (point)))))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
421
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
422 (defun edebug-window-list ()
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
423 "Return a list of windows, in order of next-window."
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
424 ;; This doesnt work for epoch.
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
425 (let* ((first-window (selected-window))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
426 (window-list (list first-window))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
427 (next (next-window first-window)))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
428 (while (not (eq next first-window))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
429 (setq window-list (cons next window-list))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
430 (setq next (next-window next)))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
431 (nreverse window-list)))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
432
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
433 (defun edebug-window-live-p (window)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
434 "Return non-nil if WINDOW is visible."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
435 (let* ((first-window (selected-window))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
436 (next (next-window first-window t)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
437 (while (not (or (eq next window)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
438 (eq next first-window)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
439 (setq next (next-window next t)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
440 (eq next window)))
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 ;; Not used.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
443 '(defun edebug-two-window-p ()
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
444 "Return t if there are two windows."
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
445 (and (not (one-window-p))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
446 (eq (selected-window)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
447 (next-window (next-window (selected-window))))))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
448
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
449 (defsubst edebug-lookup-function (object)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
450 (while (and (symbolp object) (fboundp object))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
451 (setq object (symbol-function object)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
452 object)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
453
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
454 (defun edebug-macrop (object)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
455 "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
456 (setq object (edebug-lookup-function object))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
457 (if (and (listp object)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
458 (eq 'macro (car object))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
459 (edebug-functionp (cdr object)))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
460 object))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
461
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
462 (defun edebug-functionp (object)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
463 "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
464 (setq object (edebug-lookup-function object))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
465 (if (or (subrp object)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
466 (and (listp object)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
467 (eq (car object) 'lambda)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
468 (listp (car (cdr object)))))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
469 object))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
470
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
471 (defun edebug-sort-alist (alist function)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
472 ;; Return the ALIST sorted with comparison function FUNCTION.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
473 ;; This uses 'sort so the sorting is destructive.
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
474 (sort alist (function
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
475 (lambda (e1 e2)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
476 (funcall function (car e1) (car e2))))))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
477
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
478 ;;(def-edebug-spec edebug-save-restriction t)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
479
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
480 ;; 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
481 '(defmacro edebug-save-restriction (&rest body)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
482 "Evaluate BODY while saving the current buffers restriction.
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
483 BODY may change buffer outside of current restriction, unlike
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
484 save-restriction. BODY may change the current buffer,
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
485 and the restriction will be restored to the original buffer,
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
486 and the current buffer remains current.
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
487 Return the result of the last expression in BODY."
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
488 (` (let ((edebug:s-r-beg (point-min-marker))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
489 (edebug:s-r-end (point-max-marker)))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
490 (unwind-protect
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
491 (progn (,@ body))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
492 (save-excursion
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
493 (set-buffer (marker-buffer edebug:s-r-beg))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
494 (narrow-to-region edebug:s-r-beg edebug:s-r-end))))))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
495
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
496 ;;;; Display
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
497 ;;; ============
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
498
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
499 (defconst edebug-trace-buffer "*edebug-trace*"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
500 "Name of the buffer to put trace info in.")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
501
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
502 (defun edebug-pop-to-buffer (buffer &optional window)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
503 ;; 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
504 ;; Select WINDOW if it provided and it still exists. Otherwise,
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
505 ;; if buffer is currently shown in several windows, choose one.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
506 ;; Otherwise, find a new window, possibly splitting one.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
507 (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
508 (eq (window-buffer window) buffer))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
509 window
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
510 (if (eq (window-buffer (selected-window)) buffer)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
511 (selected-window)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
512 (edebug-get-buffer-window buffer))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
513 (if window
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
514 (select-window window)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
515 (if (one-window-p)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
516 (split-window))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
517 ;; (message "next window: %s" (next-window)) (sit-for 1)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
518 (if (eq (get-buffer-window edebug-trace-buffer) (next-window))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
519 ;; Dont select trace window
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
520 nil
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
521 (select-window (next-window))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
522 (set-window-buffer (selected-window) buffer)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
523 (set-window-hscroll (selected-window) 0);; should this be??
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
524 ;; 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
525 ;;(set-buffer buffer)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
526 )
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
527
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 (defun edebug-get-displayed-buffer-points ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
530 ;; 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
531 (save-excursion
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
532 (let* ((first-window (selected-window))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
533 (next (next-window first-window))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
534 (buffer-point-list nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
535 buffer)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
536 (while (not (eq next first-window))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
537 (set-buffer (setq buffer (window-buffer next)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
538 (setq buffer-point-list
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
539 (cons (cons buffer (point)) buffer-point-list))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
540 (setq next (next-window next)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
541 buffer-point-list)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
542
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
543
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
544 (defun edebug-set-buffer-points (buffer-points)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
545 ;; 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
546 (let ((current-buffer (current-buffer)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
547 (mapcar (function (lambda (buf-point)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
548 (if (buffer-name (car buf-point)) ; still exists
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
549 (progn
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
550 (set-buffer (car buf-point))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
551 (goto-char (cdr buf-point))))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
552 buffer-points)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
553 (set-buffer current-buffer)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
554
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
555 (defun edebug-current-windows (which-windows)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
556 ;; Get either a full window configuration or some window information.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
557 (if (listp which-windows)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
558 (mapcar (function (lambda (window)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
559 (if (edebug-window-live-p window)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
560 (list window
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
561 (window-buffer window)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
562 (window-point window)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
563 (window-start window)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
564 (window-hscroll window)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
565 which-windows)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
566 (current-window-configuration)))
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-set-windows (window-info)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
569 ;; Set either a full window configuration or some window information.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
570 (if (listp window-info)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
571 (mapcar (function
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
572 (lambda (one-window-info)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
573 (if one-window-info
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
574 (apply (function
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
575 (lambda (window buffer point start hscroll)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
576 (if (edebug-window-live-p window)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
577 (progn
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
578 (set-window-buffer window buffer)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
579 (set-window-point window point)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
580 (set-window-start window start)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
581 (set-window-hscroll window hscroll)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
582 one-window-info))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
583 window-info)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
584 (set-window-configuration window-info)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
585
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
586 (defalias 'edebug-get-buffer-window 'get-buffer-window)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
587 (defalias 'edebug-sit-for 'sit-for)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
588 (defalias 'edebug-input-pending-p 'input-pending-p)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
589
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
590
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
591 ;;;; Redefine read and eval functions
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
592 ;;; =================================
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
593 ;;; read is redefined to maybe instrument forms.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
594 ;;; eval-defun is redefined to check edebug-all-forms and edebug-all-defs.
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 ;;; Use the Lisp version of eval-region.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
597 (require 'elisp-eval-region "eval-region")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
598
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
599 ;; Save the original read function
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
600 (or (fboundp 'edebug-original-read)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
601 (defalias 'edebug-original-read (symbol-function 'read)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
602
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
603 (defun edebug-read (stream)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
604 "Read a Lisp expression as text from STREAM, return as Lisp object.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
605 For this version, from Edebug, STREAM must be nil, which means use the
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
606 current buffer. This version maybe instruments the expression after
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
607 reading it, depending on the values of `edebug-all-defs' and
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
608 `edebug-all-forms'."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
609 (if (or (null stream) (eq stream (current-buffer)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
610 (edebug-read-and-maybe-wrap-form)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
611 (edebug-original-read stream)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
612
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
613
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
614 (defmacro with-edebug-read (&rest body)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
615 ;; Temporarily set the read routine to edebug-read.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
616 (` (unwind-protect
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
617 (progn
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
618 (fset 'read 'edebug-read)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
619 (,@ body))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
620 (fset 'read 'edebug-original-read))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
621
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
622
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
623 (or (fboundp 'edebug-original-eval-defun)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
624 (defalias 'edebug-original-eval-defun (symbol-function 'eval-defun)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
625
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
626 (defun edebug-eval-defun (edebug-it)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
627 "Evaluate the top-level form containing point, or after point.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
628
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
629 This version, from Edebug, has the following differences: With a
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
630 prefix argument instrument the code for Edebug. If edebug-all-defs is
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
631 non-nil, then the code is instrumented *unless* there is a prefix
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
632 argument. If instrumenting, it prints: \"Edebug: <function name>\".
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
633 Otherwise, it prints in the minibuffer."
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
634 (interactive "P")
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
635 (let ((edebugging (not (eq (not edebug-it) (not edebug-all-defs))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
636 (edebug-result))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
637 (setq edebug-result
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
638 (eval
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
639 (let ((edebug-all-forms edebugging)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
640 (edebug-all-defs (and edebug-all-defs (not edebug-it))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
641 (edebug-read-top-level-form))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
642 (if (not edebugging)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
643 (princ edebug-result)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
644 edebug-result)))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
645
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
646
727
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 661
diff changeset
647 ;;;###autoload
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
648 (defalias 'edebug-defun 'edebug-eval-top-level-form)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
649
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
650 ;;;###autoload
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
651 (defun edebug-eval-top-level-form ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
652 "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
653 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
654 Print its name in the minibuffer and leave point where it is,
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
655 or if an error occurs, leave point after it with mark at the original
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
656 point."
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
657 (interactive)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
658 (eval
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
659 ;; Bind edebug-all-forms only while reading, not while evaling
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
660 ;; but this causes problems while edebugging edebug.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
661 (let ((edebug-all-forms t))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
662 (edebug-read-top-level-form))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
663
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
664
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
665 (defun edebug-read-top-level-form ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
666 (let ((starting-point (point)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
667 (end-of-defun)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
668 (beginning-of-defun)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
669 (prog1
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
670 (edebug-read-and-maybe-wrap-form)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
671 ;; Recover point, but only if no error occurred.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
672 (goto-char starting-point))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
673
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
674
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
675 ;; Compatibility with old versions.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
676 (defalias 'edebug-all-defuns 'edebug-all-defs)
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-all-defs ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
679 "Toggle edebugging of all definitions."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
680 (interactive)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
681 (setq edebug-all-defs (not edebug-all-defs))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
682 (message "Edebugging all definitions is %s."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
683 (if edebug-all-defs "on" "off")))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
684
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
685
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
686 (defun edebug-all-forms ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
687 "Toggle edebugging of all forms."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
688 (interactive)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
689 (setq edebug-all-forms (not edebug-all-forms))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
690 (message "Edebugging all forms is %s."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
691 (if edebug-all-forms "on" "off")))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
692
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
693
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
694 ;; These two should always be used in pairs, or just install once and
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
695 ;; never uninstall.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
696 (defun edebug-install-read-eval-functions ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
697 (interactive)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
698 (install-elisp-eval-region)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
699 (defalias 'read 'edebug-read)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
700 (defalias 'eval-defun 'edebug-eval-defun))
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 (defun edebug-uninstall-read-eval-functions ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
703 (interactive)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
704 (uninstall-elisp-eval-region)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
705 (defalias 'read 'edebug-original-read)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
706 (defalias 'eval-defun (symbol-function 'edebug-emacs-eval-defun)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
707
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
708
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
709 ;;;; Edebug internal data
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
710 ;;; ===============================
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
711
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
712 ;;; The internal data that is needed for edebugging is kept in the
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
713 ;;; buffer-local variable `edebug-form-data'.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
714
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
715 (make-variable-buffer-local 'edebug-form-data)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
716
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
717 (defconst edebug-form-data nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
718 ;; A list of entries associating symbols with buffer regions.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
719 ;; 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
720 ;; @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
721 ;; 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
722 ;; 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
723 ;; property list.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
724
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
725 ;; 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
726 ;; 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
727 ;; list of a symbol.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
728
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
729 (defun edebug-make-form-data-entry (symbol begin end)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
730 (list symbol begin end))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
731
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
732 (defsubst edebug-form-data-name (entry)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
733 (car entry))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
734
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
735 (defsubst edebug-form-data-begin (entry)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
736 (nth 1 entry))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
737
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
738 (defsubst edebug-form-data-end (entry)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
739 (nth 2 entry))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
740
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
741 (defsubst edebug-set-form-data-entry (entry name begin end)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
742 (setcar entry name);; in case name is changed
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
743 (set-marker (nth 1 entry) begin)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
744 (set-marker (nth 2 entry) end))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
745
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
746 (defun edebug-get-form-data-entry (pnt &optional end-point)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
747 ;; 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
748 ;; If END-POINT is supplied, match must be exact.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
749 ;; Return `nil' if none found.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
750 (let ((rest edebug-form-data)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
751 closest-entry
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
752 (closest-dist 999999)) ;; need maxint here
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
753 (while (and rest (< 0 closest-dist))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
754 (let* ((entry (car rest))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
755 (begin (edebug-form-data-begin entry))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
756 (dist (- pnt begin)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
757 (setq rest (cdr rest))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
758 (if (and (<= 0 dist)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
759 (< dist closest-dist)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
760 (or (not end-point)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
761 (= end-point (edebug-form-data-end entry)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
762 (<= pnt (edebug-form-data-end entry)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
763 (setq closest-dist dist
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
764 closest-entry entry))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
765 closest-entry))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
766
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
767 ;; Also need to find all contained entries,
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
768 ;; 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
769
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
770 (defun edebug-form-data-symbol ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
771 ;; 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
772 ;; If point is not inside a edebuggable form, cause error.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
773 (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
774 (error "Not inside instrumented form")))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
775
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
776 (defun edebug-make-top-form-data-entry (new-entry)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
777 ;; 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
778 (edebug-clear-form-data-entry new-entry)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
779 (setq edebug-form-data (cons new-entry edebug-form-data)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
780
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
781 (defun edebug-clear-form-data-entry (entry)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
782 ;; If non-nil, clear ENTRY out of the form data.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
783 ;; 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
784 (if entry
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
785 (progn
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
786 ;; Instead of this, we could just find all contained forms.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
787 ;; (put (car entry) 'edebug nil) ;
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
788 ;; (mapcar 'edebug-clear-form-data-entry ; dangerous
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
789 ;; (get (car entry) 'edebug-dependents))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
790 ;; (set-marker (nth 1 entry) nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
791 ;; (set-marker (nth 2 entry) nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
792 (setq edebug-form-data (delq entry edebug-form-data)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
793
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
794
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
795 ;;;; Parser utilities
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
796 ;;; ===============================
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
797
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
798
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
799 (defun edebug-syntax-error (&rest args)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
800 ;; Signal an invalid-read-syntax with ARGS.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
801 (signal 'invalid-read-syntax args))
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 (defconst edebug-read-syntax-table
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
805 ;; Lookup table for significant characters indicating the class of the
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
806 ;; token that follows. This is not a \"real\" syntax table.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
807 (let ((table (make-vector 256 'symbol))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
808 (i 0))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
809 (while (< i ?!)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
810 (aset table i 'space)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
811 (setq i (1+ i)))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
812 (aset table ?\( 'lparen)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
813 (aset table ?\) 'rparen)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
814 (aset table ?\' 'quote)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
815 (aset table ?\" 'string)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
816 (aset table ?\? 'char)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
817 (aset table ?\[ 'lbracket)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
818 (aset table ?\] 'rbracket)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
819 (aset table ?\. 'dot)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
820 (aset table ?\# 'hash)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
821 ;; We treat numbers as symbols, because of confusion with -, -1, and 1-.
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
822 ;; We dont care about any other chars since they wont be seen.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
823 table))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
824
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
825 (defun edebug-next-token-class ()
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
826 ;; Move to the next token and return its class. We only care about
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
827 ;; lparen, rparen, dot, quote, string, char, vector, or symbol.
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
828 (edebug-skip-whitespace)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
829 (aref edebug-read-syntax-table (following-char)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
830
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
831
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
832 (defun edebug-skip-whitespace ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
833 ;; 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
834 (skip-chars-forward " \t\r\n\f")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
835 (while (= (following-char) ?\;)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
836 ;; \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
837 (skip-chars-forward "^\n\r") ; skip the comment
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
838 (skip-chars-forward " \t\r\n\f")))
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
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
841 ;; Mostly obsolete reader; still used in one case.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
842
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
843 (defun edebug-read-sexp ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
844 ;; Read one sexp from the current buffer starting at point.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
845 ;; 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
846 ;; 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
847 ;; This works for reading anything legitimate, but it
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
848 ;; is gummed up by parser inconsistencies (bugs?)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
849 (let ((class (edebug-next-token-class)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
850 (cond
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
851 ;; 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
852 ;; is immediately followed by non-whitespace.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
853 ((eq class 'symbol) (prog1
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
854 (edebug-original-read (current-buffer))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
855 (if (not (eq (aref edebug-read-syntax-table
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
856 (preceding-char)) 'symbol))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
857 (forward-char -1))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
858 ((eq class 'string) (prog1
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
859 (edebug-original-read (current-buffer))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
860 (if (/= (preceding-char) ?\")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
861 (forward-char -1))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
862 ((eq class 'quote) (forward-char 1)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
863 (list 'quote (edebug-read-sexp)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
864 (t ; anything else, just read it.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
865 (edebug-original-read (current-buffer))))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
866
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
867
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
868 ;;;; Offsets for reader
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
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
871 ;; Define a structure to represent offset positions of expressions.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
872 ;; Each offset structure looks like: (before . after) for constituents,
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
873 ;; or for structures that have elements: (before <subexpressions> . after)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
874 ;; where the <subexpressions> are the offset structures for subexpressions
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
875 ;; including the head of a list.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
876 (defconst edebug-offsets nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
877
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
878 ;; Stack of offset structures in reverse order of the nesting.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
879 ;; This is used to get back to previous levels.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
880 (defconst edebug-offsets-stack nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
881 (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
882
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
883 ;; 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
884 ;; 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
885 ;; must also be condensed.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
886 (defconst edebug-read-dotted-list nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
887
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
888 (defsubst edebug-initialize-offsets ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
889 ;; Reinitialize offset recording.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
890 (setq edebug-current-offset nil))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
891
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
892 (defun edebug-store-before-offset (point)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
893 ;; 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
894 (let ((new-offset (list point)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
895 (if edebug-current-offset
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
896 (setcdr edebug-current-offset
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
897 (cons new-offset (cdr edebug-current-offset)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
898 ;; Otherwise, we are at the top level, so initialize.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
899 (setq edebug-offsets new-offset
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
900 edebug-offsets-stack nil
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
901 edebug-read-dotted-list nil))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
902 ;; Cons the new offset to the front of the stack.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
903 (setq edebug-offsets-stack (cons new-offset edebug-offsets-stack)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
904 edebug-current-offset new-offset)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
905 ))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
906
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
907 (defun edebug-store-after-offset (point)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
908 ;; Finalize the current offset struct by reversing it and
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
909 ;; store POINT as the after offset.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
910 (if (not edebug-read-dotted-list)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
911 ;; Just reverse the offsets of all subexpressions.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
912 (setcdr edebug-current-offset (nreverse (cdr edebug-current-offset)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
913
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
914 ;; 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
915 (setq edebug-read-dotted-list nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
916 ;; Drop the corresponding offset pair.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
917 ;; 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
918 ;; with the cdr of last offset.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
919 (setcdr edebug-current-offset
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
920 (nconc (nreverse (cdr (cdr edebug-current-offset)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
921 (cdr (car (cdr edebug-current-offset))))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
922
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
923 ;; Now append the point using nconc.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
924 (setq edebug-current-offset (nconc edebug-current-offset point))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
925 ;; Pop the stack.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
926 (setq edebug-offsets-stack (cdr edebug-offsets-stack)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
927 edebug-current-offset (car edebug-offsets-stack)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
928
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
929 (defun edebug-ignore-offset ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
930 ;; Ignore the last created offset pair.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
931 (setcdr edebug-current-offset (cdr (cdr edebug-current-offset))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
932
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
933 (def-edebug-spec edebug-storing-offsets (form body))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
934 (put 'edebug-storing-offsets 'lisp-indent-hook 1)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
935
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
936 (defmacro edebug-storing-offsets (point &rest body)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
937 (` (unwind-protect
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
938 (progn
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
939 (edebug-store-before-offset (, point))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
940 (,@ body))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
941 (edebug-store-after-offset (point)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
942
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
943
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
944 ;;;; Reader for Emacs Lisp.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
945 ;;; ==========================================
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
946 ;; Uses edebug-next-token-class (and edebug-skip-whitespace) above.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
947
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
948 (defconst edebug-read-alist
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
949 '((symbol . edebug-read-symbol)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
950 (lparen . edebug-read-list)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
951 (string . edebug-read-string)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
952 (quote . edebug-read-quote)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
953 (lbracket . edebug-read-vector)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
954 (hash . edebug-read-function)
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-storing-offsets (stream)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
958 (let ((class (edebug-next-token-class))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
959 func
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
960 edebug-read-dotted-list) ; see edebug-store-after-offset
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
961 (edebug-storing-offsets (point)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
962 (if (setq func (assq class edebug-read-alist))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
963 (funcall (cdr func) stream)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
964 ;; anything else, just read it.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
965 (edebug-original-read stream))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
966 )))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
967
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
968 (defun edebug-read-symbol (stream)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
969 (prog1
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
970 (edebug-original-read stream)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
971 ;; loses for escaped chars
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
972 (if (not (eq (aref edebug-read-syntax-table
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
973 (preceding-char)) 'symbol))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
974 (forward-char -1))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
975
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
976 (defun edebug-read-string (stream)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
977 (prog1
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
978 (edebug-original-read stream)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
979 (if (/= (preceding-char) ?\")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
980 (forward-char -1))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
981
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
982 (defun edebug-read-quote (stream)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
983 ;; Turn 'thing into (quote thing)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
984 (forward-char 1)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
985 (list
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
986 (edebug-storing-offsets (point) 'quote)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
987 (edebug-read-storing-offsets stream)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
988
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
989 (defun edebug-read-function (stream)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
990 ;; Turn #'thing into (function thing)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
991 (forward-char 1)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
992 (if (/= ?\' (following-char)) (edebug-syntax-error "Bad char"))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
993 (forward-char 1)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
994 (list
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
995 (edebug-storing-offsets (point)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
996 (if (featurep 'cl) 'function* 'function))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
997 (edebug-read-storing-offsets stream)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
998
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
999 (defun edebug-read-list (stream)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1000 (forward-char 1) ; skip \(
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1001 (prog1
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1002 (let ((elements))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1003 (while (not (memq (edebug-next-token-class) '(rparen dot)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1004 (setq elements (cons (edebug-read-storing-offsets stream) elements)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1005 (setq elements (nreverse elements))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1006 (if (eq 'dot (edebug-next-token-class))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1007 (let (dotted-form)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1008 (forward-char 1) ; skip \.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1009 (setq dotted-form (edebug-read-storing-offsets stream))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1010 elements (nconc elements dotted-form)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1011 (if (not (eq (edebug-next-token-class) 'rparen))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1012 (edebug-syntax-error "Expected `)'"))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1013 (setq edebug-read-dotted-list (listp dotted-form))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1014 ))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1015 elements)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1016 (forward-char 1) ; skip \)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1017 ))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1018
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1019 (defun edebug-read-vector (stream)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1020 (forward-char 1) ; skip \[
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1021 (prog1
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1022 (let ((elements))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1023 (while (not (eq 'rbracket (edebug-next-token-class)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1024 (setq elements (cons (edebug-read-storing-offsets stream) elements)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1025 (apply 'vector (nreverse elements)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1026 (forward-char 1) ; skip \]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1027 ))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1028
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1029
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1030
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1031 ;;;; Cursors for traversal of list and vector elements with offsets.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1032 ;;;====================================================================
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1033
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1034 (defvar edebug-dotted-spec nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1035
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1036 (defun edebug-new-cursor (expressions offsets)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1037 ;; Return a new cursor for EXPRESSIONS with OFFSETS.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1038 (if (vectorp expressions)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1039 (setq expressions (append expressions nil)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1040 (cons expressions offsets))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1041
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1042 (defsubst edebug-set-cursor (cursor expressions offsets)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1043 ;; Set the CURSOR's EXPRESSIONS and OFFSETS to the given.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1044 ;; Return the cursor.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1045 (setcar cursor expressions)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1046 (setcdr cursor offsets)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1047 cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1048
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1049 '(defun edebug-copy-cursor (cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1050 ;; Copy the cursor using the same object and offsets.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1051 (cons (car cursor) (cdr cursor)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1052
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1053 (defsubst edebug-cursor-expressions (cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1054 (car cursor))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1055 (defsubst edebug-cursor-offsets (cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1056 (cdr cursor))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1057
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1058 (defsubst edebug-empty-cursor (cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1059 ;; 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
1060 (null (car cursor)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1061
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1062 (defsubst edebug-top-element (cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1063 ;; Return the top element at the cursor.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1064 ;; Assumes not empty.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1065 (car (car cursor)))
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 (defun edebug-top-element-required (cursor &rest error)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1068 ;; Check if a dotted form is required.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1069 (if edebug-dotted-spec (edebug-no-match cursor "Dot expected."))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1070 ;; Check if there is at least one more argument.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1071 (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
1072 ;; Return that top element.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1073 (edebug-top-element cursor))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1074
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1075 (defsubst edebug-top-offset (cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1076 ;; Return the top offset pair corresponding to the top element.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1077 (car (cdr cursor)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1078
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1079 (defun edebug-move-cursor (cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1080 ;; 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
1081 ;; throw no-match if empty before moving.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1082 ;; This is a violation of the cursor encapsulation, but
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1083 ;; there is plenty of that going on while matching.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1084 ;; The following test should always fail.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1085 (if (edebug-empty-cursor cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1086 (edebug-no-match cursor "Not enough arguments."))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1087 (setcar cursor (cdr (car cursor)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1088 (setcdr cursor (cdr (cdr cursor)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1089 cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1090
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1091
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1092 (defun edebug-before-offset (cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1093 ;; Return the before offset of the cursor.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1094 ;; If there is nothing left in the offsets,
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1095 ;; return one less than the offset itself,
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1096 ;; which is the after offset for a list.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1097 (let ((offset (edebug-cursor-offsets cursor)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1098 (if (consp offset)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1099 (car (car offset))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1100 (1- offset))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1101
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1102 (defun edebug-after-offset (cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1103 ;; Return the after offset of the cursor object.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1104 (let ((offset (edebug-top-offset cursor)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1105 (while (consp offset)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1106 (setq offset (cdr offset)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1107 offset))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1108
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1109 ;;;; The Parser
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1110 ;;; ===============================
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1111
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1112 ;;; The top level function for parsing forms is
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1113 ;;; edebug-read-and-maybe-wrap-form; it calls all the rest. It checks the
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1114 ;;; syntax a bit and leaves point at any error it finds, but otherwise
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1115 ;;; should appear to work like eval-defun.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1116
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1117 ;;; The basic plan is to surround each expression with a call to
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1118 ;;; the edebug debugger together with indexes into a table of positions of
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1119 ;;; all expressions. Thus an expression "exp" becomes:
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1120
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1121 ;;; (edebug-after (edebug-before 1) 2 exp)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1122
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1123 ;;; When this is evaluated, first point is moved to the beginning of
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1124 ;;; exp at offset 1 of the current function. The expression is
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1125 ;;; evaluated, which may cause more edebug calls, and then point is
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1126 ;;; moved to offset 2 after the end of exp.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1127
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1128 ;;; The highest level expressions of the function are wrapped in a call to
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1129 ;;; edebug-enter, which supplies the function name and the actual
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1130 ;;; arguments to the function. See functions edebug-enter, edebug-before,
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1131 ;;; and edebug-after for more details.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1132
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1133 ;; Dynamically bound vars, left unbound, but globally declared.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1134 ;; This is to quiet the byte compiler.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1135
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1136 ;; Window data of the highest definition being wrapped.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1137 ;; This data is shared by all embedded definitions.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1138 (defvar edebug-top-window-data)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1139
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1140 (defvar edebug-&optional)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1141 (defvar edebug-&rest)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1142 (defvar edebug-gate nil) ;; whether no-match forces an error.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1143
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1144 (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
1145 (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
1146
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1147 (defconst edebug-error-point nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1148 (defconst edebug-best-error nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1149
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1150
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1151 (defun edebug-read-and-maybe-wrap-form ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1152 ;; 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
1153 ;; 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
1154
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1155 ;; Run the setup hook.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1156 (run-hooks 'edebug-setup-hook)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1157 (setq edebug-setup-hook nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1158
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1159 (let (result
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1160 edebug-top-window-data
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1161 edebug-def-name;; make sure it is locally nil
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1162 ;; I dont like these here!!
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1163 edebug-&optional
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1164 edebug-&rest
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1165 edebug-gate
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1166 edebug-best-error
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1167 edebug-error-point
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1168 no-match
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1169 ;; Do this once here instead of several times.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1170 (max-lisp-eval-depth (+ 800 max-lisp-eval-depth))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1171 (max-specpdl-size (+ 1200 max-specpdl-size)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1172 (setq no-match
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1173 (catch 'no-match
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1174 (setq result (edebug-read-and-maybe-wrap-form1))
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 (if no-match
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1177 (apply 'edebug-syntax-error no-match))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1178 result))
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 (defun edebug-read-and-maybe-wrap-form1 ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1182 (let (spec
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1183 def-kind
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1184 defining-form-p
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1185 def-name
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1186 ;; These offset things dont belong here, but to support recursive
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1187 ;; calls to edebug-read, they need to be here.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1188 edebug-offsets
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1189 edebug-offsets-stack
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1190 edebug-current-offset ; reset to nil
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1191 )
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1192 (save-excursion
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1193 (if (and (eq 'lparen (edebug-next-token-class))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1194 (eq 'symbol (progn (forward-char 1) (edebug-next-token-class))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1195 ;; 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
1196 (setq def-kind (read (current-buffer))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1197 spec (and (symbolp def-kind) (get-edebug-spec def-kind))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1198 defining-form-p (and (listp spec)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1199 (eq '&define (car spec)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1200 ;; 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
1201 def-name (if (and defining-form-p
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1202 (eq 'name (car (cdr spec)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1203 (eq 'symbol (edebug-next-token-class)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1204 (read (current-buffer))))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1205 (cond
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1206 (defining-form-p
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1207 (if (or edebug-all-defs edebug-all-forms)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1208 ;; 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
1209 ;; then let edebug-list-form start it.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1210 (let ((cursor (edebug-new-cursor
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1211 (list (edebug-read-storing-offsets (current-buffer)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1212 (list edebug-offsets))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1213 (car
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1214 (edebug-make-form-wrapper
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1215 cursor
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1216 (edebug-before-offset cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1217 (1- (edebug-after-offset cursor))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1218 (list (cons (symbol-name def-kind) (cdr spec))))))
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 ;; Not edebugging this form, so reset the symbol's edebug
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1221 ;; 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
1222 ;; This only works for defs with simple names.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1223 (put def-name 'edebug (point-marker))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1224 ;; Also nil out dependent defs.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1225 '(mapcar (function
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1226 (lambda (def)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1227 (put def-name 'edebug nil)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1228 (get def-name 'edebug-dependents))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1229 (edebug-read-sexp)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1230
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1231 ;; If all forms are being edebugged, explicitly wrap it.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1232 (edebug-all-forms
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1233 (let ((cursor (edebug-new-cursor
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1234 (list (edebug-read-storing-offsets (current-buffer)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1235 (list edebug-offsets))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1236 (edebug-make-form-wrapper
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1237 cursor
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1238 (edebug-before-offset cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1239 (edebug-after-offset cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1240 nil)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1241
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1242 ;; Not a defining form, and not edebugging.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1243 (t (edebug-read-sexp)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1244 ))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1245
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1246
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1247 (defvar edebug-def-args) ; args of defining form.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1248 (defvar edebug-def-interactive) ; is it an emacs interactive function?
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1249 (defvar edebug-inside-func) ;; whether code is inside function context.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1250 ;; 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
1251
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1252 (defun edebug-interactive-p-name ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1253 ;; 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
1254 ;; status of interactive-p for this function.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1255 (intern (format "edebug-%s-interactive-p" edebug-def-name)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1256
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1257
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1258 (defun edebug-wrap-def-body (forms)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1259 "Wrap the FORMS of a definition body."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1260 (if edebug-def-interactive
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1261 (` (let (((, (edebug-interactive-p-name))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1262 (interactive-p)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1263 (, (edebug-make-enter-wrapper forms))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1264 (edebug-make-enter-wrapper forms)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1265
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1266
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1267 (defun edebug-make-enter-wrapper (forms)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1268 ;; Generate the enter wrapper for some forms of a definition.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1269 ;; 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
1270 ;; 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
1271 ;; 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
1272 ;; Do this after parsing since that may find a name.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1273 (setq edebug-def-name
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1274 (or edebug-def-name edebug-old-def-name (gensym "edebug-anon")))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1275 (` (edebug-enter
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1276 (quote (, edebug-def-name))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1277 (, (if edebug-inside-func
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1278 (` (list (,@
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1279 ;; Doesnt work with more than one def-body!!
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1280 ;; But the list will just be reversed.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1281 (nreverse edebug-def-args))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1282 'nil))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1283 (function (lambda () (,@ forms)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1284 )))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1285
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1286
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1287 (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
1288
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1289 (defvar edebug-offset-index) ; the next available offset index.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1290 (defvar edebug-offset-list) ; the list of offset positions.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1291
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1292 (defun edebug-inc-offset (offset)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1293 ;; modifies edebug-offset-index and edebug-offset-list
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1294 ;; accesses edebug-func-marc and buffer point
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1295 (prog1
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1296 edebug-offset-index
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1297 (setq edebug-offset-list (cons (- offset edebug-form-begin-marker)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1298 edebug-offset-list)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1299 edebug-offset-index (1+ edebug-offset-index))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1300
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1301
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1302 (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
1303 ;; 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
1304 ;; given FORM. Looks like:
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1305 ;; (edebug-after (edebug-before BEFORE-INDEX) AFTER-INDEX FORM)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1306 ;; Also increment the offset index for subsequent use.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1307 ;; if (not edebug-stop-before-symbols) and form is a symbol,
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1308 ;; then dont call edebug-before.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1309 (list 'edebug-after
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1310 (list 'edebug-before before-index)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1311 after-index form))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1312
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1313 (defun edebug-make-after-form (form after-index)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1314 ;; Like edebug-make-before-and-after-form, but only after.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1315 (list 'edebug-after 0 after-index form))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1316
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1317
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1318 (defun edebug-unwrap (sexp)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1319 "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
1320 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
1321 expressions; a `progn' form will be returned enclosing these forms."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1322 (if (consp sexp)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1323 (cond
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1324 ((eq 'edebug-after (car sexp))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1325 (nth 3 sexp))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1326 ((eq 'edebug-enter (car sexp))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1327 (let ((forms (nthcdr 2 (nth 1 (nth 3 sexp)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1328 (if (> (length forms) 1)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1329 (cons 'progn forms) ;; could return (values forms) instead.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1330 (car forms))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1331 (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
1332 )
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1333 sexp))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1334
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1335 (defun edebug-unwrap* (sexp)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1336 "Return the sexp recursively unwrapped."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1337 (let ((new-sexp (edebug-unwrap sexp)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1338 (while (not (eq sexp new-sexp))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1339 (setq sexp new-sexp
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1340 new-sexp (edebug-unwrap sexp)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1341 (if (consp new-sexp)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1342 (mapcar 'edebug-unwrap* new-sexp)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1343 new-sexp)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1344
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1345
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1346 (defun edebug-defining-form (cursor form-begin form-end speclist)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1347 ;; Process the defining form, starting outside the form.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1348 ;; The speclist is a generated list spec that looks like:
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1349 ;; (("def-symbol" defining-form-spec-sans-&define))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1350 ;; Skip the first offset.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1351 (edebug-set-cursor cursor (edebug-cursor-expressions cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1352 (cdr (edebug-cursor-offsets cursor)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1353 (edebug-make-form-wrapper
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1354 cursor
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1355 form-begin (1- form-end)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1356 speclist))
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 (defun edebug-make-form-wrapper (cursor form-begin form-end
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1359 &optional speclist)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1360 ;; 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
1361 ;; 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
1362 ;; 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
1363 ;; 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
1364 (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
1365 ;; Set this marker before parsing.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1366 (edebug-form-begin-marker
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1367 (if form-data-entry
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1368 (edebug-form-data-begin form-data-entry)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1369 ;; Buffer must be current-buffer for this to work:
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1370 (set-marker (make-marker) form-begin))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1371
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1372 (let (edebug-offset-list
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1373 (edebug-offset-index 0)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1374 result
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1375 ;; For definitions.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1376 ;; (edebug-containing-def-name edebug-def-name)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1377 ;; Get name from form-data, if any.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1378 (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
1379 edebug-def-name
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1380 edebug-def-args
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1381 edebug-def-interactive
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1382 edebug-inside-func;; whether wrapped code executes inside a function.
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 (setq result
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1386 (if speclist
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1387 (edebug-match cursor speclist)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1388
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1389 ;; else wrap as an enter-form.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1390 (edebug-make-enter-wrapper (list (edebug-form cursor)))))
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 ;; 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
1393 (setq edebug-def-name
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1394 (or edebug-def-name edebug-old-def-name (gensym "edebug-anon")))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1395
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1396 ;; Add this def as a dependent of containing def. Buggy.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1397 '(if (and edebug-containing-def-name
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1398 (not (get edebug-containing-def-name 'edebug-dependents)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1399 (put edebug-containing-def-name 'edebug-dependents
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1400 (cons edebug-def-name
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1401 (get edebug-containing-def-name
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1402 'edebug-dependents))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1403
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1404 ;; 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
1405 ;; In the latter case, pointers to the entry remain eq.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1406 (if (not form-data-entry)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1407 (setq form-data-entry
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1408 (edebug-make-form-data-entry
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1409 edebug-def-name
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1410 edebug-form-begin-marker
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1411 ;; Buffer must be current-buffer.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1412 (set-marker (make-marker) form-end)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1413 ))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1414 (edebug-set-form-data-entry
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1415 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
1416 form-begin form-end))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1417
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1418 ;; (message "defining: %s" edebug-def-name) (sit-for 2)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1419 (edebug-make-top-form-data-entry form-data-entry)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1420 (message "Edebug: %s" edebug-def-name)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1421 ;;(debug edebug-def-name)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1422
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1423 ;; Destructively reverse edebug-offset-list and make vector from it.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1424 (setq edebug-offset-list (vconcat (nreverse edebug-offset-list)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1425
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1426 ;; Side effects on the property list of edebug-def-name.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1427 (edebug-clear-frequency-count edebug-def-name)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1428 (edebug-clear-coverage edebug-def-name)
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 ;; Set up the initial window data.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1431 (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
1432 (let ((window ;; Find the best window for this buffer.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1433 (or (get-buffer-window (current-buffer))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1434 (selected-window))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1435 (setq edebug-top-window-data
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1436 (cons window (window-start window)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1437
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1438 ;; Store the edebug data in symbol's property list.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1439 (put edebug-def-name 'edebug
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1440 ;; A struct or vector would be better here!!
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1441 (list edebug-form-begin-marker
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1442 nil ; clear breakpoints
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1443 edebug-offset-list
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1444 edebug-top-window-data
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1445 ))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1446 result
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
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1449
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1450 (defun edebug-clear-frequency-count (name)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1451 ;; Create initial frequency count vector.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1452 ;; 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
1453 (put name 'edebug-freq-count
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1454 (make-vector (length edebug-offset-list) 0)))
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
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1457 (defun edebug-clear-coverage (name)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1458 ;; Create initial coverage vector.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1459 ;; 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
1460 (put name 'edebug-coverage
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1461 (make-vector (length edebug-offset-list) 'unknown)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1462
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1463
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1464 (defun edebug-form (cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1465 ;; Return the instrumented form for the following form.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1466 ;; 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
1467 (let* ((form (edebug-top-element-required cursor "Expected form"))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1468 (offset (edebug-top-offset cursor)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1469 (prog1
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1470 (cond
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1471 ((consp form)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1472 ;; 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
1473 (if (eq 'quote (car form))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1474 form
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1475 (let* ((head (car form))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1476 (spec (and (symbolp head) (get-edebug-spec head)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1477 (new-cursor (edebug-new-cursor form offset)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1478 ;; 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
1479 ;; An indirect spec would not work here, yet.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1480 (if (and (consp spec) (eq '&define (car spec)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1481 (edebug-defining-form
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1482 new-cursor
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1483 (car offset);; before the form
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1484 (edebug-after-offset cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1485 (cons (symbol-name head) (cdr spec)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1486 ;; Wrap a regular form.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1487 (edebug-make-before-and-after-form
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1488 (edebug-inc-offset (car offset))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1489 (edebug-list-form new-cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1490 ;; After processing the list form, the new-cursor is left
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1491 ;; with the offset after the form.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1492 (edebug-inc-offset (edebug-cursor-offsets new-cursor))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1493 )))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1494
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1495 ((symbolp form)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1496 (cond
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1497 ;; Check for constant symbols that dont get wrapped.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1498 ((or (memq form '(t nil))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1499 (keywordp form))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1500 form)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1501
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1502 ;; This option may go away.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1503 (edebug-stop-before-symbols
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1504 (edebug-make-before-and-after-form
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1505 (edebug-inc-offset (car offset))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1506 form
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1507 (edebug-inc-offset (cdr offset))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1508 ))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1509
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1510 (t ;; just a variable
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1511 (edebug-make-after-form form (edebug-inc-offset (cdr offset))))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1513 ;; Anything else is self-evaluating.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1514 (t form))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1515 (edebug-move-cursor cursor))))
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
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1518 (defsubst edebug-forms (cursor) (edebug-match cursor '(&rest form)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1519 (defsubst edebug-sexps (cursor) (edebug-match cursor '(&rest sexp)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1520
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1521 (defsubst edebug-list-form-args (head cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1522 ;; 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
1523 ;; Helper for edebug-list-form
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1524 (let ((spec (get-edebug-spec head)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1525 (cond
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1526 (spec
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1527 (cond
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1528 ((consp spec)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1529 ;; It is a speclist.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1530 (let (edebug-best-error
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1531 edebug-error-point);; This may not be needed.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1532 (edebug-match-sublist cursor spec)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1533 ((eq t spec) (edebug-forms cursor))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1534 ((eq 0 spec) (edebug-sexps cursor))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1535 ((symbolp spec) (funcall spec cursor));; Not used by edebug,
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1536 ; but leave it in for compatibility.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1537 ))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1538 ;; No edebug-form-spec provided.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1539 ((edebug-macrop head)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1540 (if edebug-eval-macro-args
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1541 (edebug-forms cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1542 (edebug-sexps cursor)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1543 (t ;; Otherwise it is a function call.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1544 (edebug-forms cursor)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1545
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1546
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1547 (defun edebug-list-form (cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1548 ;; Return an instrumented form built from the list form.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1549 ;; 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
1550 (let ((head (edebug-top-element-required cursor "Expected elements"))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1551 ;; Prevent backtracking whenever instrumenting.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1552 (edebug-gate t)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1553 ;; A list form is never optional because it matches anything.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1554 (edebug-&optional nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1555 (edebug-&rest nil))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1556 ;; Skip the first offset.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1557 (edebug-set-cursor cursor (edebug-cursor-expressions cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1558 (cdr (edebug-cursor-offsets cursor)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1559 (cond
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1560 ((null head) nil) ; () is legal.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1561
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1562 ((symbolp head)
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 ((null head)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1565 (edebug-syntax-error "nil head"))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1566 ((eq head 'interactive-p)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1567 ;; Special case: replace (interactive-p) with variable
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1568 (setq edebug-def-interactive 'check-it)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1569 (edebug-move-cursor cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1570 (edebug-interactive-p-name))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1571 (t
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1572 (cons head (edebug-list-form-args
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1573 head (edebug-move-cursor cursor))))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1574
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1575 ((consp head)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1576 (if (and (listp head) (eq (car head) ',))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1577 (edebug-match cursor '(("," def-form) body))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1578 ;; Process anonymous function and args.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1579 ;; This assumes no anonymous macros.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1580 (edebug-match-specs cursor '(lambda-expr body) 'edebug-match-specs)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1581
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1582 (t (edebug-syntax-error
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1583 "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
1584 ))
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
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1587 ;;;; Matching of specs.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1588 ;;; ===================
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1589
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1590 (defvar edebug-after-dotted-spec nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1591
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1592 (defvar edebug-matching-depth 0) ;; initial value
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1593 (defconst edebug-max-depth 150) ;; maximum number of matching recursions.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1594
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1595
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1596 ;;;; Failure to match
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1597 ;;; ==================
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1598 ;; This throws to no-match, if there are higher alternatives.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1599 ;; 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
1600 ;; with the two before- and after-offset functions.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1601
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1602 (defun edebug-no-match (cursor &rest edebug-args)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1603 ;; 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
1604 ;; 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
1605 (setq edebug-error-point (or edebug-error-point
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1606 (edebug-before-offset cursor))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1607 edebug-best-error (or edebug-best-error edebug-args))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1608 (if (and edebug-gate (not edebug-&optional))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1609 (progn
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1610 (if edebug-error-point
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1611 (goto-char edebug-error-point))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1612 (apply 'edebug-syntax-error edebug-args))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1613 (funcall 'throw 'no-match edebug-args)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1614
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 (defun edebug-match (cursor specs)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1617 ;; Top level spec matching function.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1618 ;; Used also at each lower level of specs.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1619 (let (edebug-&optional
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1620 edebug-&rest
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1621 edebug-best-error
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1622 edebug-error-point
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1623 (edebug-gate edebug-gate) ;; locally bound to limit effect
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1624 )
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1625 (edebug-match-specs cursor specs 'edebug-match-specs)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1626
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1627
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1628 (defun edebug-match-one-spec (cursor spec)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1629 ;; Match one spec, which is not a keyword &-spec.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1630 (cond
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1631 ((symbolp spec) (edebug-match-symbol cursor spec))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1632 ((vectorp spec) (edebug-match cursor (append spec nil)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1633 ((stringp spec) (edebug-match-string cursor spec))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1634 ((listp spec) (edebug-match-list cursor spec))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1635 ))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1636
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1637
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1638 (defun edebug-match-specs (cursor specs remainder-handler)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1639 ;; Append results of matching the list of specs.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1640 ;; 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
1641 (let ((edebug-matching-depth
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1642 (if (> edebug-matching-depth edebug-max-depth)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1643 (error "too deep - perhaps infinite loop in spec?")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1644 (1+ edebug-matching-depth))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1645 (cond
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1646 ((null specs) nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1647
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1648 ;; Is the spec dotted?
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1649 ((atom specs)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1650 (let ((edebug-dotted-spec t));; Containing spec list was dotted.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1651 (edebug-match-specs cursor (list specs) remainder-handler)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1652
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1653 ;; Is the form dotted?
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1654 ((not (listp (edebug-cursor-expressions cursor)));; allow nil
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1655 (if (not edebug-dotted-spec)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1656 (edebug-no-match cursor "Dotted spec required."))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1657 ;; Cancel dotted spec and dotted form.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1658 (let ((edebug-dotted-spec)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1659 (this-form (edebug-cursor-expressions cursor))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1660 (this-offset (edebug-cursor-offsets cursor)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1661 ;; Wrap the form in a list, (by changing the cursor??)...
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1662 (edebug-set-cursor cursor (list this-form) this-offset)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1663 ;; and process normally, then unwrap the result.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1664 (car (edebug-match-specs cursor specs remainder-handler))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1665
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1666 (t;; Process normally.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1667 (let* ((spec (car specs))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1668 (rest)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1669 (first-char (and (symbolp spec) (aref (symbol-name spec) 0))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1670 ;;(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
1671 (nconc
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1672 (cond
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1673 ((eq ?& first-char);; "&" symbols take all following specs.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1674 (funcall (get-edebug-spec spec) cursor (cdr specs)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1675 ((eq ?: first-char);; ":" symbols take one following spec.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1676 (setq rest (cdr (cdr specs)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1677 (funcall (get-edebug-spec spec) cursor (car (cdr specs))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1678 (t;; Any other normal spec.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1679 (setq rest (cdr specs))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1680 (edebug-match-one-spec cursor spec)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1681 (funcall remainder-handler cursor rest remainder-handler)))))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1682
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1683
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1684 ;; Define specs for all the symbol specs with functions used to process them.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1685 ;; Perhaps we shouldnt be doing this with edebug-form-specs since the
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1686 ;; 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
1687 ;; We could use an internal obarray for these primitive specs.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1688
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1689 (mapcar
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1690 (function (lambda (pair)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1691 (put (car pair) 'edebug-form-spec (cdr pair))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1692 '((&optional . edebug-match-&optional)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1693 (&rest . edebug-match-&rest)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1694 (&or . edebug-match-&or)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1695 (form . edebug-match-form)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1696 (sexp . edebug-match-sexp)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1697 (body . edebug-match-body)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1698 (&define . edebug-match-&define)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1699 (name . edebug-match-name)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1700 (:name . edebug-match-colon-name)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1701 (arg . edebug-match-arg)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1702 (def-body . edebug-match-def-body)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1703 (def-form . edebug-match-def-form)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1704 ;; Less frequently used:
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1705 ;; (function . edebug-match-function)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1706 (lambda-expr . edebug-match-lambda-expr)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1707 ;; (keywordp . edebug-match-keywordp)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1708 (&not . edebug-match-&not)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1709 (&key . edebug-match-&key)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1710 (place . edebug-match-place)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1711 (gate . edebug-match-gate)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1712 ;; (nil . edebug-match-nil) not this one - special case it.
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
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1715 (defun edebug-match-symbol (cursor symbol)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1716 ;; Match a symbol spec.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1717 (let* ((spec (get-edebug-spec symbol)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1718 (cond
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1719 (spec
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1720 (if (consp spec)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1721 ;; It is an indirect spec.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1722 (edebug-match cursor spec)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1723 ;; Otherwise it should be the symbol name of a function.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1724 ;; 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
1725 (funcall spec cursor)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1726
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1727 ((null symbol) ;; special case this.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1728 (edebug-match-nil cursor))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1729
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1730 ((fboundp symbol) ; is it a predicate?
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1731 (let ((sexp (edebug-top-element-required cursor "Expected" symbol)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1732 ;; Special case for edebug-`.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1733 (if (and (listp sexp) (eq (car sexp) ',))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1734 (edebug-match cursor '(("," def-form)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1735 (if (not (funcall symbol sexp))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1736 (edebug-no-match cursor symbol "failed"))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1737 (edebug-move-cursor cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1738 (list sexp))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1739 (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
1740 )))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1741
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1742
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1743 (defun edebug-match-sexp (cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1744 (list (prog1 (edebug-top-element-required cursor "Expected sexp")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1745 (edebug-move-cursor cursor))))
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-form (cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1748 (list (edebug-form cursor)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1749
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1750 (defalias 'edebug-match-place 'edebug-match-form)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1751 ;; Currently identical to edebug-match-form.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1752 ;; This is for common lisp setf-style place arguments.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1753
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1754 (defsubst edebug-match-body (cursor) (edebug-forms cursor))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1755
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1756 (defun edebug-match-&optional (cursor specs)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1757 ;; Keep matching until one spec fails.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1758 (edebug-&optional-wrapper cursor specs 'edebug-&optional-wrapper))
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 (defun edebug-&optional-wrapper (cursor specs remainder-handler)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1761 (let (result
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1762 (edebug-&optional specs)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1763 (edebug-gate nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1764 (this-form (edebug-cursor-expressions cursor))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1765 (this-offset (edebug-cursor-offsets cursor)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1766 (if (null (catch 'no-match
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1767 (setq result
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1768 (edebug-match-specs cursor specs remainder-handler))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1769 ;; Returning nil means no no-match was thrown.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1770 nil))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1771 result
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1772 ;; 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
1773 (edebug-set-cursor cursor this-form this-offset)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1774 nil)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1775
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1776
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1777 (defun edebug-&rest-wrapper (cursor specs remainder-handler)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1778 (if (null specs) (setq specs edebug-&rest))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1779 ;; Reuse the &optional handler with this as the remainder handler.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1780 (edebug-&optional-wrapper cursor specs remainder-handler))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1781
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1782 (defun edebug-match-&rest (cursor specs)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1783 ;; Repeatedly use specs until failure.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1784 (let ((edebug-&rest specs) ;; remember these
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1785 edebug-best-error
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1786 edebug-error-point)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1787 (edebug-&rest-wrapper cursor specs 'edebug-&rest-wrapper)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1788
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1789
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1790 (defun edebug-match-&or (cursor specs)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1791 ;; Keep matching until one spec succeeds, and return its results.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1792 ;; If none match, fail.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1793 ;; 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
1794 (let ((original-specs specs)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1795 (this-form (edebug-cursor-expressions cursor))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1796 (this-offset (edebug-cursor-offsets cursor)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1797 (catch 'matched
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1798 (while specs
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1799 (catch 'no-match
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1800 (throw 'matched
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1801 (let (edebug-gate ;; only while matching each spec
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1802 edebug-best-error
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1803 edebug-error-point)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1804 ;; Doesnt support e.g. &or symbolp &rest form
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1805 (edebug-match-one-spec cursor (car specs)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1806 ;; Match failed, so reset and try again.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1807 (setq specs (cdr specs))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1808 ;; Reset the cursor for the next match.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1809 (edebug-set-cursor cursor this-form this-offset))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1810 ;; All failed.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1811 (apply 'edebug-no-match cursor "Expected one of" original-specs))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1812 ))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1813
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1814
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1815 (defun edebug-match-&not (cursor specs)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1816 ;; If any specs match, then fail
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1817 (if (null (catch 'no-match
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1818 (let ((edebug-gate nil))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1819 (save-excursion
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1820 (edebug-match-&or cursor specs)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1821 nil))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1822 ;; This means something matched, so it is a no match.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1823 (edebug-no-match cursor "Unexpected"))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1824 ;; This means nothing matched, so it is OK.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1825 nil) ;; So, return nothing
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1826
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 (def-edebug-spec &key edebug-match-&key)
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-&key (cursor specs)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1831 ;; Following specs must look like (<name> <spec>) ...
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1832 ;; where <name> is the name of a keyword, and spec is its spec.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1833 ;; This really doesnt save much over the expanded form and takes time.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1834 (edebug-match-&rest
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1835 cursor
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1836 (cons '&or
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1837 (mapcar (function (lambda (pair)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1838 (vector (format ":%s" (car pair))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1839 (car (cdr pair)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1840 specs))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1841
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1842
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1843 (defun edebug-match-gate (cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1844 ;; Simply set the gate to prevent backtracking at this level.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1845 (setq edebug-gate t)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1846 nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1847
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1848
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1849 (defun edebug-match-list (cursor specs)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1850 ;; 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
1851 (if edebug-dotted-spec
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1852 ;; After dotted spec but form did not contain dot,
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1853 ;; so match list spec elements as if spliced in.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1854 (prog1
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1855 (let ((edebug-dotted-spec))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1856 (edebug-match-specs cursor specs 'edebug-match-specs))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1857 ;; If it matched, really clear the dotted-spec flag.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1858 (setq edebug-dotted-spec nil))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1859 (let ((spec (car specs))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1860 (form (edebug-top-element-required cursor "Expected" specs)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1861 (cond
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1862 ((eq 'quote spec)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1863 (let ((spec (car (cdr specs))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1864 (cond
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1865 ((symbolp spec)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1866 ;; Special case: spec quotes a symbol to match.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1867 ;; Change in future. Use "..." instead.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1868 (if (not (eq spec form))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1869 (edebug-no-match cursor "Expected" spec))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1870 (edebug-move-cursor cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1871 (setq edebug-gate t)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1872 form)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1873 (t
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1874 (error "Bad spec: %s" specs)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1875
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1876 ((listp form)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1877 (prog1
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1878 (list (edebug-match-sublist
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1879 ;; First offset is for the list form itself.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1880 ;; Treat nil as empty list.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1881 (edebug-new-cursor form (cdr (edebug-top-offset cursor)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1882 specs))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1883 (edebug-move-cursor cursor)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1884
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1885 ((and (eq 'vector spec) (vectorp form))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1886 ;; Special case: match a vector with the specs.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1887 (let ((result (edebug-match-sublist
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1888 (edebug-new-cursor
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1889 form (cdr (edebug-top-offset cursor)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1890 (cdr specs))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1891 (edebug-move-cursor cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1892 (list (apply 'vector result))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1893
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1894 (t (edebug-no-match cursor "Expected" specs)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1895 )))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1896
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1897
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1898 (defun edebug-match-sublist (cursor specs)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1899 ;; Match a sublist of specs.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1900 (let (edebug-&optional
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1901 ;;edebug-best-error
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1902 ;;edebug-error-point
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1903 )
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1904 (prog1
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1905 ;; 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
1906 (edebug-match-specs cursor specs 'edebug-match-specs)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1907 (if (not (edebug-empty-cursor cursor))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1908 (if edebug-best-error
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1909 (apply 'edebug-no-match cursor edebug-best-error)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1910 ;; A failed &rest or &optional spec may leave some args.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1911 (edebug-no-match cursor "Failed matching" specs)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1912 )))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1913
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1914
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1915 (defun edebug-match-string (cursor spec)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1916 (let ((sexp (edebug-top-element-required cursor "Expected" spec)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1917 (if (not (eq (intern spec) sexp))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1918 (edebug-no-match cursor "Expected" spec)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1919 ;; Since it matched, failure means immediate error, unless &optional.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1920 (setq edebug-gate t)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1921 (edebug-move-cursor cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1922 (list sexp)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1923 )))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1924
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1925 (defun edebug-match-nil (cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1926 ;; There must be nothing left to match a nil.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1927 (if (not (edebug-empty-cursor cursor))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1928 (edebug-no-match cursor "Unmatched argument(s)")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1929 nil))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1930
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1931
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1932 (defun edebug-match-function (cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1933 (error "Use function-form instead of function in edebug spec"))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1934
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1935 (defun edebug-match-&define (cursor specs)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1936 ;; Match a defining form.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1937 ;; Normally, &define is interpretted specially other places.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1938 ;; 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
1939 ;; 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
1940 (edebug-make-form-wrapper
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1941 cursor
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1942 (edebug-before-offset cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1943 ;; Find the last offset in the list.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1944 (let ((offsets (edebug-cursor-offsets cursor)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1945 (while (consp offsets) (setq offsets (cdr offsets)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1946 offsets)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1947 specs))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1948
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1949 (defun edebug-match-lambda-expr (cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1950 ;; The expression must be a function.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1951 ;; 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
1952 ;; that has an edebug-form-spec beginning with &define. In
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1953 ;; practice, only lambda expressions should be used.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1954 ;; I could add a &lambda specification to avoid confusion.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1955 (let* ((sexp (edebug-top-element-required
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1956 cursor "Expected lambda expression"))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1957 (offset (edebug-top-offset cursor))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1958 (head (and (consp sexp) (car sexp)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1959 (spec (and (symbolp head) (get-edebug-spec head)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1960 (edebug-inside-func nil))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1961 ;; 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
1962 (if (and (consp spec) (eq '&define (car spec)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1963 (prog1
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1964 (list
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1965 (edebug-defining-form
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1966 (edebug-new-cursor sexp offset)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1967 (car offset);; before the sexp
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1968 (edebug-after-offset cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1969 (cons (symbol-name head) (cdr spec))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1970 (edebug-move-cursor cursor))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1971 (edebug-no-match cursor "Expected lambda expression")
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
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1974
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1975 ;; Not needed if the predicate exists.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1976 '(defun edebug-match-keywordp (cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1977 ;; Match a common lisp style keyword symbol.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1978 (let ((sexp (edebug-top-element cursor)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1979 (if (keywordp sexp)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1980 (prog1
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1981 (list sexp)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1982 (edebug-move-cursor cursor))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1983 (edebug-no-match cursor "Keyword expected"))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1984
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1985
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1986 (defun edebug-match-name (cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1987 ;; Set the edebug-def-name bound in edebug-defining-form.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1988 (let ((name (edebug-top-element-required cursor "Expected name")))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1989 ;; Maybe strings and numbers could be used.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1990 (if (not (symbolp name))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1991 (edebug-no-match cursor "Symbol expected for name of definition"))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1992 (setq edebug-def-name
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1993 (if edebug-def-name
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1994 ;; Construct a new name by appending to previous name.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1995 (intern (format "%s@%s" edebug-def-name name))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1996 name))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1997 (edebug-move-cursor cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
1998 (list name)))
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 (defun edebug-match-colon-name (cursor spec)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2001 ;; Set the edebug-def-name to the spec.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2002 (setq edebug-def-name
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2003 (if edebug-def-name
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2004 ;; Construct a new name by appending to previous name.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2005 (intern (format "%s@%s" edebug-def-name spec))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2006 spec))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2007 nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2008
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2009 (defun edebug-match-arg (cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2010 ;; set the def-args bound in edebug-defining-form
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2011 (let ((edebug-arg (edebug-top-element-required cursor "Expected arg")))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2012 (if (or (not (symbolp edebug-arg))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2013 (lambda-list-keywordp edebug-arg))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2014 (edebug-no-match cursor "Bad argument:" edebug-arg))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2015 (edebug-move-cursor cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2016 (setq edebug-def-args (cons edebug-arg edebug-def-args))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2017 (list edebug-arg)))
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 (defun edebug-match-def-form (cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2020 ;; 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
2021 ;; 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
2022 ;; 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
2023 ;; Not to be used otherwise.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2024 (let ((edebug-inside-func nil))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2025 (list (edebug-make-enter-wrapper (list (edebug-form cursor))))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2026
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2027 (defun edebug-match-def-body (cursor)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2028 ;; Like body but body is wrapped in edebug-enter form.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2029 ;; 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
2030 ;; Not to be used otherwise.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2031 (let ((edebug-inside-func t))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2032 (list (edebug-wrap-def-body (edebug-forms cursor)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2033
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2034
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2035 ;;;; Edebug Form Specs
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2036 ;;; ==========================================================
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2037 ;;; See cl-specs.el for common lisp specs.
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 ;;;;* Spec for def-edebug-spec
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2040 ;;; Out of date.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2041
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2042 (defun edebug-spec-p (object)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2043 "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
2044 (and (symbolp object)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2045 (get object 'edebug-form-spec)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2046
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2047 (def-edebug-spec def-edebug-spec
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2048 ;; Top level is different from lower levels.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2049 (&define :name edebug-spec name
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2050 &or "nil" edebug-spec-p "t" "0" (&rest edebug-spec)))
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 edebug-spec-list
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2053 ;; 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
2054 ((edebug-spec . [&or nil edebug-spec])))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2055
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2056 (def-edebug-spec edebug-spec
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2057 (&or
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2058 (vector &rest edebug-spec) ; matches a vector
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2059 ("vector" &rest edebug-spec) ; matches a vector spec
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2060 ("quote" symbolp)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2061 edebug-spec-list
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2062 stringp
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2063 [lambda-list-keywordp &rest edebug-spec]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2064 [keywordp gate edebug-spec]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2065 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
2066 symbolp;; a predicate
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2067 ))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2068
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2069
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2070 ;;;;* Emacs special forms and some functions.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2071
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2072 ;; quote expects only one argument, although it allows any number.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2073 (def-edebug-spec quote sexp)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2074
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2075 ;; The standard defining forms.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2076 (def-edebug-spec defconst defvar)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2077 (def-edebug-spec defvar (symbolp &optional form stringp))
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 (def-edebug-spec defun
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2080 (&define name lambda-list
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2081 [&optional stringp]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2082 [&optional ("interactive" interactive)]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2083 def-body))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2084 (def-edebug-spec defmacro
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2085 (&define name lambda-list def-body))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2086
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2087 (def-edebug-spec arglist lambda-list) ;; denegrated - use lambda-list.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2088
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2089 (def-edebug-spec lambda-list
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2090 (([&rest arg]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2091 [&optional ["&optional" arg &rest arg]]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2092 &optional ["&rest" arg]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2093 )))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2094
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2095 (def-edebug-spec interactive
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2096 (&optional &or stringp def-form))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2097
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2098 ;; 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
2099 ;; This specially recognizes anonymous functions quoted with quote.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2100 (def-edebug-spec function-form
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2101 ;; form at the end could also handle "function",
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2102 ;; but recognize it specially to avoid wrapping function forms.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2103 (&or ([&or "quote" "function"] &or symbolp lambda-expr) form))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2104
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2105 ;; function expects a symbol or a lambda or macro expression
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2106 ;; A macro is allowed by Emacs.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2107 (def-edebug-spec function (&or symbolp lambda-expr))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2108
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2109 ;; lambda is a macro in emacs 19.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2110 (def-edebug-spec lambda (&define lambda-list
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2111 [&optional stringp]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2112 [&optional ("interactive" interactive)]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2113 def-body))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2114
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2115 ;; A macro expression is a lambda expression with "macro" prepended.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2116 (def-edebug-spec macro (&define "lambda" lambda-list def-body))
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 ;; (def-edebug-spec anonymous-form ((&or ["lambda" lambda] ["macro" macro])))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2119
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2120 ;; Standard functions that take function-forms arguments.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2121 (def-edebug-spec mapcar (function-form form))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2122 (def-edebug-spec mapconcat (function-form form form))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2123 (def-edebug-spec mapatoms (function-form &optional form))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2124 (def-edebug-spec apply (function-form &rest form))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2125 (def-edebug-spec funcall (function-form &rest form))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2126
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2127 (def-edebug-spec let
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2128 ((&rest &or (symbolp &optional form) symbolp)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2129 body))
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 (def-edebug-spec let* let)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2132
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2133 (def-edebug-spec setq (&rest symbolp form))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2134 (def-edebug-spec setq-default setq)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2135
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2136 (def-edebug-spec cond (&rest (&rest form)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2137
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2138 (def-edebug-spec condition-case
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2139 (symbolp
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2140 form
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2141 &rest (symbolp body)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2142
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2143
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2144 (def-edebug-spec ` (backquote-form))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2145
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2146 ;; Supports quotes inside backquotes,
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2147 ;; but only at the top level inside unquotes.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2148 (def-edebug-spec backquote-form
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2149 (&or
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2150 ([&or "," ",@"] &or ("quote" backquote-form) form)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2151 (backquote-form &rest backquote-form)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2152 ;; 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
2153 ;; 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
2154 ;; (backquote-form . [&or nil backquote-form])
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2155 (vector &rest backquote-form)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2156 sexp))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2157
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2158 ;; Special version of backquote that instruments backquoted forms
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2159 ;; destined to be evaluated, usually as the result of a
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2160 ;; macroexpansion. Backquoted code can only have unquotes (, and ,@)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2161 ;; 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
2162 ;; 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
2163 ;; 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
2164
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2165 ;; 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
2166 ;; 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
2167 ;; are defined with edebug-` but this would be expensive.
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 ;; ,@ might have some problems.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2170
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2171 (defalias 'edebug-` '`) ;; same macro as regular backquote.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2172 (def-edebug-spec edebug-` (def-form))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2173
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2174 ;; 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
2175 (def-edebug-spec , (&or ("quote" edebug-`) def-form))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2176 (def-edebug-spec ,@ (&define ;; so (,@ form) is never wrapped.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2177 &or ("quote" edebug-`) def-form))
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 ;; New byte compiler.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2180 (def-edebug-spec defsubst defun)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2181 (def-edebug-spec dont-compile t)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2182 (def-edebug-spec eval-when-compile t)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2183 (def-edebug-spec eval-and-compile t)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2184
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2185 ;; Anything else?
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2186
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2187
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2188 ;;====================
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2189 ;; Some miscellaneous specs for macros in public packages.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2190 ;; Send me yours.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2191
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2192 ;; advice.el by Hans Chalupsky (hans@cs.buffalo.edu)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2193
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2194 (def-edebug-spec ad-dolist ((symbolp form &optional form) body))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2195 (def-edebug-spec defadvice
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2196 (&define name ;; thing being advised.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2197 (name ;; class is [&or "before" "around" "after"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2198 ;; "activation" "deactivation"]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2199 name ;; name of advice
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2200 &rest sexp ;; optional position and flags
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2201 )
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2202 [&optional stringp]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2203 [&optional ("interactive" interactive)]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2204 def-body))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2205
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2206
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2207 ;;;; The debugger itself
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2208 ;;; ===============================
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2209
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2210 (defvar edebug-active nil) ;; Non-nil when edebug is active
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2211
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2212 ;;; add minor-mode-alist entry
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2213 (or (assq 'edebug-active minor-mode-alist)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2214 (setq minor-mode-alist (cons (list 'edebug-active " *Debugging*")
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2215 minor-mode-alist)))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2216
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2217 (defvar edebug-stack nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2218 ;; Stack of active functions evaluated via edebug.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2219 ;; Should be nil at the top level.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2220
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2221 (defvar edebug-stack-depth -1)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2222 ;; Index of last edebug-stack item.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2223
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2224 (defvar edebug-offset-indices nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2225 ;; Stack of offset indices of visited edebug sexps.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2226 ;; Should be nil at the top level.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2227 ;; Each function adds one cons. Top is modified with setcar.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2228
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2229
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2230 (defvar edebug-entered nil
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2231 ;; 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
2232 ;; This should stay nil at the top level.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2233 )
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2234
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2235 ;; Should these be options?
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2236 (defconst edebug-debugger 'edebug
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2237 ;; 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
2238 ;; Set this to 'debug if you want to debug edebug.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2239 )
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2240
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2241
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2242 ;; Dynamically bound variables, declared globally but left unbound.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2243 (defvar edebug-function) ; the function being executed. change name!!
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2244 (defvar edebug-args) ; the arguments of the function
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2245 (defvar edebug-data) ; the edebug data for the function
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2246 (defvar edebug-value) ; the result of the expression
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2247 (defvar edebug-after-index)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2248 (defvar edebug-def-mark) ; the mark for the definition
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2249 (defvar edebug-freq-count) ; the count of expression visits.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2250 (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
2251
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2252 (defvar edebug-buffer) ; which buffer the function is in.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2253 (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
2254 (defvar edebug-outside-executing-macro)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2255 (defvar edebug-outside-defining-kbd-macro)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2256
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2257 (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
2258 (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
2259
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2260 (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
2261 (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
2262
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2263 ;;; Handling signals
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2264 ;;; =================
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2265
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2266 (if (not (fboundp 'edebug-emacs-signal))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2267 (defalias 'edebug-emacs-signal (symbol-function 'signal)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2268 ;; We should use advise for this!!
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2269
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2270 (defun edebug-signal (edebug-signal-name edebug-signal-data)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2271 "Signal an error. Args are SIGNAL-NAME, and associated DATA.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2272 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
2273 that is a list of condition names.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2274 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
2275 The symbol `error' should always be one of them.
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 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
2278 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
2279 See `condition-case'.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2280
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2281 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
2282 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
2283 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
2284 error is signaled again."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2285 (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
2286 (edebug 'error (cons edebug-signal-name edebug-signal-data)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2287 ;; 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
2288 ;; i.e. the signal is not continuable, yet.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2289 (edebug-emacs-signal edebug-signal-name edebug-signal-data))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2290
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2291
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2292 ;;; Entering Edebug
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2293 ;;; ==================
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2294
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2295 (defvar cl-lexical-debug) ;; Defined in cl.el
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 (edebug-function edebug-args edebug-body)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2298 ;; 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
2299 ;; Setup edebug variables and evaluate BODY. This function is called
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2300 ;; 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
2301 ;; Return the result of BODY.
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2302
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2303 ;; Is this the first time we are entering edebug since
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2304 ;; lower-level recursive-edit command?
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2305 ;; More precisely, this tests whether Edebug is currently active.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2306 (if (not edebug-entered)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2307 (let ((edebug-entered t)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2308 ;; Binding max-lisp-eval-depth here is OK,
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2309 ;; but not after the unwind-protect.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2310 ;; Doing it here also keeps it from growing.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2311 (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
2312 (max-specpdl-size (+ 200 max-specpdl-size))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2313
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2314 (debugger edebug-debugger) ; only while edebug is active.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2315 (edebug-outside-debug-on-error debug-on-error)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2316 (edebug-outside-debug-on-quit debug-on-quit)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2317 ;; Binding these may not be the right thing to do.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2318 ;; We want to allow the global values to be changed.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2319 (debug-on-error (or debug-on-error edebug-on-error))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2320 (debug-on-quit edebug-on-quit)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2321
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2322 ;; Save the outside value of executing macro. (here??)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2323 (edebug-outside-executing-macro executing-macro)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2324 ;; Don't keep reading from an executing kbd macro within edebug
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2325 ;; unless edebug-continue-kbd-macro is non-nil.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2326 ;; Again, local binding may not be best.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2327 (executing-macro (if edebug-continue-kbd-macro executing-macro))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2328
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2329 ;; Lexical bindings must be uncompiled for this to work.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2330 (cl-lexical-debug t))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2331 (setq edebug-execution-mode (or edebug-next-execution-mode
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2332 edebug-initial-mode
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2333 edebug-execution-mode)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2334 edebug-next-execution-mode nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2335 ;; Bind signal to edebug-signal only while Edebug is active.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2336 (fset 'signal 'edebug-signal)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2337 (unwind-protect
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2338 (edebug-enter edebug-function edebug-args edebug-body)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2339 (fset 'signal (symbol-function 'edebug-emacs-signal))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2340
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2341 (let* ((edebug-data (get edebug-function 'edebug))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2342 (edebug-def-mark (car edebug-data)) ; mark at def start
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2343 (edebug-freq-count (get edebug-function 'edebug-freq-count))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2344 (edebug-coverage (get edebug-function 'edebug-coverage))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2345 (edebug-buffer (marker-buffer edebug-def-mark))
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 (edebug-stack (cons edebug-function edebug-stack))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2348 (edebug-offset-indices (cons 0 edebug-offset-indices))
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 (if (get edebug-function 'edebug-on-entry)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2351 (progn
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2352 (setq edebug-execution-mode 'step)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2353 (if (eq (get edebug-function 'edebug-on-entry) 'temp)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2354 (put edebug-function 'edebug-on-entry nil))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2355 (if edebug-trace
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2356 (edebug-enter-trace edebug-body)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2357 (funcall edebug-body))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2358 )))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2359
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2360
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2361 (defun edebug-enter-trace (edebug-body)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2362 (let ((edebug-stack-depth (1+ edebug-stack-depth))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2363 edebug-result)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2364 (edebug-print-trace-before
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2365 (format "%s args: %s" edebug-function edebug-args))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2366 (prog1 (setq edebug-result (funcall edebug-body))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2367 (edebug-print-trace-after
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2368 (format "%s result: %s" edebug-function edebug-result)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2369
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2370 (def-edebug-spec edebug-tracing (form body))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2371
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2372 (defmacro edebug-tracing (msg &rest body)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2373 "Print MSG in *edebug-trace* before and after evaluating BODY.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2374 The result of BODY is also printed."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2375 (` (let ((edebug-stack-depth (1+ edebug-stack-depth))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2376 edebug-result)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2377 (edebug-print-trace-before (, msg))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2378 (prog1 (setq edebug-result (progn (,@ body)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2379 (edebug-print-trace-after
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2380 (format "%s result: %s" (, msg) edebug-result))))))
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 (defun edebug-print-trace-before (msg)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2383 "Function called to print trace info before expression evaluation.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2384 MSG is printed after `::::{ '."
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2385 (edebug-trace-display
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2386 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
2387
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2388 (defun edebug-print-trace-after (msg)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2389 "Function called to print trace info after expression evaluation.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2390 MSG is printed after `::::} '."
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2391 (edebug-trace-display
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2392 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
2393
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 (defun edebug-slow-before (edebug-before-index)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2397 ;; Debug current function given BEFORE position.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2398 ;; Called from functions compiled with edebug-eval-top-level-form.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2399 ;; Return the before index.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2400 (setcar edebug-offset-indices edebug-before-index)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2401
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2402 ;; Increment frequency count
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2403 (aset edebug-freq-count edebug-before-index
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2404 (1+ (aref edebug-freq-count edebug-before-index)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2405
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2406 (if (or (not (memq edebug-execution-mode '(Go-nonstop next)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2407 (edebug-input-pending-p))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2408 (edebug-debugger edebug-before-index 'before nil))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2409 edebug-before-index)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2410
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2411 (defun edebug-fast-before (edebug-before-index)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2412 ;; Do nothing.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2413 )
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2414
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2415 (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
2416 ;; Debug current function given AFTER position and VALUE.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2417 ;; Called from functions compiled with edebug-eval-top-level-form.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2418 ;; Return VALUE.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2419 (setcar edebug-offset-indices edebug-after-index)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2420
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2421 ;; Increment frequency count
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2422 (aset edebug-freq-count edebug-after-index
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2423 (1+ (aref edebug-freq-count edebug-after-index)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2424 (if edebug-test-coverage (edebug-update-coverage))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2425
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2426 (if (and (eq edebug-execution-mode 'Go-nonstop)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2427 (not (edebug-input-pending-p)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2428 ;; Just return result.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2429 edebug-value
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2430 (edebug-debugger edebug-after-index 'after edebug-value)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2431 ))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2432
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2433 (defun edebug-fast-after (edebug-before-index edebug-after-index edebug-value)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2434 ;; Do nothing but return the value.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2435 edebug-value)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2436
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2437 (defun edebug-run-slow ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2438 (defalias 'edebug-before 'edebug-slow-before)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2439 (defalias 'edebug-after 'edebug-slow-after))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2440
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2441 ;; This is not used, yet.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2442 (defun edebug-run-fast ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2443 (defalias 'edebug-before 'edebug-fast-before)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2444 (defalias 'edebug-after 'edebug-fast-after))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2445
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2446 (edebug-run-slow)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2447
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2448
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2449 (defun edebug-update-coverage ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2450 (let ((old-result (aref edebug-coverage edebug-after-index)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2451 (cond
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2452 ((eq 'ok-coverage old-result))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2453 ((eq 'unknown old-result)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2454 (aset edebug-coverage edebug-after-index edebug-value))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2455 ;; Test if a different result.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2456 ((not (eq edebug-value old-result))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2457 (aset edebug-coverage edebug-after-index 'ok-coverage)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2458
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2459
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2460 ;; Dynamically declared unbound variables.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2461 (defvar edebug-arg-mode) ; the mode, either before, after, or error
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2462 (defvar edebug-breakpoints)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2463 (defvar edebug-break-data) ; break data for current function.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2464 (defvar edebug-break) ; whether a break occurred.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2465 (defvar edebug-global-break) ; whether a global break occurred.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2466 (defvar edebug-break-condition) ; whether the breakpoint is conditional.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2467
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2468 (defvar edebug-break-result nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2469 (defvar edebug-global-break-result nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2470
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2471
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2472 (defun edebug-debugger (edebug-offset-index edebug-arg-mode edebug-value)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2473 ;; Check breakpoints and pending input.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2474 ;; If edebug display should be updated, call edebug-display.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2475 ;; Return edebug-value.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2476 (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
2477 (edebug-breakpoints (car (cdr edebug-data))) ; list of breakpoints
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2478 (edebug-break-data (assq edebug-offset-index edebug-breakpoints))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2479 (edebug-break-condition (car (cdr edebug-break-data)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2480 (edebug-global-break
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2481 (if edebug-global-break-condition
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2482 (condition-case nil
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2483 (setq edebug-global-break-result
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2484 (eval edebug-global-break-condition))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2485 (error nil))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2486 (edebug-break))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2487
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2488 ;;; (edebug-trace "exp: %s" edebug-value)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2489 ;; Test whether we should break.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2490 (setq edebug-break
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2491 (or edebug-global-break
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2492 (and edebug-break-data
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2493 (or (not edebug-break-condition)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2494 (setq edebug-break-result
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2495 (eval edebug-break-condition))))))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2496 (if (and edebug-break
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2497 (nth 2 edebug-break-data)) ; is it temporary?
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2498 ;; Delete the breakpoint.
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2499 (setcdr edebug-data
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2500 (cons (delq edebug-break-data edebug-breakpoints)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2501 (cdr (cdr edebug-data)))))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2502
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2503 ;; Display if mode is not go, continue, or Continue-fast
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2504 ;; or break, or input is pending,
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2505 (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
2506 edebug-break
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2507 (edebug-input-pending-p))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2508 (edebug-display)) ; <--------------- display
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2509
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2510 edebug-value
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2511 ))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2512
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2513
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2514 ;; window-start now stored with each function.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2515 ;;(defvar edebug-window-start nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2516 ;; Remember where each buffers' window starts between edebug calls.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2517 ;; This is to avoid spurious recentering.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2518 ;; Does this still need to be buffer-local??
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2519 ;;(setq-default edebug-window-start nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2520 ;;(make-variable-buffer-local 'edebug-window-start)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2521
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2522
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2523 ;; Dynamically declared unbound vars
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2524 (defvar edebug-point) ; the point in edebug buffer
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2525 (defvar edebug-outside-buffer) ; the current-buffer outside of edebug
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2526 (defvar edebug-outside-point) ; the point outside of edebug
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2527 (defvar edebug-outside-mark) ; the mark outside of edebug
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2528 (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
2529 (defvar edebug-outside-windows) ; outside window configuration
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2530 (defvar edebug-eval-buffer) ; for the evaluation list.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2531 (defvar edebug-outside-o-a-p) ; outside overlay-arrow-position
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2532 (defvar edebug-outside-o-a-s) ; outside overlay-arrow-string
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2533 (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
2534
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2535 (defvar edebug-eval-list nil) ;; List of expressions to evaluate.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2536
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2537 (defvar edebug-previous-result nil) ;; Last result returned.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2538
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2539 ;; Emacs 18
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2540 (defalias 'edebug-mark 'mark)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2541 (defalias 'edebug-mark-marker 'mark-marker)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2542
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2543
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2544 (defun edebug-display ()
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2545 ;; Setup windows for edebug, determine mode, maybe enter recursive-edit.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2546 ;; Uses local variables of edebug-enter, edebug-before, edebug-after
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2547 ;; and edebug-debugger.
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2548 (let ((edebug-active t) ; for minor mode alist
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2549 edebug-stop ; should we enter recursive-edit
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2550 (edebug-point (+ edebug-def-mark
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2551 (aref (nth 2 edebug-data) edebug-offset-index)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2552 edebug-buffer-outside-point ; current point in edebug-buffer
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2553 ;; window displaying edebug-buffer
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2554 (edebug-window-data (nth 3 edebug-data))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2555 (edebug-outside-window (selected-window))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2556 (edebug-outside-buffer (current-buffer))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2557 (edebug-outside-point (point))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2558 (edebug-outside-mark (edebug-mark))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2559 edebug-outside-windows ; window or screen configuration
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2560 edebug-buffer-points
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2561
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2562 edebug-eval-buffer ; declared here so we can kill it below
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2563 (edebug-eval-result-list (and edebug-eval-list
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2564 (edebug-eval-result-list)))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2565 (edebug-outside-o-a-p overlay-arrow-position)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2566 (edebug-outside-o-a-s overlay-arrow-string)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2567 (edebug-outside-c-i-e-a cursor-in-echo-area)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2568
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2569 overlay-arrow-position
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2570 overlay-arrow-string
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2571 (cursor-in-echo-area nil)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2572 ;; any others??
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2573
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2574 edebug-trace-window
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2575 edebug-trace-window-start
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2576 )
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2577 (if (not (buffer-name edebug-buffer))
5126
30682388c4cf Delete periods from error messages.
Richard M. Stallman <rms@gnu.org>
parents: 5125
diff changeset
2578 (let ((debug-on-error nil))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2579 (error "Buffer defining %s not found" edebug-function)))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2580
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2581 (if (eq 'after edebug-arg-mode)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2582 ;; Compute result string now before windows are modified.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2583 (edebug-compute-previous-result edebug-value))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2584
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2585 (if edebug-save-windows
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2586 ;; Save windows now before we modify them.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2587 (setq edebug-outside-windows
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2588 (edebug-current-windows edebug-save-windows)))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2589
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2590 (if edebug-save-displayed-buffer-points
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2591 (setq edebug-buffer-points (edebug-get-displayed-buffer-points)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2592
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2593 ;; First move the edebug buffer point to edebug-point
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2594 ;; so that window start doesnt get changed when we display it.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2595 ;; I dont know if this is going to help.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2596 ;;(set-buffer edebug-buffer)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2597 ;;(goto-char edebug-point)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2598
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2599 ;; If edebug-buffer is not currently displayed,
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2600 ;; first find a window for it.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2601 (edebug-pop-to-buffer edebug-buffer (car edebug-window-data))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2602 (setcar edebug-window-data (selected-window))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2603
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2604 ;; Now display eval list, if any.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2605 ;; This is done after the pop to edebug-buffer
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2606 ;; so that buffer-window correspondence is correct after quitting.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2607 (edebug-eval-display edebug-eval-result-list)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2608 ;; The evaluation list better not have deleted edebug-window-data.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2609 (select-window (car edebug-window-data))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2610 (set-buffer edebug-buffer)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2611
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2612 (setq edebug-buffer-outside-point (point))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2613 (goto-char edebug-point)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2614
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2615 (if (eq 'before edebug-arg-mode)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2616 ;; Check whether positions are uptodate - assumes never before symbol
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2617 (if (not (memq (following-char) '(?\( ?\# ?\` )))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2618 (let ((debug-on-error nil))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2619 (error "Source has changed - reevaluate definition of %s"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2620 edebug-function)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2621 )))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2622
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2623 (setcdr edebug-window-data
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2624 (edebug-adjust-window (cdr edebug-window-data)))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2625
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2626 ;; Test if there is input, not including keyboard macros.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2627 (if (edebug-input-pending-p)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2628 (progn
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2629 (setq edebug-execution-mode 'step
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2630 edebug-stop t)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2631 (edebug-stop)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2632 ;; (discard-input) ; is this unfriendly??
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2633 ))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2634 ;; Now display arrow based on mode.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2635 (edebug-overlay-arrow)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2636
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2637 (cond
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2638 ((eq 'error edebug-arg-mode)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2639 ;; Display error message
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2640 (setq edebug-execution-mode 'step)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2641 (edebug-overlay-arrow)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2642 (beep)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2643 (if (eq 'quit (car edebug-value))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2644 (message "Quit")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2645 (edebug-report-error edebug-value)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2646 (edebug-break
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2647 (cond
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2648 (edebug-global-break
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2649 (message "Global Break: %s => %s"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2650 edebug-global-break-condition
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2651 edebug-global-break-result))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2652 (edebug-break-condition
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2653 (message "Break: %s => %s"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2654 edebug-break-condition
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2655 edebug-break-result))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2656 ((not (eq edebug-execution-mode 'Continue-fast))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2657 (message "Break"))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2658 (t)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2659
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2660 (t (message "")))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2661
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2662 (if (eq 'after edebug-arg-mode)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2663 (progn
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2664 ;; Display result of previous evaluation.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2665 (if (and edebug-break
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2666 (not (eq edebug-execution-mode 'Continue-fast)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2667 (sit-for 1)) ; Show break message.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2668 (edebug-previous-result)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2669
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2670 (cond
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2671 (edebug-break
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2672 (cond
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2673 ((eq edebug-execution-mode 'continue) (edebug-sit-for 1))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2674 ((eq edebug-execution-mode 'Continue-fast) (edebug-sit-for 0))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2675 (t (setq edebug-stop t))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2676 ;; not edebug-break
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2677 ((eq edebug-execution-mode 'trace)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2678 (edebug-sit-for 1)) ; Force update and pause.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2679 ((eq edebug-execution-mode 'Trace-fast)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2680 (edebug-sit-for 0)) ; Force update and continue.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2681 )
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2682
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2683 (unwind-protect
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2684 (if (or edebug-stop
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2685 (memq edebug-execution-mode '(step next))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2686 (eq edebug-arg-mode 'error))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2687 (progn
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2688 ;; (setq edebug-execution-mode 'step)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2689 ;; (edebug-overlay-arrow) ; this doesnt always show up.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2690 (edebug-recursive-edit))) ; <---------- Recursive edit
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2691
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2692 ;; Reset the edebug-window-data to whatever it is now.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2693 (let ((window (if (eq (window-buffer) edebug-buffer)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2694 (selected-window)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2695 (edebug-get-buffer-window edebug-buffer))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2696 ;; Remember window-start for edebug-buffer, if still displayed.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2697 (if window
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2698 (progn
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2699 (setcar edebug-window-data window)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2700 (setcdr edebug-window-data (window-start window)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2701
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2702 ;; Save trace window point before restoring outside windows.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2703 ;; Could generalize this for other buffers.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2704 (setq edebug-trace-window (get-buffer-window edebug-trace-buffer))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2705 (if edebug-trace-window
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2706 (setq edebug-trace-window-start
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2707 (and edebug-trace-window (window-start edebug-trace-window))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2708
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2709 ;; Restore windows before continuing.
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2710 (if edebug-save-windows
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2711 (progn
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2712 (edebug-set-windows edebug-outside-windows)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2713
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2714 ;; Restore displayed buffer points.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2715 ;; Needed even if restoring windows because
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2716 ;; window-points are not restored. (correct?? should they be??)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2717 (if edebug-save-displayed-buffer-points
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2718 (edebug-set-buffer-points edebug-buffer-points))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2719
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2720 ;; Unrestore trace window's window-point.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2721 (if edebug-trace-window
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2722 (set-window-start edebug-trace-window
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2723 edebug-trace-window-start))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2724
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2725 ;; Unrestore edebug-buffer's window-start, if displayed.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2726 ;; (edebug-trace "selected-window: %s window-buffer: %s"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2727 ;; (selected-window) (window-buffer))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2728 ;; (edebug-trace "window-data: %s" edebug-window-data)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2729 (let ((window (car edebug-window-data)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2730 (if (and window (edebug-window-live-p window)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2731 (eq (window-buffer) edebug-buffer))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2732 (progn
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2733 ;;(setcar edebug-window-data window)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2734 ;; (edebug-trace "unrestore window start: %s and point"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2735 ;; (cdr edebug-window-data))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2736 (set-window-start window (cdr edebug-window-data)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2737 'no-force)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2738 ;; Unrestore edebug-buffer's window-point.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2739 ;; Needed in addition to setting the buffer point
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2740 ;; because otherwise quitting doesnt leave point as is.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2741 ;; But this causes point to not be restored other times.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2742 ;; Also, it may not be a visible window.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2743 ;; (set-window-point window edebug-point)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2744 )))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2745 ;; (edebug-trace "selected-window: %s window-buffer: %s"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2746 ;; (selected-window) (window-buffer))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2747 ;; (edebug-trace "window-data: %s" edebug-window-data)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2748
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2749 ;; Unrestore edebug-buffer's point. Rerestored below.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2750 ;; (goto-char edebug-point) ;; in edebug-buffer
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2751 ;; (edebug-trace "unrestore edebug-buffer point: %s" (point))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2752 ;; (sit-for 1)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2753 )
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2754 ;; Since we may be in a save-excursion, in case of quit,
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2755 ;; reselect the outside window only.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2756 ;; Only needed if we are not recovering windows??
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2757 (if (edebug-window-live-p edebug-outside-window)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2758 (select-window edebug-outside-window))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2759 ) ; if edebug-save-windows
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2760
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2761 ;; Restore current buffer always, in case application needs it.
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2762 (set-buffer edebug-outside-buffer)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2763 ;; Restore point, and mark.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2764 ;; Needed even if restoring windows because
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2765 ;; that doesnt restore point and mark in the current buffer.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2766 ;; But dont restore point if edebug-buffer is same as current buffer.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2767 (if (not (eq edebug-buffer edebug-outside-buffer))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2768 (goto-char edebug-outside-point))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2769 (if (marker-buffer (edebug-mark-marker))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2770 ;; Does zmacs-regions need to be nil while doing set-marker?
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2771 (set-marker (edebug-mark-marker) edebug-outside-mark))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2772 ;; (edebug-trace "done restoring and unrestoring") (sit-for 1)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2773 ) ; unwind-protect
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2774 ;; None of the following is done if quit or signal occurs.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2775
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2776 ;; Restore edebug-buffer's outside point.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2777 ;; (edebug-trace "restore edebug-buffer point: %s"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2778 ;; edebug-buffer-outside-point)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2779 (let ((current-buffer (current-buffer)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2780 (set-buffer edebug-buffer)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2781 (goto-char edebug-buffer-outside-point)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2782 (set-buffer current-buffer))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2783 ;; ... nothing more.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2784 ))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2785
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2786 (defvar edebug-number-of-recursions 0)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2787 ;; Number of recursive edits started by edebug.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2788 ;; Should be 0 at the top level.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2789
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2790 (defvar edebug-recursion-depth 0)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2791 ;; Value of recursion-depth when edebug was called.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2792
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2793 ;; Dynamically declared unbound vars
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2794 (defvar edebug-outside-match-data) ; match data outside of edebug
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2795 (defvar edebug-backtrace-buffer) ; each recursive edit gets its own
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2796 (defvar edebug-inside-windows)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2797 (defvar edebug-interactive-p)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2798
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2799 (defvar edebug-outside-map)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2800 (defvar edebug-outside-standard-output)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2801 (defvar edebug-outside-standard-input)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2802 (defvar edebug-outside-last-command-char)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2803 (defvar edebug-outside-last-command)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2804 (defvar edebug-outside-this-command)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2805 (defvar edebug-outside-last-input-char)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2806
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2807 ;; Emacs 18
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2808 (defvar edebug-outside-unread-command-char)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2809 (defvar unread-command-char -1) ;; Define for lemacs 19.9
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2810
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2811 ;; Lucid Emacs
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2812 (defvar edebug-outside-unread-command-event) ;; like unread-command-events
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2813 (defvar unread-command-event nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2814
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2815 ;; Emacs 19.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2816 (defvar edebug-outside-last-command-event)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2817 (defvar edebug-outside-unread-command-events)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2818 (defvar edebug-outside-last-input-event)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2819 (defvar edebug-outside-last-event-frame)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2820 (defvar edebug-outside-last-nonmenu-event)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2821 (defvar edebug-outside-track-mouse)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2822
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2823 ;; For Emacs 18, define vars defined by Emacs 19.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2824 (defvar last-input-event nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2825 (defvar last-command-event nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2826 (defvar unread-command-events nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2827 (defvar last-event-frame nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2828 (defvar last-nonmenu-event nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2829 (defvar track-mouse nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2830
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2831 ;; Disable byte compiler warnings about unread-command-char and -event
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2832 ;; (maybe works with byte-compile-version 2.22 at least)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2833 (defvar edebug-unread-command-char-warning)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2834 (defvar edebug-unread-command-event-warning)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2835 (eval-when-compile
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2836 (setq edebug-unread-command-char-warning
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2837 (get 'unread-command-char 'byte-obsolete-variable))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2838 (put 'unread-command-char 'byte-obsolete-variable nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2839 (setq edebug-unread-command-event-warning
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2840 (get 'unread-command-event 'byte-obsolete-variable))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2841 (put 'unread-command-event 'byte-obsolete-variable nil))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2842
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2843 (defun edebug-recursive-edit ()
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2844 ;; Start up a recursive edit inside of edebug.
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2845 ;; 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
2846 ;; Assume that none of the variables below are buffer-local.
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2847 (let ((edebug-buffer-read-only buffer-read-only)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2848 ;; match-data must be done in the outside buffer
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2849 (edebug-outside-match-data
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2850 (save-excursion ; might be unnecessary now??
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2851 (set-buffer edebug-outside-buffer) ; in case match buffer different
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2852 (match-data)))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2853
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2854 ;;(edebug-number-of-recursions (1+ edebug-number-of-recursions))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2855 (edebug-recursion-depth (recursion-depth))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2856 edebug-entered ; bind locally to nil
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2857 (edebug-interactive-p nil) ; again non-interactive
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2858 edebug-backtrace-buffer ; each recursive edit gets its own
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2859 ;; The window configuration may be saved and restored
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2860 ;; during a recursive-edit
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2861 edebug-inside-windows
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2862
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2863 (edebug-outside-map (current-local-map))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2864 (edebug-outside-standard-output standard-output)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2865 (edebug-outside-standard-input standard-input)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2866
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2867 (edebug-outside-last-command-char last-command-char)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2868 (edebug-outside-last-command last-command)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2869 (edebug-outside-this-command this-command)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2870 (edebug-outside-last-input-char last-input-char)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2871
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2872 (edebug-outside-unread-command-char unread-command-char)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2873
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2874 (edebug-outside-last-input-event last-input-event)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2875 (edebug-outside-last-command-event last-command-event)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2876 (edebug-outside-unread-command-event unread-command-event)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2877 (edebug-outside-unread-command-events unread-command-events)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2878 (edebug-outside-last-event-frame last-event-frame)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2879 (edebug-outside-last-nonmenu-event last-nonmenu-event)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2880 (edebug-outside-track-mouse track-mouse)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2881
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2882 ;; Declare the following local variables to protect global values.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2883 ;; Make it local, but use global value.
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2884 ;; We could set these to the values for previous edebug call.
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2885 (last-command-char last-command-char)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2886 (last-command last-command)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2887 (this-command this-command)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2888 (last-input-char last-input-char)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2889
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2890 ;; Assume no edebug command sets unread-command-char.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2891 (unread-command-char -1)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2892
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2893 ;; More for Emacs 19
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2894 (last-input-event nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2895 (last-command-event nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2896 (unread-command-event nil) ;; lemacs
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2897 (unread-command-events nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2898 (last-event-frame nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2899 (last-nonmenu-event nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2900 (track-mouse nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2901
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2902 ;; Bind again to outside values.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2903 (debug-on-error edebug-outside-debug-on-error)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2904 (debug-on-quit edebug-outside-debug-on-quit)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2905
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2906 ;; Save the outside value of defining macro.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2907 (edebug-outside-defining-kbd-macro defining-kbd-macro)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2908 ;; Don't keep defining a kbd macro.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2909 (defining-kbd-macro (if edebug-continue-kbd-macro defining-kbd-macro))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2910
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2911 ;; others??
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2912 )
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2913
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2914 (if (fboundp 'zmacs-deactivate-region) ;; for lemacs
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2915 (zmacs-deactivate-region))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2916 (if (and (eq edebug-execution-mode 'go)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2917 (not (memq edebug-arg-mode '(after error))))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2918 (message "Break"))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2919
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2920 (setq buffer-read-only t)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2921 (fset 'signal (symbol-function 'edebug-emacs-signal))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2922
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2923 (edebug-mode)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2924 (unwind-protect
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2925 (recursive-edit) ; <<<<<<<<<< Recursive edit
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2926
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2927 ;; Do the following, even if quit occurs.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2928 (fset 'signal 'edebug-signal)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2929 (if edebug-backtrace-buffer
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2930 (kill-buffer edebug-backtrace-buffer))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2931 ;; Could be an option to keep eval display up.
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2932 (if edebug-eval-buffer (kill-buffer edebug-eval-buffer))
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 ;; Remember selected-window after recursive-edit.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2935 ;; (setq edebug-inside-window (selected-window))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2936
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2937 (store-match-data edebug-outside-match-data)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2938
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2939 ;; Recursive edit may have changed buffers,
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2940 ;; so set it back before exiting let.
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2941 (if (buffer-name edebug-buffer) ; if it still exists
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2942 (progn
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2943 (set-buffer edebug-buffer)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2944 (if (memq edebug-execution-mode '(go Go-nonstop))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2945 (edebug-overlay-arrow))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2946 (setq buffer-read-only edebug-buffer-read-only)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2947 (use-local-map edebug-outside-map)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2948 )
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2949 ;; gotta have some other buffer to get its buffer local variables set
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2950 (get-buffer-create " bogus edebug buffer"))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2951 )))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2952
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2953
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2954 ;;; Display related functions
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2955 ;;; ===============================
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2956
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2957 (defun edebug-adjust-window (old-start)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2958 ;; 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
2959 ;;; (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
2960 ;;; (selected-window) old-start (window-start) (point)) (sit-for 5)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2961 (if (not (pos-visible-in-window-p))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2962 (progn
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2963 ;; First try old-start
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2964 (if old-start
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2965 (set-window-start (selected-window) old-start))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2966 (if (not (pos-visible-in-window-p))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2967 (progn
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2968 ;; (message "resetting window start") (sit-for 2)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2969 (set-window-start
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2970 (selected-window)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2971 (save-excursion
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2972 (forward-line
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2973 (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
2974 (- (/ (window-height) 2)) ; center the line moving forward
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2975 ))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2976 (beginning-of-line)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2977 (point)))))))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2978 (window-start))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2979
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2980
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2981
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2982 (defconst edebug-arrow-alist
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2983 '((Continue-fast . "=")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2984 (Trace-fast . "-")
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2985 (continue . ">")
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2986 (trace . "->")
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2987 (step . "=>")
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2988 (next . "=>")
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2989 (go . "<>")
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2990 (Go-nonstop . "..") ; not used
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2991 )
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2992 "Association list of arrows for each edebug mode.")
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2993
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2994 (defun edebug-overlay-arrow ()
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2995 ;; 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
2996 ;; The arrow string is derived from edebug-arrow-alist and
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
2997 ;; edebug-execution-mode.
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2998 (let* ((pos))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
2999 (save-excursion
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3000 (beginning-of-line)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3001 (setq pos (point)))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3002 (setq overlay-arrow-string
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3003 (cdr (assq edebug-execution-mode edebug-arrow-alist)))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3004 (setq overlay-arrow-position (make-marker))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3005 (set-marker overlay-arrow-position pos (current-buffer))))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3006
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3007
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3008 (defun edebug-toggle-save-all-windows ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3009 "Toggle the saving and restoring of all windows.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3010 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
3011 configurations become the same as the current configuration."
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3012 (interactive)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3013 (setq edebug-save-windows (not edebug-save-windows))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3014 (if edebug-save-windows
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3015 (setq edebug-inside-windows
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3016 (setq edebug-outside-windows
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3017 (edebug-current-windows
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3018 edebug-save-windows))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3019 (message "Window saving is %s for all windows."
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3020 (if edebug-save-windows "on" "off")))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3021
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3022 (defmacro edebug-changing-windows (&rest body)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3023 (` (let ((window (selected-window)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3024 (setq edebug-inside-windows (edebug-current-windows t))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3025 (edebug-set-windows edebug-outside-windows)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3026 (,@ body) ;; Code to change edebug-save-windows
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3027 (setq edebug-outside-windows (edebug-current-windows
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3028 edebug-save-windows))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3029 ;; Problem: what about outside windows that are deleted inside?
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3030 (edebug-set-windows edebug-inside-windows))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3031
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3032 (defun edebug-toggle-save-selected-window ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3033 "Toggle the saving and restoring of the selected window.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3034 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
3035 configurations become the same as the current configuration."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3036 (interactive)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3037 (cond
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3038 ((eq t edebug-save-windows)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3039 ;; Save all outside windows except the selected one.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3040 ;; Remove (selected-window) from outside-windows.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3041 (edebug-changing-windows
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3042 (setq edebug-save-windows (delq window (edebug-window-list)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3043
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3044 ((memq (selected-window) edebug-save-windows)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3045 (setq edebug-outside-windows
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3046 (delq (assq (selected-window) edebug-outside-windows)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3047 edebug-outside-windows))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3048 (setq edebug-save-windows
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3049 (delq (selected-window) edebug-save-windows)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3050 (t ; Save a new window.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3051 (edebug-changing-windows
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3052 (setq edebug-save-windows (cons window edebug-save-windows)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3053
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3054 (message "Window saving is %s for %s."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3055 (if (memq (selected-window) edebug-save-windows)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3056 "on" "off")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3057 (selected-window)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3058
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3059 (defun edebug-toggle-save-windows (arg)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3060 "Toggle the saving and restoring of windows.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3061 With prefix, toggle for just the selected window.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3062 Otherwise, toggle for all windows."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3063 (interactive "P")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3064 (if arg
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3065 (edebug-toggle-save-selected-window)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3066 (edebug-toggle-save-all-windows)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3067
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3068
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3069 (defun edebug-where ()
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3070 "Show the debug windows and where we stopped in the program."
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3071 (interactive)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3072 (if (not edebug-active)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3073 (error "Edebug is not active"))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3074 ;; Restore the window configuration to what it last was inside.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3075 ;; But it is not always set. - experiment
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3076 ;;(if edebug-inside-windows
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3077 ;; (edebug-set-windows edebug-inside-windows))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3078 (edebug-pop-to-buffer edebug-buffer)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3079 (goto-char edebug-point))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3080
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3081 (defun edebug-view-outside ()
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3082 "Change to the outside window configuration."
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3083 (interactive)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3084 (if (not edebug-active)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3085 (error "Edebug is not active"))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3086 (setq edebug-inside-windows
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3087 (edebug-current-windows edebug-save-windows))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3088 (edebug-set-windows edebug-outside-windows)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3089 (goto-char edebug-outside-point)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3090 (message "Window configuration outside of Edebug. Return with %s"
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3091 (substitute-command-keys "\\<global-map>\\[edebug-where]")))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3092
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3093
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3094 (defun edebug-bounce-point (arg)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3095 "Bounce the point in the outside current buffer.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3096 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
3097 The default is one second."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3098 (interactive "p")
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3099 (if (not edebug-active)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3100 (error "Edebug is not active"))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3101 (save-excursion
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3102 ;; If the buffer's currently displayed, avoid set-window-configuration.
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3103 (save-window-excursion
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3104 (edebug-pop-to-buffer edebug-outside-buffer)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3105 (goto-char edebug-outside-point)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3106 (message "Current buffer: %s Point: %s Mark: %s"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3107 (current-buffer) (point)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3108 (if (marker-buffer (edebug-mark-marker))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3109 (marker-position (edebug-mark-marker)) "<not set>"))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3110 (edebug-sit-for arg)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3111 (edebug-pop-to-buffer edebug-buffer (car edebug-window-data)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3112
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3113
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3114 ;; 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
3115 ;; 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
3116
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3117 '(defvar edebug-display-buffer-list nil
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3118 "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
3119
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3120 '(defun edebug-display-buffer (buffer)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3121 "Toggle display of a buffer inside of edebug."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3122 (interactive "bBuffer: ")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3123 (let ((already-displaying (memq buffer edebug-display-buffer-list)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3124 (setq edebug-display-buffer-list
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3125 (if already-displaying
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3126 (delq buffer edebug-display-buffer-list)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3127 (cons buffer edebug-display-buffer-list)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3128 (message "Displaying %s %s" buffer
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3129 (if already-displaying "off" "on"))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3130
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3131
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3132 ;;; Breakpoint related functions
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3133 ;;; ===============================
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3134
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3135 (defun edebug-find-stop-point ()
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3136 ;; Return (function . index) of the nearest edebug stop point.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3137 (let* ((edebug-def-name (edebug-form-data-symbol))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3138 (edebug-data
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3139 (let ((data (get edebug-def-name 'edebug)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3140 (if (or (null data) (markerp data))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3141 (error "%s is not instrumented for Edebug" edebug-def-name))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3142 data)) ; we could do it automatically, if data is a marker.
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3143 ;; pull out parts of edebug-data.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3144 (edebug-def-mark (car edebug-data))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3145 ;; (edebug-breakpoints (car (cdr edebug-data)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3146
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3147 (offset-vector (nth 2 edebug-data))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3148 (offset (- (save-excursion
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3149 (if (looking-at "[ \t]")
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3150 ;; skip backwards until non-whitespace, or bol
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3151 (skip-chars-backward " \t"))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3152 (point))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3153 edebug-def-mark))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3154 len i)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3155 ;; the offsets are in order so we can do a linear search
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3156 (setq len (length offset-vector))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3157 (setq i 0)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3158 (while (and (< i len) (> offset (aref offset-vector i)))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3159 (setq i (1+ i)))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3160 (if (and (< i len)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3161 (<= offset (aref offset-vector i)))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3162 ;; return the relevant info
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3163 (cons edebug-def-name i)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3164 (message "Point is not on an expression in %s."
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3165 edebug-def-name)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3166 )))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3167
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3168
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3169 (defun edebug-next-breakpoint ()
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3170 "Move point to the next breakpoint, or first if none past point."
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3171 (interactive)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3172 (let ((edebug-stop-point (edebug-find-stop-point)))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3173 (if edebug-stop-point
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3174 (let* ((edebug-def-name (car edebug-stop-point))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3175 (index (cdr edebug-stop-point))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3176 (edebug-data (get edebug-def-name 'edebug))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3177
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3178 ;; pull out parts of edebug-data
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3179 (edebug-def-mark (car edebug-data))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3180 (edebug-breakpoints (car (cdr edebug-data)))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3181 (offset-vector (nth 2 edebug-data))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3182 breakpoint)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3183 (if (not edebug-breakpoints)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3184 (message "No breakpoints in this function.")
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3185 (let ((breaks edebug-breakpoints))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3186 (while (and breaks
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3187 (<= (car (car breaks)) index))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3188 (setq breaks (cdr breaks)))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3189 (setq breakpoint
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3190 (if breaks
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3191 (car breaks)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3192 ;; goto the first breakpoint
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3193 (car edebug-breakpoints)))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3194 (goto-char (+ edebug-def-mark
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3195 (aref offset-vector (car breakpoint))))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3196
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3197 (message (concat (if (nth 2 breakpoint)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3198 "Temporary " "")
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3199 (if (car (cdr breakpoint))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3200 (format "Condition: %s"
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3201 (edebug-safe-prin1-to-string
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3202 (car (cdr breakpoint))))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3203 "")))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3204 ))))))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3205
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3206
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3207 (defun edebug-modify-breakpoint (flag &optional condition temporary)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3208 "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
3209 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
3210 If CONDITION or TEMPORARY are non-nil, add those attributes to
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3211 the breakpoint. "
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3212 (let ((edebug-stop-point (edebug-find-stop-point)))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3213 (if edebug-stop-point
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3214 (let* ((edebug-def-name (car edebug-stop-point))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3215 (index (cdr edebug-stop-point))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3216 (edebug-data (get edebug-def-name 'edebug))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3217
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3218 ;; pull out parts of edebug-data
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3219 (edebug-def-mark (car edebug-data))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3220 (edebug-breakpoints (car (cdr edebug-data)))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3221 (offset-vector (nth 2 edebug-data))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3222 present)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3223 ;; delete it either way
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3224 (setq present (assq index edebug-breakpoints))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3225 (setq edebug-breakpoints (delq present edebug-breakpoints))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3226 (if flag
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3227 (progn
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3228 ;; add it to the list and resort
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3229 (setq edebug-breakpoints
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3230 (edebug-sort-alist
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3231 (cons
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3232 (list index condition temporary)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3233 edebug-breakpoints) '<))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3234 (if condition
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3235 (message "Breakpoint set in %s with condition: %s"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3236 edebug-def-name condition)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3237 (message "Breakpoint set in %s" edebug-def-name)))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3238 (if present
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3239 (message "Breakpoint unset in %s" edebug-def-name)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3240 (message "No breakpoint here")))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3241
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3242 (setcar (cdr edebug-data) edebug-breakpoints)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3243 (goto-char (+ edebug-def-mark (aref offset-vector index)))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3244 ))))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3245
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3246 (defun edebug-set-breakpoint (arg)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3247 "Set the breakpoint of nearest sexp.
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3248 With prefix argument, make it a temporary breakpoint."
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3249 (interactive "P")
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3250 (edebug-modify-breakpoint t nil arg))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3251
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3252 (defun edebug-unset-breakpoint ()
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3253 "Clear the breakpoint of nearest sexp."
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3254 (interactive)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3255 (edebug-modify-breakpoint nil))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3256
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3257
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3258 ;; For emacs 18, no read-expression-history
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3259 (defun edebug-set-conditional-breakpoint (arg condition)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3260 "Set a conditional breakpoint at nearest sexp.
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3261 The condition is evaluated in the outside context.
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3262 With prefix argument, make it a temporary breakpoint."
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3263 ;; (interactive "P\nxCondition: ")
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 (list
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3266 current-prefix-arg
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3267 ;; Edit previous condition as follows, but it is cumbersome:
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3268 (let ((edebug-stop-point (edebug-find-stop-point)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3269 (if edebug-stop-point
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3270 (let* ((edebug-def-name (car edebug-stop-point))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3271 (index (cdr edebug-stop-point))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3272 (edebug-data (get edebug-def-name 'edebug))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3273 (edebug-breakpoints (car (cdr edebug-data)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3274 (edebug-break-data (assq index edebug-breakpoints))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3275 (edebug-break-condition (car (cdr edebug-break-data))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3276 (read-minibuffer
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3277 (format "Condition in %s: " edebug-def-name)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3278 (if edebug-break-condition
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3279 (format "%s" edebug-break-condition)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3280 (format ""))))))))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3281 (edebug-modify-breakpoint t condition arg))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3282
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3283
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3284 (defun edebug-set-global-break-condition (expression)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3285 (interactive (list (read-minibuffer
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3286 "Global Condition: "
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3287 (format "%s" edebug-global-break-condition))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3288 (setq edebug-global-break-condition expression))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3289
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3290
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3291 ;;; Mode switching functions
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3292 ;;; ===============================
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3293
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3294 (defun edebug-set-mode (mode shortmsg msg)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3295 ;; Set the edebug mode to MODE.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3296 ;; Display SHORTMSG, or MSG if not within edebug.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3297 (if (eq (1+ edebug-recursion-depth) (recursion-depth))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3298 (progn
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3299 (setq edebug-execution-mode mode)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3300 (message shortmsg)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3301 ;; Continue execution
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3302 (exit-recursive-edit))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3303 ;; This is not terribly useful!!
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3304 (setq edebug-next-execution-mode mode)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3305 (message msg)))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3306
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3307
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3308 (defalias 'edebug-step-through-mode 'edebug-step-mode)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3309
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3310 (defun edebug-step-mode ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3311 "Proceed to next stop point."
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3312 (interactive)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3313 (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
3314
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3315 (defun edebug-next-mode ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3316 "Proceed to next `after' stop point."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3317 (interactive)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3318 (edebug-set-mode 'next "" "Edebug will stop after next eval."))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3319
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3320 (defun edebug-go-mode (arg)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3321 "Go, evaluating until break.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3322 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
3323 (interactive "P")
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3324 (if arg
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3325 (edebug-set-breakpoint t))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3326 (edebug-set-mode 'go "Go..." "Edebug will go until break."))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3327
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3328 (defun edebug-Go-nonstop-mode ()
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3329 "Go, evaluating without debugging."
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3330 (interactive)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3331 (edebug-set-mode 'Go-nonstop "Go-Nonstop..."
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3332 "Edebug will not stop at breaks."))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3333
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3334
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3335 (defun edebug-trace-mode ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3336 "Begin trace mode."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3337 (interactive)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3338 (edebug-set-mode 'trace "Tracing..." "Edebug will trace with pause."))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3339
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3340 (defun edebug-Trace-fast-mode ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3341 "Trace with no wait at each step."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3342 (interactive)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3343 (edebug-set-mode 'Trace-fast
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3344 "Trace fast..." "Edebug will trace without pause."))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3345
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3346 (defun edebug-continue-mode ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3347 "Begin continue mode."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3348 (interactive)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3349 (edebug-set-mode 'continue "Continue..."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3350 "Edebug will pause at breakpoints."))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3351
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3352 (defun edebug-Continue-fast-mode ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3353 "Trace with no wait at each step."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3354 (interactive)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3355 (edebug-set-mode 'Continue-fast "Continue fast..."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3356 "Edebug will stop and go at breakpoints."))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3357
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3358 ;; ------------------------------------------------------------
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3359 ;; The following use the mode changing commands and breakpoints.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3360
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3361
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3362 (defun edebug-goto-here ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3363 "Proceed to this stop point."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3364 (interactive)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3365 (edebug-go-mode t))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3366
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3367
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3368 (defun edebug-stop ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3369 "Stop execution and do not continue.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3370 Useful for exiting from trace or continue loop."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3371 (interactive)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3372 (message "Stop"))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3373
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3374
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3375 '(defun edebug-forward ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3376 "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
3377 (interactive)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3378 (edebug-set-mode
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3379 'forward "Forward"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3380 "Edebug will stop after exiting the next expression."))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3381
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3382
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3383 (defun edebug-forward-sexp (arg)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3384 "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
3385 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
3386 (interactive "p")
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3387 (condition-case nil
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3388 (let ((parse-sexp-ignore-comments t))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3389 ;; Call forward-sexp repeatedly until done or failure.
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3390 (forward-sexp arg)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3391 (edebug-go-mode t))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3392 (error
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3393 (edebug-step-out)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3394 )))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3395
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3396 (defun edebug-step-out ()
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3397 "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
3398 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
3399 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
3400 (interactive)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3401 (condition-case nil
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3402 (let ((parse-sexp-ignore-comments t))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3403 (up-list 1)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3404 (save-excursion
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3405 ;; Is there still a containing expression?
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3406 (up-list 1))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3407 (edebug-go-mode t))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3408 (error
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3409 ;; 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
3410 (let ((start-point (point)))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3411 ;; (up-list 1)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3412 (down-list -1)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3413 (if (= (point) start-point)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3414 (edebug-step-mode) ; No more at this level, so step.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3415 (edebug-go-mode t)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3416 )))))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3417
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3418 (defun edebug-instrument-function (func)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3419 ;; Func should be a function symbol.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3420 ;; Return the function symbol, or nil if not instrumented.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3421 (let ((func-marker))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3422 (setq func-marker (get func 'edebug))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3423 (cond
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3424 ((markerp func-marker)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3425 ;; It is uninstrumented, so instrument it.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3426 (save-excursion
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3427 (set-buffer (marker-buffer func-marker))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3428 (goto-char func-marker)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3429 (edebug-eval-top-level-form)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3430 func))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3431 ((consp func-marker)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3432 (message "%s is already instrumented." func)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3433 func)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3434 (t
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3435 ;; We could try harder, e.g. do a tags search.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3436 (error "Don't know where %s is defined" func)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3437 nil))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3438
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3439 (defun edebug-instrument-callee ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3440 "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
3441 Do this when stopped before the form or it will be too late.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3442 One side effect of using this command is that the next time the
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3443 function or macro is called, Edebug will be called there as well."
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3444 (interactive)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3445 (if (not (looking-at "\("))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3446 (error "You must be before a list form")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3447 (let ((func
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3448 (save-excursion
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3449 (down-list 1)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3450 (if (looking-at "\(")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3451 (edebug-form-data-name
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3452 (edebug-get-form-data-entry (point)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3453 (read (current-buffer))))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3454 (edebug-instrument-function func))))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3455
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 (defun edebug-step-in ()
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3458 "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
3459 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
3460 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
3461 (interactive)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3462 (let ((func (edebug-instrument-callee)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3463 (if func
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3464 (progn
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3465 (edebug-on-entry func 'temp)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3466 (edebug-go-mode nil)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3467
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3468 (defun edebug-on-entry (function &optional flag)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3469 "Cause Edebug to stop when FUNCTION is called.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3470 With prefix argument, make this temporary so it is automatically
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3471 cancelled the first time the function is entered."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3472 (interactive "aEdebug on entry to: \nP")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3473 ;; Could store this in the edebug data instead.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3474 (put function 'edebug-on-entry (if flag 'temp t)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3475
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3476 (defun cancel-edebug-on-entry (function)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3477 (interactive "aEdebug on entry to: ")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3478 (put function 'edebug-on-entry nil))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3479
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3480
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3481 (if (not (fboundp 'edebug-emacs-debug-on-entry))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3482 (fset 'edebug-emacs-debug-on-entry (symbol-function 'debug-on-entry)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3483 '(fset 'debug-on-entry 'edebug-debug-on-entry) ;; Should we do this?
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3484 ;; Also need edebug-cancel-debug-on-entry
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3485
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3486 '(defun edebug-debug-on-entry (function)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3487 "Request FUNCTION to invoke debugger each time it is called.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3488 If the user continues, FUNCTION's execution proceeds.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3489 Works by modifying the definition of FUNCTION,
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3490 which must be written in Lisp, not predefined.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3491 Use `cancel-debug-on-entry' to cancel the effect of this command.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3492 Redefining FUNCTION also does that.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3493
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3494 This version is from Edebug. If the function is instrumented for
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3495 Edebug, it calls `edebug-on-entry'"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3496 (interactive "aDebug on entry (to function): ")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3497 (let ((func-data (get function 'edebug)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3498 (if (or (null func-data) (markerp func-data))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3499 (edebug-emacs-debug-on-entry function)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3500 (edebug-on-entry function))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3501
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3502
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3503 (defun edebug-top-level-nonstop ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3504 "Set mode to Go-nonstop, and exit to top-level.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3505 This is useful for exiting even if unwind-protect code may be executed."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3506 (interactive)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3507 (setq edebug-execution-mode 'Go-nonstop)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3508 (top-level))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3509
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3510
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3511 ;;(defun edebug-exit-out ()
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3512 ;; "Go until the current function exits."
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3513 ;; (interactive)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3514 ;; (edebug-set-mode 'exiting "Exit..."))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3515
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3516
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3517 ;;; -----------------------------------------------------------------
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3518 ;;; The following initial mode setting definitions are not used yet.
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3519
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3520 '(defconst edebug-initial-mode-alist
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3521 '((edebug-Continue-fast . Continue-fast)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3522 (edebug-Trace-fast . Trace-fast)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3523 (edebug-continue . continue)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3524 (edebug-trace . trace)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3525 (edebug-go . go)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3526 (edebug-step-through . step)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3527 (edebug-Go-nonstop . Go-nonstop)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3528 )
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3529 "Association list between commands and the modes they set.")
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3530
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3531
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3532 '(defun edebug-set-initial-mode ()
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3533 "Ask for the initial mode of the enclosing function.
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3534 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
3535 edebug-mode."
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3536 (interactive)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3537 (let* ((this-function (edebug-which-function))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3538 (keymap (if (eq edebug-mode-map (current-local-map))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3539 edebug-mode-map))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3540 (old-mode (or (get this-function 'edebug-initial-mode)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3541 edebug-initial-mode))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3542 (key (read-key-sequence
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3543 (format
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3544 "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
3545 this-function
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3546 old-mode
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3547 (where-is-internal
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3548 (car (rassq old-mode edebug-initial-mode-alist))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3549 keymap 'firstonly
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3550 ))))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3551 (mode (cdr (assq (key-binding key) edebug-initial-mode-alist)))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3552 )
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3553 (if (and mode
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3554 (or (get this-function 'edebug-initial-mode)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3555 (not (eq mode edebug-initial-mode))))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3556 (progn
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3557 (put this-function 'edebug-initial-mode mode)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3558 (message "Initial mode for %s is now: %s"
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3559 this-function mode))
5126
30682388c4cf Delete periods from error messages.
Richard M. Stallman <rms@gnu.org>
parents: 5125
diff changeset
3560 (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
3561 )))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3562
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3563
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3564 ;;; Evaluation of expressions
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3565 ;;; ===============================
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3566
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3567 (def-edebug-spec edebug-outside-excursion t)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3568
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3569 (defmacro edebug-outside-excursion (&rest body)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3570 "Evaluate an expression list in the outside context.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3571 Return the result of the last expression."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3572 (` (save-excursion ; of current-buffer
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3573 (if edebug-save-windows
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3574 (progn
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3575 ;; After excursion, we will
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3576 ;; restore to current window configuration.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3577 (setq edebug-inside-windows
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3578 (edebug-current-windows edebug-save-windows))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3579 ;; Restore outside windows.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3580 (edebug-set-windows edebug-outside-windows)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3581
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3582 (set-buffer edebug-buffer) ; why?
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3583 ;; (use-local-map edebug-outside-map)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3584 (store-match-data edebug-outside-match-data)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3585 ;; Restore outside context.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3586 (let (;; (edebug-inside-map (current-local-map)) ;; restore map??
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3587 (last-command-char edebug-outside-last-command-char)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3588 (last-command-event edebug-outside-last-command-event)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3589 (last-command edebug-outside-last-command)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3590 (this-command edebug-outside-this-command)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3591 (unread-command-char edebug-outside-unread-command-char)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3592 (unread-command-event edebug-outside-unread-command-event)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3593 (unread-command-events edebug-outside-unread-command-events)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3594 (last-input-char edebug-outside-last-input-char)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3595 (last-input-event edebug-outside-last-input-event)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3596 (last-event-frame edebug-outside-last-event-frame)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3597 (last-nonmenu-event edebug-outside-last-nonmenu-event)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3598 (track-mouse edebug-outside-track-mouse)
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 (overlay-arrow-position edebug-outside-o-a-p)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3601 (overlay-arrow-string edebug-outside-o-a-s)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3602 (cursor-in-echo-area edebug-outside-c-i-e-a)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3603 (standard-output edebug-outside-standard-output)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3604 (standard-input edebug-outside-standard-input)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3605 (executing-macro edebug-outside-executing-macro)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3606 (defining-kbd-macro edebug-outside-defining-kbd-macro)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3607 )
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3608 (unwind-protect
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3609 (save-excursion ; of edebug-buffer
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3610 (set-buffer edebug-outside-buffer)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3611 (goto-char edebug-outside-point)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3612 (if (marker-buffer (edebug-mark-marker))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3613 (set-marker (edebug-mark-marker) edebug-outside-mark))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3614 (,@ body))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3615
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3616 ;; Back to edebug-buffer. Restore rest of inside context.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3617 ;; (use-local-map edebug-inside-map)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3618 (if edebug-save-windows
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3619 ;; Restore inside windows.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3620 (edebug-set-windows edebug-inside-windows))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3621 )) ; let
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3622 )))
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 (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
3625
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3626 (defun edebug-eval (edebug-expr)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3627 ;; Are there cl lexical variables active?
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3628 (if cl-debug-env
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3629 (eval (cl-macroexpand-all edebug-expr cl-debug-env))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3630 (eval edebug-expr)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3631
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3632 (defun edebug-safe-eval (edebug-expr)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3633 ;; Evaluate EXPR safely.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3634 ;; 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
3635 (condition-case edebug-err
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3636 (edebug-eval edebug-expr)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3637 (error (edebug-format "%s: %s" ;; could
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3638 (get (car edebug-err) 'error-message)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3639 (car (cdr edebug-err))))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3640
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3641 ;;;; Printing
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3642 ;;; =========
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3643 ;; Replace printing functions.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3644
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3645 ;; obsolete names
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3646 (defalias 'edebug-install-custom-print-funcs 'edebug-install-custom-print)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3647 (defalias 'edebug-reset-print-funcs 'edebug-uninstall-custom-print)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3648 (defalias 'edebug-uninstall-custom-print-funcs 'edebug-uninstall-custom-print)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3649
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3650 (defun edebug-install-custom-print ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3651 "Replace print functions used by Edebug with custom versions."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3652 ;; Modifying the custom print functions, or changing print-length,
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3653 ;; 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
3654 ;; have immediate effect.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3655 (interactive)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3656 (require 'cust-print)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3657 (defalias 'edebug-prin1 'custom-prin1)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3658 (defalias 'edebug-print 'custom-print)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3659 (defalias 'edebug-prin1-to-string 'custom-prin1-to-string)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3660 (defalias 'edebug-format 'custom-format)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3661 (defalias 'edebug-message 'custom-message)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3662 "Installed")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3663
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3664 (eval-and-compile
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3665 (defun edebug-uninstall-custom-print ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3666 "Replace edebug custom print functions with internal versions."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3667 (interactive)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3668 (defalias 'edebug-prin1 'prin1)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3669 (defalias 'edebug-print 'print)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3670 (defalias 'edebug-prin1-to-string 'prin1-to-string)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3671 (defalias 'edebug-format 'format)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3672 (defalias 'edebug-message 'message)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3673 "Uninstalled")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3674
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3675 ;; Default print functions are the same as Emacs'.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3676 (edebug-uninstall-custom-print))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3677
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3678
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3679 (defun edebug-report-error (edebug-value)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3680 ;; Print an error message like command level does.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3681 ;; 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
3682 (message "%s: %s"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3683 (or (get (car edebug-value) 'error-message)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3684 (format "peculiar error (%s)" (car edebug-value)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3685 (mapconcat (function (lambda (edebug-arg)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3686 ;; continuing after an error may
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3687 ;; complain about edebug-arg. why??
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3688 (prin1-to-string edebug-arg)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3689 (cdr edebug-value) ", ")))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3690
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3691 ;; Define here in case they are not already defined.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3692 (defvar print-level nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3693 (defvar print-circle nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3694 (defvar print-readably) ;; defined by lemacs
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3695 ;; Alternatively, we could change the definition of
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3696 ;; edebug-save-prin1-to-string to only use these if defined.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3697
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3698 (defun edebug-safe-prin1-to-string (value)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3699 (let ((print-escape-newlines t)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3700 (print-length (or edebug-print-length print-length))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3701 (print-level (or edebug-print-level print-level))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3702 (print-circle (or edebug-print-circle print-circle))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3703 (print-readably nil)) ;; lemacs uses this.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3704 (edebug-prin1-to-string value)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3705
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3706 (defun edebug-compute-previous-result (edebug-previous-value)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3707 (setq edebug-previous-result
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3708 (if (and (numberp edebug-previous-value)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3709 (< edebug-previous-value 256)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3710 (>= edebug-previous-value 0))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3711 (format "Result: %s = %s" edebug-previous-value
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3712 (single-key-description edebug-previous-value))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3713 (if edebug-unwrap-results
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3714 (setq edebug-previous-value
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3715 (edebug-unwrap* edebug-previous-value)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3716 (concat "Result: "
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3717 (edebug-safe-prin1-to-string edebug-previous-value)))))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3718
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3719 (defun edebug-previous-result ()
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3720 "Print the previous result."
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3721 (interactive)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3722 (message "%s" edebug-previous-result))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3723
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3724 ;;;; Read, Eval and Print
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3725 ;;; =====================
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3726
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3727 (defun edebug-eval-expression (edebug-expr)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3728 "Evaluate an expression in the outside environment.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3729 If interactive, prompt for the expression.
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3730 Print result in minibuffer."
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3731 (interactive "xEval: ")
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3732 (princ
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3733 (edebug-outside-excursion
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3734 (setq values (cons (edebug-eval edebug-expr) values))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3735 (edebug-safe-prin1-to-string (car values)))))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3736
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3737 (defun edebug-eval-last-sexp ()
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3738 "Evaluate sexp before point in the outside environment;
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3739 print value in minibuffer."
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3740 (interactive)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3741 (edebug-eval-expression (edebug-last-sexp)))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3742
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3743 (defun edebug-eval-print-last-sexp ()
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3744 "Evaluate sexp before point in the outside environment;
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3745 print value into current buffer."
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3746 (interactive)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3747 (let* ((edebug-form (edebug-last-sexp))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3748 (edebug-result-string
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3749 (edebug-outside-excursion
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3750 (edebug-safe-prin1-to-string (edebug-safe-eval edebug-form))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3751 (standard-output (current-buffer)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3752 (princ "\n")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3753 ;; princ the string to get rid of quotes.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3754 (princ edebug-result-string)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3755 (princ "\n")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3756 ))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3757
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3758
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3759 ;;;; Edebug Minor Mode
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3760 ;;; ===============================
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3761
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3762 ;; Global GUD bindings for all emacs-lisp-mode buffers.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3763 (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
3764 (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
3765 (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
3766 (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
3767
661
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 (defvar edebug-mode-map nil)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3770 (if edebug-mode-map
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3771 nil
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3772 (progn
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3773 (setq edebug-mode-map (copy-keymap emacs-lisp-mode-map))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3774 ;; control
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3775 (define-key edebug-mode-map " " 'edebug-step-mode)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3776 (define-key edebug-mode-map "n" 'edebug-next-mode)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3777 (define-key edebug-mode-map "g" 'edebug-go-mode)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3778 (define-key edebug-mode-map "G" 'edebug-Go-nonstop-mode)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3779 (define-key edebug-mode-map "t" 'edebug-trace-mode)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3780 (define-key edebug-mode-map "T" 'edebug-Trace-fast-mode)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3781 (define-key edebug-mode-map "c" 'edebug-continue-mode)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3782 (define-key edebug-mode-map "C" 'edebug-Continue-fast-mode)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3783
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3784 ;;(define-key edebug-mode-map "f" 'edebug-forward) not implemented
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3785 (define-key edebug-mode-map "f" 'edebug-forward-sexp)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3786 (define-key edebug-mode-map "h" 'edebug-goto-here)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3787
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3788 (define-key edebug-mode-map "I" 'edebug-instrument-callee)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3789 (define-key edebug-mode-map "i" 'edebug-step-in)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3790 (define-key edebug-mode-map "o" 'edebug-step-out)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3791
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3792 ;; quitting and stopping
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3793 (define-key edebug-mode-map "q" 'top-level)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3794 (define-key edebug-mode-map "Q" 'edebug-top-level-nonstop)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3795 (define-key edebug-mode-map "a" 'abort-recursive-edit)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3796 (define-key edebug-mode-map "S" 'edebug-stop)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3797
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3798 ;; breakpoints
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3799 (define-key edebug-mode-map "b" 'edebug-set-breakpoint)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3800 (define-key edebug-mode-map "u" 'edebug-unset-breakpoint)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3801 (define-key edebug-mode-map "B" 'edebug-next-breakpoint)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3802 (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
3803 (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
3804
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3805 ;; evaluation
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3806 (define-key edebug-mode-map "r" 'edebug-previous-result)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3807 (define-key edebug-mode-map "e" 'edebug-eval-expression)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3808 (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
3809 (define-key edebug-mode-map "E" 'edebug-visit-eval-list)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3810
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3811 ;; views
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3812 (define-key edebug-mode-map "w" 'edebug-where)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3813 (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
3814 (define-key edebug-mode-map "p" 'edebug-bounce-point)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3815 (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
3816 (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
3817
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3818 ;; misc
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3819 (define-key edebug-mode-map "?" 'edebug-help)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3820 (define-key edebug-mode-map "d" 'edebug-backtrace)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3821
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3822 (define-key edebug-mode-map "-" 'negative-argument)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3823
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3824 ;; statistics
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3825 (define-key edebug-mode-map "=" 'edebug-temp-display-freq-count)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3826
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3827 ;; GUD bindings
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3828 (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
3829 (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
3830 (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
3831
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3832 (define-key edebug-mode-map "\C-x " 'edebug-set-breakpoint)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3833 (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
3834 (define-key edebug-mode-map "\C-c\C-t"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3835 (function (lambda () (edebug-set-breakpoint t))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3836 (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
3837 ))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3838
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3839 ;; Autoloading these global bindings doesn't make sense because
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3840 ;; 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
3841
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3842 (defvar global-edebug-prefix "\^XX"
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3843 "Prefix key for global edebug commands, available from any buffer.")
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3844
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3845 (defvar global-edebug-map nil
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3846 "Global map of edebug commands, available from any buffer.")
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3847
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3848 (if global-edebug-map
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3849 nil
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3850 (setq global-edebug-map (make-sparse-keymap))
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 (global-unset-key global-edebug-prefix)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3853 (global-set-key global-edebug-prefix global-edebug-map)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3854
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3855 (define-key global-edebug-map " " 'edebug-step-mode)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3856 (define-key global-edebug-map "g" 'edebug-go-mode)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3857 (define-key global-edebug-map "G" 'edebug-Go-nonstop-mode)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3858 (define-key global-edebug-map "t" 'edebug-trace-mode)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3859 (define-key global-edebug-map "T" 'edebug-Trace-fast-mode)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3860 (define-key global-edebug-map "c" 'edebug-continue-mode)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3861 (define-key global-edebug-map "C" 'edebug-Continue-fast-mode)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3862
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3863 ;; breakpoints
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3864 (define-key global-edebug-map "b" 'edebug-set-breakpoint)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3865 (define-key global-edebug-map "u" 'edebug-unset-breakpoint)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3866 (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
3867 (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
3868
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3869 ;; views
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3870 (define-key global-edebug-map "w" 'edebug-where)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3871 (define-key global-edebug-map "W" 'edebug-toggle-save-windows)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3872
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3873 ;; quitting
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3874 (define-key global-edebug-map "q" 'top-level)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3875 (define-key global-edebug-map "Q" 'edebug-top-level-nonstop)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3876 (define-key global-edebug-map "a" 'abort-recursive-edit)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3877
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3878 ;; statistics
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3879 (define-key global-edebug-map "=" 'edebug-display-freq-count)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3880 )
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3881
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3882 (defun edebug-help ()
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3883 (interactive)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3884 (describe-function 'edebug-mode))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3885
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3886 (defun edebug-mode ()
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3887 "Mode for Emacs Lisp buffers while in Edebug.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3888
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3889 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
3890 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
3891 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
3892 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
3893
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3894 Also see bindings for the eval list buffer, *edebug*.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3895
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3896 The edebug buffer commands:
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3897 \\{edebug-mode-map}
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3898
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3899 Global commands prefixed by `global-edebug-prefix':
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3900 \\{global-edebug-map}
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3901
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3902 Options:
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3903 edebug-setup-hook
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3904 edebug-all-defs
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3905 edebug-all-forms
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3906 edebug-save-windows
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3907 edebug-save-displayed-buffer-points
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3908 edebug-initial-mode
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3909 edebug-trace
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3910 edebug-test-coverage
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3911 edebug-continue-kbd-macro
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3912 edebug-print-length
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3913 edebug-print-level
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3914 edebug-print-circle
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3915 edebug-on-error
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3916 edebug-on-quit
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3917 edebug-on-signal
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3918 edebug-unwrap-results
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3919 edebug-global-break-condition
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3920 "
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3921 (use-local-map edebug-mode-map))
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
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3924 ;;;; edebug eval list mode
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3925 ;;; ===============================================
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3926 ;; 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
3927
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3928 (defun edebug-eval-result-list ()
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3929 "Return a list of evaluations of edebug-eval-list"
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3930 ;; Assumes in outside environment.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3931 (mapcar 'edebug-safe-eval edebug-eval-list))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3932
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3933 (defun edebug-eval-display-list (edebug-eval-result-list)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3934 ;; Assumes edebug-eval-buffer exists.
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3935 (let ((edebug-eval-list-temp edebug-eval-list)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3936 (standard-output edebug-eval-buffer)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3937 (edebug-comment-line
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3938 (format ";%s\n" (make-string (- (window-width) 2) ?-))))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3939 (set-buffer edebug-eval-buffer)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3940 (erase-buffer)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3941 (while edebug-eval-list-temp
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3942 (prin1 (car edebug-eval-list-temp)) (terpri)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3943 (prin1 (car edebug-eval-result-list)) (terpri)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
3944 (princ edebug-comment-line)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3945 (setq edebug-eval-list-temp (cdr edebug-eval-list-temp))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3946 (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
3947 (edebug-pop-to-buffer edebug-eval-buffer)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3948 ))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3949
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3950 (defun edebug-create-eval-buffer ()
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3951 (if (not (and edebug-eval-buffer (buffer-name edebug-eval-buffer)))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3952 (progn
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3953 (set-buffer (setq edebug-eval-buffer (get-buffer-create "*edebug*")))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3954 (edebug-eval-mode))))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3955
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3956 ;; Should generalize this to be callable outside of edebug
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3957 ;; with calls in user functions, e.g. (edebug-eval-display)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3958
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3959 (defun edebug-eval-display (edebug-eval-result-list)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3960 "Display expressions and evaluations in EVAL-LIST.
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3961 It modifies the context by popping up the eval display."
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3962 (if edebug-eval-result-list
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3963 (progn
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3964 (edebug-create-eval-buffer)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3965 (edebug-eval-display-list edebug-eval-result-list)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3966 )))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3967
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3968 (defun edebug-eval-redisplay ()
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3969 "Redisplay eval list in outside environment.
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3970 May only be called from within edebug-recursive-edit."
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3971 (edebug-create-eval-buffer)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3972 (edebug-outside-excursion
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3973 (edebug-eval-display-list (edebug-eval-result-list))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3974 ))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3975
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3976 (defun edebug-visit-eval-list ()
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3977 (interactive)
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 (edebug-pop-to-buffer edebug-eval-buffer))
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-update-eval-list ()
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3983 "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
3984 (interactive)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3985 (let ((starting-point (point))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3986 new-list)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3987 (goto-char (point-min))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3988 ;; get the first expression
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3989 (edebug-skip-whitespace)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3990 (if (not (eobp))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3991 (progn
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3992 (forward-sexp 1)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3993 (setq new-list (cons (edebug-last-sexp) new-list))))
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 (while (re-search-forward "^;" nil t)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3996 (forward-line 1)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3997 (skip-chars-forward " \t\n\r")
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3998 (if (and (/= ?\; (following-char))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
3999 (not (eobp)))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4000 (progn
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4001 (forward-sexp 1)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4002 (setq new-list (cons (edebug-last-sexp) new-list)))))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4003
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4004 (setq edebug-eval-list (nreverse new-list))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4005 (edebug-eval-redisplay)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4006 (goto-char starting-point)))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4007
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4008
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4009 (defun edebug-delete-eval-item ()
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4010 "Delete the item under point and redisplay."
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4011 ;; could add arg to do repeatedly
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4012 (interactive)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4013 (if (re-search-backward "^;" nil 'nofail)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4014 (forward-line 1))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4015 (delete-region
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4016 (point) (progn (re-search-forward "^;" nil 'nofail)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4017 (beginning-of-line)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4018 (point)))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4019 (edebug-update-eval-list))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4020
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4021
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4022
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4023 (defvar edebug-eval-mode-map nil
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4024 "Keymap for edebug-eval-mode. Superset of lisp-interaction-mode.")
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4025
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4026 (if edebug-eval-mode-map
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4027 nil
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4028 (setq edebug-eval-mode-map (copy-keymap lisp-interaction-mode-map))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4029
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4030 (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
4031 (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
4032 (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
4033 (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
4034 (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
4035 )
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4036
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4037
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4038 (defun edebug-eval-mode ()
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4039 "Mode for evaluation list buffer while in Edebug.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4040
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4041 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
4042 global key bindings to several Edebug specific commands. E.g.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4043 `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
4044 buffer and \\<global-map>\\[edebug-step-mode] in any buffer.
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4045
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4046 Eval list buffer commands:
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4047 \\{edebug-eval-mode-map}
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4048
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4049 Global commands prefixed by global-edebug-prefix:
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4050 \\{global-edebug-map}
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4051 "
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4052 (lisp-interaction-mode)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4053 (setq major-mode 'edebug-eval-mode)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4054 (setq mode-name "Edebug-Eval")
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4055 (use-local-map edebug-eval-mode-map))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4056
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4057
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4058 ;;;; Interface with standard debugger.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4059 ;;; ========================================
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4060
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4061 ;; (setq debugger 'edebug) ; to use the edebug debugger
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4062 ;; (setq debugger 'debug) ; use the standard debugger
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4063
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4064 ;; 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
4065 ;; 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
4066 ;; edebug is not dependent on this, yet.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4067
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4068 (defun edebug (&optional edebug-arg-mode &rest debugger-args)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4069 "Replacement for debug.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4070 If we are running an edebugged function,
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4071 show where we last were. Otherwise call debug normally."
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4072 ;; (message "entered: %s depth: %s edebug-recursion-depth: %s"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4073 ;; edebug-entered (recursion-depth) edebug-recursion-depth) (sit-for 1)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4074 (if (and edebug-entered ; anything active?
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4075 (eq (recursion-depth) edebug-recursion-depth))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4076 (let (;; Where were we before the error occurred?
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4077 (edebug-offset-index (car edebug-offset-indices))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4078 ;; Bind variables required by edebug-display
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4079 (edebug-value (car debugger-args))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4080 edebug-breakpoints
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4081 edebug-break-data
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4082 edebug-break-condition
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4083 edebug-global-break
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4084 (edebug-break (null edebug-arg-mode)) ;; if called explicitly
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4085 )
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4086 (edebug-display)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4087 (if (eq edebug-arg-mode 'error)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4088 nil
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4089 edebug-value))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4090
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4091 ;; Otherwise call debug normally.
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4092 ;; Still need to remove extraneous edebug calls from stack.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4093 (apply 'debug edebug-arg-mode debugger-args)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4094 ))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4095
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4096
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4097 (defun edebug-backtrace ()
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4098 "Display a non-working backtrace. Better than nothing..."
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4099 (interactive)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4100 (if (or (not edebug-backtrace-buffer)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4101 (null (buffer-name edebug-backtrace-buffer)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4102 (setq edebug-backtrace-buffer
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4103 (generate-new-buffer "*Backtrace*"))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4104 ;; else, could just display edebug-backtrace-buffer
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 (with-output-to-temp-buffer (buffer-name edebug-backtrace-buffer)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4107 (setq edebug-backtrace-buffer standard-output)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4108 (let ((print-escape-newlines t)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4109 (print-length 50)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4110 last-ok-point)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4111 (backtrace)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4112
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4113 ;; Clean up the backtrace.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4114 ;; Not quite right for current edebug scheme.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4115 (set-buffer edebug-backtrace-buffer)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4116 (setq truncate-lines t)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4117 (goto-char (point-min))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4118 (setq last-ok-point (point))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4119 (if t (progn
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4120
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4121 ;; Delete interspersed edebug internals.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4122 (while (re-search-forward "^ \(?edebug" nil t)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4123 (beginning-of-line)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4124 (cond
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4125 ((looking-at "^ \(edebug-after")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4126 ;; Previous lines may contain code, so just delete this line
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4127 (setq last-ok-point (point))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4128 (forward-line 1)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4129 (delete-region last-ok-point (point)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4130
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4131 ((looking-at "^ edebug")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4132 (forward-line 1)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4133 (delete-region last-ok-point (point))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4134 )))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4135 )))))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4136
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4137
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4138 ;;;; Trace display
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4139 ;; ===============================
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4140
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4141 (defun edebug-trace-display (buf-name fmt &rest args)
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4142 "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
4143 The buffer is created if it does not exist.
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4144 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
4145 ;; e.g.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4146 ;; (edebug-trace-display "*trace-point*"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4147 ;; "saving: point = %s window-start = %s"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4148 ;; (point) (window-start))
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4149 (let* ((selected-window (selected-window))
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4150 (buffer (get-buffer-create buf-name))
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4151 buf-window)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4152 ;; (message "before pop-to-buffer") (sit-for 1)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4153 (edebug-pop-to-buffer buffer)
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4154 (setq truncate-lines t)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4155 (setq buf-window (selected-window))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4156 (goto-char (point-max))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4157 (insert (apply 'edebug-format fmt args) "\n")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4158 ;; Make it visible.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4159 (vertical-motion (- 1 (window-height)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4160 (set-window-start buf-window (point))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4161 (goto-char (point-max))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4162 ;; (set-window-point buf-window (point))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4163 ;; (edebug-sit-for 0)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4164 (bury-buffer buffer)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4165 (select-window selected-window))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4166 buf-name)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4167
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4168
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4169 (defun edebug-trace (fmt &rest args)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4170 "Convenience call to edebug-trace-display using edebug-trace-buffer"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4171 (apply 'edebug-trace-display edebug-trace-buffer fmt args))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4172
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4173
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4174 ;;;; Frequency count and coverage
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4175 ;;; ==============================
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4176
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4177 (defun edebug-display-freq-count ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4178 "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
4179 definition. The frequency counts are inserted as comment lines after
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4180 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
4181
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4182 The counts are inserted starting under the `(' before an expression
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4183 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
4184 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
4185 the same line.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4186
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4187 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
4188 are `eq', the char `=' will be appended after the count
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4189 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
4190 expression only evaluated once.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4191
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4192 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
4193 reinstrument it."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4194 (interactive)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4195 (let* ((function (edebug-form-data-symbol))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4196 (counts (get function 'edebug-freq-count))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4197 (coverages (get function 'edebug-coverage))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4198 (data (get function 'edebug))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4199 (def-mark (car data)) ; mark at def start
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4200 (edebug-points (nth 2 data))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4201 (i (1- (length edebug-points)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4202 (last-index)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4203 (first-index)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4204 (start-of-line)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4205 (start-of-count-line)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4206 (last-count)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4207 )
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4208 (save-excursion
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4209 ;; Traverse in reverse order so offsets are correct.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4210 (while (<= 0 i)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4211 ;; Start at last expression in line.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4212 (goto-char (+ def-mark (aref edebug-points i)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4213 (beginning-of-line)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4214 (setq start-of-line (- (point) def-mark)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4215 last-index i)
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 ;; Find all indexes on same line.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4218 (while (and (<= 0 (setq i (1- i)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4219 (<= start-of-line (aref edebug-points i))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4220 ;; Insert all the indices for this line.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4221 (forward-line 1)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4222 (setq start-of-count-line (point)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4223 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
4224 last-count -1) ; cause first count to always appear.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4225 (insert ";#")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4226 ;; i == first-index still
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4227 (while (<= (setq i (1+ i)) last-index)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4228 (let ((count (aref counts i))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4229 (coverage (aref coverages i))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4230 (col (save-excursion
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4231 (goto-char (+ (aref edebug-points i) def-mark))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4232 (- (current-column)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4233 (if (= ?\( (following-char)) 0 1)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4234 (insert (make-string
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4235 (max 0 (- col (- (point) start-of-count-line))) ?\ )
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4236 (if (and (< 0 count)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4237 (not (memq coverage
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4238 '(unknown ok-coverage))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4239 "=" "")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4240 (if (= count last-count) "" (int-to-string count))
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 (setq last-count count)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4243 (insert "\n")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4244 (setq i first-index)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4245
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4246 (defun edebug-temp-display-freq-count ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4247 "Temporarily display the frequency count data for the current definition.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4248 It is removed when you hit any char."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4249 ;; 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
4250 (interactive)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4251 (let ((buffer-read-only nil))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4252 (undo-boundary)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4253 (edebug-display-freq-count)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4254 (setq unread-command-char (read-char))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4255 (undo)))
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
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4258 ;;;; Menus
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4259 ;;;=========
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4260
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4261 (defun edebug-toggle (variable)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4262 (set variable (not (eval variable)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4263 (message "%s: %s" variable (eval variable)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4264
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4265 ;; 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
4266 ;; the easy-menu-define macro call is compiled correctly.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4267 (require 'easymenu)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4268
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4269 (defconst edebug-mode-menus
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4270 '("Edebug"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4271 "----"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4272 ["Stop" edebug-stop t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4273 ["Step" edebug-step-mode t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4274 ["Next" edebug-next-mode t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4275 ["Trace" edebug-trace-mode t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4276 ["Trace Fast" edebug-Trace-fast-mode t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4277 ["Continue" edebug-continue-mode t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4278 ["Continue Fast" edebug-Continue-fast-mode t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4279 ["Go" edebug-go-mode t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4280 ["Go Nonstop" edebug-Go-nonstop-mode t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4281 "----"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4282 ["Help" edebug-help t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4283 ["Abort" abort-recursive-edit t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4284 ["Quit to Top Level" top-level t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4285 ["Quit Nonstop" edebug-top-level-nonstop 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 ("Jumps"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4288 ["Forward Sexp" edebug-forward-sexp t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4289 ["Step In" edebug-step-in t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4290 ["Step Out" edebug-step-out t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4291 ["Goto Here" edebug-goto-here 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 ("Breaks"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4294 ["Set Breakpoint" edebug-set-breakpoint t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4295 ["Unset Breakpoint" edebug-unset-breakpoint t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4296 ["Set Conditional Breakpoint" edebug-set-conditional-breakpoint t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4297 ["Set Global Break Condition" edebug-set-global-break-condition t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4298 ["Show Next Breakpoint" edebug-next-breakpoint t])
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4299
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4300 ("Views"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4301 ["Where am I?" edebug-where t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4302 ["Bounce to Current Point" edebug-bounce-point t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4303 ["View Outside Windows" edebug-view-outside t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4304 ["Previous Result" edebug-previous-result t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4305 ["Show Backtrace" edebug-backtrace t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4306 ["Display Freq Count" edebug-display-freq-count t])
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4307
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4308 ("Eval"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4309 ["Expression" edebug-eval-expression t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4310 ["Last Sexp" edebug-eval-last-sexp t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4311 ["Visit Eval List" edebug-visit-eval-list t])
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4312
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4313 ("Options"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4314 ["Edebug All Defs" edebug-all-defs t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4315 ["Edebug All Forms" edebug-all-forms t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4316 "----"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4317 ["Toggle Tracing" (edebug-toggle 'edebug-trace) t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4318 ["Toggle Coverage Testing" (edebug-toggle 'edebug-test-coverage) t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4319 ["Toggle Window Saving" edebug-toggle-save-windows t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4320 ["Toggle Point Saving"
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4321 (edebug-toggle 'edebug-save-displayed-buffer-points) t]
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4322 ))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4323 "Lemacs style menus for Edebug.")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4324
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4325
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4326 ;;;; Emacs version specific code
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4327 ;;;=============================
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4328 ;;; 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
4329 ;;; 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
4330 ;;; change once most people are using Emacs 19 or derivatives.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4331
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4332 ;; 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
4333
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4334 ;; 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
4335 ;; to functions like mark and read-from-minibuffer. These warnings
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4336 ;; 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
4337
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4338 (defun edebug-emacs19-specific ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4339
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4340 (defalias 'edebug-window-live-p 'window-live-p)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4341
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4342 ;; Mark takes an argument in Emacs 19.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4343 (defun edebug-mark ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4344 (mark t));; Does this work for lemacs too?
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 ;; Use minibuffer-history when reading expressions.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4347 (defvar read-expression-history) ;; hush bytecomp
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4348 (defvar read-expression-map)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4349
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4350 (defun edebug-set-conditional-breakpoint (arg condition)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4351 "Set a conditional breakpoint at nearest sexp.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4352 The condition is evaluated in the outside context.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4353 With prefix argument, make it a temporary breakpoint."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4354 ;; (interactive "P\nxCondition: ")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4355 (interactive
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4356 (list
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4357 current-prefix-arg
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4358 ;; Read condition as follows; getting previous condition is cumbersome:
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4359 (let ((edebug-stop-point (edebug-find-stop-point)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4360 (if edebug-stop-point
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4361 (let* ((edebug-def-name (car edebug-stop-point))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4362 (index (cdr edebug-stop-point))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4363 (edebug-data (get edebug-def-name 'edebug))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4364 (edebug-breakpoints (car (cdr edebug-data)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4365 (edebug-break-data (assq index edebug-breakpoints))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4366 (edebug-break-condition (car (cdr edebug-break-data)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4367 (edebug-expression-history
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4368 ;; Prepend the current condition, if any.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4369 (if edebug-break-condition
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4370 (cons edebug-break-condition read-expression-history)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4371 read-expression-history)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4372 (prog1
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4373 (read-from-minibuffer
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4374 "Condition: " nil read-expression-map t
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4375 'edebug-expression-history)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4376 (setq read-expression-history edebug-expression-history)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4377 ))))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4378 (edebug-modify-breakpoint t condition arg))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4379
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4380 (defun edebug-eval-expression (edebug-expr)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4381 "Evaluate an expression in the outside environment.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4382 If interactive, prompt for the expression.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4383 Print result in minibuffer."
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4384 (interactive (list (read-from-minibuffer
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4385 "Eval: " nil read-expression-map t
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4386 'read-expression-history)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4387 (princ
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4388 (edebug-outside-excursion
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4389 (setq values (cons (edebug-eval edebug-expr) values))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4390 (edebug-safe-prin1-to-string (car values)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4391
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4392 (easy-menu-define 'edebug edebug-mode-map "Edebug menus" edebug-mode-menus)
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
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4395
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4396 (defun edebug-lemacs-specific ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4397
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4398 ;; 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
4399 ;; `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
4400 ;; 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
4401 ;; executing a command.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4402
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4403 (defvar zmacs-regions)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4404
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4405 (defun edebug-mark ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4406 (let ((zmacs-regions nil))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4407 (mark)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4408
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4409 (defun edebug-mark-marker ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4410 (let ((zmacs-regions nil));; for lemacs
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4411 (mark-marker)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4412
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4413
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4414 (defun edebug-mode-menu (event)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4415 (interactive "@event")
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4416 (popup-menu edebug-mode-menus))
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 (define-key edebug-mode-map 'button3 'edebug-mode-menu)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4419 )
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4420
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4421 (defun edebug-emacs-version-specific ()
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4422 (cond
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4423 ;; Test Lucid first.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4424 ((string-match "Lucid" emacs-version);; lemacs
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4425 (edebug-lemacs-specific))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4426
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4427 ((string-match "^19" emacs-version);; Emacs 19
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4428 (edebug-emacs19-specific))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4429
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4430 ((and (boundp 'epoch::version) epoch::version)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4431 (require 'edebug-epoch))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4432
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4433 (edebug-emacs-version-specific)
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
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4436 ;;;; Byte-compiler
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4437 ;;; ====================
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4438 ;; Extension for bytecomp to resolve undefined function references.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4439 ;; Requires new byte compiler.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4440
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4441 ;; Reenable byte compiler warnings about unread-command-char and -event.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4442 ;; Disabled before edebug-recursive-edit.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4443 (eval-when-compile
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4444 (if edebug-unread-command-char-warning
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4445 (put 'unread-command-char 'byte-obsolete-variable
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4446 edebug-unread-command-char-warning))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4447 (if edebug-unread-command-event-warning
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4448 (put 'unread-command-event 'byte-obsolete-variable
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4449 edebug-unread-command-event-warning)))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4450
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4451 (eval-when-compile
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4452 ;; 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
4453 ;; We only want to evaluate when actually byte compiling.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4454 ;; 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
4455 (if (featurep 'byte-compile) (progn
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4456
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4457 (defun byte-compile-resolve-functions (funcs)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4458 "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
4459 (mapcar
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4460 (function
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4461 (lambda (func)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4462 (setq byte-compile-unresolved-functions
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4463 (delq (assq func byte-compile-unresolved-functions)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4464 byte-compile-unresolved-functions))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4465 funcs)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4466 nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4467
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4468 '(defun byte-compile-resolve-free-references (vars)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4469 "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
4470 (mapcar
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4471 (function
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4472 (lambda (var)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4473 (setq byte-compile-free-references
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4474 (delq var byte-compile-free-references))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4475 vars)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4476 nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4477
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4478 '(defun byte-compile-resolve-free-assignments (vars)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4479 "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
4480 (mapcar
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4481 (function
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4482 (lambda (var)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4483 (setq byte-compile-free-assignments
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4484 (delq var byte-compile-free-assignments))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4485 vars)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4486 nil)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4487
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4488 (byte-compile-resolve-functions
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4489 '(reporter-submit-bug-report
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4490 gensym keywordp;; cl.el
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4491 ;; Interfaces to standard functions.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4492 edebug-original-eval-defun
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4493 edebug-original-read
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4494 edebug-get-buffer-window
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4495 edebug-mark
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4496 edebug-mark-marker
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4497 edebug-input-pending-p
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4498 edebug-sit-for
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4499 edebug-prin1-to-string
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4500 edebug-format
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4501 edebug-emacs-signal
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4502 ;; lemacs
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4503 zmacs-deactivate-region
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4504 popup-menu
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4505 ;; CL
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4506 cl-macroexpand-all
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4507 ;; And believe it or not, the byte compiler doesnt know about:
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4508 byte-compile-resolve-functions
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
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4511 '(byte-compile-resolve-free-references
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4512 '(read-expression-history
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4513 read-expression-map))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4514
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4515 '(byte-compile-resolve-free-assignments
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4516 '(read-expression-history))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4517
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4518 )))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4519
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4520
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4521 ;;;; Autoloading of Edebug accessories
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4522 ;;;===================================
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4523
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4524 (if (featurep 'cl)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4525 (add-hook 'edebug-setup-hook
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4526 (function (lambda () (require 'cl-specs))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4527 ;; 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
4528 (add-hook 'cl-load-hook
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4529 (function (lambda () (require 'cl-specs)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4530
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4531 (if (featurep 'cl-read)
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4532 (add-hook 'edebug-setup-hook
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4533 (function (lambda () (require 'edebug-cl-read))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4534 ;; 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
4535 (add-hook 'cl-read-load-hooks
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4536 (function (lambda () (require 'edebug-cl-read)))))
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4537
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4538
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4539 ;;;; Finalize Loading
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4540 ;;;===================
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4541
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4542 ;;; Finally, hook edebug into the rest of Emacs.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4543 ;;; There are probably some other things that could go here.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4544
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4545 ;; Install edebug read and eval functions.
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4546 (edebug-install-read-eval-functions)
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4547
3350
c9689f8d0574 Provide edebug.
Richard M. Stallman <rms@gnu.org>
parents: 2629
diff changeset
4548 (provide 'edebug)
c9689f8d0574 Provide edebug.
Richard M. Stallman <rms@gnu.org>
parents: 2629
diff changeset
4549
661
36fbc3f71803 Initial revision
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
diff changeset
4550 ;;; edebug.el ends here
6512
c79a6bf75daa New version from author.
Daniel LaLiberte <liberte@gnu.org>
parents: 6226
diff changeset
4551