bug-gnu-emacs
[Top][All Lists]
Advanced

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

bug#7595: Infinite loop in cc-mode, or the coming of autumn


From: Alan Mackenzie
Subject: bug#7595: Infinite loop in cc-mode, or the coming of autumn
Date: Thu, 16 Dec 2010 21:39:16 +0000
User-agent: Mutt/1.5.9i

Hi again, Daniel!

On Wed, Dec 08, 2010 at 03:08:33PM -0800, Daniel Colascione wrote:
> In a c-mode buf,
> press pound, then back, then M-e
> See eternal loop
> 

Would you try out the following patch, please, which I hope fixes the
problem.  (The line numbers will be a little different, but don't worry
about that.)  Let me know how well it works!  Thanks.




*** orig/cc-cmds.el     2010-12-12 21:08:40.000000000 +0000
--- cc-cmds.el  2010-12-16 20:55:30.778431600 +0000
***************
*** 2422,2434 ****
          (goto-char last)
          (throw 'done '(nil . nil)))
  
!        ;; Stop if we encounter a preprocessor line.
!        ((and (not macro-end)
               (eq (char-after) ?#)
               (= (point) (c-point 'boi)))
!         (goto-char last)
!         ;(throw 'done (cons (eq (point) here) 'macro-boundary))) ; Changed 
2003/3/26
!         (throw 'done '(t . macro-boundary)))
  
         ;; Stop after a ';', '}', or "};"
         ((looking-at ";\\|};?")
--- 2422,2435 ----
          (goto-char last)
          (throw 'done '(nil . nil)))
  
!        ;; Stop if we encounter a preprocessor line.  Continue if we hit a 
naked #
!        ((and c-opt-cpp-prefix
!              (not macro-end)
               (eq (char-after) ?#)
               (= (point) (c-point 'boi)))
!         (if (= (point) here)          ; Not a macro, therefore naked #.
!             (forward-char)
!           (throw 'done '(t . macro-boundary))))
  
         ;; Stop after a ';', '}', or "};"
         ((looking-at ";\\|};?")
***************
*** 2627,2640 ****
                ;; Are we about to move forward into or out of a
                ;; preprocessor command?
                (when (eq (cdr res) 'macro-boundary)
!                 (save-excursion
!                   (end-of-line)
!                   (setq macro-fence
!                         (and (not (eobp))
!                              (progn (c-skip-ws-forward)
!                                     (c-beginning-of-macro))
!                              (progn (c-end-of-macro)
!                                     (point))))))
                ;; Are we about to move forward into a literal?
                (when (memq (cdr res) '(macro-boundary literal))
                  (setq range (c-ascertain-following-literal)))
--- 2628,2646 ----
                ;; Are we about to move forward into or out of a
                ;; preprocessor command?
                (when (eq (cdr res) 'macro-boundary)
!                 (setq macro-fence
!                       (save-excursion
!                         (if macro-fence
!                             (progn
!                               (end-of-line)
!                               (and (not (eobp))
!                                    (progn (c-skip-ws-forward)
!                                           (c-beginning-of-macro))
!                                    (progn (c-end-of-macro)
!                                           (point))))
!                           (and (not (eobp))
!                                (c-beginning-of-macro)
!                                (progn (c-end-of-macro) (point)))))))
                ;; Are we about to move forward into a literal?
                (when (memq (cdr res) '(macro-boundary literal))
                  (setq range (c-ascertain-following-literal)))


 
All the best!

-- 
Alan Mackenzie (Nuremberg, Germany).





reply via email to

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