[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Problems with syntax-ppss: Was [... Apply `comment-depth' text prope
From: |
Alan Mackenzie |
Subject: |
Re: Problems with syntax-ppss: Was [... Apply `comment-depth' text properties when calling `back_comment'.] |
Date: |
Fri, 11 Mar 2016 20:48:17 +0000 |
User-agent: |
Mutt/1.5.24 (2015-08-30) |
Hello, Stefan.
On Thu, Mar 10, 2016 at 06:10:58PM -0500, Stefan Monnier wrote:
[ .... ]
> or replace my previous patch with this one below, which is almost
> identical to the previous one, tho a bit cleaner and with a fix to make
> comment-use-syntax-ppss override open-paren-in-column-0-is-defun-start,
> as it should.
OK. It wouldn't compile, so I had to correct it a little bit.
Anyhow, what is going on at the indicated lines, where the input values
of the end of comment are simply returned as the beginning of defun?
Perhaps more seriously, the scheme won't work if point-min is inside a
string. In that case, strings and non-strings get swapped. syntax-ppss
will return what it thinks is the beginning of the string enclosing POS,
but which in reality is the end " of the previous actual string. This
could easily be inside an actual comment:
............" "...." /* "...." */ /* */ /* */
| | |
point-min return value of syntax-ppss pos
This is not a valid position to return as a safe place.
> diff --git a/src/syntax.c b/src/syntax.c
> index 249d0d5..f2268da 100644
> --- a/src/syntax.c
> +++ b/src/syntax.c
> @@ -597,6 +597,26 @@ find_defun_start (ptrdiff_t pos, ptrdiff_t pos_byte)
> && MODIFF == find_start_modiff)
> return find_start_value;
> + 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 (!open_paren_in_column_0_is_defun_start)
> {
> find_start_value = BEGV;
> @@ -864,6 +884,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
> + && NILP (Vcomment_use_syntax_ppss))
> && (from == stop
> || (temp_byte = dec_bytepos (from_byte),
> FETCH_CHAR (temp_byte) == '\n')))
> @@ -3647,6 +3668,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 = Qt;
> staticpro (&Vsyntax_code_object);
> Stefan
--
Alan Mackenzie (Nuremberg, Germany).
- Re: Problems with syntax-ppss: Was [... Apply `comment-depth' text properties when calling `back_comment'.], (continued)
- Re: Problems with syntax-ppss: Was [... Apply `comment-depth' text properties when calling `back_comment'.], Stefan Monnier, 2016/03/09
- Re: Problems with syntax-ppss: Was [... Apply `comment-depth' text properties when calling `back_comment'.], Alan Mackenzie, 2016/03/10
- Re: Problems with syntax-ppss: Was [... Apply `comment-depth' text properties when calling `back_comment'.], Stefan Monnier, 2016/03/10
- Re: Problems with syntax-ppss: Was [... Apply `comment-depth' text properties when calling `back_comment'.], Alan Mackenzie, 2016/03/10
- Re: Problems with syntax-ppss: Was [... Apply `comment-depth' text properties when calling `back_comment'.], Stefan Monnier, 2016/03/10
- Re: Problems with syntax-ppss: Was [... Apply `comment-depth' text properties when calling `back_comment'.], Alan Mackenzie, 2016/03/10
- Re: Problems with syntax-ppss: Was [... Apply `comment-depth' text properties when calling `back_comment'.], Stefan Monnier, 2016/03/10
- Re: Problems with syntax-ppss: Was [... Apply `comment-depth' text properties when calling `back_comment'.], Alan Mackenzie, 2016/03/10
- Re: Problems with syntax-ppss: Was [... Apply `comment-depth' text properties when calling `back_comment'.], Stefan Monnier, 2016/03/10
- Re: Problems with syntax-ppss: Was [... Apply `comment-depth' text properties when calling `back_comment'.], Stefan Monnier, 2016/03/11
- Re: Problems with syntax-ppss: Was [... Apply `comment-depth' text properties when calling `back_comment'.],
Alan Mackenzie <=
- Re: Problems with syntax-ppss: Was [... Apply `comment-depth' text properties when calling `back_comment'.], Stefan Monnier, 2016/03/11
- Re: Problems with syntax-ppss: Was [... Apply `comment-depth' text properties when calling `back_comment'.], Alan Mackenzie, 2016/03/11
- Re: Problems with syntax-ppss: Was [... Apply `comment-depth' text properties when calling `back_comment'.], Clément Pit--Claudel, 2016/03/11
- Re: Problems with syntax-ppss: Was [... Apply `comment-depth' text properties when calling `back_comment'.], Stefan Monnier, 2016/03/11
- Re: Problems with syntax-ppss: Was [... Apply `comment-depth' text properties when calling `back_comment'.], John Wiegley, 2016/03/10
- Re: Problems with syntax-ppss: Was [... Apply `comment-depth' text properties when calling `back_comment'.], Clément Pit--Claudel, 2016/03/10
- Re: Problems with syntax-ppss: Was [... Apply `comment-depth' text properties when calling `back_comment'.], Stefan Monnier, 2016/03/10
- Re: Problems with syntax-ppss: Was [... Apply `comment-depth' text properties when calling `back_comment'.], Andreas Röhler, 2016/03/11
- Re: Problems with syntax-ppss: Was [... Apply `comment-depth' text properties when calling `back_comment'.], Alan Mackenzie, 2016/03/11
- Re: Problems with syntax-ppss: Was [... Apply `comment-depth' text properties when calling `back_comment'.], Dmitry Gutov, 2016/03/11