]> code.delx.au - gnu-emacs/blobdiff - lisp/progmodes/cc-cmds.el
Amend a cache so that typing into C++ raw strings has no undue delay.
[gnu-emacs] / lisp / progmodes / cc-cmds.el
index 59f2729c43d4ca51183563ecb2bb98779897d89d..f0ad2942457623612071749b30732033596c0857 100644 (file)
@@ -1610,8 +1610,8 @@ defun."
 
       ;; Move back out of any macro/comment/string we happen to be in.
       (c-beginning-of-macro)
-      (setq pos (c-literal-limits))
-      (if pos (goto-char (car pos)))
+      (setq pos (c-literal-start))
+      (if pos (goto-char pos))
 
       (setq where (c-where-wrt-brace-construct))
 
@@ -1734,8 +1734,8 @@ the open-parenthesis that starts a defun; see `beginning-of-defun'."
 
       ;; Move back out of any macro/comment/string we happen to be in.
       (c-beginning-of-macro)
-      (setq pos (c-literal-limits))
-      (if pos (goto-char (car pos)))
+      (setq pos (c-literal-start))
+      (if pos (goto-char pos))
 
       (setq where (c-where-wrt-brace-construct))
 
@@ -1793,8 +1793,8 @@ with a brace block."
       (save-excursion
        ;; Move back out of any macro/comment/string we happen to be in.
        (c-beginning-of-macro)
-       (setq pos (c-literal-limits))
-       (if pos (goto-char (car pos)))
+       (setq pos (c-literal-start))
+       (if pos (goto-char pos))
 
        (setq where (c-where-wrt-brace-construct))
 
@@ -1880,103 +1880,103 @@ with a brace block."
        (or (save-restriction
              (c-narrow-to-most-enclosing-decl-block nil)
 
-    ;; Note: Some code duplication in `c-beginning-of-defun' and
-    ;; `c-end-of-defun'.
-    (catch 'exit
-      (let ((start (point))
-           (paren-state (c-parse-state))
-           lim pos end-pos)
-       (unless (c-safe
-                 (goto-char (c-least-enclosing-brace paren-state))
+             ;; Note: Some code duplication in `c-beginning-of-defun' and
+             ;; `c-end-of-defun'.
+             (catch 'exit
+               (let ((start (point))
+                     (paren-state (c-parse-state))
+                     lim pos end-pos)
+                 (unless (c-safe
+                           (goto-char (c-least-enclosing-brace paren-state))
                            ;; If we moved to the outermost enclosing paren
                            ;; then we can use c-safe-position to set the
                            ;; limit. Can't do that otherwise since the
                            ;; earlier paren pair on paren-state might very
                            ;; well be part of the declaration we should go
                            ;; to.
-                 (setq lim (c-safe-position (point) paren-state))
-                 t)
-         ;; At top level.  Make sure we aren't inside a literal.
-         (setq pos (c-literal-limits
-                    (c-safe-position (point) paren-state)))
-         (if pos (goto-char (car pos))))
-
-       (when (c-beginning-of-macro)
-         (throw 'exit
-                (cons (point)
-                      (save-excursion
-                        (c-end-of-macro)
-                        (forward-line 1)
-                        (point)))))
+                           (setq lim (c-safe-position (point) paren-state))
+                           t)
+                   ;; At top level.  Make sure we aren't inside a literal.
+                   (setq pos (c-literal-start
+                              (c-safe-position (point) paren-state)))
+                   (if pos (goto-char pos)))
+
+                 (when (c-beginning-of-macro)
+                   (throw 'exit
+                          (cons (point)
+                                (save-excursion
+                                  (c-end-of-macro)
+                                  (forward-line 1)
+                                  (point)))))
 
-       (setq pos (point))
-       (when (or (eq (car (c-beginning-of-decl-1 lim)) 'previous)
-                 (= pos (point)))
-         ;; We moved back over the previous defun.  Skip to the next
-         ;; one.  Not using c-forward-syntactic-ws here since we
-         ;; should not skip a macro.  We can also be directly after
-         ;; the block in a `c-opt-block-decls-with-vars-key'
-         ;; declaration, but then we won't move significantly far
-         ;; here.
-         (goto-char pos)
-         (c-forward-comments)
-
-         (when (and near (c-beginning-of-macro))
-           (throw 'exit
-                  (cons (point)
-                        (save-excursion
-                          (c-end-of-macro)
-                          (forward-line 1)
-                          (point))))))
-
-       (if (eobp) (throw 'exit nil))
-
-       ;; Check if `c-beginning-of-decl-1' put us after the block in a
-       ;; declaration that doesn't end there.  We're searching back and
-       ;; forth over the block here, which can be expensive.
-       (setq pos (point))
-       (if (and c-opt-block-decls-with-vars-key
-                (progn
-                  (c-backward-syntactic-ws)
-                  (eq (char-before) ?}))
-                (eq (car (c-beginning-of-decl-1))
-                    'previous)
-                (save-excursion
-                  (c-end-of-decl-1)
-                  (and (> (point) pos)
-                       (setq end-pos (point)))))
-           nil
-         (goto-char pos))
-
-       (if (and (not near) (> (point) start))
-           nil
-
-         ;; Try to be line oriented; position the limits at the
-         ;; closest preceding boi, and after the next newline, that
-         ;; isn't inside a comment, but if we hit a neighboring
-         ;; declaration then we instead use the exact declaration
-         ;; limit in that direction.
-         (cons (progn
                  (setq pos (point))
-                 (while (and (/= (point) (c-point 'boi))
-                             (c-backward-single-comment)))
-                 (if (/= (point) (c-point 'boi))
-                     pos
-                   (point)))
-               (progn
-                 (if end-pos
-                     (goto-char end-pos)
-                   (c-end-of-decl-1))
+                 (when (or (eq (car (c-beginning-of-decl-1 lim)) 'previous)
+                           (= pos (point)))
+                   ;; We moved back over the previous defun.  Skip to the next
+                   ;; one.  Not using c-forward-syntactic-ws here since we
+                   ;; should not skip a macro.  We can also be directly after
+                   ;; the block in a `c-opt-block-decls-with-vars-key'
+                   ;; declaration, but then we won't move significantly far
+                   ;; here.
+                   (goto-char pos)
+                   (c-forward-comments)
+
+                   (when (and near (c-beginning-of-macro))
+                     (throw 'exit
+                            (cons (point)
+                                  (save-excursion
+                                    (c-end-of-macro)
+                                    (forward-line 1)
+                                    (point))))))
+
+                 (if (eobp) (throw 'exit nil))
+
+                 ;; Check if `c-beginning-of-decl-1' put us after the block in a
+                 ;; declaration that doesn't end there.  We're searching back and
+                 ;; forth over the block here, which can be expensive.
                  (setq pos (point))
-                 (while (and (not (bolp))
-                             (not (looking-at "\\s *$"))
-                             (c-forward-single-comment)))
-                 (cond ((bolp)
-                        (point))
-                       ((looking-at "\\s *$")
-                        (forward-line 1)
-                        (point))
-                       (t
+                 (if (and c-opt-block-decls-with-vars-key
+                          (progn
+                            (c-backward-syntactic-ws)
+                            (eq (char-before) ?}))
+                          (eq (car (c-beginning-of-decl-1))
+                              'previous)
+                          (save-excursion
+                            (c-end-of-decl-1)
+                            (and (> (point) pos)
+                                 (setq end-pos (point)))))
+                     nil
+                   (goto-char pos))
+
+                 (if (and (not near) (> (point) start))
+                     nil
+
+                   ;; Try to be line oriented; position the limits at the
+                   ;; closest preceding boi, and after the next newline, that
+                   ;; isn't inside a comment, but if we hit a neighboring
+                   ;; declaration then we instead use the exact declaration
+                   ;; limit in that direction.
+                   (cons (progn
+                           (setq pos (point))
+                           (while (and (/= (point) (c-point 'boi))
+                                       (c-backward-single-comment)))
+                           (if (/= (point) (c-point 'boi))
+                               pos
+                             (point)))
+                         (progn
+                           (if end-pos
+                               (goto-char end-pos)
+                             (c-end-of-decl-1))
+                           (setq pos (point))
+                           (while (and (not (bolp))
+                                       (not (looking-at "\\s *$"))
+                                       (c-forward-single-comment)))
+                           (cond ((bolp)
+                                  (point))
+                                 ((looking-at "\\s *$")
+                                  (forward-line 1)
+                                  (point))
+                                 (t
                                   pos))))))))
            (and (not near)
                 (goto-char (point-min))