GNU bug report logs - #64391
30.0.50; buffer narrowing slowdown regression in emacs 29

Previous Next

Packages: emacs, gnus;

Reported by: Andrew Cohen <acohen <at> ust.hk>

Date: Sat, 1 Jul 2023 00:21:02 UTC

Severity: normal

Found in version 30.0.50

Full log


Message #131 received at 64391 <at> debbugs.gnu.org (full text, mbox):

From: Gregory Heytings <gregory <at> heytings.org>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: acohen <at> ust.hk, 64391 <at> debbugs.gnu.org, mattias.engdegard <at> gmail.com,
 monnier <at> iro.umontreal.ca, bugs <at> gnus.org
Subject: Re: bug#64391: buffer narrowing slowdown regression in emacs 29
Date: Sun, 09 Jul 2023 18:03:02 +0000
>> On a second thought, I believe its better to not replace LABEL with 
>> TAG, because that would mean changing that word in many places, 
>> including places in which such a change would make the text less 
>> understandable, e.g. the docstring of narrow-to-region:
>
> LABEL implies a string or a symbol, whereas :label can accept "any 
> object that is not nil".  The description of 'catch' uses TAG.
>

I know, and I agree that in principle TAG would be better.  However all 
the code and documentation was written with the word "label", and although 
using a non-symbol is possible, LABEL is intended to be a symbol, not an 
arbitrary Lisp object.  So perhaps the best thing to do would be this:

diff --git a/lisp/subr.el b/lisp/subr.el
index 0b397b7bebf..c2110cb4bb2 100644
--- a/lisp/subr.el
+++ b/lisp/subr.el
@@ -3972,7 +3972,8 @@ with-restriction

 \(fn START END [:label LABEL] BODY)"
   (declare (indent 2) (debug t))
-  (if (eq (car rest) :label)
+  (if (and (eq (car rest) :label)
+           (symbolp (cadr rest)))
       `(internal--with-restriction ,start ,end (lambda () ,@(cddr rest))
                                  ,(cadr rest))
     `(internal--with-restriction ,start ,end (lambda () ,@rest))))

>> --- a/doc/lispref/positions.texi
>> +++ b/doc/lispref/positions.texi
>> @@ -1169,9 +1169,10 @@ Narrowing
>>
>>   @cindex labeled narrowing
>>   @cindex labeled restriction
>> -When the optional argument @var{label}, a symbol, is present, the
>> -narrowing is @dfn{labeled}.  A labeled narrowing differs from a
>> -non-labeled one in several ways:
>> +When the optional argument @var{label}, which is evaluated to get the
>> +label to use and must not be @code{nil},
>
> What "must not be nil": the label or the result of its evaluation?
>

The result of the evaluation of the label argument.  I don't know how to 
make this clearer.





This bug report was last modified 1 year and 342 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.