emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] emacs-24 r117673: Backport fix to bug #18749 to Emacs-24 b


From: Alan Mackenzie
Subject: [Emacs-diffs] emacs-24 r117673: Backport fix to bug #18749 to Emacs-24 branch.
Date: Wed, 05 Nov 2014 18:40:21 +0000
User-agent: Bazaar (2.6b2)

------------------------------------------------------------
revno: 117673
revision-id: address@hidden
parent: address@hidden
committer: Alan Mackenzie <address@hidden>
branch nick: emacs-24
timestamp: Wed 2014-11-05 18:38:51 +0000
message:
  Backport fix to bug #18749 to Emacs-24 branch.
modified:
  lisp/ChangeLog                 changelog-20091113204419-o5vbwnq5f7feedwu-1432
  lisp/progmodes/cc-engine.el    
ccengine.el-20091113204419-o5vbwnq5f7feedwu-1227
=== modified file 'lisp/ChangeLog'
--- a/lisp/ChangeLog    2014-11-05 17:57:50 +0000
+++ b/lisp/ChangeLog    2014-11-05 18:38:51 +0000
@@ -1,3 +1,10 @@
+2014-10-18  Alan Mackenzie  <address@hidden>
+
+       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  <address@hidden>
 
        Fix wrong bound to c-font-lock-declarators.  Fixes bug #18948.

=== modified file 'lisp/progmodes/cc-engine.el'
--- a/lisp/progmodes/cc-engine.el       2014-02-02 16:28:52 +0000
+++ b/lisp/progmodes/cc-engine.el       2014-11-05 18:38:51 +0000
@@ -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 @@
            (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)


reply via email to

[Prev in Thread] Current Thread [Next in Thread]