emacs-devel
[Top][All Lists]
Advanced

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

Re: scheme.el bug & fix


From: Kim F. Storm
Subject: Re: scheme.el bug & fix
Date: 17 Feb 2003 11:19:05 +0100
User-agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.3.50

Luc Teirlinck <address@hidden> writes:

> Stefan Monnier wrote:
> 
>    It turns out the problem is that
> 
>      (with-syntax-table st (modify-syntex-entry foo bar))
> 
>    does not modify `st' because `with-syntax-table' does not use `st'
>    but a copy of it.  Actually it's even documented in the docstring.
>    This sounds silly.  Does anybody have an idea why it is defined that way ?
>    If not, any objection the patch below which should also improve
>    (very marginally) the performance of Emacs ?
> 
> Are you sure that you are not going to break plenty of existing code
> this way?

I just checked all 28 occurrences of with-syntax-table and only 
the following would break:

autoconf.el: autoconf-current-defun-function

All other occurrences don't modify the syntax table *), so the copy
operation is indeed wasteful in the normal case.  antlr-mode.el and
cc-defs.el even define their own versions of the macro, and they don't
copy the syntax table either.

*) except for scheme.el which expects to be able to modify the syntax
   table, so it would be fixed rather than broken by the change...

Maybe we should make a new macro with-copy-of-syntax-table which does
copy the table, and change the original macro not to copy.

> Is there any reason why scheme.el can not possibly define its syntax
> table in a more standard and more natural way?  I do not believe that 
> with-syntax-table was meant to be used the way scheme .el uses it.

But if you e.g. use with-current-buffer, you are working on that
buffer, not a copy of it...   So I find the "copy of" behaviour
quite surprising.

> (I believe it is meant to very temporarily change the syntax table of
> the current buffer, not to be used to actually define syntax tables.)

But it is primarily used to temporarily *use* an existing syntax table, 
not temporarily *modify* a syntax table.

-- 
Kim F. Storm <address@hidden> http://www.cua.dk





reply via email to

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