changeset 77317:ca9385224244

(c-in-function-trailer-p): Fix this: when a function return type contains "struct", "union", etc. c-end-of-defun goes too far forward.
author Alan Mackenzie <acm@muc.de>
date Thu, 19 Apr 2007 17:35:16 +0000
parents ae324f60a9cd
children c898a6f5b7ac
files lisp/progmodes/cc-cmds.el
diffstat 1 files changed, 18 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/progmodes/cc-cmds.el	Thu Apr 19 17:33:34 2007 +0000
+++ b/lisp/progmodes/cc-cmds.el	Thu Apr 19 17:35:16 2007 +0000
@@ -1360,10 +1360,24 @@
   (and c-opt-block-decls-with-vars-key
        (save-excursion
 	 (c-syntactic-skip-backward "^;}" lim)
-	 (and (eq (char-before) ?\})
-	      (eq (car (c-beginning-of-decl-1 lim)) 'previous)
-	      (looking-at c-opt-block-decls-with-vars-key)
-	      (point)))))
+	 (let ((eo-block (point))
+	       bod)
+	   (and (eq (char-before) ?\})
+		(eq (car (c-beginning-of-decl-1 lim)) 'previous)
+		(setq bod (point))
+		;; Look for struct or union or ...  If we find one, it might
+		;; be the return type of a function, or the like.  Exclude
+		;; this case.
+		(c-syntactic-re-search-forward
+		 (concat "[;=\(\[{]\\|\\("
+			 c-opt-block-decls-with-vars-key
+			 "\\)")
+		 eo-block t t t)
+		(match-beginning 1)	; Is there a "struct" etc., somewhere?
+		(not (eq (char-before) ?_))
+		(c-syntactic-re-search-forward "[;=\(\[{]" eo-block t t t)
+		(eq (char-before) ?\{)
+		bod)))))
 
 (defun c-where-wrt-brace-construct ()
   ;; Determine where we are with respect to functions (or other brace