GNU bug report logs - #6080
Behaviour of `char-syntax' changes when byte-compiled

Previous Next

Package: emacs;

Reported by: Toby Cubitt <toby-dated-1274008215.7ce38e <at> dr-qubit.org>

Date: Sun, 2 May 2010 12:28:02 UTC

Severity: normal

Done: Stefan Monnier <monnier <at> iro.umontreal.ca>

Bug is archived. No further changes may be made.

To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 6080 in the body.
You can then email your comments to 6080 AT debbugs.gnu.org in the normal way.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to owner <at> debbugs.gnu.org, bug-gnu-emacs <at> gnu.org:
bug#6080; Package emacs. (Sun, 02 May 2010 12:28:02 GMT) Full text and rfc822 format available.

Acknowledgement sent to Toby Cubitt <toby-dated-1274008215.7ce38e <at> dr-qubit.org>:
New bug report received and forwarded. Copy sent to bug-gnu-emacs <at> gnu.org. (Sun, 02 May 2010 12:28:02 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Toby Cubitt <tsc25 <at> cantab.net>
To: bug-gnu-emacs <at> gnu.org
Subject: Behaviour of `char-syntax' changes when byte-compiled
Date: Sun, 2 May 2010 12:15:17 +0100
Define the following test function:

  (defun test ()
    (let ((char 33554464))
      (message "char: %s" char)
      (message "syntax: %s" (char-syntax char)))
    nil)

