emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] emacs-26 46540a1: Fix a "wrong side of point" error in CC


From: Alan Mackenzie
Subject: [Emacs-diffs] emacs-26 46540a1: Fix a "wrong side of point" error in CC Mode. Fixes bug #28850.
Date: Wed, 25 Oct 2017 14:22:26 -0400 (EDT)

branch: emacs-26
commit 46540a1c7adb1b89b6c2f6c9150fe8680c3a5fba
Author: Alan Mackenzie <address@hidden>
Commit: Alan Mackenzie <address@hidden>

    Fix a "wrong side of point" error in CC Mode.  Fixes bug #28850.
    
    The cause was a scanning over a bracket pair taking us beyond the supplied
    LIMIT parameter in c-forward-declarator.
    
    * lisp/progmodes/cc-engine.el (c-forward-declarator): Add three checks (<
    (point) limit) whilst dealing with tokens after the declared identifier.
    
    * lisp/progmodes/cc-fonts.el (c-font-lock-declarators): Don't supply a LIMIT
    argument to `c-forward-declarator' (twice), since we want to fontify up till
    the end of a declarator, not an arbitrary jit-lock chunk end.
---
 lisp/progmodes/cc-engine.el | 6 ++++--
 lisp/progmodes/cc-fonts.el  | 4 ++--
 2 files changed, 6 insertions(+), 4 deletions(-)

diff --git a/lisp/progmodes/cc-engine.el b/lisp/progmodes/cc-engine.el
index c506294..457f95f 100644
--- a/lisp/progmodes/cc-engine.el
+++ b/lisp/progmodes/cc-engine.el
@@ -8112,12 +8112,14 @@ comment at the start of cc-engine.el for more info."
         ;; initializing brace lists.
         (let (found)
           (while
-              (and (progn
+              (and (< (point) limit)
+                   (progn
                      ;; In the next loop, we keep searching forward whilst
                      ;; we find ":"s which aren't single colons inside C++
                      ;; "for" statements.
                      (while
                          (and
+                          (< (point) limit)
                           (setq found
                                 (c-syntactic-re-search-forward
                                  "[;:,]\\|\\s)\\|\\(=\\|\\s(\\)"
@@ -8139,7 +8141,7 @@ comment at the start of cc-engine.el for more info."
                    (c-go-up-list-forward))
             (setq brackets-after-id t))
           (when found (backward-char))
-          t))
+          (<= (point) limit)))
        (list id-start id-end brackets-after-id (match-beginning 1) decorated)
 
       (goto-char here)
diff --git a/lisp/progmodes/cc-fonts.el b/lisp/progmodes/cc-fonts.el
index acdb1ad..a2ac2a3 100644
--- a/lisp/progmodes/cc-fonts.el
+++ b/lisp/progmodes/cc-fonts.el
@@ -1062,7 +1062,7 @@ casts and declarations are fontified.  Used on level 2 
and higher."
     ;; The following `while' fontifies a single declarator id each time round.
     ;; It loops only when LIST is non-nil.
     (while
-       (and pos (setq decl-res (c-forward-declarator limit)))
+       (and pos (setq decl-res (c-forward-declarator)))
       (setq next-pos (point)
            id-start (car decl-res)
            id-face (if (and (eq (char-after) ?\()
@@ -1091,7 +1091,7 @@ casts and declarations are fontified.  Used on level 2 
and higher."
                                               (throw 'is-function nil))
                                              ((not (eq got-type 'maybe))
                                               (throw 'is-function t)))
-                                            (c-forward-declarator limit t)
+                                            (c-forward-declarator nil t)
                                             (eq (char-after) ?,))
                                         (forward-char)
                                         (c-forward-syntactic-ws))



reply via email to

[Prev in Thread] Current Thread [Next in Thread]