all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
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",



  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.