unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
From: Richard Stallman <rms@gnu.org>
Cc: bug-gnu-emacs@gnu.org
Subject: Re: `common-lisp-indent-function', `flet' and "def*"
Date: Sat, 25 May 2002 15:19:55 -0600 (MDT)	[thread overview]
Message-ID: <200205252119.g4PLJtT04414@aztec.santafe.edu> (raw)
In-Reply-To: <20020524140249.A25750@hagbard.davep.org> (message from Dave Pearson on Fri, 24 May 2002 14:02:49 +0100)

Does this give good results?  It seems correct with my
limited testing.

*** cl-indent.el.~1.36.~	Sat Mar 16 01:45:49 2002
--- cl-indent.el	Sat May 25 10:57:06 2002
***************
*** 153,159 ****
            (path ())
            ;; set non-nil when somebody works out the indentation to use
            calculated
!           (last-point indent-point)
            ;; the position of the open-paren of the innermost containing list
            (containing-form-start (elt state 1))
            ;; the column of the above
--- 153,160 ----
            (path ())
            ;; set non-nil when somebody works out the indentation to use
            calculated
! 	  tentative-calculated
! 	  (last-point indent-point)
            ;; the position of the open-paren of the innermost containing list
            (containing-form-start (elt state 1))
            ;; the column of the above
***************
*** 169,175 ****
            (forward-char 1)
            (parse-partial-sexp (point) indent-point 1 t)
            ;; Move to the car of the relevant containing form
!           (let (tem function method)
              (if (not (looking-at "\\sw\\|\\s_"))
                  ;; This form doesn't seem to start with a symbol
                  (setq function nil method nil)
--- 170,176 ----
            (forward-char 1)
            (parse-partial-sexp (point) indent-point 1 t)
            ;; Move to the car of the relevant containing form
!           (let (tem function method tentative-defun)
              (if (not (looking-at "\\sw\\|\\s_"))
                  ;; This form doesn't seem to start with a symbol
                  (setq function nil method nil)
***************
*** 209,221 ****
              (cond ((null function))
                    ((null method)
                     (when (null (cdr path))
!                        ;; (package prefix was stripped off above)
!                        (setq method (cond ((string-match "\\`def"
!                                                          function)
!                                          lisp-indent-defun-method)
!                                           ((string-match "\\`\\(with\\|do\\)-"
!                                                          function)
!                                          '(&lambda &body))))))
                    ;; backwards compatibility.  Bletch.
                    ((eq method 'defun)
                     (setq method lisp-indent-defun-method)))
--- 210,222 ----
              (cond ((null function))
                    ((null method)
                     (when (null (cdr path))
! 		     ;; (package prefix was stripped off above)
! 		     (cond ((string-match "\\`def"
! 					  function)
! 			    (setq tentative-defun t))
! 			   ((string-match "\\`\\(with\\|do\\)-"
! 					  function)
! 			    (setq method '(&lambda &body))))))
                    ;; backwards compatibility.  Bletch.
                    ((eq method 'defun)
                     (setq method lisp-indent-defun-method)))
***************
*** 234,240 ****
                    ((eq (char-after (1- containing-sexp)) ?\#)
                     ;; "#(...)"
                     (setq calculated (1+ sexp-column)))
!                   ((null method))
                    ((integerp method)
                     ;; convenient top-level hack.
                     ;;  (also compatible with lisp-indent-function)
--- 235,260 ----
                    ((eq (char-after (1- containing-sexp)) ?\#)
                     ;; "#(...)"
                     (setq calculated (1+ sexp-column)))
!                   ((null method)
! 		   ;; If this looks like a call to a `def...' form,
! 		   ;; think about indenting it as one, but do it
! 		   ;; tentatively for cases like
! 		   ;; (flet ((defunp ()
! 		   ;;          nil)))
! 		   ;; Set both normal-indent and tentative-calculated.
! 		   ;; The latter ensures this value gets used
! 		   ;; if there are no relevant containing constructs.
! 		   ;; The former ensures this value gets used
! 		   ;; if there is a relevant containing construct
! 		   ;; but we are nested within the structure levels
! 		   ;; that it specifies indentation for.
! 		   (if tentative-defun
! 		       (setq tentative-calculated
! 			     (common-lisp-indent-call-method
! 			      function lisp-indent-defun-method
! 			      path state indent-point
! 			      sexp-column normal-indent)
! 			     normal-indent tentative-calculated)))
                    ((integerp method)
                     ;; convenient top-level hack.
                     ;;  (also compatible with lisp-indent-function)
***************
*** 253,277 ****
                                            (t
                                             ;; other body form
                                             normal-indent))))
!                   ((symbolp method)
!                    (let ((lisp-indent-error-function function))
!                      (setq calculated (funcall method
!                                                path state indent-point
!                                                sexp-column normal-indent))))
!                   (t
!                    (let ((lisp-indent-error-function function))
!                      (setq calculated (lisp-indent-259
!                                        method path state indent-point
!                                        sexp-column normal-indent))))))
            (goto-char containing-sexp)
            (setq last-point containing-sexp)
            (unless calculated
!               (condition-case ()
!                    (progn (backward-up-list 1)
!                           (setq depth (1+ depth)))
!                 (error (setq depth lisp-indent-maximum-backtracking))))))
!       calculated)))
  
  
  (defun lisp-indent-report-bad-format (m)
    (error "%s has a badly-formed %s property: %s"
--- 273,302 ----
                                            (t
                                             ;; other body form
                                             normal-indent))))
! 		  (t
! 		   (setq calculated
! 			 (common-lisp-indent-call-method
! 			  function method path state indent-point
! 			  sexp-column normal-indent)))))
            (goto-char containing-sexp)
            (setq last-point containing-sexp)
            (unless calculated
! 	    (condition-case ()
! 		(progn (backward-up-list 1)
! 		       (setq depth (1+ depth)))
! 	      (error (setq depth lisp-indent-maximum-backtracking))))))
!       (or calculated tentative-calculated))))
! 
  
+ (defun common-lisp-indent-call-method (function method path state indent-point
+ 				       sexp-column normal-indent)
+   (let ((lisp-indent-error-function function))
+     (if (symbolp method)
+ 	(funcall method
+ 		 path state indent-point
+ 		 sexp-column normal-indent)
+       (lisp-indent-259 method path state indent-point
+ 		       sexp-column normal-indent))))
  
  (defun lisp-indent-report-bad-format (m)
    (error "%s has a badly-formed %s property: %s"

  reply	other threads:[~2002-05-25 21:19 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2002-05-24 13:02 `common-lisp-indent-function', `flet' and "def*" Dave Pearson
2002-05-25 21:19 ` Richard Stallman [this message]
2002-05-27 10:27   ` Dave Pearson

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=200205252119.g4PLJtT04414@aztec.santafe.edu \
    --to=rms@gnu.org \
    --cc=bug-gnu-emacs@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).