From:	CSBVAX::CSBVAX::MRGATE::"SMTP::M.CS.UIUC.EDU::LIBERTE" 28-NOV-1988 18:06
To:	MRGATE::"ARISIA::EVERHART"
Subj:	edebug.el patch 1


Received: from ai.ai.mit.edu by prep.ai.mit.edu; Mon, 28 Nov 88 16:24:32 EST
Received: from a.cs.uiuc.edu (TCP 1200600045) by AI.AI.MIT.EDU 28 Nov 88 16:00:47 EST
Received: from m.cs.uiuc.edu by a.cs.uiuc.edu with SMTP (UIUC-5.52/9.7)
	id AA13816; Mon, 28 Nov 88 12:28:05 CST
Received: by m.cs.uiuc.edu (4.12/9.7)
	id AA26430; Mon, 28 Nov 88 12:29:38 cst
Date: Mon, 28 Nov 88 12:29:38 cst
From: liberte@m.cs.uiuc.edu (Daniel LaLiberte)
Message-Id: <8811281829.AA26430@m.cs.uiuc.edu>
To: info-gnu-emacs@prep.ai.mit.edu
Subject: edebug.el patch 1

Here is patch number 1 for edebug.el.  It fixes the bug in
handling cond (so patch will fail on one chunk if you installed
that fix already) and a couple other bugs with the use of ().

Dan LaLiberte
uiucdcs!liberte
liberte@cs.uiuc.edu
liberte%a.cs.uiuc.edu@uiucvmd.bitnet

=======================================

*** /tmp/,RCSt1006143	Mon Nov 28 12:18:48 1988
--- edebug.el	Mon Nov 28 12:16:17 1988
***************
*** 35,40
  ;;; liberte@cs.uiuc.edu
  ;;; liberte%a.cs.uiuc.edu@uiucvmd.bitnet
  
  ;;;========================================================================
  
  ;;; To use edebug, simply evaluate a defun with edebug-defun.  Before

--- 35,51 -----
  ;;; liberte@cs.uiuc.edu
  ;;; liberte%a.cs.uiuc.edu@uiucvmd.bitnet
  
+ ;;; $Header: edebug.el,v 1.2 88/11/28 12:14:15 liberte Exp $
+ ;;; $Log:	edebug.el,v $
+ ;;; Revision 1.2  88/11/28  12:14:15  liberte
+ ;;; Bug fixes: cond construct didnt execute.
+ ;;;   () in sexp list didnt parse
+ ;;;   () as variable in condition-case didnt parse.
+ ;;; 
+ ;;; Revision 1.1  88/11/28  12:11:27  liberte
+ ;;; Initial revision
+ ;;; 
+ 
  ;;;========================================================================
  
  ;;; To use edebug, simply evaluate a defun with edebug-defun.  Before
***************
*** 63,69
  
  ;; Use setq to change the value of global-edebug-prefix before loading 
  ;; edebug.el.