(Note that 33554464 is the value of `last-input-event' when a command is
invoked by the key sequence "S-<SPC>".)

When the test function is evalled and then run with "M-: (test)", it
outputs the following in the *Messages* buffer:

char: 33554464
syntax: 32
nil

When the test function is byte-compiled, loaded, and run as before with
"M-: (test)", it throws an error and produces the following backtrace:

Debugger entered--Lisp error: (wrong-type-argument characterp 33554464)
  test()
  eval((test))
  eval-expression((test) nil)
  call-interactively(eval-expression nil nil)

This is with a recent VCS Emacs checkout. Emacs version and settings are
included below.

Toby



In GNU Emacs 23.1.96.1 (i686-pc-linux-gnu, GTK+ Version 2.18.6)
 of 2010-04-23 on c3po
Windowing system distributor `The X.Org Foundation', version 11.0.10706000
configured using `configure  '--prefix=/usr' '--host=i686-pc-linux-gnu' '--mandir=/usr/share/man' '--infodir=/usr/share/info' '--datadir=/usr/share' '--sysconfdir=/etc' '--localstatedir=/var/lib' '--program-suffix=-emacs-23-vcs' '--infodir=/usr/share/info/emacs-23-vcs' '--with-sound' '--with-x' '--without-gconf' '--with-toolkit-scroll-bars' '--without-gif' '--without-jpeg' '--with-png' '--with-rsvg' '--without-tiff' '--with-xpm' '--with-xft' '--without-libotf' '--without-m17n-flt' '--with-x-toolkit=gtk' '--without-hesiod' '--without-kerberos' '--without-kerberos5' '--with-gpm' '--with-dbus' '--build=i686-pc-linux-gnu' 'build_alias=i686-pc-linux-gnu' 'host_alias=i686-pc-linux-gnu' 'CFLAGS=-march=prescott -O2 -pipe' 'LDFLAGS=-Wl,-O1''

Important settings:
  value of $LC_ALL: en_GB.UTF-8
  value of $LC_COLLATE: nil
  value of $LC_CTYPE: nil
  value of $LC_MESSAGES: nil
  value of $LC_MONETARY: nil
  value of $LC_NUMERIC: nil
  value of $LC_TIME: nil
  value of $LANG: en_GB.UTF-8
  value of $XMODIFIERS: nil
  locale-coding-system: utf-8-unix
  default enable-multibyte-characters: t

Features:
(conf-mode newcomment shadow sort mail-extr message sendmail ecomplete
rfc822 mml mml-sec password-cache mm-decode mm-bodies mm-encode mailcap
mail-parse rfc2231 rfc2047 rfc2045 qp ietf-drums mailabbrev nnheader
gnus-util netrc time-date mm-util mail-prsvr gmm-utils wid-edit
mailheader canlock sha1 hex-util hashcash mail-utils emacsbug iso-transl
info pp cl-specs edebug thingatpt cc-mode cc-fonts cc-menus cc-cmds
cc-styles cc-align cc-engine cc-vars cc-defs easy-mmode compile comint
ring multi-isearch vc-git find-func help-mode view debug server
which-func imenu paren advice advice-preload post help-fns derived cl
cl-19 css-mode-simple edmacro kmacro regexp-opt undo-tree
log-modification-mode show-point-mode predictive-html auto-overlay-flat
predictive-texinfo predictive-latex predictive-auto-overlay-auto-dict
auto-overlay-nested auto-overlay-self auto-overlay-line
auto-overlay-word predictive timerfunctions auto-overlays
auto-overlay-common dict-tree trie cedet-edebug tNFA queue heap avl-tree
semantic/util-modes easymenu semantic/util semantic semantic/tag
semantic/lex semantic/fw eieio byte-opt bytecomp byte-compile mode-local
cedet completion-ui-sources completion-ui-menu completion-ui-tooltip
completion-ui-echo completion-ui-hotkeys completion-ui-dynamic
completion-ui-popup-frame completion-ui flyspell ispell avoid
site-gentoo preview-latex tex-site auto-loads tooltip ediff-hook
vc-hooks lisp-float-type mwheel x-win x-dnd font-setting tool-bar dnd
fontset image fringe lisp-mode register page menu-bar rfn-eshadow timer
select scroll-bar mldrag mouse jit-lock font-lock syntax facemenu
font-core frame cham georgian utf-8-lang misc-lang vietnamese tibetan
thai tai-viet lao korean japanese hebrew greek romanian slovak czech
european ethiopic indian cyrillic chinese case-table epa-hook
jka-cmpr-hook help simple abbrev loaddefs button minibuffer faces
cus-face files text-properties overlay md5 base64 format env code-pages
mule custom widget hashtable-print-readable backquote
make-network-process dbusbind font-render-setting gtk x-toolkit x
multi-tty emacs)


-- 
Dr T. S. Cubitt
Quantum Information Theory group
Department of Mathematics
University of Bristol
United Kingdom

email: tsc25 <at> cantab.net
web: www.dr-qubit.org





Information forwarded to owner <at> debbugs.gnu.org, bug-gnu-emacs <at> gnu.org:
bug#6080; Package emacs. (Mon, 03 May 2010 17:06:01 GMT) Full text and rfc822 format available.

Message #8 received at 6080 <at> debbugs.gnu.org (full text, mbox):

From: Stefan Monnier <monnier <at> IRO.UMontreal.CA>
To: Toby Cubitt <toby-dated-1274008215.7ce38e <at> dr-qubit.org>
Cc: 6080 <at> debbugs.gnu.org
Subject: Re: bug#6080: Behaviour of `char-syntax' changes when byte-compiled
Date: Mon, 03 May 2010 13:05:40 -0400
>   (defun test ()
>     (let ((char 33554464))
>       (message "char: %s" char)
>       (message "syntax: %s" (char-syntax char)))
>     nil)

> (Note that 33554464 is the value of `last-input-event' when a command is
> invoked by the key sequence "S-<SPC>".)

> When the test function is evalled and then run with "M-: (test)", it
> outputs the following in the *Messages* buffer:

> char: 33554464
> syntax: 32
> nil

That's an error: S-SPC is not a char, so the function should signal
an error.

> When the test function is byte-compiled, loaded, and run as before with
> "M-: (test)", it throws an error and produces the following backtrace:

Yes, oddly enough (it probably made sense at some point, of course, but
that point was passed a very long time ago), char-syntax has its own
byte code, so what happens above is that the byte-code version of
char-syntax is not implemented in the exact same way as
char-syntax function.


        Stefan




Information forwarded to owner <at> debbugs.gnu.org, bug-gnu-emacs <at> gnu.org:
bug#6080; Package emacs. (Mon, 03 May 2010 19:31:01 GMT) Full text and rfc822 format available.

Message #11 received at 6080 <at> debbugs.gnu.org (full text, mbox):

From: Toby Cubitt <toby-dated-1274124074.5dc0e6 <at> dr-qubit.org>
To: Stefan Monnier <monnier <at> IRO.UMontreal.CA>
Cc: 6080 <at> debbugs.gnu.org
Subject: Re: bug#6080: Behaviour of `char-syntax' changes when byte-compiled
Date: Mon, 3 May 2010 20:26:14 +0100
On Mon, May 03, 2010 at 01:05:40PM -0400, Stefan Monnier wrote:
> >   (defun test ()
> >     (let ((char 33554464))
> >       (message "char: %s" char)
> >       (message "syntax: %s" (char-syntax char)))
> >     nil)
> 
> > (Note that 33554464 is the value of `last-input-event' when a command is
> > invoked by the key sequence "S-<SPC>".)
> 
> > When the test function is evalled and then run with "M-: (test)", it
> > outputs the following in the *Messages* buffer:
> 
> > char: 33554464
> > syntax: 32
> > nil
> 
> That's an error: S-SPC is not a char, so the function should signal
> an error.

Good to know which is considered the correct behaviour.

> > When the test function is byte-compiled, loaded, and run as before with
> > "M-: (test)", it throws an error and produces the following backtrace:
> 
> Yes, oddly enough (it probably made sense at some point, of course, but
> that point was passed a very long time ago), char-syntax has its own
> byte code, so what happens above is that the byte-code version of
> char-syntax is not implemented in the exact same way as
> char-syntax function.

Interesting! So the byte-compiler replaces a char-syntax call with
hand-crafted byte-code, and bypasses the version in syntax.c entirely?

Will you fix the char-syntax function so that it signals an error in this
case? If so, then I won't bother working around this Emacs bug, as it was
a minor issue and I can just tell people to byte-compile to fix it.

Toby
-- 
Dr T. S. Cubitt
Quantum Information Theory group
Department of Mathematics
University of Bristol
United Kingdom

email: tsc25 <at> cantab.net
web: www.dr-qubit.org




Information forwarded to owner <at> debbugs.gnu.org, bug-gnu-emacs <at> gnu.org:
bug#6080; Package emacs. (Wed, 05 May 2010 17:55:02 GMT) Full text and rfc822 format available.

Message #14 received at 6080 <at> debbugs.gnu.org (full text, mbox):

From: Stefan Monnier <monnier <at> iro.umontreal.ca>
To: Toby Cubitt <tsc25 <at> cantab.net>
Cc: 6080 <at> debbugs.gnu.org
Subject: Re: bug#6080: Behaviour of `char-syntax' changes when byte-compiled
Date: Wed, 05 May 2010 13:54:17 -0400
> Will you fix the char-syntax function so that it signals an error in this
> case?

I've just installed such a change,


        Stefan


--- src/syntax.c	2010-03-10 14:45:21 +0000
+++ src/syntax.c	2010-05-05 17:20:27 +0000
@@ -858,7 +858,7 @@
      Lisp_Object character;
 {
   int char_int;
-  CHECK_NUMBER (character);
+  CHECK_CHARACTER (character);
   char_int = XINT (character);
   SETUP_BUFFER_SYNTAX_TABLE ();
   return make_number (syntax_code_spec[(int) SYNTAX (char_int)]);





bug closed, send any further explanations to Toby Cubitt <toby-dated-1274008215.7ce38e <at> dr-qubit.org> Request was from Stefan Monnier <monnier <at> iro.umontreal.ca> to control <at> debbugs.gnu.org. (Thu, 06 May 2010 13:23:02 GMT) Full text and rfc822 format available.

bug archived. Request was from Debbugs Internal Request <help-debbugs <at> gnu.org> to internal_control <at> debbugs.gnu.org. (Fri, 04 Jun 2010 11:24:03 GMT) Full text and rfc822 format available.

This bug report was last modified 15 years and 13 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.