]> git.eshelyaron.com Git - emacs.git/commitdiff
CC Mode: Remedy recent loss in performance
authorAlan Mackenzie <acm@muc.de>
Sun, 16 Jun 2019 15:46:12 +0000 (15:46 +0000)
committerAlan Mackenzie <acm@muc.de>
Sun, 16 Jun 2019 15:46:12 +0000 (15:46 +0000)
* lisp/progmodes/cc-engine.el (c-back-over-member-initializers): call
c-parse-state outside of the narrowing operation.

* lisp/progmodes/cc-fonts.el (c-get-fontification-context)
(c-font-lock-cut-off-declarators): Replace calls to c-determine-limit with
crude position calculations for speed.

lisp/progmodes/cc-engine.el
lisp/progmodes/cc-fonts.el

index 6598cc62c2002719ee5841b4f1aa72d9b30bdb09..d3d7a1c5c0ae439f1b2e57fe570537379cf5c7c8 100644 (file)
@@ -8611,10 +8611,11 @@ comment at the start of cc-engine.el for more info."
   ;; the function's arglist.  Otherwise return nil, leaving point unchanged.
   ;; LIMIT, if non-nil, is a limit for the backward search.
   (save-restriction
-    (if limit (narrow-to-region limit (point)))
     (let ((here (point))
-         (paren-state (c-parse-state))
+         (paren-state (c-parse-state)) ; Do this outside the narrowing for
+                                       ; performance reasons.
          pos level-plausible at-top-level res)
+      (if limit (narrow-to-region limit (point)))
       ;; Assume tentatively that we're at the top level.  Try to go back to the
       ;; colon we seek.
       (setq res
@@ -8637,7 +8638,8 @@ comment at the start of cc-engine.el for more info."
 
              (while (and (not (and level-plausible
                                    (setq at-top-level (c-at-toplevel-p))))
-                         (setq pos (c-pull-open-brace paren-state))) ; might be a paren.
+                         (setq pos (c-pull-open-brace paren-state)) ; might be a paren.
+                         (or (null limit) (>= pos limit)))
                (setq level-plausible
                      (catch 'level
                        (goto-char pos)
index cef2015f430db59da3d5de37ef1a8ff43edb49b7..269d2c90b799cb1db7292b46a4447d2dc4e241d2 100644 (file)
@@ -1204,7 +1204,9 @@ casts and declarations are fontified.  Used on level 2 and higher."
          ((save-excursion
             (goto-char match-pos)
             (and (memq (char-before match-pos) '(?\( ?\,))
-                 (c-go-up-list-backward match-pos (c-determine-limit 500))
+                 (c-go-up-list-backward match-pos
+                                         ; c-determine-limit is too slow, here.
+                                        (max (- (point) 2000) (point-min)))
                  (eq (char-after) ?\()
                  (let ((type (c-get-char-property (point) 'c-type)))
                    (or (memq type '(c-decl-arg-start c-decl-type-start))
@@ -1605,7 +1607,9 @@ casts and declarations are fontified.  Used on level 2 and higher."
          c-recognize-knr-p)            ; Strictly speaking, bogus, but it
                                        ; speeds up lisp.h tremendously.
       (save-excursion
-       (when (not (c-back-over-member-initializers (c-determine-limit 2000)))
+       (when (not (c-back-over-member-initializers
+                   (max (- (point) 2000) (point-min)))) ; c-determine-limit
+                                                        ; is too slow, here.
          (unless (or (eobp)
                      (looking-at "\\s(\\|\\s)"))
            (forward-char))