]> code.delx.au - gnu-emacs/commitdiff
Make typing into incomplete C++ raw strings work, and make it work fast enough
authorAlan Mackenzie <acm@muc.de>
Thu, 23 Jun 2016 16:12:45 +0000 (16:12 +0000)
committerAlan Mackenzie <acm@muc.de>
Thu, 23 Jun 2016 16:12:45 +0000 (16:12 +0000)
* lisp/progmodes/cc-engine.el (c-beginning-of-macro, c-state-pp-to-literal):
Put `save-match-data' around calls to `looking-at' to enable the use of the
match data in higher level functions.

* lisp/progmodes/cc-fonts.el (c-font-lock-declarations)
(c-font-lock-cut-off-declarators): Use `limit' rather than `(point-max)' as a
limit to speed up handling of C++ raw strings.

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

index 595d57756eb20fc5095ab0583f077eb5b1de8e44..5fa0403458527a805c20c3eb0e431a5860611321 100644 (file)
@@ -305,7 +305,7 @@ comment at the start of cc-engine.el for more info."
            (forward-line -1))
          (back-to-indentation)
          (if (and (<= (point) here)
-                  (looking-at c-opt-cpp-start)
+                  (save-match-data (looking-at c-opt-cpp-start))
                   (c-macro-is-genuine-p))
              (progn
                (setq c-macro-cache (cons (point) nil)
@@ -2304,32 +2304,33 @@ comment at the start of cc-engine.el for more info."
   ;; 7 (comment type) and 8 (start of comment/string) (and possibly 9) of
   ;; STATE are valid.
   (save-excursion
-    (let ((s (parse-partial-sexp from to))
-         ty co-st)
-      (cond
-       ((or (nth 3 s) (nth 4 s))       ; in a string or comment
-       (setq ty (cond
-                 ((nth 3 s) 'string)
-                 ((nth 7 s) 'c++)
-                 (t 'c)))
-       (parse-partial-sexp (point) (point-max)
-                           nil            ; TARGETDEPTH
-                           nil            ; STOPBEFORE
-                           s              ; OLDSTATE
-                           'syntax-table) ; stop at end of literal
-       `(,s ,ty (,(nth 8 s) . ,(point))))
-
-       ((and (not not-in-delimiter)    ; inside a comment starter
-            (not (bobp))
-            (progn (backward-char)
-                   (and (not (looking-at "\\s!"))
-                        (looking-at c-comment-start-regexp))))
-       (setq ty (if (looking-at c-block-comment-start-regexp) 'c 'c++)
-             co-st (point))
-       (forward-comment 1)
-       `(,s ,ty (,co-st . ,(point))))
-
-       (t `(,s))))))
+    (save-match-data
+      (let ((s (parse-partial-sexp from to))
+           ty co-st)
+       (cond
+        ((or (nth 3 s) (nth 4 s))      ; in a string or comment
+         (setq ty (cond
+                   ((nth 3 s) 'string)
+                   ((nth 7 s) 'c++)
+                   (t 'c)))
+         (parse-partial-sexp (point) (point-max)
+                             nil          ; TARGETDEPTH
+                             nil          ; STOPBEFORE
+                             s            ; OLDSTATE
+                             'syntax-table) ; stop at end of literal
+         `(,s ,ty (,(nth 8 s) . ,(point))))
+
+        ((and (not not-in-delimiter)   ; inside a comment starter
+              (not (bobp))
+              (progn (backward-char)
+                     (and (not (looking-at "\\s!"))
+                          (looking-at c-comment-start-regexp))))
+         (setq ty (if (looking-at c-block-comment-start-regexp) 'c 'c++)
+               co-st (point))
+         (forward-comment 1)
+         `(,s ,ty (,co-st . ,(point))))
+
+        (t `(,s)))))))
 
 (defun c-state-safe-place (here)
   ;; Return a buffer position before HERE which is "safe", i.e. outside any
index 65ec5c3f044e022bde23e03352cd438517d23964..3a8c9ec0ec42c4d56d65c784ab462ae64aaf0ca6 100644 (file)
@@ -1396,7 +1396,7 @@ casts and declarations are fontified.  Used on level 2 and higher."
                                             'c-decl-id-start)))))
 
                (c-font-lock-declarators
-                (point-max) decl-list (cadr decl-or-cast)))
+                (min limit (point-max)) decl-list (cadr decl-or-cast)))
 
              ;; A declaration has been successfully identified, so do all the
              ;; fontification of types and refs that've been recorded.
@@ -1542,7 +1542,7 @@ casts and declarations are fontified.  Used on level 2 and higher."
                (c-forward-syntactic-ws))
              ;; At a real declaration?
              (if (memq (c-forward-type t) '(t known found decltype))
-                 (c-font-lock-declarators (point-max) t is-typedef)))
+                 (c-font-lock-declarators limit t is-typedef)))
          nil)))))
 
 (defun c-font-lock-enclosing-decls (limit)