1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2025-01-06 11:55:48 +00:00

c-end-of-macro: Handle block coment lines with unescaped NLs correctly

* lisp/progmodes/cc-langs.el (c-last-open-c-comment-start-on-line-re): Make
obsolete, and supersede by ...
(c-open-c-comment-on-logical-line-re): New language variable.

* lisp/progmodes/cc-engine.el (c-end-of-macro): Inside macros, handle
multiline block comments whose line ends are not escaped correctly.
This commit is contained in:
Alan Mackenzie 2020-02-10 21:20:12 +00:00
parent 06c302d425
commit ad5e350ab7
2 changed files with 28 additions and 8 deletions

View File

@ -388,14 +388,17 @@ comment at the start of cc-engine.el for more info."
(forward-char)
t)))
(let ((cand-EOM (point)))
(if (and c-last-open-c-comment-start-on-line-re
(if (and c-open-c-comment-on-logical-line-re
(re-search-backward
c-last-open-c-comment-start-on-line-re
(c-point 'bol) t))
(progn
(goto-char (match-beginning 1))
(and (c-forward-single-comment)
(> (point) cand-EOM)))
c-open-c-comment-on-logical-line-re
nil t)
(match-beginning 1)
(progn
(goto-char (match-beginning 1))
(and (c-forward-single-comment)
(> (point) cand-EOM))))
t
(goto-char cand-EOM)
nil)))))
(when (and (car c-macro-cache)

View File

@ -1707,7 +1707,10 @@ ender."
(c-lang-const c-last-c-comment-end-on-line-re))
(c-lang-defconst c-last-open-c-comment-start-on-line-re
"Regexp which matches the last block comment start on the
"Do NOT use this constant any more. Instead use
`c-open-c-comment-on-logical-line-re' (2020-02-10).
Regexp which matches the last block comment start on the
current ine, if any, or nil in those languages without block
comments. When a match is found, submatch 1 contains the comment
starter."
@ -1715,6 +1718,20 @@ starter."
awk nil)
(c-lang-defvar c-last-open-c-comment-start-on-line-re
(c-lang-const c-last-open-c-comment-start-on-line-re))
(make-obsolete-variable 'c-last-open-c-comment-start-on-line-re
'c-open-c-comment-on-logical-line-re
"5.35")
(c-lang-defconst c-open-c-comment-on-logical-line-re
"Regexp which matches an open block comment on the current logical line.
It is intended for searching backwards from the end of a line.
Such a search will stop at the first encountered non-escaped
newline or open block comment. If the comment is found, submatch
1 contains the comment starter."
t "[^\\\n][\r\n]\\|\\(/\\*\\)\\([^*]\\|\\*+\\([^*/]\\|$\\)\\)*$"
awk nil)
(c-lang-defvar c-open-c-comment-on-logical-line-re
(c-lang-const c-open-c-comment-on-logical-line-re))
(c-lang-defconst c-literal-start-regexp
;; Regexp to match the start of comments and string literals.