diff lisp/progmodes/cc-defs.el @ 101822:dfb524fba23c

(c-emacs-features): Check the working of beginning/end-of-defun-function more rigorously before setting argumentative-bod-function.
author Alan Mackenzie <acm@muc.de>
date Thu, 05 Feb 2009 21:21:07 +0000
parents 0685234e527d
children aa61f808aca4
line wrap: on
line diff
--- a/lisp/progmodes/cc-defs.el	Thu Feb 05 21:18:59 2009 +0000
+++ b/lisp/progmodes/cc-defs.el	Thu Feb 05 21:21:07 2009 +0000
@@ -1443,15 +1443,27 @@
 			 '1-bit)
 		       list)))
 
-    ;; In Emacs >= 23, beginning-of-defun-raw passes its argument to
-    ;; beginning-of-defun-function.  Assume end-of-defun does likewise.
-    (let ((beginning-of-defun-function
+    ;; Check whether beginning/end-of-defun call
+    ;; beginning/end-of-defun-function nicely, passing through the
+    ;; argument and respecting the return code.
+    (let (mark-ring
+	  (bod-param 'foo) (eod-param 'foo)
+	  (beginning-of-defun-function
 	   (lambda (&optional arg)
-	     (not (eq arg nil))))
-	  mark-ring)
-      (save-excursion
-	(if (beginning-of-defun-raw 1)
-	    (setq list (cons 'argumentative-bod-function list)))))
+	     (or (eq bod-param 'foo) (setq bod-param 'bar))
+	     (and (eq bod-param 'foo)
+		  (setq bod-param arg)
+		  (eq arg 3))))
+	  (end-of-defun-function
+	   (lambda (&optional arg)
+	     (and (eq eod-param 'foo)
+		  (setq eod-param arg)
+		  (eq arg 3)))))
+      (if (save-excursion (and (beginning-of-defun 3) (= bod-param 3)
+			       (not (beginning-of-defun))
+			       (end-of-defun 3) (= eod-param 3)
+			       (not (end-of-defun))))
+	  (setq list (cons 'argumentative-bod-function list))))
 
     (let ((buf (generate-new-buffer " test"))
 	  parse-sexp-lookup-properties