+(defun c-lineup-gnu-DEFUN-intro-cont (langelem)
+ "Line up the continuation lines of a DEFUN macro in the Emacs C source.
+These lines are indented as though they were `knr-argdecl-intro' lines.
+Return nil when we're not in such a construct.
+
+This function is for historical compatibility with how previous CC Modes (5.28
+and earlier) indented such lines.
+
+Here is an example:
+
+DEFUN (\"forward-char\", Fforward_char, Sforward_char, 0, 1, \"p\",
+ doc: /* Move point right N characters (left if N is negative).
+On reaching end of buffer, stop and signal error. */)
+ (n) <- c-lineup-gnu-DEFUN-into-cont
+ Lisp_Object n; <- c-lineup-gnu-DEFUN-into-cont
+
+Works with: topmost-intro-cont."
+ (save-excursion
+ (let (case-fold-search)
+ (goto-char (c-langelem-pos langelem))
+ (if (looking-at "\\<DEFUN\\>")
+ (c-calc-offset '(knr-argdecl-intro))))))
+
+(defun c-block-in-arglist-dwim (arglist-start)
+ ;; This function implements the DWIM to avoid far indentation of
+ ;; brace block constructs in arguments in `c-lineup-arglist' etc.
+ ;; Return non-nil if a brace block construct is detected within the
+ ;; arglist starting at ARGLIST-START.
+
+ (or
+ ;; Check if the syntactic context contains any of the symbols for
+ ;; in-expression constructs. This can both save the work that we
+ ;; have to do below, and it also detect the brace list constructs
+ ;; that `c-looking-at-inexpr-block' currently misses (they are
+ ;; recognized by `c-inside-bracelist-p' instead).
+ (assq 'inexpr-class c-syntactic-context)
+ (assq 'inexpr-statement c-syntactic-context)
+ (assq 'inlambda c-syntactic-context)
+
+ (save-restriction
+ ;; Search for open braces from the arglist start to the end of the
+ ;; line.
+ (narrow-to-region arglist-start (c-point 'eol arglist-start))
+
+ (goto-char arglist-start)
+ (while (and (c-syntactic-re-search-forward "{" nil t)
+ (progn
+ (backward-char)
+ (or
+ ;; Ignore starts of special brace lists.
+ (and c-special-brace-lists
+ (save-restriction
+ (widen)
+ (c-looking-at-special-brace-list)))
+ ;; Ignore complete blocks.
+ (c-safe (c-forward-sexp) t))))
+ (forward-char))
+
+ (looking-at "{"))
+
+ (let (containing-sexp)
+ (goto-char arglist-start)
+ ;; `c-syntactic-eol' always matches somewhere on the line.
+ (re-search-forward c-syntactic-eol)
+ (goto-char (match-beginning 0))
+ (c-forward-syntactic-ws)
+ (setq containing-sexp (c-most-enclosing-brace (c-parse-state)))
+ (c-looking-at-inexpr-block
+ (c-safe-position (or containing-sexp (point)) c-state-cache)
+ containing-sexp))))
+