From: Alan Mackenzie <acm@muc.de>
To: martin rudalics <rudalics@gmx.at>
Cc: 16526-done@debbugs.gnu.org
Subject: bug#16526: 24.3.50; scroll-conservatively & c-mode regression
Date: Sun, 29 Jun 2014 17:49:53 +0000 [thread overview]
Message-ID: <20140629174953.GE2948@acm.acm> (raw)
In-Reply-To: <53B03876.9070307@gmx.at>
Hi, Martin.
On Sun, Jun 29, 2014 at 06:01:58PM +0200, martin rudalics wrote:
> > scan-lists, a primitive, must be utterly robust. syntax-ppss is too
> > fragile to be used here without a lot of hardening.
> > syntax-ppss's cache is rendered invalid at any operation which changes
> > the syntax table (e.g. `modify-syntax-entry'), or changes to a different
> > syntax table (e.g. `with-syntax-table'), or when a syntax-table text
> > property/overlay is applied to the buffer, or even when a symbol's
> > property list is changed when that symbol is the value of a category
> > text property. CC Mode does all these things, and does all of them
> > apart from the first during run time, not merely at mode initialisation.
> How can any of these affect the cached start position of a defun before
> the position where the buffer contents were changed?
In this context, the "start of defun" means an outermost paren of some
sort, nothing more, nothing less. Any of the changes above could disturb
this: For example, adding an open-paren syntax-table property to a
character which thereby becomes the BOD. Or temporarily switching to the
Pascal syntax table, where "{" and "}" are comment brackets. I'm not
saying that something like this will happen on a regular basis, but it's
definitely possible.
> > Also, the syntax-ppss cache's functioning is dependent upon
> > before-change-functions, which can be bound to nil by any program at any
> > time.
> There's an appropriate advice what to do in such case.
Primitive functions are deaf to advice. You're surely not suggesting
that a primitive like scan-lists should become vulnerable to high-level
programmers failing to follow advice? If this were to be done,
scan-lists would only work most of the time, not all of the time. This
would be catastrophic for Emacs.
> > If one were to harden syntax-ppss against all these things, one would
> > probably end up calculating the cache from scratch every time, in
> > effect.
> Can you give an example?
An example of what? What I meant was, each time you used syntax-ppss
from scan-lists, you'd somehow need to be sure that a syntax-table entry
hadn't been changed, etc. I can't really see how this would be possible.
You'd somehow need to handle constructs like
(with-syntax-table c++-template-syntax-table
....
(scan-lists (point) -1 1)
....)
.
> > scan-lists is a primitive, and must function correctly regardless of any
> > trickery which might be played on it.
> You can easily play trickery on `scan-lists' if you start it within a
> comment or string.
No. scan-lists works according to its spec even if you start it inside a
comment/string. It's effect is well defined. For example if you write
parens inside a comment, C-M-n and friends do the right thing there.
> So `syntax-ppss' is at least as primitive as `scan-lists' (especially
> when the latter is used with negative COUNT).
Sorry, but that's utter rubbish. syntax-ppss is a high-level convenience
function, which if used carefully by the lisp programmer gives correct
results.
By contrast, scan-lists does precisely what it says, no ifs and no buts.
Even with a negative COUNT.
> Anyway, IIUC this implies that CC mode can't work with `syntax-ppss' at
> all. If that is true, then `open-paren-in-column-0-is-defun-start' was
> indeed the last resort that made editing larger files possible.
CC Mode doesn't use syntax-ppss, but I can't see how that's implied by
anything we've been discussing so far. It does maintain its own caches
which fulfil the same purpose. For example, there's a syntactic cache
which treats preprocessor constructs as comments, something syntax-ppss
can't do.
open-..-start being t is a kludge which works for certain types of files
and situations and not others. It was causing hard to fathom errors in
CC Mode, particularly C and C++.
Do I take it you're not keen on enhancing find_defun_start in the manner
I suggested?
> martin
--
Alan Mackenzie (Nuremberg, Germany).
next prev parent reply other threads:[~2014-06-29 17:49 UTC|newest]
Thread overview: 93+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <mailman.12613.1390467262.10748.bug-gnu-emacs@gnu.org>
2014-01-23 8:53 ` bug#16526: 24.3.50; scroll-conservatively & c-mode regression martin rudalics
2014-01-24 15:45 ` martin rudalics
2014-01-24 20:48 ` Alan Mackenzie
[not found] ` <lbujij$1scv$1@colin.muc.de>
2014-01-25 3:50 ` Juanma Barranquero
2014-01-25 9:23 ` martin rudalics
[not found] ` <52E38286.1050306@gmx.at>
2014-01-25 10:30 ` Eli Zaretskii
2014-01-25 14:58 ` martin rudalics
[not found] ` <52E3D131.2090705@gmx.at>
2014-01-25 16:30 ` Eli Zaretskii
2014-01-25 16:48 ` martin rudalics
2014-01-25 17:29 ` Eli Zaretskii
2014-01-25 18:25 ` martin rudalics
[not found] ` <52E4019C.5080905@gmx.at>
2014-01-25 18:31 ` Eli Zaretskii
2014-01-25 18:40 ` Eli Zaretskii
2014-01-26 11:20 ` martin rudalics
[not found] ` <52E4EF61.3050404@gmx.at>
2014-01-26 17:20 ` Eli Zaretskii
2014-01-26 20:43 ` Alan Mackenzie
2014-01-27 8:21 ` martin rudalics
[not found] ` <52E61704.6050807@gmx.at>
2014-01-27 14:49 ` Stefan Monnier
[not found] ` <jwvvbx5fq2b.fsf-monnier+emacsbugs@gnu.org>
2014-01-27 17:25 ` martin rudalics
[not found] ` <52E69695.5040703@gmx.at>
2014-01-28 0:16 ` Stefan Monnier
2014-01-29 22:36 ` Alan Mackenzie
[not found] ` <20140129223626.GD3092@acm.acm>
2014-01-30 7:37 ` martin rudalics
2014-01-30 13:47 ` martin rudalics
[not found] ` <52EA57D6.5080403@gmx.at>
2014-01-30 17:15 ` Eli Zaretskii
2014-01-30 18:58 ` martin rudalics
[not found] ` <52EAA0C9.1090000@gmx.at>
2014-02-01 10:41 ` Eli Zaretskii
2014-02-02 13:18 ` martin rudalics
2014-02-02 17:40 ` Alan Mackenzie
[not found] ` <20140202174050.GA5365@acm.acm>
2014-02-02 18:07 ` Eli Zaretskii
2014-02-02 19:20 ` Alan Mackenzie
2014-02-02 20:53 ` Eli Zaretskii
2014-02-05 23:00 ` Alan Mackenzie
2014-02-06 6:01 ` Eli Zaretskii
2014-06-22 16:49 ` Eli Zaretskii
2014-06-22 19:32 ` Alan Mackenzie
2014-06-22 20:04 ` Eli Zaretskii
2014-06-25 21:32 ` Alan Mackenzie
2014-06-26 2:51 ` Stefan Monnier
2014-06-27 20:34 ` Alan Mackenzie
2014-06-27 22:33 ` Stefan Monnier
2014-06-27 22:54 ` Stefan Monnier
[not found] ` <jwv8uoim0bm.fsf-monnier+emacsbugs@gnu.org>
2014-06-28 13:00 ` Alan Mackenzie
2014-06-28 14:00 ` martin rudalics
2014-06-28 14:34 ` Stefan Monnier
[not found] ` <53AECA88.7010401@gmx.at>
2014-06-28 14:55 ` Alan Mackenzie
2014-06-28 15:12 ` Eli Zaretskii
2014-06-28 16:30 ` Alan Mackenzie
2014-06-29 8:44 ` martin rudalics
2014-06-29 9:17 ` Alan Mackenzie
2014-06-29 10:06 ` martin rudalics
[not found] ` <53AFE536.7010407@gmx.at>
2014-06-29 12:48 ` Alan Mackenzie
2014-06-29 14:18 ` martin rudalics
2014-06-29 14:41 ` Alan Mackenzie
[not found] ` <20140629144151.GD2948@acm.acm>
2014-06-29 16:01 ` martin rudalics
[not found] ` <53B03876.9070307@gmx.at>
2014-06-29 17:49 ` Alan Mackenzie [this message]
2014-06-30 7:55 ` martin rudalics
2014-06-30 13:48 ` Stefan Monnier
[not found] ` <53B117D6.1050306@gmx.at>
2014-07-02 20:05 ` Alan Mackenzie
[not found] ` <20140702200522.GB3823@acm.acm>
2014-07-03 1:57 ` Stefan Monnier
2014-07-03 8:40 ` martin rudalics
[not found] ` <jwv61jf2owy.fsf-monnier+emacsbugs@gnu.org>
2014-07-03 14:59 ` Stefan Monnier
2014-07-04 18:27 ` Alan Mackenzie
2014-07-04 19:11 ` Stefan Monnier
2014-07-04 19:43 ` Stefan Monnier
2014-07-05 2:23 ` Stefan Monnier
2014-07-06 13:48 ` Alan Mackenzie
2014-07-07 1:52 ` Stefan Monnier
2014-07-07 7:07 ` martin rudalics
[not found] ` <jwvsimevsvz.fsf-monnier+emacsbugs@gnu.org>
2014-07-07 7:07 ` martin rudalics
2014-07-05 20:25 ` Alan Mackenzie
2014-07-05 23:06 ` Stefan Monnier
2014-07-04 19:29 ` Alan Mackenzie
2014-07-05 1:52 ` Stefan Monnier
2014-07-05 7:47 ` Alan Mackenzie
2014-06-29 22:14 ` Stefan Monnier
[not found] ` <jwvionjjrn7.fsf-monnier+emacsbugs@gnu.org>
2014-07-02 18:40 ` Alan Mackenzie
[not found] ` <20140702184013.GA3823@acm.acm>
2014-07-02 19:40 ` Stefan Monnier
[not found] ` <jwvsimpksv1.fsf-monnier+emacsbugs@gnu.org>
2014-06-28 17:33 ` Alan Mackenzie
[not found] ` <20140628173334.GB2632@acm.acm>
2014-06-29 21:39 ` Stefan Monnier
2014-01-29 21:52 ` Alan Mackenzie
2014-01-30 17:16 ` Eli Zaretskii
2014-01-31 20:00 ` Alan Mackenzie
2014-01-31 20:16 ` Eli Zaretskii
2014-01-27 8:20 ` martin rudalics
2014-01-27 16:23 ` Eli Zaretskii
2014-01-27 17:26 ` martin rudalics
2014-01-26 11:19 ` martin rudalics
2014-01-25 20:27 ` bug#16526: 24.3.50; scroll-conservatively & c-mode regression. The purpose of revision 116070 Alan Mackenzie
[not found] ` <20140125202721.GA3630@acm.acm>
2014-01-25 23:02 ` Stefan Monnier
2014-01-26 3:41 ` Eli Zaretskii
2014-01-26 9:54 ` Alan Mackenzie
2014-01-26 16:33 ` Eli Zaretskii
2014-01-26 17:35 ` Eli Zaretskii
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20140629174953.GE2948@acm.acm \
--to=acm@muc.de \
--cc=16526-done@debbugs.gnu.org \
--cc=rudalics@gmx.at \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).