changeset 106948:719b13c3b762

Fix a situation where deletion of a cpp construct throws an error.
author Alan Mackenzie <acm@muc.de>
date Thu, 21 Jan 2010 21:45:01 +0000
parents 938f7da4579e
children 86ae2a69cf52 746534c20a06
files lisp/ChangeLog lisp/progmodes/cc-engine.el
diffstat 2 files changed, 15 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/ChangeLog	Thu Jan 21 09:03:10 2010 -0500
+++ b/lisp/ChangeLog	Thu Jan 21 21:45:01 2010 +0000
@@ -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
--- a/lisp/progmodes/cc-engine.el	Thu Jan 21 09:03:10 2010 -0500
+++ b/lisp/progmodes/cc-engine.el	Thu Jan 21 21:45:01 2010 +0000
@@ -2996,9 +2996,11 @@
   ;; 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 @@
 	      (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.