From: Alan Mackenzie <acm@muc.de>
Date: Thu, 21 Jan 2010 21:45:01 +0000 (+0000)
Subject: Fix a situation where deletion of a cpp construct throws an error.
X-Git-Tag: emacs-pretest-23.1.92~30^2~3^2~24
X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=3e8f7d9196c6c5ccac68bfe4c083e541fc9922e0;p=emacs.git

Fix a situation where deletion of a cpp construct throws an error.
---

diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index c3c95a95aa7..a308a571874 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,11 @@
+2010-01-21  Alan Mackenzie  <acm@muc.de>
+
+	Fix a situation where deletion of a cpp construct throws an error.
+	* progmodes/cc-engine.el (c-invalidate-state-cache): Before
+	invoking c-with-all-but-one-cpps-commented-out, check that the
+	special cpp construct is still in the buffer.
+	(c-parse-state): Record the special cpp with markers, not numbers.
+
 2010-01-21  Kenichi Handa  <handa@m17n.org>
 
 	* textmodes/sgml-mode.el (sgml-maybe-name-self): No need to
diff --git a/lisp/progmodes/cc-engine.el b/lisp/progmodes/cc-engine.el
index 0e6358aeee1..9d0af1d53ce 100644
--- a/lisp/progmodes/cc-engine.el
+++ b/lisp/progmodes/cc-engine.el
@@ -2996,9 +2996,11 @@ comment at the start of cc-engine.el for more info."
   ;; containing point.  We can then call `c-invalidate-state-cache-1' without
   ;; worrying further about macros and template delimiters.
   (c-with-<->-as-parens-suppressed
-   (if c-state-old-cpp-beg
+   (if (and c-state-old-cpp-beg
+	    (< c-state-old-cpp-beg here))
        (c-with-all-but-one-cpps-commented-out
-	c-state-old-cpp-beg c-state-old-cpp-end
+	c-state-old-cpp-beg
+	(min c-state-old-cpp-end here)
 	(c-invalidate-state-cache-1 here))
      (c-with-cpps-commented-out
       (c-invalidate-state-cache-1 here)))))
@@ -3029,8 +3031,9 @@ comment at the start of cc-engine.el for more info."
 	      (c-parse-state-1))
 	   (c-with-cpps-commented-out
 	    (c-parse-state-1))))
-      (setq c-state-old-cpp-beg here-cpp-beg
-	    c-state-old-cpp-end here-cpp-end))))
+      (setq c-state-old-cpp-beg (and here-cpp-beg (copy-marker here-cpp-beg t))
+	    c-state-old-cpp-end (and here-cpp-end (copy-marker here-cpp-end t)))
+      )))
 
 ;; Debug tool to catch cache inconsistencies.  This is called from
 ;; 000tests.el.