]> code.delx.au - gnu-emacs/blobdiff - lisp/progmodes/cc-cmds.el
(c-in-function-trailer-p): Fix this: when a function return type contains
[gnu-emacs] / lisp / progmodes / cc-cmds.el
index 2bda3a174cfd7cb087bbce4ba78812c84ee689b7..9ef4aaace72f71acb8b046a50c20a5544c2e23ce 100644 (file)
@@ -1360,10 +1360,24 @@ No indentation or other \"electric\" behavior is performed."
   (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