Commit ad5e350a authored by Alan Mackenzie's avatar Alan Mackenzie

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.
parent 06c302d4
Pipeline #4774 passed with stage
in 56 minutes and 13 seconds
......@@ -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)
......
......@@ -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.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment