CC Mode: Fix infinite loop in noise macro near end of buffer

This fixes bug #55771.  Also fix an inaccuracy in c-defun-name-1 with the same
cause.

* lisp/progmodes/cc-cmds.el (c-defun-name-1)
* lisp/progmodes/cc-engine.el (c-forward-noise-clause): Check the return
value of c-forward-token-2 and act upon it when not zero.
This commit is contained in:
Alan Mackenzie 2022-06-18 11:23:06 +00:00
parent 2cb5ed66c0
commit ba1508ed17
2 changed files with 10 additions and 10 deletions

View file

@ -2115,13 +2115,12 @@ with a brace block."
(c-forward-syntactic-ws)
(when (eq (char-after) ?\")
(forward-sexp 1)
(c-forward-syntactic-ws)
(c-forward-token-2)) ; over the comma and following WS.
(buffer-substring-no-properties
(point)
(progn
(c-forward-token-2)
(c-backward-syntactic-ws)
(point))))
(setq pos (point))
(and (zerop (c-forward-token-2))
(progn (c-backward-syntactic-ws) t)
(buffer-substring-no-properties pos (point))))
((and (c-major-mode-is 'objc-mode) (looking-at "[-+]\\s-*(")) ; Objective-C method
;; Move to the beginning of the method name.

View file

@ -1239,7 +1239,7 @@ comment at the start of cc-engine.el for more info."
(not comma-delimited)
(not (c-looking-at-inexpr-block lim nil t))
(save-excursion
(c-backward-token-2 1 t nil)
(c-backward-token-2 1 t nil) ; Don't test the value
(not (looking-at "=\\([^=]\\|$\\)")))
(or
(not c-opt-block-decls-with-vars-key)
@ -8289,9 +8289,10 @@ multi-line strings (but not C++, for example)."
(defun c-forward-noise-clause ()
;; Point is at a c-noise-macro-with-parens-names macro identifier. Go
;; forward over this name, any parenthesis expression which follows it, and
;; any syntactic WS, ending up at the next token. If there is an unbalanced
;; paren expression, leave point at it. Always Return t.
(c-forward-token-2)
;; any syntactic WS, ending up at the next token or EOB. If there is an
;; unbalanced paren expression, leave point at it. Always Return t.
(or (zerop (c-forward-token-2))
(goto-char (point-max)))
(if (and (eq (char-after) ?\()
(c-go-list-forward))
(c-forward-syntactic-ws))