diff options
author | Alan Mackenzie <acm@muc.de> | 2014-11-05 18:38:51 +0000 |
---|---|---|
committer | Alan Mackenzie <acm@muc.de> | 2014-11-05 18:38:51 +0000 |
commit | a2634462b873a00938811c4cbfa350b627124c96 (patch) | |
tree | 3544636c88763b348f0db1dd562f961b7ff7432e /lisp | |
parent | ceb7a7dfb8a2c2b17ac876e693d462ec65dcd97a (diff) | |
download | emacs-a2634462b873a00938811c4cbfa350b627124c96.tar.gz |
Backport fix to bug #18749 to Emacs-24 branch.
Diffstat (limited to 'lisp')
-rw-r--r-- | lisp/ChangeLog | 7 | ||||
-rw-r--r-- | lisp/progmodes/cc-engine.el | 21 |
2 files changed, 27 insertions, 1 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 111f98b8d4e..b83459503b4 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,10 @@ +2014-10-18 Alan Mackenzie <acm@muc.de> + + Check that a "macro" found near point-min isn't a ## operator. + Fixes bug #18749. Backported from trunk, 2014-11-05. + * progmodes/cc-engine.el (c-macro-is-genuine-p): New function. + (c-beginning-of-macro): Use the above new function. + 2014-11-05 Alan Mackenzie <acm@muc.de> Fix wrong bound to c-font-lock-declarators. Fixes bug #18948. diff --git a/lisp/progmodes/cc-engine.el b/lisp/progmodes/cc-engine.el index f86e4b2c48a..3e14dd18397 100644 --- a/lisp/progmodes/cc-engine.el +++ b/lisp/progmodes/cc-engine.el @@ -248,6 +248,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, @@ -278,7 +296,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) |