emacs-diffs
[Top][All Lists]
Advanced

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

master 3208a42c47: CC Mode: Make it scroll fast over buffers with only #


From: Alan Mackenzie
Subject: master 3208a42c47: CC Mode: Make it scroll fast over buffers with only #define's
Date: Thu, 24 Nov 2022 05:54:02 -0500 (EST)

branch: master
commit 3208a42c47c4f98cb03c4b15164ca83113244b40
Author: Alan Mackenzie <acm@muc.de>
Commit: Alan Mackenzie <acm@muc.de>

    CC Mode: Make it scroll fast over buffers with only #define's
    
    * lisp/progmodes/cc-engine.el (c-forward-over-token): New LIMIT parameter
    
    * lisp/progmodes/cc-langs.el (c-anchored-hash-define-no-parens): Replace
    ill-formed regular expression (which mixed \\sw and character alternative)
    with simpler efficient regexp.
    
    * lisp/progmodes/cc-mode.el (c-fl-decl-end): New forward limit LIM+ used in
    c-forward-declarator and c-forward-over-token.
---
 lisp/progmodes/cc-engine.el | 13 +++++++------
 lisp/progmodes/cc-langs.el  |  2 +-
 lisp/progmodes/cc-mode.el   |  5 +++--
 3 files changed, 11 insertions(+), 9 deletions(-)

diff --git a/lisp/progmodes/cc-engine.el b/lisp/progmodes/cc-engine.el
index 086166c822..9e09e5150d 100644
--- a/lisp/progmodes/cc-engine.el
+++ b/lisp/progmodes/cc-engine.el
@@ -4951,30 +4951,31 @@ comment at the start of cc-engine.el for more info."
       "\\w\\|\\s_\\|\\s\"\\|\\s|"
     "\\w\\|\\s_\\|\\s\""))
 
-(defun c-forward-over-token (&optional balanced)
+(defun c-forward-over-token (&optional balanced limit)
   "Move forward over a token.
 Return t if we moved, nil otherwise (i.e. we were at EOB, or a
 non-token or BALANCED is non-nil and we can't move).  If we
 are at syntactic whitespace, move over this in place of a token.
 
 If BALANCED is non-nil move over any balanced parens we are at, and never move
-out of an enclosing paren."
+out of an enclosing paren.  LIMIT is the limit to where we might move to."
   (let ((jump-syntax (if balanced
                         c-jump-syntax-balanced
                       c-jump-syntax-unbalanced))
-       (here (point)))
+       (here (point))
+       (limit (or limit (point-max))))
     (condition-case nil
        (cond
         ((/= (point)
-             (progn (c-forward-syntactic-ws) (point)))
+             (progn (c-forward-syntactic-ws limit) (point)))
          ;; If we're at whitespace, count this as the token.
          t)
         ((eobp) nil)
         ((looking-at jump-syntax)
-         (goto-char (scan-sexps (point) 1))
+         (goto-char (min limit (scan-sexps (point) 1)))
          t)
         ((looking-at c-nonsymbol-token-regexp)
-         (goto-char (match-end 0))
+         (goto-char (min (match-end 0) limit))
          t)
         ((save-restriction
            (widen)
diff --git a/lisp/progmodes/cc-langs.el b/lisp/progmodes/cc-langs.el
index 47e05438ea..581685cad7 100644
--- a/lisp/progmodes/cc-langs.el
+++ b/lisp/progmodes/cc-langs.el
@@ -1188,7 +1188,7 @@ definition, or nil if the language doesn't have any."
   t (if (c-lang-const c-opt-cpp-macro-define)
        (concat (c-lang-const c-anchored-cpp-prefix)
                (c-lang-const c-opt-cpp-macro-define)
-               "[ \t]+\\(\\sw\\|_\\)+\\([^(a-zA-Z0-9_]\\|$\\)")))
+               "[ \t]+[a-zA-Z0-9_]+\\([^(a-zA-Z0-9_]\\|$\\)")))
 
 (c-lang-defconst c-cpp-expr-directives
   "List of cpp directives (without the prefix) that are followed by an
diff --git a/lisp/progmodes/cc-mode.el b/lisp/progmodes/cc-mode.el
index 99067e4761..6a2c2f2911 100644
--- a/lisp/progmodes/cc-mode.el
+++ b/lisp/progmodes/cc-mode.el
@@ -2482,7 +2482,8 @@ with // and /*, not more generic line and block comments."
       (let* ((lim1 (save-excursion
                     (and (c-beginning-of-macro)
                          (progn (c-end-of-macro) (point)))))
-            (decl-res (c-forward-declarator)))
+            (lim+ (c-determine-+ve-limit 200))
+            (decl-res (c-forward-declarator lim+)))
        (if (or (cadr (cddr (cddr decl-res))) ; We scanned an arglist.
                (and (eq (char-after) ?\()    ; Move over a non arglist (...).
                     (prog1 (c-go-list-forward)
@@ -2499,7 +2500,7 @@ with // and /*, not more generic line and block comments."
                   (c-backward-syntactic-ws lim1)
                   (eq (char-before) ?\())
                 (c-fl-decl-end (1- (point))))
-             (c-forward-over-token)
+             (c-forward-over-token nil lim+) ; The , or ) after the declarator.
              (point))
          (if (progn (c-forward-syntactic-ws)
                     (not (eobp)))



reply via email to

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