Subject: bug#14595: Erroneous composition of lambda in emacs-lisp buffers with prog-prettify-symbols enabled

From: Eli Zaretskii <[email-masked]>
Date: Sat, 15 Jun 2013 12:12:51 +0300

> Date: Sat, 15 Jun 2013 12:00:04 +0300
> From: Eli Zaretskii <[email-masked]>
> 
> > From: Ted Zlatanov <[email-masked]>
> > Date: Sat, 15 Jun 2013 04:21:44 -0400
> > 
> > On Wed, 12 Jun 2013 05:18:59 +0200 Juanma Barranquero <[email-masked]> wrote: 
> > 
> > JB> If I visit lambda.el as in the example above, and scroll down the
> > JB> buffer, I get 26 such failures, always at the same lines (168, 280,
> > JB> 364, 432, 489, 538, 581, 619, 654, 686, 715, 742, 767, 791, 813, 834,
> > JB> 854, 873, 891, 908, 924, 940, 955, 970, 984 and 998); however, if upon
> > JB> visiting the file I go to the end of the buffer and scroll up, I get
> > JB> many more failures (about 60) at diferent lines, but also consistently
> > JB> the same lines.
> > 
> > Ouch.  I don't think I'm doing anything strange in the fontification
> > keywords that implement the new prettification functionality, but why
> > wasn't this seen before?  The scroll behavior probably indicates a
> > display engine issue.
> 
> What issue would that be?
> 
> The problem here is that the composition rule is generated
> incorrectly.

And here's why:

The incorrect display happens when the underlined part below

      (compose-region start end (cdr (assoc (match-string 0) alist)))))
                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

is nil.  When that happens, (match-string 0) is "(", the left
parenthesis, not the expected "lambda".

I hope fontification gurus will be able to tell us why this could
happen.