From debbugs-submit-bounces@debbugs.gnu.org Fri Mar 13 10:32:58 2020 Received: (at submit) by debbugs.gnu.org; 13 Mar 2020 14:32:59 +0000 Received: from localhost ([127.0.0.1]:60112 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jClMw-00054a-8u for submit@debbugs.gnu.org; Fri, 13 Mar 2020 10:32:58 -0400 Received: from foss.arm.com ([217.140.110.172]:50608) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jCh8t-0003wD-T5 for submit@debbugs.gnu.org; Fri, 13 Mar 2020 06:02:12 -0400 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 1B3A430E for ; Fri, 13 Mar 2020 03:02:06 -0700 (PDT) Received: from nicgas01-03-arm-vm (nicgas01-03-arm-vm.shanghai.arm.com [10.169.138.47]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 696E23F534 for ; Fri, 13 Mar 2020 03:02:05 -0700 (PDT) User-agent: mu4e 1.2.0; emacs 27.0.90 From: Nick Gasson To: submit@debbugs.gnu.org Subject: CC Mode 5.34 (C++//l); cc-mode hangs fontifying src/hotspot/share/runtime/globals.hpp in OpenJDK X-Debbugs-Package: cc-mode Date: Fri, 13 Mar 2020 18:02:03 +0800 Message-ID: <851rpw3750.fsf@arm.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: submit X-Mailman-Approved-At: Fri, 13 Mar 2020 10:32:56 -0400 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) Package: cc-mode Open this file with emacs --no-init-file, page down a few times and Emacs locks up: http://hg.openjdk.java.net/jdk/jdk/raw-file/29edf1cb3c02/src/hotspot/share/= runtime/globals.hpp Emacs : GNU Emacs 27.0.90 (build 1, aarch64-unknown-linux-gnu, GTK+ Versio= n 3.24.13) of 2020-03-09 Package: CC Mode 5.34 (C++//l) Buffer Style: gnu c-emacs-features: (pps-extended-state col-0-paren posix-char-classes gen-st= ring-delim gen-comment-delim syntax-properties 1-bit) current state: =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D (setq c-basic-offset 2 c-comment-only-line-offset '(0 . 0) c-indent-comment-alist '((anchored-comment column . 0) (end-block space . = 1) (cpp-end-block space . 2)) c-indent-comments-syntactically-p nil c-block-comment-prefix "" c-comment-prefix-regexp '((pike-mode . "//+!?\\|\\**") (awk-mode . "#+") (other . "//+\\|\\**")) c-doc-comment-style '((java-mode . javadoc) (pike-mode . autodoc) (c-mode = . gtkdoc) (c++-mode . gtkdoc)) c-cleanup-list '(scope-operator) c-hanging-braces-alist '((substatement-open before after) (arglist-cont-no= nempty)) c-hanging-colons-alist nil c-hanging-semi&comma-criteria '(c-semi&comma-inside-parenlist) c-backslash-column 48 c-backslash-max-column 72 c-special-indent-hook '(c-gnu-impose-minimum) c-label-minimum-indentation 1 c-offsets-alist '((inexpr-class . +) (inexpr-statement . +) (lambda-intro-cont . +) (inlambda . 0) (template-args-cont c-lineup-template-args +) (incomposition . +) (inmodule . +) (innamespace . +) (inextern-lang . +) (composition-close . 0) (module-close . 0) (namespace-close . 0) (extern-lang-close . 0) (composition-open . 0) (module-open . 0) (namespace-open . 0) (extern-lang-open . 0) (objc-method-call-cont c-lineup-ObjC-method-call-colons c-lineup-ObjC-method-call + ) (objc-method-args-cont . c-lineup-ObjC-method-args) (objc-method-intro . [0]) (friend . 0) (cpp-define-intro c-lineup-cpp-define +) (cpp-macro-cont . +) (cpp-macro . [0]) (inclass . +) (stream-op . c-lineup-streamop) (arglist-cont-nonempty c-lineup-gcc-asm-reg c-lineup-arg= list) (arglist-cont c-lineup-gcc-asm-reg 0) (comment-intro c-lineup-knr-region-comment c-lineup-comm= ent) (catch-clause . 0) (else-clause . 0) (do-while-closure . 0) (access-label . -) (case-label . 0) (substatement . +) (statement-case-intro . +) (statement . 0) (brace-entry-open . 0) (brace-list-entry . 0) (brace-list-close . 0) (block-close . 0) (block-open . 0) (inher-cont . c-lineup-multi-inher) (inher-intro . +) (member-init-cont . c-lineup-multi-inher) (member-init-intro . +) (annotation-var-cont . +) (annotation-top-cont . 0) (topmost-intro . 0) (knr-argdecl . 0) (func-decl-cont . +) (inline-close . 0) (class-close . 0) (class-open . 0) (defun-block-intro . +) (defun-close . 0) (defun-open . 0) (c . c-lineup-C-comments) (string . c-lineup-dont-change) (topmost-intro-cont first c-lineup-topmost-intro-cont c-lineup-gnu-DEFUN-intro-cont ) (brace-list-intro . +) (brace-list-open . +) (inline-open . 0) (arglist-close . 0) (arglist-intro . +) (statement-cont . +) (statement-case-open . +) (label . 0) (substatement-label . 0) (substatement-open . +) (knr-argdecl-intro . 5) (statement-block-intro . +) ) c-buffer-is-cc-mode 'c++-mode c-tab-always-indent t c-syntactic-indentation t c-syntactic-indentation-in-macros t c-ignore-auto-fill '(string cpp code) c-auto-align-backslashes t c-backspace-function 'backward-delete-char-untabify c-delete-function 'delete-char c-electric-pound-behavior nil c-default-style '((java-mode . "java") (awk-mode . "awk") (other . "gnu")) c-enable-xemacs-performance-kludge-p nil c-old-style-variable-behavior nil defun-prompt-regexp nil tab-width 8 comment-column 32 parse-sexp-ignore-comments t parse-sexp-lookup-properties t auto-fill-function nil comment-multi-line t comment-start-skip "\\(//+\\|/\\*+\\)\\s *" fill-prefix nil fill-column 72 paragraph-start "[ ]*\\(//+\\|\\**\\)[ ]*$\\|^\f" adaptive-fill-mode t adaptive-fill-regexp "[ ]*\\(//+\\|\\**\\)[ ]*\\([ ]*\\([-=E2=80=93!|#%= ;>*=C2=B7=E2=80=A2=E2=80=A3=E2=81=83=E2=97=A6]+[ ]*\\)*\\)" ) From debbugs-submit-bounces@debbugs.gnu.org Thu Apr 16 15:48:22 2020 Received: (at 40052) by debbugs.gnu.org; 16 Apr 2020 19:48:22 +0000 Received: from localhost ([127.0.0.1]:39436 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jPAUo-0005Av-0L for submit@debbugs.gnu.org; Thu, 16 Apr 2020 15:48:22 -0400 Received: from colin.muc.de ([193.149.48.1]:26723 helo=mail.muc.de) by debbugs.gnu.org with smtp (Exim 4.84_2) (envelope-from ) id 1jPAUj-0005Aj-Oo for 40052@debbugs.gnu.org; Thu, 16 Apr 2020 15:48:20 -0400 Received: (qmail 68740 invoked by uid 3782); 16 Apr 2020 19:48:15 -0000 Received: from acm.muc.de (p4FE15C1F.dip0.t-ipconnect.de [79.225.92.31]) by localhost.muc.de (tmda-ofmipd) with ESMTP; Thu, 16 Apr 2020 21:48:14 +0200 Received: (qmail 19243 invoked by uid 1000); 16 Apr 2020 19:48:14 -0000 Date: Thu, 16 Apr 2020 19:48:14 +0000 To: Nick Gasson Subject: Re: bug#40052: CC Mode 5.34 (C++//l); cc-mode hangs fontifying src/hotspot/share/runtime/globals.hpp in OpenJDK Message-ID: <20200416194814.GB5328@ACM> References: <851rpw3750.fsf@arm.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <851rpw3750.fsf@arm.com> X-Delivery-Agent: TMDA/1.1.12 (Macallan) From: Alan Mackenzie X-Primary-Address: acm@muc.de X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 40052 Cc: 40052@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Hello, Nick. On Fri, Mar 13, 2020 at 18:02:03 +0800, Nick Gasson wrote: > Package: cc-mode > Open this file with emacs --no-init-file, page down a few times and > Emacs locks up: > http://hg.openjdk.java.net/jdk/jdk/raw-file/29edf1cb3c02/src/hotspot/share/runtime/globals.hpp Thanks for taking the trouble to report this bug. It has been a tough one to crack. When I tried it, my Emacs slowed down to a crawl rather than locking up completely. I'm assuming that this would have been the case on your machine, too. Most obviously, there is a huge macro in globals.hpp. Although there are some optimisations in CC Mode for large macros, they are incomplete, so working on or around such a macro can be slow. What is taking most of the time is a CC Mode function which goes back over syntactic whitespace (spaces, tabs, comments, and when starting outside of a macro, that macro). This hits a bug in Emacs where it allows the backward search operation for a comment start, when point is at the beginning of the line following an escaped newline. Such a position can never be an end of a comment in C++. However, this search backwards for a comment start is being done many thousand times in globals.hpp because of the consecutive escaped newlines. The fix to Emacs won't actually be getting released until Emacs 28, so in the meantime, please try the following patch. The files to patch are in directory ...../emacs/lisp/progmodes. After patching them, please byte compile the two files. (If you want any help in patching or byte compiling, feel free to send me private email.) In my timings, scrolling with the patch applied is about four times as fast as without it. I've also included a correction to a bug about "regexp stack overflow" which happened when one tried actually to edit this buffer. Clearly this speed is still not fast enough, but it might be bearable at a pinch. I will carry on trying to speed it up. Please let me know how you get on with the patch. Thanks! diff -r 99da14f7dde7 cc-engine.el --- a/cc-engine.el Sun Mar 08 15:07:06 2020 +0000 +++ b/cc-engine.el Thu Apr 16 19:33:34 2020 +0000 @@ -1648,6 +1648,16 @@ (forward-char 2) t)))) +(defmacro c-forward-comment-minus-1 () + "Call (forward-comment -1), taking care of escaped newlines. +Return the result of `forward-comment' if it gets called, nil otherwise." + `(when + (or (not comment-end-can-be-escaped) + (progn (skip-chars-backward " \t\n") + (not (and (eq (char-after) ?\n) + (eq (char-before) ?\\))))) + (forward-comment -1))) + (defun c-backward-single-comment () "Move backward past whitespace and the closest preceding comment, if any. Return t if a comment was found, nil otherwise. In either case, the @@ -1681,12 +1691,12 @@ ;; same line. (re-search-forward "\\=\\s *[\n\r]" start t) - (if (if (forward-comment -1) + (if (if (c-forward-comment-minus-1) (if (eolp) ;; If forward-comment above succeeded and we're at eol ;; then the newline we moved over above didn't end a ;; line comment, so we give it another go. - (forward-comment -1) + (c-forward-comment-minus-1) t)) ;; Emacs <= 20 and XEmacs move back over the closer of a @@ -1715,7 +1725,7 @@ (if (let (moved-comment) (while - (and (not (setq moved-comment (forward-comment -1))) + (and (not (setq moved-comment (c-forward-comment-minus-1))) ;; Cope specifically with ^M^J here - ;; forward-comment sometimes gets stuck after ^Ms, ;; sometimes after ^M^J. diff -r 99da14f7dde7 cc-mode.el --- a/cc-mode.el Sun Mar 08 15:07:06 2020 +0000 +++ b/cc-mode.el Thu Apr 16 19:33:34 2020 +0000 @@ -1413,7 +1413,7 @@ ;; Move to end of logical line (as it will be after the change, or as it ;; was before unescaping a NL.) - (re-search-forward "\\(\\\\\\(.\\|\n\\)\\|[^\\\n\r]\\)*" nil t) + (re-search-forward "\\(?:\\\\\\(?:.\\|\n\\)\\|[^\\\n\r]\\)*" nil t) ;; We're at an EOLL or point-max. (if (equal (c-get-char-property (point) 'syntax-table) '(15)) (if (memq (char-after) '(?\n ?\r)) @@ -1521,7 +1521,7 @@ (progn (goto-char (min (1+ end) ; 1+, in case a NL has become escaped. (point-max))) - (re-search-forward "\\(\\\\\\(.\\|\n\\)\\|[^\\\n\r]\\)*" + (re-search-forward "\\(?:\\\\\\(?:.\\|\n\\)\\|[^\\\n\r]\\)*" nil t) (point)) c-new-END)) @@ -1602,8 +1602,8 @@ (c-beginning-of-macro)))) (goto-char (1+ end)) ; After the \ ;; Search forward for EOLL - (setq lim (re-search-forward "\\(\\\\\\(.\\|\n\\)\\|[^\\\n\r]\\)*" - nil t)) + (setq lim (re-search-forward "\\(?:\\\\\\(?:.\\|\n\\)\\|[^\\\n\r]\\)*" + nil t)) (goto-char (1+ end)) (when (c-search-forward-char-property-with-value-on-char 'syntax-table '(15) ?\" lim) > Emacs : GNU Emacs 27.0.90 (build 1, aarch64-unknown-linux-gnu, GTK+ Version 3.24.13) > of 2020-03-09 > Package: CC Mode 5.34 (C++//l) > Buffer Style: gnu > c-emacs-features: (pps-extended-state col-0-paren posix-char-classes gen-string-delim gen-comment-delim syntax-properties 1-bit) [ CC Mode state dump snipped, but appreciated. ] -- Alan Mackenzie (Nuremberg, Germany). From debbugs-submit-bounces@debbugs.gnu.org Fri Apr 17 01:34:05 2020 Received: (at 40052) by debbugs.gnu.org; 17 Apr 2020 05:34:05 +0000 Received: from localhost ([127.0.0.1]:39824 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jPJdd-0002ba-Hs for submit@debbugs.gnu.org; Fri, 17 Apr 2020 01:34:05 -0400 Received: from foss.arm.com ([217.140.110.172]:58304) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jPJM6-00025e-Lp for 40052@debbugs.gnu.org; Fri, 17 Apr 2020 01:15:59 -0400 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id DC48930E; Thu, 16 Apr 2020 22:15:52 -0700 (PDT) Received: from nicgas01-03-arm-vm (nicgas01-03-arm-vm.shanghai.arm.com [10.169.139.52]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id BE1423F6C4; Thu, 16 Apr 2020 22:15:51 -0700 (PDT) References: <851rpw3750.fsf@arm.com> <20200416194814.GB5328@ACM> User-agent: mu4e 1.2.0; emacs 27.0.91 From: Nick Gasson To: Alan Mackenzie Subject: Re: bug#40052: CC Mode 5.34 (C++//l); cc-mode hangs fontifying src/hotspot/share/runtime/globals.hpp in OpenJDK In-reply-to: <20200416194814.GB5328@ACM> Date: Fri, 17 Apr 2020 13:15:49 +0800 Message-ID: <853692snei.fsf@arm.com> MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 40052 X-Mailman-Approved-At: Fri, 17 Apr 2020 01:34:05 -0400 Cc: "40052@debbugs.gnu.org" <40052@debbugs.gnu.org> X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > > In my timings, scrolling with the patch applied is about four times as > fast as without it. I've also included a correction to a bug about > "regexp stack overflow" which happened when one tried actually to edit > this buffer. Clearly this speed is still not fast enough, but it might > be bearable at a pinch. I will carry on trying to speed it up. > I applied this patch and it makes a huge difference. It's still a little slow as you say but it's usable now. Thanks a lot! Nick From debbugs-submit-bounces@debbugs.gnu.org Sat Apr 18 12:51:47 2020 Received: (at 40052) by debbugs.gnu.org; 18 Apr 2020 16:51:47 +0000 Received: from localhost ([127.0.0.1]:43500 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jPqh1-00069u-Im for submit@debbugs.gnu.org; Sat, 18 Apr 2020 12:51:47 -0400 Received: from colin.muc.de ([193.149.48.1]:62657 helo=mail.muc.de) by debbugs.gnu.org with smtp (Exim 4.84_2) (envelope-from ) id 1jPqgy-00069m-RZ for 40052@debbugs.gnu.org; Sat, 18 Apr 2020 12:51:46 -0400 Received: (qmail 13788 invoked by uid 3782); 18 Apr 2020 09:39:37 -0000 Received: from acm.muc.de (p2E5D54B4.dip0.t-ipconnect.de [46.93.84.180]) by localhost.muc.de (tmda-ofmipd) with ESMTP; Sat, 18 Apr 2020 11:39:36 +0200 Received: (qmail 5722 invoked by uid 1000); 18 Apr 2020 09:39:36 -0000 Date: Sat, 18 Apr 2020 09:39:36 +0000 To: Nick Gasson Subject: Re: bug#40052: CC Mode 5.34 (C++//l); cc-mode hangs fontifying src/hotspot/share/runtime/globals.hpp in OpenJDK Message-ID: <20200418093936.GA5702@ACM> References: <851rpw3750.fsf@arm.com> <20200416194814.GB5328@ACM> <853692snei.fsf@arm.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <853692snei.fsf@arm.com> X-Delivery-Agent: TMDA/1.1.12 (Macallan) From: Alan Mackenzie X-Primary-Address: acm@muc.de X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 40052 Cc: "40052@debbugs.gnu.org" <40052@debbugs.gnu.org> X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Hello, Nick. On Fri, Apr 17, 2020 at 13:15:49 +0800, Nick Gasson wrote: > > In my timings, scrolling with the patch applied is about four times as > > fast as without it. I've also included a correction to a bug about > > "regexp stack overflow" which happened when one tried actually to edit > > this buffer. Clearly this speed is still not fast enough, but it might > > be bearable at a pinch. I will carry on trying to speed it up. > I applied this patch and it makes a huge difference. It's still a little > slow as you say but it's usable now. Thanks a lot! OK, thanks. I've had another look into CC Mode, and found a bug in the handling of its macro cache. It isn't saving the position of the end of the macro, hence is doing too much scanning. I've fixed this in the following patch, which gives another factor of ~5 speedup in the scrolling. Please remove the previous patch before applying this new one. However, the scrolling still gets sluggish towards the end of globals.hpp. This is because CC Mode's function which goes back to the beginning of a statement is scanning back over the entire macro. It basically looks for semicolons or closing braces (at top level) and there are none in the huge macro. I tried creating a variant of globals.hpp, where each "function call" was terminated by a semicolon. The sluggishness was entirely fixed. This is largely theoretical, as I assume you have no control over the contents of globals.hpp. Anyhow, here is the patch. Please let me know if there are still problems with it. Thanks! diff -r 99da14f7dde7 cc-engine.el --- a/cc-engine.el Sun Mar 08 15:07:06 2020 +0000 +++ b/cc-engine.el Sat Apr 18 09:04:42 2020 +0000 @@ -412,7 +412,7 @@ (when (and (car c-macro-cache) (> (point) (car c-macro-cache)) ; in case we have a ; zero-sized region. - (not (eq (char-before (1- (point))) ?\\))) + (not lim)) (setcdr c-macro-cache (point)) (setq c-macro-cache-syntactic nil))))))) @@ -1648,6 +1648,21 @@ (forward-char 2) t)))) +(defmacro c-forward-comment-minus-1 () + "Call (forward-comment -1), taking care of escaped newlines. +Return the result of `forward-comment' if it gets called, nil otherwise." + `(if (not comment-end-can-be-escaped) + (forward-comment -1) + (when (and (< (skip-syntax-backward " >") 0) + (eq (char-after) ?\n)) + (forward-char)) + (cond + ((and (eq (char-before) ?\n) + (eq (char-before (1- (point))) ?\\)) + (backward-char) + nil) + (t (forward-comment -1))))) + (defun c-backward-single-comment () "Move backward past whitespace and the closest preceding comment, if any. Return t if a comment was found, nil otherwise. In either case, the @@ -1681,12 +1696,12 @@ ;; same line. (re-search-forward "\\=\\s *[\n\r]" start t) - (if (if (forward-comment -1) + (if (if (c-forward-comment-minus-1) (if (eolp) ;; If forward-comment above succeeded and we're at eol ;; then the newline we moved over above didn't end a ;; line comment, so we give it another go. - (forward-comment -1) + (c-forward-comment-minus-1) t)) ;; Emacs <= 20 and XEmacs move back over the closer of a @@ -1715,7 +1730,7 @@ (if (let (moved-comment) (while - (and (not (setq moved-comment (forward-comment -1))) + (and (not (setq moved-comment (c-forward-comment-minus-1))) ;; Cope specifically with ^M^J here - ;; forward-comment sometimes gets stuck after ^Ms, ;; sometimes after ^M^J. diff -r 99da14f7dde7 cc-mode.el --- a/cc-mode.el Sun Mar 08 15:07:06 2020 +0000 +++ b/cc-mode.el Sat Apr 18 09:04:42 2020 +0000 @@ -1413,7 +1413,7 @@ ;; Move to end of logical line (as it will be after the change, or as it ;; was before unescaping a NL.) - (re-search-forward "\\(\\\\\\(.\\|\n\\)\\|[^\\\n\r]\\)*" nil t) + (re-search-forward "\\(?:\\\\\\(?:.\\|\n\\)\\|[^\\\n\r]\\)*" nil t) ;; We're at an EOLL or point-max. (if (equal (c-get-char-property (point) 'syntax-table) '(15)) (if (memq (char-after) '(?\n ?\r)) @@ -1521,7 +1521,7 @@ (progn (goto-char (min (1+ end) ; 1+, in case a NL has become escaped. (point-max))) - (re-search-forward "\\(\\\\\\(.\\|\n\\)\\|[^\\\n\r]\\)*" + (re-search-forward "\\(?:\\\\\\(?:.\\|\n\\)\\|[^\\\n\r]\\)*" nil t) (point)) c-new-END)) @@ -1602,8 +1602,8 @@ (c-beginning-of-macro)))) (goto-char (1+ end)) ; After the \ ;; Search forward for EOLL - (setq lim (re-search-forward "\\(\\\\\\(.\\|\n\\)\\|[^\\\n\r]\\)*" - nil t)) + (setq lim (re-search-forward "\\(?:\\\\\\(?:.\\|\n\\)\\|[^\\\n\r]\\)*" + nil t)) (goto-char (1+ end)) (when (c-search-forward-char-property-with-value-on-char 'syntax-table '(15) ?\" lim) > Nick -- Alan Mackenzie (Nuremberg, Germany). From debbugs-submit-bounces@debbugs.gnu.org Wed Apr 22 01:08:01 2020 Received: (at 40052) by debbugs.gnu.org; 22 Apr 2020 05:08:01 +0000 Received: from localhost ([127.0.0.1]:51066 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jR7c8-0008PZ-NI for submit@debbugs.gnu.org; Wed, 22 Apr 2020 01:08:01 -0400 Received: from foss.arm.com ([217.140.110.172]:54922) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jR6jQ-0006sD-JN for 40052@debbugs.gnu.org; Wed, 22 Apr 2020 00:11:32 -0400 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 88CD530E; Tue, 21 Apr 2020 21:11:22 -0700 (PDT) Received: from nicgas01-03-arm-vm (nicgas01-03-arm-vm.shanghai.arm.com [10.169.139.52]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 97EA73F6CF; Tue, 21 Apr 2020 21:11:21 -0700 (PDT) References: <851rpw3750.fsf@arm.com> <20200416194814.GB5328@ACM> <853692snei.fsf@arm.com> <20200418093936.GA5702@ACM> User-agent: mu4e 1.2.0; emacs 27.0.91 From: Nick Gasson To: Alan Mackenzie Subject: Re: bug#40052: CC Mode 5.34 (C++//l); cc-mode hangs fontifying src/hotspot/share/runtime/globals.hpp in OpenJDK In-reply-to: <20200418093936.GA5702@ACM> Date: Wed, 22 Apr 2020 12:11:18 +0800 Message-ID: <85a734f9cp.fsf@arm.com> MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 40052 X-Mailman-Approved-At: Wed, 22 Apr 2020 01:08:00 -0400 Cc: "40052@debbugs.gnu.org" <40052@debbugs.gnu.org> X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > > OK, thanks. I've had another look into CC Mode, and found a bug in the > handling of its macro cache. It isn't saving the position of the end of > the macro, hence is doing too much scanning. > > I've fixed this in the following patch, which gives another factor of ~5 > speedup in the scrolling. Please remove the previous patch before > applying this new one. > > However, the scrolling still gets sluggish towards the end of > globals.hpp. This is because CC Mode's function which goes back to the > beginning of a statement is scanning back over the entire macro. It > basically looks for semicolons or closing braces (at top level) and > there are none in the huge macro. I tried creating a variant of > globals.hpp, where each "function call" was terminated by a semicolon. > The sluggishness was entirely fixed. This is largely theoretical, as I > assume you have no control over the contents of globals.hpp. > > Anyhow, here is the patch. Please let me know if there are still > problems with it. Thanks! > Hi Alan, I tried the second patch and it's working well. Thanks again. There was some discussion of getting rid of the giant macro on the OpenJDK mailing list. That's when I realised several other people had the same problem opening that file in Emacs. https://mail.openjdk.java.net/pipermail/hotspot-dev/2020-March/041088.html Nick From debbugs-submit-bounces@debbugs.gnu.org Fri May 15 15:44:55 2020 Received: (at 40052-done) by debbugs.gnu.org; 15 May 2020 19:44:55 +0000 Received: from localhost ([127.0.0.1]:38812 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jZgGM-0007ff-Mn for submit@debbugs.gnu.org; Fri, 15 May 2020 15:44:54 -0400 Received: from colin.muc.de ([193.149.48.1]:36609 helo=mail.muc.de) by debbugs.gnu.org with smtp (Exim 4.84_2) (envelope-from ) id 1jZgGL-0007fV-2T for 40052-done@debbugs.gnu.org; Fri, 15 May 2020 15:44:53 -0400 Received: (qmail 68319 invoked by uid 3782); 15 May 2020 19:44:50 -0000 Received: from acm.muc.de (p4FE15B39.dip0.t-ipconnect.de [79.225.91.57]) by localhost.muc.de (tmda-ofmipd) with ESMTP; Fri, 15 May 2020 21:44:50 +0200 Received: (qmail 21947 invoked by uid 1000); 15 May 2020 19:44:50 -0000 Date: Fri, 15 May 2020 19:44:50 +0000 To: Nick Gasson Subject: Re: bug#40052: CC Mode 5.34 (C++//l); cc-mode hangs fontifying src/hotspot/share/runtime/globals.hpp in OpenJDK Message-ID: <20200515194450.GA9457@ACM> References: <851rpw3750.fsf@arm.com> <20200416194814.GB5328@ACM> <853692snei.fsf@arm.com> <20200418093936.GA5702@ACM> <85a734f9cp.fsf@arm.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <85a734f9cp.fsf@arm.com> X-Delivery-Agent: TMDA/1.1.12 (Macallan) From: Alan Mackenzie X-Primary-Address: acm@muc.de X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 40052-done Cc: 40052-done@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Hello, Nick. On Wed, Apr 22, 2020 at 12:11:18 +0800, Nick Gasson wrote: > > OK, thanks. I've had another look into CC Mode, and found a bug in the > > handling of its macro cache. It isn't saving the position of the end of > > the macro, hence is doing too much scanning. > > I've fixed this in the following patch, which gives another factor of ~5 > > speedup in the scrolling. Please remove the previous patch before > > applying this new one. > > However, the scrolling still gets sluggish towards the end of > > globals.hpp. This is because CC Mode's function which goes back to the > > beginning of a statement is scanning back over the entire macro. It > > basically looks for semicolons or closing braces (at top level) and > > there are none in the huge macro. I tried creating a variant of > > globals.hpp, where each "function call" was terminated by a semicolon. > > The sluggishness was entirely fixed. This is largely theoretical, as I > > assume you have no control over the contents of globals.hpp. > > Anyhow, here is the patch. Please let me know if there are still > > problems with it. Thanks! > Hi Alan, > I tried the second patch and it's working well. Thanks again. Thanks for the testing. I've finally got around to committing it into Emacs, but sadly the cut-off for Emacs 27 has long past, so the fix won't be seeing the light of day until Emacs 28 (or the next stand-alone CC Mode, of course). > There was some discussion of getting rid of the giant macro on the > OpenJDK mailing list. That's when I realised several other people had > the same problem opening that file in Emacs. > https://mail.openjdk.java.net/pipermail/hotspot-dev/2020-March/041088.html Well, without that macro, a bug might have remained unfixed for a long(er) time, but if it were up to me, I'd want to reduce the size of that macro, too. ;-) > Nick -- Alan Mackenzie (Nuremberg, Germany). From debbugs-submit-bounces@debbugs.gnu.org Fri May 15 17:07:40 2020 Received: (at 40052) by debbugs.gnu.org; 15 May 2020 21:07:40 +0000 Received: from localhost ([127.0.0.1]:38948 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jZhYS-0001E3-Lh for submit@debbugs.gnu.org; Fri, 15 May 2020 17:07:40 -0400 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:61691) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jZhYQ-0001Dn-Id for 40052@debbugs.gnu.org; Fri, 15 May 2020 17:07:39 -0400 Received: from pmg1.iro.umontreal.ca (localhost.localdomain [127.0.0.1]) by pmg1.iro.umontreal.ca (Proxmox) with ESMTP id 0EAE710035B; Fri, 15 May 2020 17:07:33 -0400 (EDT) Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg1.iro.umontreal.ca (Proxmox) with ESMTP id D03401004AF; Fri, 15 May 2020 17:07:30 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1589576850; bh=pHfiEawDjiTzL2NJsRGN02GlzUDfQ7dcWPrF2TdKzTQ=; h=From:To:Cc:Subject:References:Date:In-Reply-To:From; b=ZI8/O8hCVOQskEojWwUrxTzElEqqJQOUjSFxGPQWM+EiwMhex7PzzCZNQu7uHzbu9 79pKHFrfJG7Mzbwrpi0dNsUPNq8JwqjmNfWAFXit9CxyjmUSlMWKXFZVmC0jL1dn2I TghEKSHKgfMx8nMXyVKnFPXvrqwKyVx2r7OO3kgLqwCe6NfbRUCQ960mwhA8LqVLsq 69QYTrR1GuHJ5hIzBylDhvtOG9jFlcRKTpdD0VIgZtR8D4F1/lLB546urxC6O7zoss 34oJUgS0A+ufiqJV+2naGkZJYFCiDqLym+GjbPHD+TPXcED8cdKA5fMWzxBijuj1mt Xic2RvyPEjDcA== Received: from alfajor (unknown [216.154.3.202]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id 73CDF12027A; Fri, 15 May 2020 17:07:30 -0400 (EDT) From: Stefan Monnier To: Alan Mackenzie Subject: Re: bug#40052: CC Mode 5.34 (C++//l); cc-mode hangs fontifying src/hotspot/share/runtime/globals.hpp in OpenJDK Message-ID: References: <851rpw3750.fsf@arm.com> <20200416194814.GB5328@ACM> Date: Fri, 15 May 2020 17:07:28 -0400 In-Reply-To: <20200416194814.GB5328@ACM> (Alan Mackenzie's message of "Thu, 16 Apr 2020 19:48:14 +0000") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL -0.094 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain X-SPAM-LEVEL: X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 40052 Cc: Nick Gasson , 40052@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) [ Just a side, question, really. ] Hi Alan, > This hits a bug in Emacs where it allows the backward search operation > for a comment start, when point is at the beginning of the line > following an escaped newline. Such a position can never be an end of a > comment in C++. This problems seems to apply to `c-mode` as much as to `c++-mode`, so I took a quick look to see if it also affects `sm-c-mode` (tested with Emacs-26) and it seems not to be the case. (At least, scrolling and editing this file in `sm-c-mode` is not unusably slow (tho it is a bit sluggish, especially editing, which is slowed down by `sm-c-mode`s feature that re-aligns the trailing backslashes after each edit)). > The fix to Emacs won't actually be getting released until Emacs 28, so > in the meantime, please try the following patch. The files to patch are This makes it sound like it's related to a bug in the C code. Is it something you already fixed? Is it the new `comment-end-can-be-escaped` thingy? I understand that it could speed things up here, but at the same time "LFs which don't end a comment" are the rule rather than the exception, so if it's a performance problem for those backslash-escaped LFs, why doesn't it also affect all the other LFs? Stefan From debbugs-submit-bounces@debbugs.gnu.org Sat May 16 05:07:57 2020 Received: (at 40052) by debbugs.gnu.org; 16 May 2020 09:07:58 +0000 Received: from localhost ([127.0.0.1]:39765 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jZsnV-0004Iv-KY for submit@debbugs.gnu.org; Sat, 16 May 2020 05:07:57 -0400 Received: from colin.muc.de ([193.149.48.1]:14857 helo=mail.muc.de) by debbugs.gnu.org with smtp (Exim 4.84_2) (envelope-from ) id 1jZsnT-0004Im-Kh for 40052@debbugs.gnu.org; Sat, 16 May 2020 05:07:56 -0400 Received: (qmail 47638 invoked by uid 3782); 16 May 2020 09:07:54 -0000 Received: from acm.muc.de (p2e5d56ba.dip0.t-ipconnect.de [46.93.86.186]) by localhost.muc.de (tmda-ofmipd) with ESMTP; Sat, 16 May 2020 11:07:53 +0200 Received: (qmail 5477 invoked by uid 1000); 16 May 2020 09:07:53 -0000 Date: Sat, 16 May 2020 09:07:53 +0000 To: Stefan Monnier Subject: Re: bug#40052: CC Mode 5.34 (C++//l); cc-mode hangs fontifying src/hotspot/share/runtime/globals.hpp in OpenJDK Message-ID: <20200516090753.GA4150@ACM> References: <851rpw3750.fsf@arm.com> <20200416194814.GB5328@ACM> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: X-Delivery-Agent: TMDA/1.1.12 (Macallan) From: Alan Mackenzie X-Primary-Address: acm@muc.de X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 40052 Cc: Nick Gasson , 40052@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Hello, Stefan. On Fri, May 15, 2020 at 17:07:28 -0400, Stefan Monnier wrote: > [ Just a side, question, really. ] > Hi Alan, > > This hits a bug in Emacs where it allows the backward search operation > > for a comment start, when point is at the beginning of the line > > following an escaped newline. Such a position can never be an end of a > > comment in C++. > This problems seems to apply to `c-mode` as much as to `c++-mode`, so > I took a quick look to see if it also affects `sm-c-mode` (tested with > Emacs-26) and it seems not to be the case. > (At least, scrolling and editing this file in `sm-c-mode` is not > unusably slow (tho it is a bit sluggish, especially editing, which is > slowed down by `sm-c-mode`s feature that re-aligns the trailing > backslashes after each edit)). > > The fix to Emacs won't actually be getting released until Emacs 28, so > > in the meantime, please try the following patch. The files to patch are > This makes it sound like it's related to a bug in the C code. > Is it something you already fixed? Is it the new > `comment-end-can-be-escaped` thingy? comment-end-can-be-escaped was actually introduced in Emacs 25, so I think it counts as "fairly new" rather than "new". ;-) It was a bug in syntax.c in the use of comment-end-can-be-escaped, and got fixed by commit 22ba04742072098be60ec223ed2e97fa9a09b045, Date: Thu Apr 16 17:01:14 2020 +0000, "(forward-comment -n): escaped newline is sometimes NOT end of comment". The code now tests that flag in the backward direction as well as the forward direction. > I understand that it could speed things up here, but at the same time > "LFs which don't end a comment" are the rule rather than the exception, > so if it's a performance problem for those backslash-escaped LFs, why > doesn't it also affect all the other LFs? What was happening was backward_comment was searching back over the entire long macro for the beginning of a comment, and was doing so repeatedly. It might be interesting to try sm-c-mode on Nick Gasson's file without the above patch to syntax.c. > Stefan -- Alan Mackenzie (Nuremberg, Germany). From debbugs-submit-bounces@debbugs.gnu.org Sat May 16 09:22:41 2020 Received: (at 40052) by debbugs.gnu.org; 16 May 2020 13:22:41 +0000 Received: from localhost ([127.0.0.1]:40028 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jZwm1-0004W9-KE for submit@debbugs.gnu.org; Sat, 16 May 2020 09:22:41 -0400 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:2459) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jZwm0-0004Vu-9N for 40052@debbugs.gnu.org; Sat, 16 May 2020 09:22:40 -0400 Received: from pmg3.iro.umontreal.ca (localhost [127.0.0.1]) by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id A80584402EA; Sat, 16 May 2020 09:22:34 -0400 (EDT) Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id 3DBE8440287; Sat, 16 May 2020 09:22:33 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1589635353; bh=OxKGWAKaxs/QkvWnBc9PhYB3gwG57J39D8XtlPyfQeY=; h=From:To:Cc:Subject:References:Date:In-Reply-To:From; b=TUU/wnbFl3/1sdi5s5u8IpUncoWcJx8s0/f9EkV0eaVLWKXtQTUTeIMqzgtjJVsMC Id3FxXL0lr0zxoowJVkexLfAyYvAfw7Z7WRxeaCwLrtkPS9R40T3lLSWEM40ydjWMN 2EQW0c4YDDS7cXj1Ws8m+AdeDhF1BLM/wyDxsaEk3v9xwoksGOdevHydZAM7x20413 Vk+jcsbG5IXcUQVdPfoOS95J9bFXbinobwonRTouVIpcUMwhSUBVdHvbSxsymIbQtb iR9zfR98uIr2Dm33vrCephwDwl5CTGPoxWiUQN6+VvcmAiHUcrNa8muBuTImAUbYLD /vWa+/DGraSKA== Received: from alfajor (unknown [216.154.27.250]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id CA84B1206C2; Sat, 16 May 2020 09:22:32 -0400 (EDT) From: Stefan Monnier To: Alan Mackenzie Subject: Re: bug#40052: CC Mode 5.34 (C++//l); cc-mode hangs fontifying src/hotspot/share/runtime/globals.hpp in OpenJDK Message-ID: References: <851rpw3750.fsf@arm.com> <20200416194814.GB5328@ACM> <20200516090753.GA4150@ACM> Date: Sat, 16 May 2020 09:22:31 -0400 In-Reply-To: <20200516090753.GA4150@ACM> (Alan Mackenzie's message of "Sat, 16 May 2020 09:07:53 +0000") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL -0.088 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain X-SPAM-LEVEL: X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 40052 Cc: Nick Gasson , 40052@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > What was happening was backward_comment was searching back over the > entire long macro for the beginning of a comment, and was doing so > repeatedly. It might be interesting to try sm-c-mode on Nick Gasson's > file without the above patch to syntax.c. That's what I did, that why I mentioned that I tested it with Emacs-26. Stefan From unknown Sun Aug 17 10:17:40 2025 Received: (at fakecontrol) by fakecontrolmessage; To: internal_control@debbugs.gnu.org From: Debbugs Internal Request Subject: Internal Control Message-Id: bug archived. Date: Sun, 14 Jun 2020 11:24:06 +0000 User-Agent: Fakemail v42.6.9 # This is a fake control message. # # The action: # bug archived. thanks # This fakemail brought to you by your local debbugs # administrator