(c-emacs-features): Check the working of beginning/end-of-defun-function
authorAlan Mackenzie <acm@muc.de>
Thu, 5 Feb 2009 21:21:07 +0000 (21:21 +0000)
committerAlan Mackenzie <acm@muc.de>
Thu, 5 Feb 2009 21:21:07 +0000 (21:21 +0000)
more rigorously before setting argumentative-bod-function.

lisp/progmodes/cc-defs.el

index f360cc3..01b11cf 100644 (file)
@@ -1443,15 +1443,27 @@ non-nil, a caret is prepended to invert the set."
                         '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