From: Stefan Monnier <monnier@IRO.UMontreal.CA>
To: Alan Mackenzie <acm@muc.de>
Cc: emacs-devel@gnu.org
Subject: Re: [Emacs-diffs] comment-cache 223d16f 2/3: Apply `comment-depth' text properties when calling `back_comment'.
Date: Tue, 08 Mar 2016 20:54:47 -0500 [thread overview]
Message-ID: <jwvd1r48lrd.fsf-monnier+emacsdiffs@gnu.org> (raw)
In-Reply-To: <jwvio0w8qhw.fsf-monnier+emacsdiffs@gnu.org> (Stefan Monnier's message of "Tue, 08 Mar 2016 19:17:17 -0500")
> While the patch below is just a proof-of-concept prototype, I can't
Indeed it was and while it seemed to somewhat work it was severely broken.
I've just been testing the patch below, and I'm a bit more confident
that it does what I want.
Testing its performance (by scrolling src/regex.c backward with
page-up) I get:
- 20s with comment-use-syntax-ppss=nil
- 17s with comment-use-syntax-ppss=t
and setting open-paren-in-column-0-is-defun-start has no effect
(i.e. 20s in either case).
[ Don't take those numbers too seriously, this is testing a build with
full debug checking and such. The only actual result is that there
*is* a difference. ]
Stefan
diff --git a/src/syntax.c b/src/syntax.c
index 249d0d5..9c5a2a8 100644
--- a/src/syntax.c
+++ b/src/syntax.c
@@ -570,9 +570,6 @@ dec_bytepos (ptrdiff_t bytepos)
/* Return a defun-start position before POS and not too far before.
It should be the last one before POS, or nearly the last.
- When open_paren_in_column_0_is_defun_start is nonzero,
- only the beginning of the buffer is treated as a defun-start.
-
We record the information about where the scan started
and what its result was, so that another call in the same area
can return the same value very quickly.
@@ -597,7 +594,27 @@ find_defun_start (ptrdiff_t pos, ptrdiff_t pos_byte)
&& MODIFF == find_start_modiff)
return find_start_value;
- if (!open_paren_in_column_0_is_defun_start)
+ if (!NILP (Vcomment_use_syntax_ppss))
+ {
+ EMACS_INT modiffs = CHARS_MODIFF;
+ Lisp_Object ppss = call1 (Qsyntax_ppss, make_number (pos));
+ if (modiffs != CHARS_MODIFF)
+ error ("syntax-ppss modified the buffer!");
+ TEMP_SET_PT_BOTH (opoint, opoint_byte);
+ Lisp_Object boc = Fnth (make_number (8), ppss);
+ if (NUMBERP (boc))
+ {
+ find_start_value = XINT (boc);
+ find_start_value_byte = CHAR_TO_BYTE (find_start_value);
+ }
+ else
+ {
+ find_start_value = pos;
+ find_start_value_byte = pos_byte;
+ }
+ goto found;
+ }
+ if (NILP (Vopen_paren_in_column_0_is_defun_start))
{
find_start_value = BEGV;
find_start_value_byte = BEGV_BYTE;
@@ -863,7 +880,7 @@ back_comment (ptrdiff_t from, ptrdiff_t from_byte, ptrdiff_t stop,
case Sopen:
/* Assume a defun-start point is outside of strings. */
- if (open_paren_in_column_0_is_defun_start
+ if (EQ (Vopen_paren_in_column_0_is_defun_start, Qt)
&& (from == stop
|| (temp_byte = dec_bytepos (from_byte),
FETCH_CHAR (temp_byte) == '\n')))
@@ -3647,6 +3664,11 @@ void
syms_of_syntax (void)
{
DEFSYM (Qsyntax_table_p, "syntax-table-p");
+ DEFSYM (Qsyntax_ppss, "syntax-ppss-for-syntax.c");
+ DEFVAR_LISP ("comment-use-syntax-ppss",
+ Vcomment_use_syntax_ppss,
+ doc: /* Non-nil means `forward-comment' can use `syntax-ppss' internally. */);
+ Vcomment_use_syntax_ppss = Qnil;
staticpro (&Vsyntax_code_object);
@@ -3687,10 +3709,10 @@ See the info node `(elisp)Syntax Properties' for a description of the
doc: /* Non-nil means `scan-sexps' treats all multibyte characters as symbol. */);
multibyte_syntax_as_symbol = 0;
- DEFVAR_BOOL ("open-paren-in-column-0-is-defun-start",
- open_paren_in_column_0_is_defun_start,
+ DEFVAR_LISP ("open-paren-in-column-0-is-defun-start",
+ Vopen_paren_in_column_0_is_defun_start,
doc: /* Non-nil means an open paren in column 0 denotes the start of a defun. */);
- open_paren_in_column_0_is_defun_start = 1;
+ Vopen_paren_in_column_0_is_defun_start = Qt;
DEFVAR_LISP ("find-word-boundary-function-table",
next prev parent reply other threads:[~2016-03-09 1:54 UTC|newest]
Thread overview: 130+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20160308132530.861.91488@vcs.savannah.gnu.org>
[not found] ` <E1adHdj-0000FI-0W@vcs.savannah.gnu.org>
2016-03-08 14:19 ` [Emacs-diffs] comment-cache 223d16f 2/3: Apply `comment-depth' text properties when calling `back_comment' Stefan Monnier
2016-03-08 18:30 ` Alan Mackenzie
2016-03-08 18:42 ` Stefan Monnier
2016-03-08 20:07 ` Alan Mackenzie
2016-03-08 21:22 ` Dmitry Gutov
2016-03-08 21:43 ` Alan Mackenzie
2016-03-09 0:17 ` Stefan Monnier
2016-03-09 1:54 ` Stefan Monnier [this message]
2016-03-09 10:49 ` Problems with syntax-ppss: Was [... Apply `comment-depth' text properties when calling `back_comment'.] Alan Mackenzie
2016-03-09 13:11 ` Stefan Monnier
2016-03-09 14:19 ` Alan Mackenzie
2016-03-09 19:16 ` Stefan Monnier
2016-03-09 19:22 ` Clément Pit--Claudel
2016-03-09 19:37 ` Alan Mackenzie
2016-03-09 21:40 ` Stefan Monnier
2016-03-10 13:01 ` Alan Mackenzie
2016-03-10 14:52 ` Stefan Monnier
2016-03-10 15:29 ` Alan Mackenzie
2016-03-10 16:45 ` Stefan Monnier
2016-03-10 17:25 ` Alan Mackenzie
2016-03-10 17:34 ` Stefan Monnier
2016-03-10 19:08 ` Alan Mackenzie
2016-03-10 23:10 ` Stefan Monnier
2016-03-11 12:50 ` Stefan Monnier
2016-03-11 20:48 ` Alan Mackenzie
2016-03-11 22:35 ` Stefan Monnier
2016-03-11 23:08 ` Alan Mackenzie
2016-03-11 23:09 ` Clément Pit--Claudel
2016-03-11 23:31 ` Stefan Monnier
2016-03-10 23:31 ` John Wiegley
2016-03-11 2:08 ` Clément Pit--Claudel
2016-03-11 3:08 ` Stefan Monnier
2016-03-11 7:27 ` Andreas Röhler
2016-03-11 12:08 ` Alan Mackenzie
2016-03-11 12:30 ` Dmitry Gutov
2016-03-11 13:04 ` Alan Mackenzie
2016-03-11 20:21 ` Dmitry Gutov
2016-03-12 20:19 ` Andreas Röhler
2016-03-12 20:38 ` Dmitry Gutov
2016-03-12 20:45 ` Alan Mackenzie
2016-03-13 14:56 ` Andreas Röhler
2016-03-10 13:41 ` Stefan Monnier
2016-03-09 17:06 ` How do you check if the current point is in a comment or a string? (Was Re: Problems with syntax-ppss: Was [... Apply `comment-depth' text properties when calling `back_comment'.]) Clément Pit--Claudel
2016-03-09 17:24 ` Kaushal Modi
2016-03-09 17:56 ` Clément Pit--Claudel
2016-03-09 19:19 ` Kaushal Modi
2016-03-09 19:34 ` Clément Pit--Claudel
2016-03-10 14:28 ` Stefan Monnier
2016-03-10 15:03 ` Clément Pit--Claudel
2016-03-10 15:20 ` Stefan Monnier
2016-03-10 17:21 ` Clément Pit--Claudel
2016-03-12 20:45 ` Andreas Röhler
2016-03-12 20:53 ` Clément Pit--Claudel
2016-03-09 16:37 ` [Emacs-diffs] comment-cache 223d16f 2/3: Apply `comment-depth' text properties when calling `back_comment' Richard Stallman
2016-03-09 17:06 ` Dmitry Gutov
2016-03-10 21:20 ` Richard Stallman
2016-03-11 0:26 ` Dmitry Gutov
2016-03-11 12:22 ` Alan Mackenzie
2016-03-11 12:52 ` Stefan Monnier
2016-03-11 16:20 ` Drew Adams
2016-03-09 17:48 ` Alan Mackenzie
2016-03-09 19:58 ` martin rudalics
2016-03-09 20:36 ` Eli Zaretskii
2016-03-09 20:53 ` John Wiegley
2016-03-13 9:30 ` Daniel Colascione
2016-03-13 15:28 ` Stefan Monnier
2016-03-13 16:24 ` Eli Zaretskii
2016-03-13 16:27 ` Daniel Colascione
2016-03-13 17:19 ` Eli Zaretskii
2016-03-14 1:13 ` Stefan Monnier
2016-03-14 16:10 ` Eli Zaretskii
2016-03-11 18:27 ` Alan Mackenzie
2016-03-12 17:08 ` Alan Mackenzie
2016-03-12 18:10 ` martin rudalics
2016-03-12 18:22 ` Paul Eggert
2016-03-12 18:46 ` martin rudalics
2016-03-12 19:36 ` Alan Mackenzie
2016-03-13 9:26 ` martin rudalics
2016-03-13 11:52 ` Alan Mackenzie
2016-03-13 12:08 ` martin rudalics
2016-03-13 12:49 ` Alan Mackenzie
2016-03-13 13:32 ` martin rudalics
2016-03-13 17:59 ` Eli Zaretskii
2016-03-13 20:09 ` martin rudalics
2016-03-14 1:15 ` Paul Eggert
2016-03-14 7:42 ` martin rudalics
2016-03-14 11:22 ` Alan Mackenzie
2016-03-14 19:41 ` martin rudalics
2016-03-14 20:58 ` Alan Mackenzie
2016-03-14 16:15 ` Eli Zaretskii
2016-03-14 19:41 ` martin rudalics
2016-03-14 17:00 ` Paul Eggert
2016-03-14 19:41 ` martin rudalics
2016-03-14 16:09 ` Eli Zaretskii
2016-03-13 18:00 ` Eli Zaretskii
2016-03-13 18:41 ` Alan Mackenzie
2016-03-12 20:56 ` Dmitry Gutov
2016-03-12 21:29 ` Clément Pit--Claudel
2016-03-12 21:59 ` Dmitry Gutov
2016-03-12 21:58 ` Alan Mackenzie
2016-03-12 22:16 ` Dmitry Gutov
2016-03-13 17:59 ` Alan Mackenzie
2016-03-13 22:49 ` Stefan Monnier
2016-03-14 12:51 ` Alan Mackenzie
2016-03-15 3:14 ` Stefan Monnier
2016-03-14 1:13 ` Dmitry Gutov
2016-03-14 1:30 ` Stefan Monnier
2016-03-14 1:45 ` Dmitry Gutov
2016-03-14 2:18 ` Stefan Monnier
2016-03-14 12:23 ` Alan Mackenzie
2016-03-14 16:15 ` Dmitry Gutov
2016-03-14 17:29 ` Alan Mackenzie
2016-03-14 17:52 ` Dmitry Gutov
2016-03-14 18:46 ` Alan Mackenzie
2016-03-14 19:33 ` Dmitry Gutov
2016-03-14 21:20 ` Alan Mackenzie
2016-03-15 3:10 ` Stefan Monnier
2016-03-17 0:47 ` Dmitry Gutov
2016-03-17 18:47 ` Alan Mackenzie
2016-03-18 1:24 ` Dmitry Gutov
2016-03-10 21:20 ` Richard Stallman
2016-03-10 22:24 ` Alan Mackenzie
2016-03-12 1:53 ` Richard Stallman
2016-03-12 3:28 ` Stefan Monnier
2016-03-12 19:28 ` Richard Stallman
2016-03-09 17:51 ` Clément Pit--Claudel
2016-03-10 21:20 ` Richard Stallman
2016-03-10 21:38 ` Clément Pit--Claudel
2016-03-12 1:53 ` Richard Stallman
2016-03-10 7:14 ` Andreas Röhler
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
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=jwvd1r48lrd.fsf-monnier+emacsdiffs@gnu.org \
--to=monnier@iro.umontreal.ca \
--cc=acm@muc.de \
--cc=emacs-devel@gnu.org \
/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 external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.