;;; compiled by rms@mole.gnu.ai.mit.edu on Mon May 31 20:08:35 1993
;;; from file /gd/gnu/emacs/19.0/lisp/edebug.el
;;; emacs version 19.10.3.
;;; bytecomp version FSF 2.08
;;; optimization is on.

(defvar edebug-all-defuns nil "\
*If non-nil, all defuns and defmacros evaluated will use edebug.
eval-defun without prefix arg and eval-region will use edebug-defun.

If nil, eval-region evaluates normally, but eval-defun with prefix arg
uses edebug-defun.  eval-region is called by eval-defun, eval-last-sexp,
and eval-print-last-sexp.

You may wish to make this variable local to each Emacs Lisp buffer by calling
(make-local-variable 'edebug-all-defuns) in your emacs-lisp-mode-hook.
You can use the function edebug-all-defuns to toggle its value.")
(defvar edebug-eval-macro-args nil "\
*If non-nil, edebug will assume that all macro call arguments for
macros that have no edebug-form-hook may be evaluated, otherwise it
will not.  To specify exceptions for macros that have some arguments
evaluated and some not, you should specify an edebug-form-hook")
(defvar edebug-stop-before-symbols nil "\
*Non-nil causes edebug to stop before symbols as well as after.
In any case, it is possible to stop before a symbol with a breakpoint or
interrupt.")
(defvar edebug-save-windows t "\
*If non-nil, save and restore window configuration on edebug calls.
It takes some time to save and restore, so if your program does not care
what happens to the window configurations, it is better to set this
variable to nil.")
(defvar edebug-save-point t "\
*If non-nil, save and restore the point and mark in source code buffers.")
(defvar edebug-save-buffer-points nil "\
*If non-nil, save and restore the points of all buffers, displayed or not.

Saving and restoring buffer points is necessary if you are debugging
code that changes the point of a buffer which is displayed in a
non-selected window.  If edebug or the user then selects the
window, the buffer's point will be changed to the window's point.

Saving and restoring all the points is an expensive operation since it
visits each buffer twice for each edebug call, so it is best to avoid
it if you can.")
(defvar edebug-initial-mode (quote step) "\
*Global initial mode for edebug, if non-nil.
This is used when edebug is first entered for each recursive-edit level.
Possible values are nil (meaning keep using edebug-mode), step, go,
Go-nonstop, trace, Trace-fast, continue, and Continue-fast.")
(defvar edebug-trace nil "\
*Non-nil if edebug should show a trace of function entry and exit.
Tracing output is displayed in a buffer named *edebug-trace*, one
function entry or exit per line, indented by the recursion level.  You
can customize by replacing functions edebug-print-trace-entry and
edebug-print-trace-exit.")
(defalias 'edebug-which-function #[nil "  !p!> !p!)" [end-of-defun beginning-of-defun down-list 1 read (defun defmacro) error "Not in defun or defmacro."] 2 "\
Return the symbol of the function we are in"])
(defalias 'edebug-last-sexp #[nil "!`)`\"!@" [read-from-string buffer-substring forward-sexp -1] 4 "\
Return the last sexp before point in current buffer.
Assumes Emacs Lisp syntax is active."])
(defalias 'edebug-window-list #[nil " C	!	= \nB! \n!+" [selected-window first-window window-list next-window next nreverse] 3 "\
Return a list of windows, in order of next-window."])
(defalias 'edebug-get-buffer-points #[nil " \")" [mapcar #[(buf) "q`B" [buf] 2] buffer-list] 3 "\
Return a list of buffer point pairs, for all buffers."])
(defalias 'edebug-set-buffer-points #[nil "\n\"" [mapcar #[(buf-point) "	@! 	@q	Ab" [buffer-name buf-point] 2] edebug-buffer-points] 3 "\
Restore the buffer-points given by edebug-get-buffer-points."])
(defalias 'edebug-two-window-p #[nil " ?   !!=" [one-window-p selected-window next-window] 4 "\
Return t if there are two windows."])
(defalias 'edebug-macrop #[(object) "9 ! K <& @=& A!& " [object fboundp macro edebug-functionp] 3 "\
Return the macro named by OBJECT, or nil if it is not a macro."])
(defalias 'edebug-functionp #[(object) "9 ! K !+ <, @=, A@<, " [object fboundp subrp lambda] 3 "\
Returns the function named by OBJECT, or nil if it is not a function."])
(defalias 'edebug-sort-alist #[(alist function) "	\"" [sort alist #[(e1 e2) "	@\n@\"" [function e1 e2] 3]] 3 "\
Return the ALIST sorted with comparison function FUNCTION.
This uses 'sort so the sorting is destructive."])
(put (quote edebug-save-restriction) (quote edebug-form-hook) (quote (&rest form)))
(defalias 'edebug-save-restriction '(macro . #[(&rest body) "\"EE" [let ((edebug:s-r-beg (point-min-marker)) (edebug:s-r-end (point-max-marker))) unwind-protect append (progn) body (save-excursion (set-buffer (marker-buffer edebug:s-r-beg)) (narrow-to-region edebug:s-r-beg edebug:s-r-end))] 6 "\
Evaluate BODY while saving the current buffers restriction.
BODY may change buffer outside of current restriction, unlike
save-restriction.  BODY may change the current buffer,
and the restriction will be restored to the original buffer,
and the current buffer remains current.
Return the result of the last expression in BODY."]))
(defalias 'edebug-all-defuns #[nil "? Â \"" [edebug-all-defuns message "Edebugging is %s." "on" "off"] 3 "\
Toggle edebugging of all defuns and defmacros,
not including those evaluated in the minibuffer, or during load." nil])
(byte-code "! KM" [fboundp edebug-emacs-eval-defun eval-defun] 2)
(defalias 'eval-defun #[(edebug-debug) "?	?=?!)" [edebug-debug edebug-all-defuns edebug-emacs-eval-defun nil] 2 "\
Edebug replacement for eval-defun.  Print value in the minibuffer.
Evaluate the top-level form that point is in or before.  Note:
eval-defun normally evaluates any top-level form, not just defuns.  

Here are the differences from the standard eval-defun.  If the prefix
argument is the same as edebug-all-defuns (nil or non-nil), evaluate
normally; otherwise edebug-defun is called to wrap edebug calls around
evaluatable expressions in the defun or defmacro body.  Also, the
value printed by edebug-defun is not just the function name." "P"])
(byte-code "! KM" [fboundp edebug-emacs-eval-region eval-region] 2)
(defalias 'eval-region #[(edebug-e-r-start edebug-e-r-end &optional edebug-e-r-output) " `pp \"	\nb `W K  =K ! >)K  !  =g ! >)g   # q!p) B= ! !`] `^b!  	q\nb.Ň" [edebug-e-r-output symbolp set-marker make-marker edebug-e-r-end nil edebug-e-r-val edebug-e-r-end-marker edebug-e-r-inside-buf edebug-e-r-buf edebug-e-r-pnt standard-output edebug-e-r-start edebug-skip-whitespace edebug-all-defuns edebug-next-token-class lparen forward-char 1 edebug-read-sexp (defun defmacro) edebug-defun forward-sexp (defun defmacro) put edebug-which-function edebug point-marker eval values t prin1 print] 7 "\
Edebug replacement for eval-defun.
Like eval-region, but call edebug-defun for defuns or defmacros.
Also, this eval-region does not narrow to the region and
if an error occurs, point is left at the error." "r"])
(defalias 'edebug-eval-current-buffer #[(&optional edebug-e-c-b-output) "ed	#" [eval-region edebug-e-c-b-output] 4 "\
Call eval-region on the whole buffer." nil])
(defalias 'edebug-eval-buffer #[(&optional buffer edebug-e-c-b-output) "qed\n#)" [buffer eval-region edebug-e-c-b-output] 4 "\
Call eval-region on the whole buffer." "bEval buffer: "])
(byte-code "! ! KMM!* !* KMM" [fboundp eval-current-buffer edebug-emacs-eval-current-buffer edebug-eval-current-buffer eval-buffer edebug-emacs-eval-buffer edebug-eval-buffer] 2)
(defalias 'edebug-defun #[nil "`	\nЏ." [nil 0 t parse-sexp-ignore-comments tmp-point starting-point edebug-func-mark edebug-offset-list edebug-offset-index defun-interactive def-docstring def-args def-name def-kind err (byte-code "  !  =$ =$ \" 93 \" <B \"` =S  ` =r ! =r  B!`bDD!\"DF%M= KBM\"b(!!E#\"" [end-of-defun beginning-of-defun down-list 1 point-marker edebug-func-mark edebug-read-sexp def-kind defun defmacro edebug-syntax-error "%s is not a defun or defmacro." def-name "Bad defun name: %s" def-args "Bad defun arg list: %s" tmp-point edebug-next-token-class string def-docstring lparen forward-char interactive edebug-interactive defun-interactive list lambda edebug-enter quote append (progn) edebug-sexp-list t macro starting-point put edebug nil vconcat nreverse edebug-offset-list message "edebug: %s"] 15) ((invalid-read-syntax (byte-code "b!)A\"" [starting-point set-mark-command nil message "Syntax error: %s" err] 3)))] 11 "\
Evaluate defun or defmacro, like eval-defun, but with edebug calls.
Print its name in the minibuffer and leave point after any error it finds,
with mark at the original point." nil])
(defalias 'edebug-sexp-list #[(debuggable) " =     	B 	!)" [nil sexp-list edebug-next-token-class rparen debuggable edebug-form edebug-read-sexp nreverse] 2 "\
Return an edebug form built from the sexp list following point in the
current buffer. If DEBUGGABLE then wrap edebug calls around each sexp.
The sexp list does not start with a left paren; we are already in the list.
Leave point at (before) the trailing right paren."])
(fset (quote edebug-increment-offset) #[nil "T`	Z\nB" [edebug-offset-index edebug-func-mark edebug-offset-list] 2])
(defalias 'edebug-make-edebug-form #[(index form) "	\nDF " [edebug index edebug-offset-index quote form edebug-increment-offset] 5 "\
Return the edebug form for the current function at offset INDEX given FORM.
Looks like: (edebug def-name INDEX edebug-offset-index 'FORM).
Also increment the offset index."])
(defalias 'edebug-form #[nil "   = 	 \"? ==  >9 !9 	\"? ?  +" [edebug-offset-index index nil form class edebug-skip-whitespace edebug-increment-offset edebug-next-token-class lparen edebug-make-edebug-form edebug-list symbol edebug-read-sexp (nil t) numberp] 4 "\
Return the debug form for the following form.  Add the point offset
to the edebug-offset-list for the function and move point to
immediately after the form."])
(defalias 'edebug-list #[nil "`! =  4 \n=%  4 \n=0 4 !	 	>D   	>O   	=Z   	=e   	>q ! 	=  =    C 	! 	9 	N = ! = ! !) ! 	= ! !B = ! !+" [nil head class beginning forward-char 1 edebug-next-token-class symbol edebug-read-sexp lparen edebug-anonymous rparen edebug-syntax-error "Head of list must be a symbol or lambda expression." (let let*) edebug-let (setq setq-default) edebug-setq cond edebug-cond condition-case edebug-condition-case (quote defun defvar defconst defmacro) edebug-sexp-list function edebug-macrop edebug-form-hook form t 0 edebug-form-parser edebug-eval-macro-args interactive "interactive not expected here." "Too many arguments."] 4 "\
Return an edebug form built from the list form that follows point.
Insert debug calls as appropriate to the form.  Start with point at
the left paren.  Leave point after the right paren."])
(defalias 'edebug-form-parser #[(args) "		)  =) ͍ 	B B B 	@>B ! =X \nT !X !!." [args nil &or &rest &optional class form-list form arg arglist edebug-next-token-class rparen no-match (byte-code "@A\n  \n	>\" 	L\" 	=/   	=<   	<w 	@=` `	A@ =\\  ) = !	!! 	9 `	! 	K  !  * \"BƇ" [arglist arg &rest (&optional &rest &or) throw no-match nil form edebug-form sexp edebug-read-sexp quote pnt edebug-form-parser-error class lparen forward-char 1 edebug-form-parser fboundp pred &optional form-list] 4) (&optional &rest) edebug-syntax-error "Not enough arguments." "Unrecognized argument." "Too many arguments." nreverse] 8 "\
Parse the macro arguments that follow based on ARGS.  
ARGS describes the types of the arguments of a list form.  Each of the ARGS
is processed left to right, in the same order as the arguments of the
list form.  See the edebug documentation for more details.  The ARGS
may be one of the following:

 symbolp - an unevaluated symbol
 integerp - an unevaluated number
 stringp - an unevaluated string
 vectorp - an unevaluated vector
 atom - an unevaluated number, string, symbol, or vector

 sexp - an unevaluated sexp (atom or list); may not be empty
 form - an evaluated sexp; may not be empty

 foo - any other symbol should be the name of a function; this
	function is called on the argument as a predicate and an error
	is signaled if the predicate fails.

 &optional - one following arg in the list may or may not appear. 
 &rest - all following args are repeated zero or more times as a group.
	This is an extension of the normal meaning of &rest.
 &or - each of the following args are alternatives, processed left to
	right until one succeeds.  There is no way to group
        more than one list element as one alternative.

 (...) - a sublist, of the same format as the top level, processed recursively.
	Special case: if the car of the list is quote, the argument must match
	the quoted sexp (see example below of 'for macro).
"])
(byte-code "M########" [edebug-form-parser-error #[nil "b	 \" \"	#" [pnt &or throw no-match nil &optional edebug-syntax-error "%s is not %s" form arg] 4] put for edebug-form-hook (symbolp (quote from) form (quote to) form (quote do) &rest form) case (form &rest (sexp form)) do ((&rest &or symbolp (symbolp &optional form &optional form)) (form &rest form) &rest body) defvar defconst (symbolp &optional form &optional stringp) defun defmacro (symbolp (&rest symbolp) &optional stringp &optional ((quote interactive) &or stringp form) &rest form) anonymous (&optional (quote macro) (quote lambda) (&rest symbolp) &rest form)] 7)
(defalias 'edebug-anonymous #[nil "! =  - =*  =# ! B- !)!" [forward-char 1 edebug-read-sexp head lambda edebug-lambda macro edebug-syntax-error "lambda expected." "Anonymous lambda or macro expected."] 4 "\
Return the edebug form for an anonymous lambda or macro.
Point starts before the left paren and ends after it."])
(defalias 'edebug-lambda #[nil " D!\"" [append lambda edebug-read-sexp edebug-sexp-list t] 4 "\
Return the edebug form for the lambda form that follows.
Point starts after the lambda symbol and is moved to before the right paren."])
(byte-code "##" [put let edebug-form-hook let* ((&rest &or (symbolp &optional form) symbolp) &rest form)] 7)
(defalias 'edebug-let #[nil " =   ![ \n[ ! =T 	=6  N !  =J !N !B\" !!!+B" [nil class token var-value-list edebug-next-token-class lparen edebug-read-sexp edebug-syntax-error "Bad var list in let." forward-char 1 rparen edebug-var-value "Right paren expected in let." nreverse edebug-sexp-list t] 3 "\
Return the edebug form of the let or let* form.
Leave point before the right paren."])
(defalias 'edebug-var-value #[nil "  =?  D" [edebug-read-sexp edebug-next-token-class rparen edebug-form] 3 "\
Return the edebug form of the var and optional value that follow point.  
Leave point after the value, if there is one."])
(byte-code "##" [put setq edebug-form-hook setq-default (&rest symbolp form)] 7)
(defalias 'edebug-setq #[nil " = 	 \" 	)" [nil var-value-list edebug-next-token-class rparen append edebug-var-value] 3 "\
Return the edebug form of the setq or setq-default var-value list."])
(put (quote interactive) (quote edebug-form-hook) (quote (&optional &or stringp form)))
(defalias 'edebug-interactive #[nil " =?)  =  ) D DE =) !C" [edebug-next-token-class rparen string edebug-read-sexp edebug-interactive-entry quote def-name edebug-form edebug-syntax-error "Only first expression used in interactive form."] 4 "\
Return the edebug form of the interactive form."])
(put (quote cond) (quote edebug-form-hook) (quote (&rest (form &rest form))))
(defalias 'edebug-cond #[nil " =I 	=\"   !)C !  =?3 !B =? !!\nB \n!*" [nil class value-value-list edebug-next-token-class rparen lparen edebug-read-sexp thing edebug-syntax-error "Condition expected in cond" forward-char 1 edebug-form edebug-sexp-list t "Right paren expected in cond" nreverse] 4 "\
Return the edebug form of the cond form."])
(put (quote condition-case) (quote edebug-form-hook) (quote (symbolp form &rest (symbolp &optional form))))
(defalias 'edebug-condition-case #[nil " 9 	\"	)  =N =0 !F !  =?A !B!B !*BB" [nil token edebug-read-sexp edebug-syntax-error "Variable or nil required for condition-case; found: %s" edebug-form class symb-sexp-list edebug-next-token-class rparen lparen "Bad handler in condition-case." forward-char 1 edebug-sexp-list t nreverse] 6 "\
Return the edebug form of the condition-case form."])
(defalias 'edebug-syntax-error #[(msg &rest args) "#\"" [signal invalid-read-syntax apply format msg args] 6 "\
Signal an invalid-read-syntax with MSG and ARGS.  
   This is caught by edebug-defun."])
(defalias 'edebug-skip-whitespace #[nil "!gU !! " [skip-chars-forward " 	\n" 59 "^\n"] 2 "\
Leave point before the next token, skipping white space and comments."])
(defalias 'edebug-read-sexp #[nil " gU gU p!& p!`)`\"^b	)" [nil token edebug-skip-whitespace 91 63 read scan-sexps 1] 4 "\
Read one sexp from the current buffer starting at point.
Leave point immediately after it.  A sexp can be a list or atom.
An atom is a symbol (or number), character, string, or vector."])
(defconst edebug-syntax-table (byte-code "\"IIIIIII)" [make-vector 256 symbol table 40 lparen 41 rparen 39 quote 34 string 63 char 91 vector 46 dot] 4) "\
Lookup table for the token class of each character.")
(defalias 'edebug-next-token-class #[nil " 	gH" [edebug-skip-whitespace edebug-syntax-table] 2 "\
Move to the next token and return its class.  We only care about
lparen, rparen, dot, quote, string, char, vector, or symbol."])
(defvar edebug-active nil "\
Non-nil when edebug is active")
(byte-code "\n\" D\nB" [assq edebug-active minor-mode-alist " *Debugging*"] 3)
(defvar edebug-backtrace nil "\
Stack of active functions evaluated via edebug.
Should be nil at the top level.")
(defvar edebug-offset-indices nil "\
Stack of offset indices of visited edebug sexps.
Should be nil at the top level.")
(defvar edebug-entered nil "\
Non-nil if edebug has already been entered at this recursive edit level.")
(defalias 'edebug-enter #[(edebug-func edebug-args edebug-body) "\n 	\n 	N@!	\nB\n\\\\Y \nGS$!$*] !." [edebug-entered edebug-initial-mode edebug-mode t edebug-func edebug edebug-data edebug-func-mark marker-buffer edebug-buffer edebug-backtrace max-lisp-eval-depth 6 max-specpdl-size 10 edebug-trace nil edebug-result edebug-stack-depth edebug-print-trace-entry "*edebug-trace*" edebug-args eval edebug-body edebug-print-trace-exit] 6 "\
Entering FUNC.  The arguments are ARGS, and the body is BODY.
Setup edebug variables and evaluate BODY.  This function is called
when a function evaluated with edebug-defun is entered.  Return the
result of BODY."])
(defalias 'edebug-interactive-entry #[(edebug-func edebug-args) "\n 	\n 	N@!	!," [edebug-entered edebug-initial-mode edebug-mode t edebug-func edebug edebug-data edebug-func-mark marker-buffer edebug-buffer eval edebug-args] 3 "\
Evaluating FUNCs non-string argument of interactive form ARGS."])
(byte-code "MM" [edebug-print-trace-entry #[(edebug-stream edebug-function edebug-args edebug-stack-depth) "	\"$" [edebug-trace-display edebug-stream "%sEnter: %s\n" make-string edebug-stack-depth 32 edebug-function] 6] edebug-print-trace-exit #[(edebug-stream edebug-function edebug-result edebug-stack-depth) "	\"$" [edebug-trace-display edebug-stream "%sExit: %s\n" make-string edebug-stack-depth 32 edebug-function] 6]] 2)
(defalias 'edebug #[(edebug-before-index edebug-after-index edebug-exp) "\\\n\\B	=&  & !6 #!#-" [max-lisp-eval-depth 5 max-specpdl-size 7 edebug-before-index edebug-offset-indices executing-macro nil edebug-outside-executing-macro edebug-mode Go-nonstop edebug-input-pending-p eval edebug-exp edebug-debugger enter edebug-after-index exit] 5 "\
Debug current function given BEFORE and AFTER positions around EXP.
BEFORE and AFTER are indexes into the position offset vector in the
functions 'edebug property.  edebug is called from functions compiled
with edebug-defun."])
(defalias 'edebug-debugger #[(edebug-offset-index edebug-arg-mode edebug-exp) "A@	\" A@? !)3 AA@3 	\"AAB\"\n>L V =V 9V  V Y  +" [edebug-data edebug-breakpoints assq edebug-offset-index edebug-break-data edebug-break-condition eval edebug-break setcdr delq edebug-mode (go continue Continue-fast) edebug-stop-before-symbols edebug-arg-mode enter edebug-exp edebug-input-pending-p edebug-display] 6 "\
Determine if edebug display should be updated."])
(defvar edebug-window-start 0 "\
Remember where each buffers' window starts between edebug calls.
This is to avoid spurious recentering.")
(byte-code "\"!" [set-default edebug-window-start 0 make-variable-buffer-local] 3)
(defalias 'edebug-display #[nil "\nAA@H\\   p`!	$  \n \"!p #&\"*'y  \"! \n!!, `!  /0ed b4!4  7  9= ;< 9= ;@= @ !A ;@B N;A@#CD !E !CN7F >/s7G =CH I !sH J !s7K =bH I !s7L =sH J !M 7=9=7 N  ),\"qbO  P O  \"+'Q !qbO  P O  \"." [t nil edebug-func-mark edebug-data edebug-offset-index edebug-save-buffer-points edebug-get-buffer-points selected-window mark edebug-eval-list edebug-eval-result-list overlay-arrow-position overlay-arrow-string cursor-in-echo-area edebug-outside-point-max edebug-outside-point-min edebug-outside-c-i-e-a edebug-outside-o-a-s edebug-outside-o-a-p edebug-eval-buffer edebug-outside-edebug-mark edebug-outside-edebug-point edebug-outside-windows edebug-outside-mark edebug-outside-point edebug-outside-buffer edebug-outside-window edebug-inside-window edebug-window edebug-buffer-points edebug-point edebug-stop edebug-active buffer-name edebug-buffer debug-on-error error "Buffer defining %s not found." edebug-func edebug-save-windows edebug-current-window-configuration edebug-pop-to-buffer edebug-eval-display select-window edebug-save-point point-min-marker point-max-marker edebug:s-r-end edebug:s-r-beg ((byte-code "	!q	\")" [marker-buffer edebug:s-r-beg narrow-to-region edebug:s-r-end] 3)) widen edebug-adjust-window edebug-window-start edebug-input-pending-p step edebug-mode edebug-overlay-arrow edebug-arg-mode exit edebug-exp edebug-previous-result beep quit message "Quit" "%s: %s" error-message edebug-break "Break" "" (continue Continue-fast) continue edebug-sit-for 1 0 trace Trace-fast ((byte-code "  !" [edebug-save-buffer-points edebug-set-buffer-points select-window edebug-outside-window] 2)) edebug-recursive-edit mark-marker set-marker edebug-set-window-configuration] 23 "\
Setup windows for edebug, determine mode, maybe enter recursive-edit."])
(defvar edebug-depth 0 "\
Number of recursive edits started by edebug.
Should be 0 at the top level.")
(defvar edebug-recursion-depth 0 "\
Value of recursion-depth when edebug was called.")
(defalias 'edebug-recursive-edit #[nil "	q )T ŉ 	\n	\n\n	=^ >^ ! !k \" ." [buffer-read-only edebug-outside-buffer match-data edebug-depth recursion-depth nil current-local-map standard-output standard-input last-command-char last-command this-command last-input-char debug-on-error edebug-outside-last-input-char edebug-outside-this-command edebug-outside-last-command edebug-outside-last-command-char edebug-outside-standard-input edebug-outside-standard-output edebug-outside-map edebug-inside-windows edebug-backtrace-buffer edebug-entered edebug-recursion-depth edebug-outside-match-data edebug-buffer-read-only edebug-mode go edebug-arg-mode (exit error) message "Break" boundp edebug-outside-debug-on-error t ((byte-code " !\n \n! !!M q	>-  !!!=I  !" [edebug-backtrace-buffer kill-buffer edebug-eval-buffer selected-window edebug-inside-window store-match-data edebug-outside-match-data buffer-name edebug-buffer edebug-mode (go Go-nonstop) edebug-overlay-arrow edebug-buffer-read-only buffer-read-only use-local-map edebug-outside-map select-window edebug-window window-buffer window-start edebug-window-start] 3)) recursive-edit] 19 "\
Start up a recursive edit inside of edebug."])
(defalias 'edebug-adjust-window #[(old-start) " 7  \" 7  ` W& Ȃ,  \"[!!`)\"* " [pos-visible-in-window-p set-window-start selected-window old-start window-start pnt start forward-line -1 / window-height 2 0] 6 "\
Adjust window to fit as much as possible following point.
The display should prefer to start at OLD-START if point is not visible.
Return the new window-start."])
(defconst edebug-arrow-alist (quote ((Continue-fast . ">") (Trace-fast . ">") (continue . ">") (trace . "->") (step . "=>") (go . "<>") (Go-nonstop . ".."))) "\
Association list of arrows for each edebug mode.
If you come up with arrows that make more sense, let me know.")
(defalias 'edebug-overlay-arrow #[nil "!`)\"A 			p#)" [nil pos forward-line 0 assq edebug-mode edebug-arrow-alist overlay-arrow-string make-marker overlay-arrow-position set-marker] 4 "\
Set up the overlay arrow at beginning-of-line in current buffer.
The arrow string is derived from edebug-arrow-alist and edebug-mode."])
(put (quote edebug-outside-excursion) (quote edebug-form-hook) (quote (&rest form)))
(defalias 'edebug-outside-excursion '(macro . #[(&rest body) "\n\"EFEF" [save-excursion (if edebug-save-windows (progn (setq edebug-inside-windows (edebug-current-window-configuration)) (edebug-set-window-configuration edebug-outside-windows))) (set-buffer edebug-buffer) let ((edebug-inside-map (current-local-map)) (last-command-char edebug-outside-last-command-char) (last-command edebug-outside-last-command) (this-command edebug-outside-this-command) (last-input-char edebug-outside-last-input-char) (overlay-arrow-position edebug-outside-o-a-p) (overlay-arrow-string edebug-outside-o-a-s) (cursor-in-echo-area edebug-outside-c-i-e-a) (standard-output edebug-outside-standard-output) (standard-input edebug-outside-standard-input) (executing-macro edebug-outside-executing-macro)) unwind-protect save-restriction (narrow-to-region edebug-outside-point-min edebug-outside-point-max) append (save-excursion (if edebug-save-point (progn (goto-char edebug-outside-edebug-point) (if (mark-marker) (set-marker (mark-marker) edebug-outside-edebug-mark)))) (use-local-map edebug-outside-map) (store-match-data edebug-outside-match-data) (select-window edebug-outside-window) (set-buffer edebug-outside-buffer) (goto-char edebug-outside-point)) body (use-local-map edebug-inside-map) (if edebug-save-windows (edebug-set-window-configuration edebug-inside-windows))] 11 "\
Evaluate an expression list in the outside context.
Return the result of the last expression."]))
(defalias 'edebug-toggle-save-windows #[nil "?   Ƃ \"" [edebug-save-windows edebug-current-window-configuration edebug-outside-windows edebug-inside-windows message "Window saving is %s." "on" "off"] 3 "\
Toggle the edebug-save-windows variable.
Each time you toggle it, the inside and outside window configurations
become the same as the current configuration." nil])
(defalias 'edebug-where #[nil " !!b" [edebug-active error "edebug is not active." edebug-pop-to-buffer edebug-buffer edebug-point] 2 "\
Show the debug windows and where we stopped in the program." nil])
(defalias 'edebug-view-outside #[nil " ! !b!\"" [edebug-active error "edebug is not active." edebug-current-window-configuration edebug-inside-windows edebug-set-window-configuration edebug-outside-windows edebug-outside-point message "Window configuration outside of edebug.  Return with %s" substitute-command-keys "\\<global-map>\\[edebug-where]"] 4 "\
Change to the outside window configuration." nil])
(defalias 'edebug-bounce-point #[nil " !Ë)" [edebug-active error "edebug is not active." ((byte-code "	!\nb!!" [edebug-pop-to-buffer edebug-outside-buffer edebug-outside-point edebug-sit-for 1 edebug-buffer] 2))] 2 "\
Bounce the point in the outside current buffer." nil])
(defvar edebug-epoch-running (byte-code "! 	" [boundp epoch::version] 2) "\
non-nil if epoch is running.
Windows are handled a little differently under epoch.")
(defalias 'edebug-current-window-configuration #[nil "   " [edebug-epoch-running edebug-current-screen-configuration current-window-configuration] 1 "\
Return the current window or frame configuration."])
(defalias 'edebug-set-window-configuration #[(conf) " \n!\n!" [edebug-epoch-running edebug-set-screen-configuration conf set-window-configuration] 2 "\
Set the window or frame configuration to CONF."])
(fset (quote edebug-get-buffer-window) #[(buffer) " \n!\n!" [edebug-epoch-running epoch::get-buffer-window buffer get-buffer-window] 2])
(defalias 'edebug-pop-to-buffer #[(buffer) "	! \n!9   	\"@  ! (   ! 	\" \")	q" [edebug-get-buffer-window buffer edebug-window select-window edebug-epoch-running select-screen symbol-buffer-value allowed-screens epoch::current-screen one-window-p split-window next-window set-window-buffer selected-window set-window-hscroll 0] 5 "\
Like pop-to-buffer, but select a frame that buffer was shown in."])
(defalias 'edebug-current-screen-configuration #[nil "! p\"B\"!q+" [epoch::screen-list unmapped epoch::get-screen current-buffer current-screen screen-list delq mapcar #[(screen) "! B" [screen epoch::select-screen current-window-configuration] 3] epoch::select-screen] 4 "\
Return an object recording the current configuration of Epoch screen-list.  
The object is a list of pairs of the form (SCREEN .  CONFIGURATION)
where SCREEN has window-configuration CONFIGURATION.  The current
screen is the head of the list."])
(defalias 'edebug-set-screen-configuration #[(sc) "\n\"\n@@! \n@@!" [mapcar #[(screen-conf) "	@! 	@!	A!" [epoch::screen-p screen-conf epoch::select-screen set-window-configuration] 2] sc epoch::screen-p epoch::select-screen] 3 "\
Set the window-configuration for all the screens in SC.
Set the current screen to be the head of SC."])
(byte-code "MM" [edebug-sit-for #[(arg) "  !" [edebug-epoch-running epoch::dispatch-events sit-for arg] 2] edebug-input-pending-p #[nil "   " [edebug-epoch-running epoch::dispatch-events input-pending-p] 1]] 2)
(defalias 'edebug-find-stop-point #[nil " N 	\"@A@AA@!( !`)ZGWX HVX T> Wr HXr 	Bv 	\"." [edebug-which-function def-name edebug error "%s must first be evaluated with edebug-defun." edebug-data edebug-func-mark edebug-breakpoints offset-vector looking-at "[ 	]" skip-chars-backward " 	" offset nil len i 0 message "Point is not on an expression in %s."] 4 "\
Return (function . index) of the nearest edebug stop point."])
(defalias 'edebug-next-breakpoint #[nil "  	@	A\nN@A@AA@\n. ! H @@XH A6 S @V @\n\n@H\\b\nAA@p ΂q \nA@ \nA@!\" P!).)" [edebug-find-stop-point edebug-stop-point def-name index edebug edebug-data edebug-func-mark edebug-breakpoints offset-vector nil breakpoint message "No breakpoints in this function." breaks "Temporary " "" format "Condition: %s" prin1-to-string] 7 "\
Move point to the next breakpoint, or first if none past point." nil])
(defalias 'edebug-modify-breakpoint #[(flag &optional condition temporary) " r 	@	A\nN@A@AA@\n\"\n\n\"M EB\"\n\"^ \nZ \n\"^ !AAB\"H\\b.)" [edebug-find-stop-point edebug-stop-point def-name index edebug edebug-data edebug-func-mark edebug-breakpoints offset-vector nil present assq delq flag edebug-sort-alist condition temporary < message "Breakpoint set in %s." "Breakpoint unset in %s." "No breakpoint here." setcdr] 5 "\
Modify the breakpoint for the form at point or after it according
to FLAG: set if t, clear if nil.  Then move to that point.
If CONDITION or TEMPORARY are non-nil, add those attributes to
the breakpoint.  "])
(defalias 'edebug-set-breakpoint #[(arg) "#" [edebug-modify-breakpoint t nil arg] 4 "\
Set the breakpoint of nearest sexp.
With prefix argument, make it a temporary breakpoint." "P"])
(defalias 'edebug-unset-breakpoint #[nil "!" [edebug-modify-breakpoint nil] 2 "\
Clear the breakpoint of nearest sexp." nil])
(defalias 'edebug-set-conditional-breakpoint #[(arg condition) "\n#" [edebug-modify-breakpoint t condition arg] 4 "\
Set a conditional breakpoint at nearest sexp.
The condition is evaluated in the outside context.
With prefix argument, make it a temporary breakpoint." "P\nxCondition: "])
(defalias 'edebug-set-mode #[(mode shortmsg msg) "W p= ! !" [mode edebug-mode 0 edebug-depth edebug-buffer message shortmsg exit-recursive-edit msg] 2 "\
Set the edebug mode to MODE.
Display SHORTMSG, or MSG if not within edebug." nil])
(defalias 'edebug-step-through #[nil "#" [edebug-set-mode step "" "edebug will stop before next eval."] 4 "\
Proceed to next debug step." nil])
(defalias 'edebug-go #[(arg) " !#" [arg edebug-set-breakpoint t edebug-set-mode go "Go..." "edebug will go until break."] 4 "\
Go, evaluating until break.
With ARG set temporary break at stop point and go." "P"])
(defalias 'edebug-Go-nonstop #[nil "#" [edebug-set-mode Go-nonstop "Go-Nonstop..." "edebug will not stop at breaks."] 4 "\
Go, evaluating without debugging." nil])
(defalias 'edebug-forward-sexp #[(arg) "" [err (byte-code "!!)" [t parse-sexp-ignore-comments forward-sexp arg edebug-go] 2) ((error (edebug-step-out)))] 3 "\
Proceed from the current point to the end of the ARGth sexp ahead.
If there are not ARG sexps ahead, then do edebug-step-out." "p"])
(defalias 'edebug-step-out #[nil "" [err (byte-code "!!)!)" [t parse-sexp-ignore-comments up-list 1 edebug-go] 2) ((error (byte-code "`!`U   !)" [start-point down-list -1 edebug-step-through edebug-go t] 2)))] 3 "\
Proceed from the current point to the end of the containing sexp.
If there is no containing sexp that is not the top level defun,
go to the end of the last sexp, or if that is the same point, then step." nil])
(defalias 'edebug-goto-here #[nil "!" [edebug-go t] 2 "\
Proceed to this stop point." nil])
(defalias 'edebug-trace #[nil "#" [edebug-set-mode trace "Tracing..." "edebug will trace with pause."] 4 "\
Begin trace mode." nil])
(defalias 'edebug-Trace-fast #[nil "#" [edebug-set-mode Trace-fast "Trace fast..." "edebug will trace without pause."] 4 "\
Trace with no wait at each step." nil])
(defalias 'edebug-continue #[nil "#" [edebug-set-mode continue "Continue..." "edebug will pause at breakpoints."] 4 "\
Begin continue mode." nil])
(defalias 'edebug-Continue-fast #[nil "#" [edebug-set-mode Continue-fast "Continue fast..." "edebug will stop and go at breakpoints."] 4 "\
Trace with no wait at each step." nil])
(defalias 'edebug-step-in #[nil "=\n !@N!+ !qb )6 <6 \"* " [edebug-arg-mode enter error "You must be in front of a function or macro call." edebug-exp func edebug func-marker markerp marker-buffer edebug-defun "You must first evaluate %s in a buffer." exit-recursive-edit] 4 "\
Step into the function about to be called.
Do this before the arguments are evaluated since otherwise it will be
too late.  One side effect of using edebug-step-in is that the next
time the function is called, edebug will be called there as well." nil])
(defalias 'edebug-stop #[nil "!" [message "Stop"] 2 "\
Useful for exiting from trace loop." nil])
(defconst edebug-initial-mode-alist (quote ((edebug-Continue-fast . Continue-fast) (edebug-Trace-fast . Trace-fast) (edebug-continue . continue) (edebug-trace . trace) (edebug-go . go) (edebug-step-through . step) (edebug-Go-nonstop . Go-nonstop))) "\
Association list between commands and the modes they set.")
(defalias 'edebug-set-initial-mode #[nil " \n = \n	N 	\"@#$!!\"AV 	NF =V 	#	#Y !-" [edebug-which-function this-function edebug-mode-map current-local-map keymap edebug-initial-mode old-mode read-key-sequence format "Change initial edebug mode for %s from %s (%s) to (enter key): " where-is-internal rassq edebug-initial-mode-alist firstonly key assq key-binding mode put message "Initial mode for %s is now: %s" error "Key must map to one of the mode changing commands."] 10 "\
Ask for the initial mode of the enclosing function.
The mode is requested via the key that would be used to set the mode in
edebug-mode." nil])
(defvar edebug-previous-result nil "\
Last result returned from an expression.")
(defalias 'edebug-previous-result #[nil "!\"*" [t 20 print-length print-escape-newlines message "Result: %s" prin1-to-string edebug-previous-result] 4 "\
Return the previous result." nil])
(defalias 'edebug-eval #[(expr) " !  !q \nߎ!\"\"#e $b e  '\")!+!-!.q/b1!." [edebug-active error "edebug is not active." edebug-save-windows edebug-current-window-configuration edebug-inside-windows edebug-set-window-configuration edebug-outside-windows edebug-buffer current-local-map edebug-outside-last-command-char edebug-outside-last-command edebug-outside-this-command edebug-outside-last-input-char edebug-outside-o-a-p edebug-outside-o-a-s edebug-outside-c-i-e-a edebug-outside-standard-output edebug-outside-standard-input edebug-outside-executing-macro executing-macro standard-input standard-output cursor-in-echo-area overlay-arrow-string overlay-arrow-position last-input-char this-command last-command last-command-char edebug-inside-map ((byte-code "	!\n !" [use-local-map edebug-inside-map edebug-save-windows edebug-set-window-configuration edebug-inside-windows] 2)) narrow-to-region edebug-outside-point-min edebug-outside-point-max edebug-save-point edebug-outside-edebug-point mark-marker set-marker edebug-outside-edebug-mark use-local-map edebug-outside-map store-match-data edebug-outside-match-data select-window edebug-outside-window edebug-outside-buffer edebug-outside-point eval expr] 11 "\
Evaluate EXPR in the outside environment."])
(defalias 'edebug-eval-expression #[(expr) "\n!!" [prin1 edebug-eval expr] 3 "\
Prompt and evaluate an expression in the outside environment.  
Print result in minibuffer." "xEval: "])
(defalias 'edebug-eval-last-sexp #[nil " !!" [prin1 edebug-eval edebug-last-sexp] 3 "\
Evaluate sexp before point in the outside environment;
print value in minibuffer." nil])
(defalias 'edebug-eval-print-last-sexp #[nil "pď!)" [standard-output print err (byte-code " !" [edebug-eval edebug-last-sexp] 2) ((error (byte-code "\n@N\nA@#" [format "%s: %s" err error-message] 4)))] 4 "\
Evaluate sexp before point in the outside environment; 
print value into current buffer." nil])
(defvar edebug-mode (quote step) "\
Current edebug mode set by user.")
(byte-code "! 	 !	#	#	#	#	#	#	#	#	#	#	#	#	#	#	#	#	#	#	#	#	#	#	#	#	#	#	#	#	#" [boundp edebug-mode-map nil copy-keymap emacs-lisp-mode-map define-key " " edebug-step-through "g" edebug-go "G" edebug-Go-nonstop "t" edebug-trace "T" edebug-Trace-fast "c" edebug-continue "C" edebug-Continue-fast "f" edebug-forward-sexp "h" edebug-goto-here "r" edebug-previous-result "i" edebug-step-in "o" edebug-step-out "q" top-level "a" abort-recursive-edit "S" edebug-stop "b" edebug-set-breakpoint "u" edebug-unset-breakpoint "B" edebug-next-breakpoint "x" edebug-set-conditional-breakpoint "e" edebug-eval-expression "" edebug-eval-last-sexp "E" edebug-visit-eval-list "w" edebug-where "v" edebug-view-outside "p" edebug-bounce-point "W" edebug-toggle-save-windows "?" edebug-help "d" edebug-backtrace "-" negative-argument] 4)
(defvar global-edebug-prefix "X" "\
Prefix key for global edebug commands, available from any buffer.")
(defvar global-edebug-map nil "\
Global map of edebug commands, available from any buffer.")
(byte-code "^  !\"#############M" [global-edebug-map make-sparse-keymap global-unset-key global-edebug-prefix global-set-key define-key "d" edebug-defun " " edebug-step-through "g" edebug-go "G" edebug-Go-nonstop "t" edebug-trace "T" edebug-Trace-fast "c" edebug-continue "C" edebug-Continue-fast "b" edebug-set-breakpoint "x" edebug-set-conditional-breakpoint "u" edebug-unset-breakpoint "w" edebug-where "q" top-level edebug-help #[nil "!" [describe-function edebug-mode] 2 nil nil]] 4)
(defalias 'edebug-mode #[nil "	!" [use-local-map edebug-mode-map] 2 "\
Mode for Emacs Lisp buffers while in edebug.  Under construction.

There are both buffer local and global key bindings to several
functions.  E.g. edebug-step-through is bound to
\\[edebug-step-through] in the debug buffer and
\\<global-map>\\[edebug-step-through] in any buffer.

edebug buffer commands:
\\{edebug-mode-map}

Global commands prefixed by global-edbug-prefix:
\\{global-edebug-map}

Options:
edebug-all-defuns
edebug-eval-macro-args
edebug-stop-before-symbols
edebug-save-windows
edebug-save-point
edebug-save-buffer-points
edebug-initial-mode
edebug-trace
"])
(defvar edebug-eval-list nil "\
List of expressions to evaluate.")
(defalias 'edebug-eval-result-list #[nil "\n\"" [mapcar #[(expr) "" [err (eval expr) ((error (byte-code "\n@N\nA@#" [format "%s: %s" err error-message] 4)))] 3] edebug-eval-list] 3 "\
Return a list of evaluations of edebug-eval-list"])
(byte-code "MM" [edebug-eval-display-list #[(edebug-eval-result-list) "	 Z\"\"	\n	! \nB \n@! @! !\nA\nA +" [edebug-eval-list edebug-eval-buffer format ";%s\n" make-string window-width 2 45 edebug-display-line standard-output edebug-eval-list-temp edebug-pop-to-buffer erase-buffer prin1 terpri edebug-eval-result-list princ] 7] edebug-create-eval-buffer #[nil " !? !q " [edebug-eval-buffer buffer-name get-buffer-create "*edebug*" edebug-eval-mode] 2]] 2)
(defalias 'edebug-eval-display #[(edebug-eval-result-list) "  !!" [edebug-eval-result-list edebug-create-eval-buffer edebug-pop-to-buffer edebug-eval-buffer edebug-eval-display-list] 2 "\
Display expressions and evaluations in EVAL-LIST.
It modifies the context by popping up the eval display."])
(defalias 'edebug-eval-redisplay #[nil " \n!  !q \nߎ!\"\"#d $b d  '\")!+!-!.q/b !." [edebug-create-eval-buffer edebug-pop-to-buffer edebug-eval-buffer edebug-save-windows edebug-current-window-configuration edebug-inside-windows edebug-set-window-configuration edebug-outside-windows edebug-buffer current-local-map edebug-outside-last-command-char edebug-outside-last-command edebug-outside-this-command edebug-outside-last-input-char edebug-outside-o-a-p edebug-outside-o-a-s edebug-outside-c-i-e-a edebug-outside-standard-output edebug-outside-standard-input edebug-outside-executing-macro executing-macro standard-input standard-output cursor-in-echo-area overlay-arrow-string overlay-arrow-position last-input-char this-command last-command last-command-char edebug-inside-map ((byte-code "	!\n !" [use-local-map edebug-inside-map edebug-save-windows edebug-set-window-configuration edebug-inside-windows] 2)) narrow-to-region edebug-outside-point-min edebug-outside-point-max edebug-save-point edebug-outside-edebug-point mark-marker set-marker edebug-outside-edebug-mark use-local-map edebug-outside-map store-match-data edebug-outside-match-data select-window edebug-outside-window edebug-outside-buffer edebug-outside-point edebug-eval-display-list edebug-eval-result-list] 11 "\
Redisplay eval list in outside environment.
May only be called from within edebug-recursive-edit."])
(fset (quote edebug-visit-eval-list) #[nil " \n!" [edebug-eval-redisplay edebug-pop-to-buffer edebug-eval-buffer] 2 nil nil])
(defalias 'edebug-update-eval-list #[nil "`eb m ! 	B#= !!gU m ! 	B 	! \nb*" [nil new-list starting-point edebug-skip-whitespace forward-sexp 1 edebug-last-sexp re-search-forward "^;" t forward-line skip-chars-forward " 	\n" 59 nreverse edebug-eval-list edebug-eval-redisplay] 4 "\
Replace the evaluation list with the sexps now in the eval buffer." nil])
(defalias 'edebug-delete-eval-item #[nil "# !`#!`\" " [re-search-backward "^;" nil nofail forward-line 1 delete-region re-search-forward 0 edebug-update-eval-list] 6 "\
Delete the item under point and redisplay." nil])
(defvar edebug-eval-mode-map nil "\
Keymap for edebug-eval-mode.  Superset of lisp-interaction-mode.")
(byte-code "& \n!#####" [edebug-eval-mode-map copy-keymap lisp-interaction-mode-map define-key "" edebug-where "" edebug-delete-eval-item "" edebug-update-eval-list "" edebug-eval-last-sexp "\n" edebug-eval-print-last-sexp] 4)
(defalias 'edebug-eval-mode #[nil " !" [lisp-interaction-mode edebug-eval-mode major-mode "Edebug-Eval" mode-name use-local-map edebug-eval-mode-map] 2 "\
Mode for data display buffer while in edebug.  Under construction.
... ignore the following...
There are both buffer local and global key bindings to several
functions.  E.g. edebug-step-through is bound to
\\[edebug-step-through] in the debug buffer and
\\<global-map>\\[edebug-step-through] in any buffer.

Eval list buffer commands:
\\{edebug-eval-mode-map}

Global commands prefixed by global-edbug-prefix:
\\{global-edebug-map}
"])
(byte-code "" [edebug-debug debugger] 1)
(defalias 'edebug-debug #[(&rest debugger-args) "*  \n=* @@A@ŉ	\n .\"" [edebug-backtrace recursion-depth edebug-recursion-depth edebug-offset-indices debugger-args nil debug-on-error edebug-outside-debug-on-eror edebug-break edebug-break-data edebug-exp edebug-arg-mode edebug-offset-index edebug-display apply debug] 7 "\
Replacement for debug.  
If an error or quit occurred and we are running an edebugged function,
show where we last were.  Otherwise call debug normally."])
(defalias 'edebug-backtrace #[nil "p	 !)	! p eb`!!`\"!`#l !X b!`)!`\"!`= ,!)" [old-buf edebug-backtrace-buffer fundamental-mode default-major-mode generate-new-buffer "*Backtrace*" edebug-pop-to-buffer erase-buffer t 50 nil last-ok-point print-length print-escape-newlines standard-output truncate-lines backtrace delete-region re-search-forward "^  edebug(" forward-line 1 "^  edebug" looking-at "-enter" -1] 4 "\
Display a non-working backtrace.  Better than nothing..." nil])
(defalias 'edebug-trace-display #[(buf-name fmt &rest args) " \n!! qdb	\n#c`\"!Z!`\"!)!+" [selected-window get-buffer-create buf-name buffer nil buf-window edebug-pop-to-buffer apply format fmt args set-window-point forward-line 1 window-height set-window-start bury-buffer select-window] 4 "\
In buffer BUF-NAME, display FMT and ARGS at the end and make it visible.
The buffer is created if it does not exist.
You must include newlines in FMT to break lines."])
(provide (quote edebug))
