Fix a situation where deletion of a cpp construct throws an error.
authorAlan Mackenzie <acm@muc.de>
Thu, 21 Jan 2010 21:45:01 +0000 (21:45 +0000)
committerAlan Mackenzie <acm@muc.de>
Thu, 21 Jan 2010 21:45:01 +0000 (21:45 +0000)
lisp/ChangeLog
lisp/progmodes/cc-engine.el

index c3c95a9..a308a57 100644 (file)
@@ -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
index 0e6358a..9d0af1d 100644 (file)
@@ -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.