From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED!not-for-mail From: Alan Mackenzie Newsgroups: gmane.emacs.devel Subject: Re: beginning-of-defun-comments bug [was: Re: 26.0.90: mark-defun problem in c-mode] Date: Wed, 3 Jan 2018 16:24:03 +0000 Message-ID: <20180103162403.GB5435@ACM> References: <834lo8fqyi.fsf@gnu.org> <20171230103432.GB10623@ACM> <20171230120136.GD10623@ACM> <83shbse5rs.fsf@gnu.org> <20171230130529.GE10623@ACM> <87incjh7ef.fsf@mbork.pl> NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Trace: blaine.gmane.org 1514996836 17221 195.159.176.226 (3 Jan 2018 16:27:16 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Wed, 3 Jan 2018 16:27:16 +0000 (UTC) User-Agent: Mutt/1.7.2 (2016-11-26) Cc: Eli Zaretskii , ccsmile2008@outlook.com, npostavs@gmail.com, emacs-devel@gnu.org To: Marcin Borkowski Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Wed Jan 03 17:27:11 2018 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by blaine.gmane.org with esmtp (Exim 4.84_2) (envelope-from ) id 1eWlsj-00041r-Ne for ged-emacs-devel@m.gmane.org; Wed, 03 Jan 2018 17:27:09 +0100 Original-Received: from localhost ([::1]:57160 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eWluj-0007Pk-1a for ged-emacs-devel@m.gmane.org; Wed, 03 Jan 2018 11:29:13 -0500 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:48834) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eWlti-0007LC-O7 for emacs-devel@gnu.org; Wed, 03 Jan 2018 11:28:15 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eWltf-0008OU-JL for emacs-devel@gnu.org; Wed, 03 Jan 2018 11:28:10 -0500 Original-Received: from colin.muc.de ([193.149.48.1]:12209 helo=mail.muc.de) by eggs.gnu.org with smtp (Exim 4.71) (envelope-from ) id 1eWltf-0008Mw-7z for emacs-devel@gnu.org; Wed, 03 Jan 2018 11:28:07 -0500 Original-Received: (qmail 12695 invoked by uid 3782); 3 Jan 2018 16:28:06 -0000 Original-Received: from acm.muc.de (p548C73F3.dip0.t-ipconnect.de [84.140.115.243]) by colin.muc.de (tmda-ofmipd) with ESMTP; Wed, 03 Jan 2018 17:28:04 +0100 Original-Received: (qmail 22892 invoked by uid 1000); 3 Jan 2018 16:24:03 -0000 Content-Disposition: inline In-Reply-To: <87incjh7ef.fsf@mbork.pl> X-Delivery-Agent: TMDA/1.1.12 (Macallan) X-Primary-Address: acm@muc.de X-detected-operating-system: by eggs.gnu.org: FreeBSD 9.x [fuzzy] X-Received-From: 193.149.48.1 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Original-Sender: "Emacs-devel" Xref: news.gmane.org gmane.emacs.devel:221553 Archived-At: Hello, Marcin. On Wed, Jan 03, 2018 at 05:51:35 +0100, Marcin Borkowski wrote: > On 2017-12-30, at 14:05, Alan Mackenzie wrote: > > On Sat, Dec 30, 2017 at 14:53:27 +0200, Eli Zaretskii wrote: > >> > Date: Sat, 30 Dec 2017 12:01:36 +0000 > >> > Cc: emacs-devel@gnu.org, zhang cc , > >> > Noam Postavsky > >> > From: Alan Mackenzie > >> > > I see the error, with point anywhere in the body of the second function. > >> > > Critical seems to be there being no blank line between the functions. > >> > > I think there's a bug in beginning-of-defun-comments, which I'm in the > >> > > middle of edebugging. It moves point into the first function. > >> > beginning-of-defun-comments has a bug. On doing M-x > >> > beginning-of-defun-comments from the inside of a function, when there's > >> > no blank lines between it and the previous function, point ends up > >> > inside that previous function, not at the comments which may separate > >> > them. > >> > Perhaps this bug should be fixed before the next Emacs-26 pretest. > >> How old is this problem? It looks like it's new in Emacs 26? If so, > >> we should try fixing it on the release branch. > > beginning-of-defun-comments came into existence on 2017-03-31, so this > > problem is definitely new in Emacs 26. > Yep, it was committed by me. Sorry for the mess. And I thought I had > tested that thoroughly... These things are tricky to test properly. ;-) > > I've diagnosed the bug. At one place, it is necessary to scan a line of > > text from BOL to detect any non-comment/non-space character. The > > current code tries to do this by using parse-partial-sexp with the > > fourth argument STOPBEFORE non-nil. > > This STOPBEFORE causes the scanning to stop at any character which > > begins a sexp. A closing brace doesn't fit into this category. The > > scan therefore reaches EOL, and the code therefore falsely assumes there > > are no non-syntactic-ws characters on that line. > > I'm sure I can fix this today. > Any success? If not, can I help in any way? (At the very least, > I could write some more tests to cover this case.) Sorry, I got distracted by the turn of the year, and one or two other things. Please try this: diff --git a/lisp/emacs-lisp/lisp.el b/lisp/emacs-lisp/lisp.el index 6952ef4cf4..28605cd35c 100644 --- a/lisp/emacs-lisp/lisp.el +++ b/lisp/emacs-lisp/lisp.el @@ -405,12 +405,13 @@ beginning-of-defun--in-emptyish-line-p ;; See https://lists.gnu.org/r/help-gnu-emacs/2016-08/msg00141.html (save-excursion (forward-line 0) - (< (line-end-position) - (let ((ppss (syntax-ppss))) - (when (nth 4 ppss) - (goto-char (nth 8 ppss))) - (forward-comment (point-max)) - (point))))) + (let ((ppss (syntax-ppss))) + (and (null (nth 3 ppss)) + (< (line-end-position) + (progn (when (nth 4 ppss) + (goto-char (nth 8 ppss))) + (forward-comment (point-max)) + (point))))))) (defun beginning-of-defun-comments (&optional arg) "Move to the beginning of ARGth defun, including comments." @@ -428,10 +429,7 @@ beginning-of-defun-comments (progn (skip-syntax-backward "-" (line-beginning-position)) (not (bolp))) ; Check for blank line. - (progn (parse-partial-sexp - (line-beginning-position) (line-end-position) - nil t (syntax-ppss (line-beginning-position))) - (eolp))))) ; Check for non-comment text. + (beginning-of-defun--in-emptyish-line-p)))) ; Check for non-comment text. (forward-line (if first-line-p 0 1)))) (defvar end-of-defun-function > Best, > -- > Marcin Borkowski -- Alan Mackenzie (Nuremberg, Germany).