Files
emacs/lisp
Mattias Engdegård bdea1883cc Fix pcase 'rx' pattern match-data bug
The pcase 'rx' pattern would in some cases allow the match data to be
clobbered before it is read.  For example:

  (pcase "PQR"
    ((and (rx (let a nonl)) (rx ?z)) (list 'one a))
    ((rx (let b ?Q))                 (list 'two b)))

The above returned (two "P") instead of the correct (two "Q").
This occurred because the calls to string-match and match-string were
presented as separate patterns to pcase, which would interleave them
with other patterns.

As a remedy, combine string matching and match-data extraction into a
single pcase pattern.  This introduces a slight inefficiency for two
or more submatches as they are grouped into a list structure which
then has to be destructured.

Found by Stefan Monnier.  See discussion at
https://lists.gnu.org/archive/html/emacs-devel/2021-02/msg02010.html

* lisp/emacs-lisp/rx.el (rx--reduce-right): New helper.
(rx [pcase macro]): Combine string-match and match-string calls into a
single pcase pattern.
* test/lisp/emacs-lisp/rx-tests.el (rx-pcase): Add test cases.
2021-02-28 13:06:24 +01:00
..
2021-02-18 16:50:55 +01:00
2021-02-27 20:04:41 +01:00
2021-02-27 20:04:41 +01:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-02-08 09:10:57 +01:00
2021-02-18 16:50:55 +01:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:28:16 -08:00
2021-01-01 01:13:56 -08:00
2021-02-08 00:25:16 +01:00
2021-02-06 08:10:38 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-02-27 16:19:37 +02:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-02-06 08:10:38 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-02-19 08:36:56 -08:00
2021-02-10 14:42:51 +01:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-02-28 00:07:32 +01:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-02-08 09:10:57 +01:00
2021-01-01 01:13:56 -08:00
2021-02-01 06:28:21 -08:00
2021-01-01 01:13:56 -08:00
2021-02-28 00:07:32 +01:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-02-23 21:05:30 +02:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-14 07:50:28 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:28:16 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-02-19 08:36:55 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00

This directory contains source code for the parts of Emacs that are
written in Emacs Lisp.  *.el files are Emacs Lisp source, and the
corresponding *.elc files are byte-compiled versions.  Byte-compiled
files are architecture-independent.

The term subdirectory contains Lisp files that customize Emacs for
certain terminal types.  When Emacs starts, it checks the TERM
environment variable to get the terminal type and loads
'term/${TERM}.el' if it exists.

The other subdirectories hold Lisp packages grouped by their general
purpose.