From: Alan Mackenzie Date: Wed, 4 Mar 2020 21:17:04 +0000 (+0000) Subject: CC Mode: Fix the handling of two adjacent after-change-functionses. X-Git-Tag: emacs-27.0.91~131 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=a3c2d186eb514b505e61c2a89a1df886dbfcb06b;p=emacs.git CC Mode: Fix the handling of two adjacent after-change-functionses. The bug involved failing to set c-new-END correctly, which lead to an args-out-of-range error when after-change-functions was invoked twice without an intervening invocation of before-change-functions. * lisp/progmodes/cc-mode.el (c-after-change): Correct a coding error in the handling of c-just-done-before-change. --- diff --git a/lisp/progmodes/cc-mode.el b/lisp/progmodes/cc-mode.el index 9f95a9ce48b..fd7750b0d82 100644 --- a/lisp/progmodes/cc-mode.el +++ b/lisp/progmodes/cc-mode.el @@ -1992,17 +1992,16 @@ Note that this is a strict tail, so won't match, e.g. \"0x....\".") ;; Note: c-just-done-before-change is nil, t, or 'whole-buffer. (unless (c-called-from-text-property-change-p) - (save-restriction - (widen) - (unless c-just-done-before-change - (c-before-change (point-min) (point-max))) - (unless (eq c-just-done-before-change t) + (unless (eq c-just-done-before-change t) + (save-restriction + (widen) + (when (null c-just-done-before-change) + (c-before-change (point-min) (point-max))) (setq beg (point-min) end (point-max) old-len (- end beg) c-new-BEG (point-min) - c-new-END (point-max))) - (setq c-just-done-before-change nil))) + c-new-END (point-max))))) ;; (c-new-BEG c-new-END) will be the region to fontify. It may become ;; larger than (beg end).