summaryrefslogtreecommitdiff
path: root/lisp/progmodes
diff options
context:
space:
mode:
authorAlan Mackenzie <acm@muc.de>2015-08-20 10:37:24 +0000
committerAlan Mackenzie <acm@muc.de>2015-08-20 10:37:24 +0000
commitd13dc271e52c7d977aee6f32c3d40b8b15b04c6c (patch)
treecec8b7085744d09724d41dce18af0f113930d3da /lisp/progmodes
parentd0079c9324e575107b8a90944c9012dd3842946c (diff)
downloademacs-d13dc271e52c7d977aee6f32c3d40b8b15b04c6c.tar.gz
emacs-d13dc271e52c7d977aee6f32c3d40b8b15b04c6c.tar.bz2
emacs-d13dc271e52c7d977aee6f32c3d40b8b15b04c6c.zip
Handling of `c-parse-state'. Fix low level bug.
progmodes/cc-engine.el (c-remove-stale-state-cache-backwards): Add "CASE 3.5" to handle `cache-pos' being only slightly before `here'.
Diffstat (limited to 'lisp/progmodes')
-rw-r--r--lisp/progmodes/cc-engine.el12
1 files changed, 8 insertions, 4 deletions
diff --git a/lisp/progmodes/cc-engine.el b/lisp/progmodes/cc-engine.el
index f5285a6bcfe..520b7e573bf 100644
--- a/lisp/progmodes/cc-engine.el
+++ b/lisp/progmodes/cc-engine.el
@@ -3135,16 +3135,20 @@ comment at the start of cc-engine.el for more info."
nil)) ; for the cond
((save-restriction
- (narrow-to-region too-far-back (point-max))
- (setq ren (c-safe (c-sc-scan-lists pos -1 -1))))
-
+ (narrow-to-region too-far-back (point-max))
+ (setq ren (c-safe (c-sc-scan-lists pos -1 -1))))
;; CASE 3: After a }/)/] before `here''s BOL.
(list (1+ ren) (and dropped-cons pos) nil)) ; Return value
+ ((progn (setq good-pos (c-state-lit-beg (c-point 'bopl here-bol)))
+ (>= cache-pos good-pos))
+ ;; CASE 3.5: Just after an existing entry in `c-state-cache' on `here''s
+ ;; line or the previous line.
+ (list cache-pos nil nil))
+
(t
;; CASE 4; Best of a bad job: BOL before `here-bol', or beginning of
;; literal containing it.
- (setq good-pos (c-state-lit-beg (c-point 'bopl here-bol)))
(list good-pos (and dropped-cons good-pos) nil)))))