Commit 605cfb8b authored by Alan Mackenzie's avatar Alan Mackenzie
Browse files

Check that a "macro" found near point-min isn't a ## operator. Fixes

bug #18749.
progmodes/cc-engine.el (c-macro-is-genuine-p): New function.
(c-beginning-of-macro): Use the above new function.
parent 4b6d6e69
2014-10-18 Alan Mackenzie <acm@muc.de>
Check that a "macro" found near point-min isn't a ## operator.
Fixes bug #18749.
* progmodes/cc-engine.el (c-macro-is-genuine-p): New function.
(c-beginning-of-macro): Use the above new function.
2014-10-18 Teodor Zlatanov <tzz@lifelogs.com>
 
* net/gnutls.el (gnutls-negotiate): Don't use cl-mapcan; pass
......
......@@ -249,6 +249,24 @@
(setq c-macro-cache-start-pos beg
c-macro-cache-syntactic nil))))
(defun c-macro-is-genuine-p ()
;; Check that the ostensible CPP construct at point is a real one. In
;; particular, if point is on the first line of a narrowed buffer, make sure
;; that the "#" isn't, say, the second character of a "##" operator. Return
;; t when the macro is real, nil otherwise.
(let ((here (point)))
(beginning-of-line)
(prog1
(if (and (eq (point) (point-min))
(/= (point) 1))
(save-restriction
(widen)
(beginning-of-line)
(and (looking-at c-anchored-cpp-prefix)
(eq (match-beginning 1) here)))
t)
(goto-char here))))
(defun c-beginning-of-macro (&optional lim)
"Go to the beginning of a preprocessor directive.
Leave point at the beginning of the directive and return t if in one,
......@@ -279,7 +297,8 @@ comment at the start of cc-engine.el for more info."
(forward-line -1))
(back-to-indentation)
(if (and (<= (point) here)
(looking-at c-opt-cpp-start))
(looking-at c-opt-cpp-start)
(c-macro-is-genuine-p))
(progn
(setq c-macro-cache (cons (point) nil)
c-macro-cache-start-pos here)
......
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