! (defvar global-edebug-prefix "\^XX"
    "Prefix key for global edebug commands.")
  
  (defvar allow-recursive-debug t

--- 74,80 -----
  
  ;; Use setq to change the value of global-edebug-prefix before loading 
  ;; edebug.el.
! (defconst global-edebug-prefix "\^XX"
    "Prefix key for global edebug commands.")
  
  (defvar allow-recursive-debug t
***************
*** 159,164
        (if (not (listp defun-args))
  	  (error "Bad arg list."))
  
        (setq tmp-point (point))
        (if (eq 'atom (edebug-next-token-class))
  	  (setq token (edebug-read-one)))

--- 170,176 -----
        (if (not (listp defun-args))
  	  (error "Bad arg list."))
  
+       ;; look for doc string
        (setq tmp-point (point))
        (if (eq 'atom (edebug-next-token-class))
  	  (setq token (edebug-read-one)))
***************
*** 168,173
  	    (setq tmp-point (point))
  	    ))
  
        (if (eq 'lparen (edebug-next-token-class))
  	  (progn
  	    (forward-char 1)

--- 180,186 -----
  	    (setq tmp-point (point))
  	    ))
  
+       ;; look for interactive form
        (if (eq 'lparen (edebug-next-token-class))
  	  (progn
  	    (forward-char 1) ; skip \(
***************
*** 170,176
  
        (if (eq 'lparen (edebug-next-token-class))
  	  (progn
! 	    (forward-char 1)
  	    (if (eq 'atom (edebug-next-token-class))
  		(progn
  		  (setq token (edebug-read-one))

--- 183,189 -----
        ;; look for interactive form
        (if (eq 'lparen (edebug-next-token-class))
  	  (progn
! 	    (forward-char 1) ; skip \(
  	    (if (eq 'atom (edebug-next-token-class))
  		(progn
  		  (setq token (edebug-read-one))
***************
*** 255,261
      (forward-char 1)    ; skip \(
      (if (eq 'atom (edebug-next-token-class))
  	(setq token (edebug-read-one))
!       (error "Bad form."))
  ;;    (message "head token: %s" token) (sit-for 2)
  
      (prog1

--- 268,276 -----
      (forward-char 1)    ; skip \(
      (if (eq 'atom (edebug-next-token-class))
  	(setq token (edebug-read-one))
!       (if (eq 'rparen (edebug-next-token-class))
! 	  (setq token nil)
! 	(error "Bad form.")))
  ;;    (message "head token: %s" token) (sit-for 2)
  
      (prog1
***************
*** 259,271
  ;;    (message "head token: %s" token) (sit-for 2)
  
      (prog1
! 	(cons token
! 	  (cond
! 	   ;; handle all special cases with unevaluated arguments - any more??
! 	   ((memq token '(let let*)) (edebug-let))
! 	   ((memq token '(setq setq-default)) (edebug-setq))
! 	   ((eq token 'cond) (edebug-cond))
! 	   ((eq token 'condition-case) (edebug-condition-case))
  
  	   ((memq token '(quote function defun defvar defconst defmacro))
  	    (edebug-sexp-list nil))

--- 274,287 -----
  ;;    (message "head token: %s" token) (sit-for 2)
  
      (prog1
! 	(and token
! 	     (cons token
! 		   (cond
! 		    ;; handle all special cases with unevaluated arguments
! 		    ((memq token '(let let*)) (edebug-let))
! 		    ((memq token '(setq setq-default)) (edebug-setq))
! 		    ((eq token 'cond) (edebug-cond))
! 		    ((eq token 'condition-case) (edebug-condition-case))
  
  		    ((memq token '(quote function
  					 defun defvar defconst defmacro))
***************
*** 267,274
  	   ((eq token 'cond) (edebug-cond))
  	   ((eq token 'condition-case) (edebug-condition-case))
  
! 	   ((memq token '(quote function defun defvar defconst defmacro))
! 	    (edebug-sexp-list nil))
  
  	   ;; is it a lisp macro?
  	   ((macrop token) (edebug-sexp-list nil))

--- 283,291 -----
  		    ((eq token 'cond) (edebug-cond))
  		    ((eq token 'condition-case) (edebug-condition-case))
  
! 		    ((memq token '(quote function
! 					 defun defvar defconst defmacro))
! 		     (edebug-sexp-list nil))
  
  		    ;; is it a lisp macro?
  		    ((macrop token) (edebug-sexp-list nil))
***************
*** 270,277
  	   ((memq token '(quote function defun defvar defconst defmacro))
  	    (edebug-sexp-list nil))
  
! 	   ;; is it a lisp macro?
! 	   ((macrop token) (edebug-sexp-list nil))
  
  	   (t (edebug-sexp-list t))
  	   ))

--- 287,294 -----
  					 defun defvar defconst defmacro))
  		     (edebug-sexp-list nil))
  
! 		    ;; is it a lisp macro?
! 		    ((macrop token) (edebug-sexp-list nil))
  
  		    (t (edebug-sexp-list t))
  		    )))
***************
*** 273,280
  	   ;; is it a lisp macro?
  	   ((macrop token) (edebug-sexp-list nil))
  
! 	   (t (edebug-sexp-list t))
! 	   ))
        (forward-char 1) ; skip \)
        )
      ))

--- 290,297 -----
  		    ;; is it a lisp macro?
  		    ((macrop token) (edebug-sexp-list nil))
  
! 		    (t (edebug-sexp-list t))
! 		    )))
        (forward-char 1) ; skip \)
        )
      ))
***************
*** 341,347
  		 (error "Bad condition in cond")
  	       (forward-char 1) ; \(
  	       (prog1
! 		   (list
  		    (edebug-sexp)
  		    (if (eq 'rparen (edebug-next-token-class))
  			nil

--- 358,364 -----
  		 (error "Bad condition in cond")
  	       (forward-char 1) ; \(
  	       (prog1
! 		   (cons
  		    (edebug-sexp)
  		    (if (eq 'rparen (edebug-next-token-class))
  			nil
***************
*** 358,364
  (defun edebug-condition-case ()
    "Return the debug form of a condition-case."
    (let (symb-sexp-list
! 	class)
      (cons
       (if (not (eq 'atom (edebug-next-token-class)))
  	 (error "Bad variable in condition-case")

--- 375,383 -----
  (defun edebug-condition-case ()
    "Return the debug form of a condition-case."
    (let (symb-sexp-list
! 	class
! 	token)
! 
      (cons
       (prog1
  	 ;; read the variable or nil
***************
*** 360,370
    (let (symb-sexp-list
  	class)
      (cons
!      (if (not (eq 'atom (edebug-next-token-class)))
! 	 (error "Bad variable in condition-case")
!        (edebug-read-one)
!        (edebug-next-token)
!        )
  
       (cons
        (edebug-sexp)  ; the form

--- 379,390 -----
  	token)
  
      (cons
!      (prog1
! 	 ;; read the variable or nil
! 	 (setq token (edebug-read-one))
!        (if (not (symbolp token))
! 	   (error "Bad symbol in condition-case: %s" token))
!        (edebug-next-token))
  
       (cons
        (edebug-sexp)  ; the form

