Subject: bug#6490: 24.0.50; src/lread.c: old style backquote bug?

From: Stefan Monnier <[email-masked]>
Date: Wed, 23 Jun 2010 00:23:15 +0200

> Attached patch for Emacs fixes this error.

I'm glad the patch fixes things for you, since this patch indeed looks
perfectly harmless, but I'm a bit puzzled because it doesn't just look
harmless: it looks to me like the patch does change anything to the way
the code works.  So could you explain to me how&why the patch fixes
the problem?  I'm probably just overlooking some "obvious" detail,

        Stefan

> === modified file 'src/lread.c'
> --- src/lread.c	2010-06-16 14:10:02 +0000
> +++ src/lread.c	2010-06-22 07:48:58 +0000
> @@ -2693,21 +2693,26 @@
>  	 old-style.  For Emacs-25, we should completely remove this
>  	 first_in_list exception (old-style can still be obtained via
>  	 "(\`" anyway).  */
> -      if (first_in_list && (c = READCHAR, UNREAD (c), c == ' '))
> -	{
> -	  Vold_style_backquotes = Qt;
> -	  goto default_label;
> -	}
> -      else
> -	{
> -	  Lisp_Object value;
> -
> -	  new_backquote_flag++;
> -	  value = read0 (readcharfun);
> -	  new_backquote_flag--;
> -
> -	  return Fcons (Qbackquote, Fcons (value, Qnil));
> -	}
> +      {
> +        int next_char = READCHAR;
> +        UNREAD (next_char);
> +
> +	if (first_in_list && next_char == ' ')
> +	  {
> +	    Vold_style_backquotes = Qt;
> +	    goto default_label;
> +	  }
> +	else
> +	  {
> +	    Lisp_Object value;
> +
> +	    new_backquote_flag++;
> +	    value = read0 (readcharfun);
> +	    new_backquote_flag--;
> +
> +	    return Fcons (Qbackquote, Fcons (value, Qnil));
> +	  }
> +      }
 
>      case ',':
>        if (new_backquote_flag)