Subject: bug#53260: closed (Re: bug#53260: char-syntax differs in interpreter and bytecode [PATCH])

From: [email-masked] (GNU bug Tracking System)
Date: Thu, 20 Jan 2022 10:48:02 +0000

Your bug report

#53260: char-syntax differs in interpreter and bytecode

which was filed against the emacs package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to [email-masked].

-- 
53260: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=53260
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: bug#53260: char-syntax differs in interpreter and bytecode [PATCH]
From: Mattias Engdegård <[email-masked]>
To: Lars Ingebrigtsen <[email-masked]>
Cc: Stefan Monnier <[email-masked]>, [email-masked]
Date: Thu, 20 Jan 2022 11:47:01 +0100
List-Id: <debbugs-submit.debbugs.gnu.org>

20 jan. 2022 kl. 10.30 skrev Lars Ingebrigtsen <[email-masked]>:

> Makes sense to me.  Unless Stefan has any further comments, please go
> ahead and push.

Thank you, pushed with a necessary modification: SETUP_BUFFER_SYNTAX_TABLE() is indeed necessary in Fchar_syntax because syntax.c has its own local #define SYNTAX() and doesn't use the one in syntax.h. Lovely.

Subject: char-syntax differs in interpreter and bytecode
From: Mattias Engdegård <[email-masked]>
To: [email-masked]
Date: Fri, 14 Jan 2022 17:43:00 +0100
List-Id: <debbugs-submit.debbugs.gnu.org>

Fchar_syntax and the bytecode Bchar_syntax differ:

Fchar_syntax calls SETUP_BUFFER_SYNTAX_TABLE. Bchar_syntax does not.
Bchar_syntax converts arguments to multibyte. Fchar_syntax does not.

The last property can be used to get different behaviour:

(let ((cs (byte-compile (lambda (x) (char-syntax x)))))
  (with-temp-buffer
    (let ((st (make-syntax-table)))
      (set-buffer-multibyte nil)
      (modify-syntax-entry 128 "_" st)
      (set-syntax-table st)
      (list (funcall cs 128) (char-syntax 128)))))
-> (119 95)

Not sure how to expose the presence or absence of SETUP_BUFFER_SYNTAX_TABLE. Suggestions?

And, most importantly, what would be the correct code?

(I suppose char-syntax is rare enough that we could call Fchar_syntax from Bchar_syntax and thus avoid any future divergence.)