texlive[48022] Master/texmf-dist: l3kernel (15jun18)

commits+karl at tug.org commits+karl at tug.org
Fri Jun 15 23:10:34 CEST 2018


Revision: 48022
          http://tug.org/svn/texlive?view=revision&revision=48022
Author:   karl
Date:     2018-06-15 23:10:33 +0200 (Fri, 15 Jun 2018)
Log Message:
-----------
l3kernel (15jun18)

Modified Paths:
--------------
    trunk/Master/texmf-dist/doc/latex/l3kernel/CHANGELOG.md
    trunk/Master/texmf-dist/doc/latex/l3kernel/README.md
    trunk/Master/texmf-dist/doc/latex/l3kernel/expl3.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/interface3.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/interface3.tex
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3docstrip.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.tex
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.tex
    trunk/Master/texmf-dist/doc/latex/l3kernel/source3.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/source3.tex
    trunk/Master/texmf-dist/source/latex/l3kernel/expl3.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3alloc.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3basics.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3box.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3color-base.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3deprecation.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3doc.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3drivers.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3expan.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3file.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3final.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3flag.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-aux.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-extended.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-random.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-round.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-traps.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-trig.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fparray.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3int.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3kernel-functions.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3names.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3oldmodules.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3quark.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3regex.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3sort.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3str.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3sys.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3tl-analysis.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3token.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3unicode.dtx
    trunk/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex
    trunk/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex
    trunk/Master/texmf-dist/tex/latex/l3kernel/expl3.sty
    trunk/Master/texmf-dist/tex/latex/l3kernel/l3dvipdfmx.def
    trunk/Master/texmf-dist/tex/latex/l3kernel/l3dvips.def
    trunk/Master/texmf-dist/tex/latex/l3kernel/l3dvisvgm.def
    trunk/Master/texmf-dist/tex/latex/l3kernel/l3pdfmode.def
    trunk/Master/texmf-dist/tex/latex/l3kernel/l3xdvipdfmx.def

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/CHANGELOG.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3kernel/CHANGELOG.md	2018-06-15 21:10:05 UTC (rev 48021)
+++ trunk/Master/texmf-dist/doc/latex/l3kernel/CHANGELOG.md	2018-06-15 21:10:33 UTC (rev 48022)
@@ -7,6 +7,11 @@
 
 ## [Unreleased]
 
+## [2018-06-14]
+
+### Added
+- Support for `e`-type argument using `\expanded` or macro emulation
+
 ## [2018-06-01]
 
 ### Added
@@ -105,8 +110,9 @@
 - Step func­tions have been added for dim vari­ables,
   e.g. `\dim_step_in­line:nnnn`
 
-[Unreleased]: https://github.com/latex3/latex3/compare/2018-05-13...HEAD
-[2018-06-0`]: https://github.com/latex3/latex3/compare/2018-05-13...2018-06-01
+[Unreleased]: https://github.com/latex3/latex3/compare/2018-06-14...HEAD
+[2018-06-01]: https://github.com/latex3/latex3/compare/2018-06-01...2018-06-14
+[2018-06-01]: https://github.com/latex3/latex3/compare/2018-05-13...2018-06-01
 [2018-05-13]: https://github.com/latex3/latex3/compare/2018-05-12...2018-05-13
 [2018-05-12]: https://github.com/latex3/latex3/compare/2018-04-30...2018-05-12
 [2018-04-30]: https://github.com/latex3/latex3/compare/2018-03-05...2018-04-30

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3kernel/README.md	2018-06-15 21:10:05 UTC (rev 48021)
+++ trunk/Master/texmf-dist/doc/latex/l3kernel/README.md	2018-06-15 21:10:33 UTC (rev 48022)
@@ -1,7 +1,7 @@
 LaTeX3 Programming Conventions
 ==============================
 
-Release 2018-06-01
+Release 2018-06-14
 
 Overview
 --------

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/expl3.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/interface3.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/interface3.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3kernel/interface3.tex	2018-06-15 21:10:05 UTC (rev 48021)
+++ trunk/Master/texmf-dist/doc/latex/l3kernel/interface3.tex	2018-06-15 21:10:33 UTC (rev 48022)
@@ -52,7 +52,7 @@
          {latex-team at latex-project.org}%
    }%
 }
-\date{Released 2018-06-01}
+\date{Released 2018-06-14}
 
 \pagenumbering{roman}
 \maketitle

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3docstrip.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.tex	2018-06-15 21:10:05 UTC (rev 48021)
+++ trunk/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.tex	2018-06-15 21:10:33 UTC (rev 48022)
@@ -30,7 +30,7 @@
         {latex-team at latex-project.org}%
     }%
 }
-\date{Released 2018-06-01}
+\date{Released 2018-06-14}
 
 \begin{document}
 

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.tex	2018-06-15 21:10:05 UTC (rev 48021)
+++ trunk/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.tex	2018-06-15 21:10:33 UTC (rev 48022)
@@ -30,7 +30,7 @@
         {latex-team at latex-project.org}%
     }%
 }
-\date{Released 2018-06-01}
+\date{Released 2018-06-14}
 
 \newcommand{\TF}{\textit{(TF)}}
 

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/source3.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/source3.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3kernel/source3.tex	2018-06-15 21:10:05 UTC (rev 48021)
+++ trunk/Master/texmf-dist/doc/latex/l3kernel/source3.tex	2018-06-15 21:10:33 UTC (rev 48022)
@@ -51,7 +51,7 @@
          {latex-team at latex-project.org}%
    }%
 }
-\date{Released 2018-06-01}
+\date{Released 2018-06-14}
 
 \pagenumbering{roman}
 \maketitle

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/expl3.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/expl3.dtx	2018-06-15 21:10:05 UTC (rev 48021)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/expl3.dtx	2018-06-15 21:10:33 UTC (rev 48022)
@@ -21,7 +21,7 @@
 % for those people who are interested.
 %
 %<*driver|generic|package>
-\def\ExplFileDate{2018-06-01}%
+\def\ExplFileDate{2018-06-14}%
 %</driver|generic|package>
 %<*driver>
 \documentclass[full]{l3doc}
@@ -49,7 +49,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3alloc.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3alloc.dtx	2018-06-15 21:10:05 UTC (rev 48021)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3alloc.dtx	2018-06-15 21:10:33 UTC (rev 48022)
@@ -41,7 +41,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3basics.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3basics.dtx	2018-06-15 21:10:05 UTC (rev 48021)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3basics.dtx	2018-06-15 21:10:33 UTC (rev 48022)
@@ -41,7 +41,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx	2018-06-15 21:10:05 UTC (rev 48021)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx	2018-06-15 21:10:33 UTC (rev 48022)
@@ -138,7 +138,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3box.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3box.dtx	2018-06-15 21:10:05 UTC (rev 48021)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3box.dtx	2018-06-15 21:10:33 UTC (rev 48022)
@@ -41,7 +41,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx	2018-06-15 21:10:05 UTC (rev 48021)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx	2018-06-15 21:10:33 UTC (rev 48022)
@@ -42,7 +42,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx	2018-06-15 21:10:05 UTC (rev 48021)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx	2018-06-15 21:10:33 UTC (rev 48022)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx	2018-06-15 21:10:05 UTC (rev 48021)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx	2018-06-15 21:10:33 UTC (rev 48022)
@@ -41,7 +41,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3color-base.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3color-base.dtx	2018-06-15 21:10:05 UTC (rev 48021)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3color-base.dtx	2018-06-15 21:10:33 UTC (rev 48022)
@@ -41,7 +41,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3deprecation.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3deprecation.dtx	2018-06-15 21:10:05 UTC (rev 48021)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3deprecation.dtx	2018-06-15 21:10:33 UTC (rev 48022)
@@ -41,7 +41,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3doc.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3doc.dtx	2018-06-15 21:10:05 UTC (rev 48021)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3doc.dtx	2018-06-15 21:10:33 UTC (rev 48022)
@@ -77,7 +77,7 @@
 %
 % \title{The \cls{l3doc} class}
 % \author{\Team}
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
 % \maketitle
 % \tableofcontents
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx	2018-06-15 21:10:05 UTC (rev 48021)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx	2018-06-15 21:10:33 UTC (rev 48022)
@@ -61,7 +61,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3drivers.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3drivers.dtx	2018-06-15 21:10:05 UTC (rev 48021)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3drivers.dtx	2018-06-15 21:10:33 UTC (rev 48022)
@@ -41,7 +41,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
 %
 % \maketitle
 %
@@ -481,23 +481,23 @@
 %<*package>
 \ProvidesExplFile
 %<*dvipdfmx>
-  {l3dvidpfmx.def}{2018-06-01}{}
+  {l3dvidpfmx.def}{2018-06-14}{}
   {L3 Experimental driver: dvipdfmx}
 %</dvipdfmx>
 %<*dvips>
-  {l3dvips.def}{2018-06-01}{}
+  {l3dvips.def}{2018-06-14}{}
   {L3 Experimental driver: dvips}
 %</dvips>
 %<*dvisvgm>
-  {l3dvisvgm.def}{2018-06-01}{}
+  {l3dvisvgm.def}{2018-06-14}{}
   {L3 Experimental driver: dvisvgm}
 %</dvisvgm>
 %<*pdfmode>
-  {l3pdfmode.def}{2018-06-01}{}
+  {l3pdfmode.def}{2018-06-14}{}
   {L3 Experimental driver: PDF mode}
 %</pdfmode>
 %<*xdvipdfmx>
-  {l3xdvidpfmx.def}{2018-06-01}{}
+  {l3xdvidpfmx.def}{2018-06-14}{}
   {L3 Experimental driver: xdvipdfmx}
 %</xdvipdfmx>
 %</package>

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3expan.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3expan.dtx	2018-06-15 21:10:05 UTC (rev 48021)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3expan.dtx	2018-06-15 21:10:33 UTC (rev 48022)
@@ -41,7 +41,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
 %
 % \maketitle
 %
@@ -64,8 +64,8 @@
 % when writing new functions or when applying a kernel function in a
 % situation that we haven't thought of before.
 %
-% Internally preprocessing of arguments is done with functions from the
-% |\exp_| module.  They all look alike, an example would be
+% Internally preprocessing of arguments is done with functions of the form
+% \cs[no-index]{exp_\ldots{}}.  They all look alike, an example would be
 % \cs{exp_args:NNo}. This function has three arguments, the first and the
 % second are a single tokens, while the third argument should be given
 % in braces. Applying \cs{exp_args:NNo} expands the content of third
@@ -111,8 +111,8 @@
 %   as an |n|-type argument, namely a braced multiple-token argument:
 %   |V|~extracts the value of a variable, |v|~extracts the value from
 %   the name of a variable, |n|~uses the argument as it is, |o|~expands
-%   once, |f|~expands fully the front of the token list, |x|~expands fully all
-%   tokens at the price of being non-expandable.
+%   once, |f|~expands fully the front of the token list, |e| and
+%   |x|~expand fully all tokens (differences are explained later).
 % \item A few odd argument types remain: |T|~and |F|~for conditional
 %   processing, otherwise identical to |n|-type arguments,
 %   |p|~for the parameter text
@@ -148,8 +148,8 @@
 %   generates the functions |\foo:NV| and |\foo:cV| in the same
 %   way. The \cs{cs_generate_variant:Nn} function can only be applied if
 %   the \meta{parent control sequence} is already defined. If the \meta{parent
-%   control sequence} is protected or if the \meta{variant} involves
-%   |x|~arguments, then the \meta{variant control sequence} is also
+%   control sequence} is protected or if the \meta{variant} involves any
+%   |x|~argument, then the \meta{variant control sequence} is also
 %   protected.  The \meta{variant} is created globally, as is any
 %   \cs[no-index]{exp_args:N\meta{variant}} function needed to carry out the
 %   expansion.
@@ -158,7 +158,7 @@
 %   allowed changes are
 %   \begin{itemize}
 %   \item |c|~variant of an |N|~parent;
-%   \item |o|, |V|, |v|, |f|, or~|x| variant of an |n|~parent;
+%   \item |o|, |V|, |v|, |f|, |e|, or~|x| variant of an |n|~parent;
 %   \item |N|, |n|, |T|, |F|, or |p| argument unchanged.
 %   \end{itemize}
 %   This means the \meta{parent} of a \meta{variant} form is always
@@ -167,7 +167,7 @@
 %   \cs{tl_count:N}.
 %
 %   For backward compatibility it is currently possible to make |n|,
-%   |o|, |V|, |v|, |f|, or |x|-type variants of an |N|-type argument or
+%   |o|, |V|, |v|, |f|, |e|, or |x|-type variants of an |N|-type argument or
 %   |N| or |c|-type variants of an |n|-type argument.  Both are
 %   deprecated.  The first because passing more than one token to an
 %   |N|-type argument will typically break the parent function's code.
@@ -180,36 +180,6 @@
 %
 % \section{Introducing the variants}
 %
-% It is usually best to follow the following guidelines when defining
-% new functions that are supposed to come with variant forms.
-% \begin{itemize}
-%   \item
-%     Arguments that need full expansion (\emph{i.e.}, are denoted
-%     with |x|) should be avoided if possible as they can not be
-%     processed expandably, \emph{i.e.}, functions of this type
-%     cannot work correctly in arguments that are themselves subject to |x|
-%     expansion.
-% \end{itemize}
-% When speed is essential (for functions that do very little work and
-% are used numerous times in a document) the following applies because
-% internal functions for argument expansion come in two flavours, some
-% faster than others.
-% \begin{itemize}
-%   \item
-%     Arguments that might need expansion should come first in the list of
-%     arguments.
-%   \item
-%     Arguments that should consist of single tokens |N|, |c|, |V|, or
-%     |v| should come first among these.
-%   \item
-%     Arguments that appear after the first multi-token argument |n|, |f|
-%     or |o| require slightly slower special processing to be expanded.
-%     Therefore it is best to use the optimized functions,
-%     namely those that contain only |N|, |c|, |V|, and |v|, and, in the
-%     last position, |o|, |f|, with possible trailing |N| or |n| or |T|
-%     or |F|, which are not expanded.
-% \end{itemize}
-%
 % The |V| type returns the value of a register, which can be one of
 % |tl|, |clist|, |int|, |skip|, |dim|, |muskip|, or built-in \TeX{}
 % registers. The |v| type is the same except it first creates a
@@ -223,6 +193,22 @@
 % specific expansion steps are needed, such as when using delimited
 % arguments, should the lower-level functions with |o| specifiers be employed.
 %
+% The |e| type expands all tokens fully, starting from the first.  More
+% precisely the expansion is identical to that of \TeX{}'s \tn{message}
+% (in particular |#| needs not be doubled).  It was added in May 2018.
+% In recent enough engines (starting around 2019) it relies on the
+% primitive \tn{expanded} hence is fast.  In older engines it is very
+% much slower.  As a result it should only be used in performance
+% critical code if typical users will have a recent installation of the
+% \TeX{} ecosystem.
+%
+% The |x| type expands all tokens fully, starting from the first.  In
+% contrast to |e|, all macro parameter characters |#| must be doubled,
+% and omitting this leads to low-level errors.  In addition this type of
+% expansion is not expandable, namely functions that have |x| in their
+% signature do not themselves expand when appearing inside |x| or |e|
+% expansion.
+%
 % The |f| type is so special that it deserves an example.  It is
 % typically used in contexts where only expandable commands are allowed.
 % Then |x|-expansion cannot be used, and |f|-expansion provides an
@@ -251,12 +237,13 @@
 % \begin{quote}
 %   |\example:n { 3 , \int_eval:n { 3 + 4 } }|
 % \end{quote}
-% while using |\example:x| instead results in
+% while using |\example:x| or |\example:e| instead results in
 % \begin{quote}
 %   |\example:n { 3 , 7 }|
 % \end{quote}
-% at the cost of being protected.
-% If you use this type of expansion in conditional processing then
+% at the cost of being protected (for |x| type) or very much slower in
+% old engines (for |e| type).
+% If you use |f| type expansion in conditional processing then
 % you should stick to using |TF|  type functions only as the expansion
 % does not finish any |\if... \fi:| itself!
 %
@@ -280,6 +267,50 @@
 % leave |\g_tmpb_tl| unchanged: |{| is the first token in the
 % argument and is non-expandable.
 %
+% It is usually best to keep the following in mind when using variant
+% forms.
+% \begin{itemize}
+%   \item
+%     Variants with |x|-type arguments (that are fully expanded before
+%     being passed to the |n|-type base function) are never expandable
+%     even when the base function is.  Such variants cannot work
+%     correctly in arguments that are themselves subject to expansion.
+%     Consider using |f| or |e| expansion.
+%   \item
+%     In contrast, |e|~expansion (full expansion, almost like~|x| except
+%     for the treatment of~|#|) does not prevent variants from being
+%     expandable (if the base function is).  The drawback is that
+%     |e|~expansion is very much slower in old engines (before 2019).
+%     Consider using |f|~expansion if that type of expansion is
+%     sufficient to perform the required expansion, or |x|~expansion if
+%     the variant will not itself need to be expandable.
+%   \item
+%     Finally |f|~expansion only expands the front of the token list,
+%     stopping at the first non-expandable token.  This may fail to
+%     fully expand the argument.
+% \end{itemize}
+%
+% When speed is essential (for functions that do very little work and
+% whose variants are used numerous times in a document) the following
+% considerations apply because internal functions for argument expansion
+% come in two flavours, some faster than others.
+% \begin{itemize}
+%   \item
+%     Arguments that might need expansion should come first in the list
+%     of arguments.
+%   \item
+%     Arguments that should consist of single tokens |N|, |c|, |V|, or
+%     |v| should come first among these.
+%   \item
+%     Arguments that appear after the first multi-token argument |n|,
+%     |f|, |e|, or |o| require slightly slower special processing to be
+%     expanded.  Therefore it is best to use the optimized functions,
+%     namely those that contain only |N|, |c|, |V|, and |v|, and, in the
+%     last position, |o|, |f|, |e|, with possible trailing |N| or |n| or
+%     |T| or |F|, which are not expanded.  Any |x|-type argument causes
+%     slightly slower processing.
+% \end{itemize}
+%
 % \section{Manipulating the first argument}
 %
 % These functions are described in detail: expansion of multiple tokens follows
@@ -350,6 +381,25 @@
 %   \end{texnote}
 % \end{function}
 %
+% \begin{function}[EXP, added = 2018-05-15]{\exp_args:Ne}
+%   \begin{syntax}
+%     \cs{exp_args:Ne} \meta{function} \Arg{tokens}
+%   \end{syntax}
+%   This function absorbs two arguments (the \meta{function} name and
+%   the \meta{tokens}) and exhaustively expands the \meta{tokens}.
+%   The result is inserted in braces into the input stream
+%   \emph{after} reinsertion of the \meta{function}.
+%   Thus the \meta{function} may take more
+%   than one argument: all others are left unchanged.
+%   \begin{texnote}
+%     This relies on the \tn{expanded} primitive when available (in
+%     \LuaTeX{} and starting around 2019 in other engines).  Otherwise
+%     it uses some fall-back code that is very much slower.  As a result
+%     it should only be used in performance-critical code if typical
+%     users have a recent installation of the \TeX{} ecosystem.
+%   \end{texnote}
+% \end{function}
+%
 % \begin{function}[EXP]{\exp_args:Nf}
 %   \begin{syntax}
 %     \cs{exp_args:Nf} \meta{function} \Arg{tokens}
@@ -377,12 +427,13 @@
 %
 % \section{Manipulating two arguments}
 %
-% \begin{function}[EXP]
+% \begin{function}[EXP, updated = 2018-05-15]
 %   {
 %     \exp_args:NNc,
 %     \exp_args:NNo,
 %     \exp_args:NNV,
 %     \exp_args:NNv,
+%     \exp_args:NNe,
 %     \exp_args:NNf,
 %     \exp_args:Ncc,
 %     \exp_args:Nco,
@@ -400,12 +451,13 @@
 %   by the expansion of the second and third arguments.
 % \end{function}
 %
-% \begin{function}[EXP, updated = 2012-01-14]
+% \begin{function}[EXP, updated = 2018-05-15]
 %   {
 %     \exp_args:Nnc,
 %     \exp_args:Nno,
 %     \exp_args:NnV,
 %     \exp_args:Nnv,
+%     \exp_args:Nne,
 %     \exp_args:Nnf,
 %     \exp_args:Noc,
 %     \exp_args:Noo,
@@ -514,11 +566,12 @@
 %
 % \section{Unbraced expansion}
 %
-% \begin{function}[EXP, updated = 2012-02-12]
+% \begin{function}[EXP, updated = 2018-05-15]
 %   {
 %     \exp_last_unbraced:No,
 %     \exp_last_unbraced:NV,
 %     \exp_last_unbraced:Nv,
+%     \exp_last_unbraced:Ne,
 %     \exp_last_unbraced:Nf,
 %     \exp_last_unbraced:NNo,
 %     \exp_last_unbraced:NNV,
@@ -605,7 +658,7 @@
 %   \end{syntax}
 %   Prevents expansion of the \meta{token} in a context where it would
 %   otherwise be expanded, for example an |x|-type argument or the first
-%   token in an |o| or |f| argument.
+%   token in an |o| or |e| or |f| argument.
 %   \begin{texnote}
 %     This is the \TeX{} \tn{noexpand} primitive.  It only prevents
 %     expansion.  At the beginning of an |f|-type argument, a space
@@ -638,7 +691,7 @@
 %   \begin{syntax}
 %     \cs{exp_not:n} \Arg{tokens}
 %   \end{syntax}
-%   Prevents expansion of the \meta{tokens} in an |x|-type argument.  In
+%   Prevents expansion of the \meta{tokens} in an |e| or |x|-type argument.  In
 %   all other cases the \meta{tokens} continue to be expanded, for
 %   example in the input stream or in other types of arguments such as
 %   \texttt{c}, \texttt{f}, \texttt{v}.  The argument of \cs{exp_not:n}
@@ -647,7 +700,9 @@
 %     This is the \eTeX{} \tn{unexpanded} primitive.  In an
 %     |x|-expanding definition (\cs{cs_new:Npx}), \cs{exp_not:n}~|{#1}|
 %     is equivalent to |##1| rather than to~|#1|, namely it inserts the
-%     two characters |#| and~|1|.
+%     two characters |#| and~|1|.  In an |e|-type argument
+%     \cs{exp_not:n}~|{#}| is equivalent to |#|, namely it inserts the
+%     character~|#|.
 %   \end{texnote}
 % \end{function}
 %
@@ -685,6 +740,16 @@
 %   \end{texnote}
 % \end{function}
 %
+% \begin{function}[EXP]{\exp_not:e}
+%   \begin{syntax}
+%     \cs{exp_not:e} \Arg{tokens}
+%   \end{syntax}
+%   Expands \meta{tokens} exhaustively, then protects the result of the
+%   expansion (including any tokens which were not expanded) from
+%   further expansion in |e| or |x|-type arguments using \cs{exp_not:n}.
+%   This is very rarely useful but is provided for consistency.
+% \end{function}
+%
 % \begin{function}[EXP]{\exp_not:f}
 %   \begin{syntax}
 %     \cs{exp_not:f} \Arg{tokens}
@@ -841,7 +906,7 @@
 %
 % \section{Internal functions}
 %
-% \begin{function}{\::n, \::N, \::p, \::c, \::o, \::f, \::x, \::v, \::V, \:::}
+% \begin{function}{\::n, \::N, \::p, \::c, \::o, \::e, \::f, \::x, \::v, \::V, \:::}
 %   \begin{syntax}
 %     |\cs_new:Npn \exp_args:Ncof { \::c \::o \::f \::: }|
 %   \end{syntax}
@@ -851,7 +916,7 @@
 % \end{function}
 %
 % \begin{function}
-%   {\::o_unbraced, \::f_unbraced, \::x_unbraced, \::v_unbraced, \::V_unbraced}
+%   {\::o_unbraced, \::e_unbraced, \::f_unbraced, \::x_unbraced, \::v_unbraced, \::V_unbraced}
 %   \begin{syntax}
 %     |\cs_new:Npn \exp_last_unbraced:Nno { \::n \::o_unbraced \::: }|
 %   \end{syntax}
@@ -986,6 +1051,22 @@
 %    \end{macrocode}
 % \end{macro}
 %
+% \begin{macro}[EXP]{\::e}
+%   With the \tn{expanded} primitive available, just expand.  Otherwise
+%   defer to \cs{exp_args:Ne} implemented later.
+%    \begin{macrocode}
+\cs_if_exist:NTF \tex_expanded:D
+  {
+    \cs_new:Npn \::e #1 \::: #2#3
+      { \tex_expanded:D { \exp_not:n { #1 \::: } { \exp_not:n {#2} {#3} } } }
+  }
+  {
+    \cs_new:Npn \::e #1 \::: #2#3
+      { \exp_args:Ne \@@_arg_next:nnn {#3} {#1} {#2} }
+  }
+%    \end{macrocode}
+% \end{macro}
+%
 % \begin{macro}[EXP]{\::f}
 % \begin{macro}{\exp_stop_f:}
 %   This function is used to expand a token list until the first
@@ -1169,6 +1250,25 @@
 % \end{macro}
 % \end{macro}
 %
+% \begin{macro}[EXP]{\exp_args:Ne}
+%   When the \tn{expanded} primitive is available, use it.  Otherwise
+%   use \cs{@@_e:nn}, defined later, to fully expand tokens.
+%    \begin{macrocode}
+\cs_if_exist:NTF \tex_expanded:D
+  {
+    \cs_new:Npn \exp_args:Ne #1#2
+      { \exp_after:wN #1 \tex_expanded:D { {#2} } }
+  }
+  {
+    \cs_new:Npn \exp_args:Ne #1#2
+      {
+        \exp_after:wN #1 \exp_after:wN
+          { \exp:w \@@_e:nn {#2} { } }
+      }
+  }
+%    \end{macrocode}
+% \end{macro}
+%
 % \begin{macro}[EXP]{\exp_args:Nf, \exp_args:NV, \exp_args:Nv}
 %    \begin{macrocode}
 \cs_new:Npn \exp_args:Nf #1#2
@@ -1188,7 +1288,7 @@
 %
 % \begin{macro}[EXP]
 %   {
-%     \exp_args:NNV, \exp_args:NNv, \exp_args:NNf,
+%     \exp_args:NNV, \exp_args:NNv, \exp_args:NNe, \exp_args:NNf,
 %     \exp_args:Nco, \exp_args:NcV, \exp_args:Ncv, \exp_args:Ncf,
 %     \exp_args:NVV,
 %   }
@@ -1209,6 +1309,16 @@
     \exp_after:wN #2
     \exp_after:wN { \exp:w \@@_eval_register:c {#3} }
   }
+\cs_if_exist:NTF \tex_expanded:D
+  {
+    \cs_new:Npn \exp_args:NNe #1#2#3
+      {
+        \exp_after:wN #1
+        \exp_after:wN #2
+        \tex_expanded:D { {#3} }
+      }
+  }
+  { \cs_new:Npn \exp_args:NNe { \::N \::e \::: } }
 \cs_new:Npn \exp_args:NNf #1#2#3
   {
     \exp_after:wN #1
@@ -1302,7 +1412,7 @@
 %
 % \begin{macro}[EXP]
 %   {
-%     \exp_args:Nnc, \exp_args:Nno, \exp_args:NnV, \exp_args:Nnv, \exp_args:Nnf,
+%     \exp_args:Nnc, \exp_args:Nno, \exp_args:NnV, \exp_args:Nnv, \exp_args:Nne, \exp_args:Nnf,
 %     \exp_args:Noc, \exp_args:Noo, \exp_args:Nof,
 %     \exp_args:NVo, \exp_args:Nfo, \exp_args:Nff,
 %   }
@@ -1318,6 +1428,7 @@
 \cs_new:Npn \exp_args:Nno { \::n \::o \::: }
 \cs_new:Npn \exp_args:NnV { \::n \::V \::: }
 \cs_new:Npn \exp_args:Nnv { \::n \::v \::: }
+\cs_new:Npn \exp_args:Nne { \::n \::e \::: }
 \cs_new:Npn \exp_args:Nnf { \::n \::f \::: }
 \cs_new:Npn \exp_args:Noc { \::o \::c \::: }
 \cs_new:Npn \exp_args:Noo { \::o \::o \::: }
@@ -1384,6 +1495,7 @@
 % \begin{macro}[EXP]{\::o_unbraced}
 % \begin{macro}[EXP]{\::V_unbraced}
 % \begin{macro}[EXP]{\::v_unbraced}
+% \begin{macro}[EXP]{\::e_unbraced}
 % \begin{macro}[EXP]{\::f_unbraced}
 % \begin{macro}[EXP]{\::x_unbraced}
 %   There are a few places where the last argument needs to be available
@@ -1402,6 +1514,15 @@
     \exp_after:wN \@@_arg_last_unbraced:nn
       \exp_after:wN { \exp:w \@@_eval_register:c {#2} } {#1}
   }
+\cs_if_exist:NTF \tex_expanded:D
+  {
+    \cs_new:Npn \::e_unbraced \::: #1#2
+      { \tex_expanded:D { \exp_not:n {#1} #2 } }
+  }
+  {
+    \cs_new:Npn \::e_unbraced \::: #1#2
+      { \exp:w \@@_e:nn {#2} {#1} }
+  }
 \cs_new:Npn \::f_unbraced \::: #1#2
   {
     \exp_after:wN \@@_arg_last_unbraced:nn
@@ -1419,6 +1540,7 @@
 % \end{macro}
 % \end{macro}
 % \end{macro}
+% \end{macro}
 %
 % \begin{macro}[EXP]
 %   {
@@ -1450,6 +1572,12 @@
   { \exp_after:wN #1 \exp:w \@@_eval_register:N #2 }
 \cs_new:Npn \exp_last_unbraced:Nv #1#2
   { \exp_after:wN #1 \exp:w \@@_eval_register:c {#2} }
+\cs_if_exist:NTF \tex_expanded:D
+  {
+    \cs_new:Npn \exp_last_unbraced:Ne #1#2
+      { \exp_after:wN #1 \tex_expanded:D {#2} }
+  }
+  { \cs_new:Npn \exp_last_unbraced:Ne { \::e_unbraced \::: } }
 \cs_new:Npn \exp_last_unbraced:Nf #1#2
   { \exp_after:wN #1 \exp:w \exp_end_continue_f:w #2 }
 \cs_new:Npn \exp_last_unbraced:NNo #1#2#3
@@ -1539,16 +1667,26 @@
 %
 % \begin{macro}[EXP]{\exp_not:c}
 % \begin{macro}[EXP]{\exp_not:o}
+% \begin{macro}[EXP]{\exp_not:e}
 % \begin{macro}[EXP]{\exp_not:f}
 % \begin{macro}[EXP]{\exp_not:V}
 % \begin{macro}[EXP]{\exp_not:v}
 %   All these except \cs{exp_not:c} call the kernel-internal
-%   \cs{__kernel_exp_not:w} namely \tn{etex_unexpanded:D}.
+%   \cs{__kernel_exp_not:w} namely \tn{tex_unexpanded:D}.
 %    \begin{macrocode}
 \cs_new:Npn \exp_not:c #1 { \exp_after:wN \exp_not:N \cs:w #1 \cs_end: }
 \cs_new:Npn \exp_not:o #1 { \__kernel_exp_not:w \exp_after:wN {#1} }
+\cs_if_exist:NTF \tex_expanded:D
+  {
+    \cs_new:Npn \exp_not:e #1
+      { \__kernel_exp_not:w \tex_expanded:D { {#1} } }
+  }
+  {
+    \cs_new:Npn \exp_not:e
+      { \__kernel_exp_not:w \exp_args:Ne \prg_do_nothing: }
+  }
 \cs_new:Npn \exp_not:f #1
-  { \tex_unexpanded:D \exp_after:wN { \exp:w \exp_end_continue_f:w #1 } }
+  { \__kernel_exp_not:w \exp_after:wN { \exp:w \exp_end_continue_f:w #1 } }
 \cs_new:Npn \exp_not:V #1
   {
     \__kernel_exp_not:w \exp_after:wN
@@ -1565,6 +1703,7 @@
 % \end{macro}
 % \end{macro}
 % \end{macro}
+% \end{macro}
 %
 % \subsection{Controlled expansion}
 %
@@ -1632,7 +1771,386 @@
 % \end{macro}
 %
 %
+% \subsection{Emulating \texttt{e}-type expansion}
 %
+% When the \tn{expanded} primitive is available it is used to implement
+% \texttt{e}-type expansion; otherwise we emulate it.
+%
+%    \begin{macrocode}
+\cs_if_exist:NF \tex_expanded:D
+  {
+%    \end{macrocode}
+%
+% \begin{macro}[EXP]{\@@_e:nn}
+%   Repeatedly expand tokens, keeping track of fully-expanded tokens in
+%   the second argument to \cs{@@_e:nn}; this function eventually
+%   calls \cs{@@_e_end:nn} to leave \cs{exp_end:} in the input
+%   stream, followed by the result of the expansion.  There are many
+%   special cases: spaces, brace groups, \tn{noexpand}, \tn{unexpanded},
+%   \tn{the}, \tn{primitive}.
+%    \begin{macrocode}
+    \cs_new:Npn \@@_e:nn #1
+      {
+        \if_false: { \fi:
+          \tl_if_head_is_N_type:nTF {#1}
+            { \@@_e:N }
+            {
+              \tl_if_head_is_group:nTF {#1}
+                { \@@_e_group:n }
+                {
+                  \tl_if_empty:nTF {#1}
+                    { \exp_after:wN \@@_e_end:nn }
+                    { \exp_after:wN \@@_e_space:nn }
+                  \exp_after:wN { \if_false: } \fi:
+                }
+            }
+          #1
+        }
+      }
+    \cs_new:Npn \@@_e_end:nn #1#2 { \exp_end: #2 }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[EXP]{\@@_e_space:nn}
+%   For an explicit space character, remove it by \texttt{f}-expansion
+%   and put it in the (future) output.
+%    \begin{macrocode}
+    \cs_new:Npn \@@_e_space:nn #1#2
+      { \exp_args:Nf \@@_e:nn {#1} { #2 ~ } }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[EXP]{\@@_e_group:n, \@@_e_put:nn, \@@_e_put:nnn}
+%   For a group, expand its contents, wrap it in two pairs of braces,
+%   and call \cs{@@_e_put:nn}.  This function places the first item (the
+%   double-brace wrapped result) into the output.  Importantly,
+%   \cs{tl_head:n} works even if the input contains quarks.
+%    \begin{macrocode}
+    \cs_new:Npn \@@_e_group:n #1
+      {
+        \exp_after:wN \@@_e_put:nn
+        \exp_after:wN { \exp_after:wN { \exp_after:wN {
+              \exp:w \if_false: } \fi: \@@_e:nn {#1} { } } }
+      }
+    \cs_new:Npn \@@_e_put:nn #1
+      {
+        \exp_args:NNo \exp_args:No \@@_e_put:nnn
+          { \tl_head:n {#1} } {#1}
+      }
+    \cs_new:Npn \@@_e_put:nnn #1#2#3
+      { \exp_args:No \@@_e:nn { \use_none:n #2 } { #3 #1 } }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[EXP]{\@@_e:N}
+%   For an \texttt{N}-type token, call \cs{@@_e:Nnn} with arguments the
+%   \meta{first token}, the remaining tokens to expand and what's
+%   already been expanded.  If the \meta{first token} is non-expandable,
+%   including \tn{protected} (\tn{long} or not) macros, it is put in the
+%   result by \cs{@@_e_protected:Nnn}.  The four special primitives
+%   \tn{unexpanded}, \tn{noexpand}, \tn{the}, \tn{primitive} are
+%   detected; otherwise the token is expanded by
+%   \cs{@@_e_expandable:Nnn}.
+%    \begin{macrocode}
+    \cs_new:Npn \@@_e:N #1
+      {
+        \exp_after:wN \@@_e:Nnn
+        \exp_after:wN #1
+        \exp_after:wN { \if_false: } \fi:
+      }
+    \cs_new:Npn \@@_e:Nnn #1
+      {
+        \if_case:w
+          \exp_after:wN \if_meaning:w \exp_not:N #1 #1 1 ~ \fi:
+          \token_if_protected_macro:NT #1 { 1 ~ }
+          \token_if_protected_long_macro:NT #1 { 1 ~ }
+          \if_meaning:w \exp_not:n #1 2 ~ \fi:
+          \if_meaning:w \exp_not:N #1 3 ~ \fi:
+          \if_meaning:w \tex_the:D #1 4 ~ \fi:
+          \if_meaning:w \tex_primitive:D #1 5 ~ \fi:
+          0 ~
+          \exp_after:wN \@@_e_expandable:Nnn
+        \or: \exp_after:wN \@@_e_protected:Nnn
+        \or: \exp_after:wN \@@_e_unexpanded:Nnn
+        \or: \exp_after:wN \@@_e_noexpand:Nnn
+        \or: \exp_after:wN \@@_e_the:Nnn
+        \or: \exp_after:wN \@@_e_primitive:Nnn
+        \fi:
+        #1
+      }
+    \cs_new:Npn \@@_e_protected:Nnn #1#2#3
+      { \@@_e:nn {#2} { #3 #1 } }
+    \cs_new:Npn \@@_e_expandable:Nnn #1#2
+      { \exp_args:No \@@_e:nn { #1 #2 } }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[EXP]{\@@_e_primitive:Nnn}
+%   Quite rare.  Will be implemented later.
+%    \begin{macrocode}
+    \cs_new:Npn \@@_e_primitive:Nnn #1
+      {
+        \__kernel_msg_expandable_error:nnn { kernel } { e-type }
+          { \primitive not~implemented }
+        \@@_e:nn
+      }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[EXP]{\@@_e_noexpand:Nnn}
+%   The \tn{noexpand} primitive has no effect when followed by a token
+%   that is not \texttt{N}-type; otherwise \cs{@@_e_put:nn} can grab the
+%   next token and put it in the result unchanged.
+%    \begin{macrocode}
+    \cs_new:Npn \@@_e_noexpand:Nnn #1#2
+      {
+        \tl_if_head_is_N_type:nTF {#2}
+          { \@@_e_put:nn } { \@@_e:nn } {#2}
+      }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[EXP]
+%   {
+%     \@@_e_unexpanded:Nnn, \@@_e_unexpanded:nn,
+%     \@@_e_unexpanded:nN, \@@_e_unexpanded:N
+%   }
+%   The \tn{unexpanded} primitive expands and ignores any space,
+%   \cs{scan_stop:}, or token affected by \cs{exp_not:N}, then expects a
+%   brace group.  Since we only support brace-balanced token lists it is
+%   impossible to support the case where the argument of \tn{unexpanded}
+%   starts with an implicit brace.  Even though we want to expand and
+%   ignore spaces we cannot blindly \texttt{f}-expand because tokens
+%   affected by \cs{exp_not:N} should discarded without being expanded
+%   further.
+%
+%   As usual distinguish four cases: brace group (the normal case, where
+%   we just put the item in the result), space (just \texttt{f}-expand
+%   to remove the space), empty (an error), or \texttt{N}-type
+%   \meta{token}.  In the last case call \cs{@@_e_unexpanded:nN}
+%   triggered by an \texttt{f}-expansion.  Having a non-expandable
+%   \meta{token} after \tn{unexpanded} is an error (we recover by
+%   passing |{}| to \tn{unexpanded}; this is different from \TeX{}
+%   because the error recovery of \tn{unexpanded} changes the balance of
+%   braces), unless that \meta{token} is \cs{scan_stop:} or a space
+%   (recall that we don't implement the case of an implicit begin-group
+%   token).  An expandable \meta{token} is instead expanded, unless it
+%   is \tn{noexpand}.  That primitive can be followed by an expandable
+%   \texttt{N}-type token, to be removed, by a non-expandable one, kept
+%   (and later causing an error), by a space, removed by
+%   \texttt{f}-expansion, or by a brace group or nothing (later causing
+%   an error).
+%    \begin{macrocode}
+    \cs_new:Npn \@@_e_unexpanded:Nnn #1 { \@@_e_unexpanded:nn }
+    \cs_new:Npn \@@_e_unexpanded:nn #1
+      {
+        \tl_if_head_is_N_type:nTF {#1}
+          {
+            \exp_args:Nf \@@_e_unexpanded:nn
+              { \@@_e_unexpanded:nN {#1} #1 }
+          }
+          {
+            \tl_if_head_is_group:nTF {#1}
+              { \@@_e_put:nn }
+              {
+                \tl_if_empty:nTF {#1}
+                  {
+                    \__kernel_msg_expandable_error:nnn
+                      { kernel } { e-type }
+                      { \unexpanded missing~brace }
+                    \@@_e_end:nn
+                  }
+                  { \exp_args:Nf \@@_e_unexpanded:nn }
+              }
+            {#1}
+          }
+      }
+    \cs_new:Npn \@@_e_unexpanded:nN #1#2
+      {
+        \exp_after:wN \if_meaning:w \exp_not:N #2 #2
+          \exp_after:wN \use_i:nn
+        \else:
+          \exp_after:wN \use_ii:nn
+        \fi:
+        {
+          \token_if_eq_catcode:NNTF #2 \c_space_token
+            { \exp_stop_f: }
+            {
+              \token_if_eq_meaning:NNTF #2 \scan_stop:
+                { \exp_stop_f: }
+                {
+                  \__kernel_msg_expandable_error:nnn
+                    { kernel } { e-type }
+                    { \unexpanded missing~brace }
+                  { }
+                }
+            }
+        }
+        {
+          \token_if_eq_meaning:NNTF #2 \exp_not:N
+            {
+              \exp_args:No \tl_if_head_is_N_type:nT { \use_none:n #1 }
+                { \@@_e_unexpanded:N }
+            }
+            { \exp_after:wN \exp_stop_f: #2 }
+        }
+      }
+    \cs_new:Npn \@@_e_unexpanded:N #1
+      {
+        \exp_after:wN \if_meaning:w \exp_not:N #1 #1 \else:
+          \exp_after:wN \use_i:nn
+        \fi:
+        \exp_stop_f: #1
+      }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[EXP]{\@@_e_the:Nnn, \@@_e_the:N, \@@_e_the_toks_reg:N}
+%   Finally implement \tn{the}.  Followed by anything other than an
+%   \texttt{N}-type \meta{token} this causes an error (we just let
+%   \TeX{} make one), otherwise we test the \meta{token}.  If the
+%   \meta{token} is expandable, expand it.  Otherwise it could be any
+%   kind of register, or things like \tn{numexpr}, so there is no way to
+%   deal with all cases.  Thankfully, only \tn{toks} data needs to be
+%   protected from expansion since everything else gives a string of
+%   characters.  If the \meta{token} is \tn{toks} we find a number and
+%   unpack using the |the_toks| functions.  If it is a token register we
+%   unpack it in a brace group and call \cs{@@_e_put:nn} to move it to
+%   the result.  Otherwise we unpack and continue expanding (useless but
+%   safe) since it is basically impossible to have a handle on where the
+%   result of \tn{the} ends.
+%    \begin{macrocode}
+    \cs_new:Npn \@@_e_the:Nnn #1#2
+      {
+        \tl_if_head_is_N_type:nTF {#2}
+          { \if_false: { \fi: \@@_e_the:N #2 } }
+          { \exp_args:No \@@_e:nn { \tex_the:D #2 } }
+      }
+    \cs_new:Npn \@@_e_the:N #1
+      {
+        \exp_after:wN \if_meaning:w \exp_not:N #1 #1
+          \exp_after:wN \use_i:nn
+        \else:
+          \exp_after:wN \use_ii:nn
+        \fi:
+        {
+          \if_meaning:w \tex_toks:D #1
+            \exp_after:wN \@@_e_the_toks:wnn \int_value:w
+            \exp_after:wN \@@_e_the_toks:n
+            \exp_after:wN { \int_value:w \if_false: } \fi:
+          \else:
+            \@@_e_if_toks_register:NTF #1
+              { \exp_after:wN \@@_e_the_toks_reg:N }
+              {
+                \exp_after:wN \@@_e:nn \exp_after:wN {
+                  \tex_the:D \if_false: } \fi:
+              }
+            \exp_after:wN #1
+          \fi:
+        }
+        {
+          \exp_after:wN \@@_e_the:Nnn \exp_after:wN ?
+          \exp_after:wN { \exp:w \if_false: } \fi:
+          \exp_after:wN \exp_end: #1
+        }
+      }
+    \cs_new:Npn \@@_e_the_toks_reg:N #1
+      {
+        \exp_after:wN \@@_e_put:nn \exp_after:wN {
+          \exp_after:wN {
+            \tex_the:D \if_false: } \fi: #1 }
+      }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[EXP]{\@@_e_the_toks:wnn, \@@_e_the_toks:n, \@@_e_the_toks:N}
+%   The calling function has applied \cs{int_value:w} so we collect
+%   digits with \cs{@@_e_the_toks:n} (which gets the token list as an
+%   argument) and \cs{@@_e_the_toks:N} (which gets the first token in
+%   case it is \texttt{N}-type).  The digits are themselves collected
+%   into an \cs{int_value:w} argument to \cs{@@_e_the_toks:wnn}.  Then
+%   that function unpacks the \tn{toks}\meta{number} into the result.
+%   We include |?| because \cs{@@_e_put:nnn} removes one item from its
+%   second argument.  Note that our approach is rather crude: in cases
+%   like |\the\toks12~34| the first \cs{int_value:w} removes the space
+%   and we will incorrectly unpack the |\the\toks1234|.
+%    \begin{macrocode}
+    \cs_new:Npn \@@_e_the_toks:wnn #1; #2
+      {
+        \exp_args:No \@@_e_put:nnn
+          { \tex_the:D \tex_toks:D #1 } { ? #2 }
+      }
+    \cs_new:Npn \@@_e_the_toks:n #1
+      {
+        \tl_if_head_is_N_type:nTF {#1}
+          { \exp_after:wN \@@_e_the_toks:N \if_false: { \fi: #1 } }
+          { ; {#1} }
+      }
+    \cs_new:Npn \@@_e_the_toks:N #1
+      {
+        \if_int_compare:w 10 < 9 \token_to_str:N #1 \exp_stop_f:
+          \exp_after:wN \use_i:nn
+        \else:
+          \exp_after:wN \use_ii:nn
+        \fi:
+        {
+          #1
+          \exp_after:wN \@@_e_the_toks:n
+        }
+        { \exp_after:wN ; }
+        \exp_after:wN { \if_false: } \fi:
+      }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[EXP]{\@@_e_if_toks_register:NTF}
+%   We need to detect both \tn{toks} registers like \tn{toks@} (in
+%   \LaTeXe{}) and parameters such as \tn{everypar}, as the result of
+%   unpacking the register should not expand further.  The list of
+%   parameters is finite so we just use a \cs{cs_if_exist:cTF} test to
+%   look up in a table.  Registers are found by
+%   \cs{token_if_toks_register:NTF} by inspecting the meaning.  We abuse
+%   \cs{cs_to_str:N}'s ability to remove a leading escape character
+%   whatever it is.
+%    \begin{macrocode}
+    \prg_new_conditional:Npnn \@@_e_if_toks_register:N #1 { TF }
+      {
+        \token_if_toks_register:NTF #1 { \prg_return_true: }
+          {
+            \cs_if_exist:cTF
+              {
+                @@_e_the_
+                \exp_after:wN \cs_to_str:N
+                \token_to_meaning:N #1
+                :
+              } { \prg_return_true: } { \prg_return_false: }
+          }
+      }
+    \cs_new_eq:NN \@@_e_the_XeTeXinterchartoks: ?
+    \cs_new_eq:NN \@@_e_the_errhelp: ?
+    \cs_new_eq:NN \@@_e_the_everycr: ?
+    \cs_new_eq:NN \@@_e_the_everydisplay: ?
+    \cs_new_eq:NN \@@_e_the_everyeof: ?
+    \cs_new_eq:NN \@@_e_the_everyhbox: ?
+    \cs_new_eq:NN \@@_e_the_everyjob: ?
+    \cs_new_eq:NN \@@_e_the_everymath: ?
+    \cs_new_eq:NN \@@_e_the_everypar: ?
+    \cs_new_eq:NN \@@_e_the_everyvbox: ?
+    \cs_new_eq:NN \@@_e_the_output: ?
+    \cs_new_eq:NN \@@_e_the_pdfpageattr: ?
+    \cs_new_eq:NN \@@_e_the_pdfpageresources: ?
+    \cs_new_eq:NN \@@_e_the_pdfpagesattr: ?
+    \cs_new_eq:NN \@@_e_the_pdfpkmode: ?
+%    \end{macrocode}
+% \end{macro}
+%
+% We are done emulating \texttt{e}-type argument expansion when
+% \tn{expanded} is unavailable.
+%    \begin{macrocode}
+  }
+%    \end{macrocode}
+%
+%
 % \subsection{Defining function variants}
 %
 %    \begin{macrocode}
@@ -1915,10 +2433,12 @@
         \if:w V #1 n \else:
           \if:w v #1 n \else:
             \if:w f #1 n \else:
-              \if:w x #1 n \else:
-                \if:w n #1 n \else:
-                  \if:w N #1 N \else:
-                    \scan_stop:
+              \if:w e #1 n \else:
+                \if:w x #1 n \else:
+                  \if:w n #1 n \else:
+                    \if:w N #1 N \else:
+                      \scan_stop:
+                    \fi:
                   \fi:
                 \fi:
               \fi:

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3file.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3file.dtx	2018-06-15 21:10:05 UTC (rev 48021)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3file.dtx	2018-06-15 21:10:33 UTC (rev 48022)
@@ -42,7 +42,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3final.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3final.dtx	2018-06-15 21:10:05 UTC (rev 48021)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3final.dtx	2018-06-15 21:10:33 UTC (rev 48022)
@@ -41,7 +41,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3flag.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3flag.dtx	2018-06-15 21:10:05 UTC (rev 48021)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3flag.dtx	2018-06-15 21:10:33 UTC (rev 48022)
@@ -41,7 +41,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx	2018-06-15 21:10:05 UTC (rev 48021)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx	2018-06-15 21:10:33 UTC (rev 48022)
@@ -38,7 +38,7 @@
 %          {latex-team at latex-project.org}^^A
 %    }^^A
 % }
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
 % \maketitle
 %
 % \begin{documentation}

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-aux.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-aux.dtx	2018-06-15 21:10:05 UTC (rev 48021)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-aux.dtx	2018-06-15 21:10:33 UTC (rev 48022)
@@ -41,7 +41,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx	2018-06-15 21:10:05 UTC (rev 48021)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx	2018-06-15 21:10:33 UTC (rev 48022)
@@ -38,7 +38,7 @@
 %          {latex-team at latex-project.org}^^A
 %    }^^A
 % }
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx	2018-06-15 21:10:05 UTC (rev 48021)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx	2018-06-15 21:10:33 UTC (rev 48022)
@@ -41,7 +41,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx	2018-06-15 21:10:05 UTC (rev 48021)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx	2018-06-15 21:10:33 UTC (rev 48022)
@@ -38,7 +38,7 @@
 %          {latex-team at latex-project.org}^^A
 %    }^^A
 % }
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-extended.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-extended.dtx	2018-06-15 21:10:05 UTC (rev 48021)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-extended.dtx	2018-06-15 21:10:33 UTC (rev 48022)
@@ -38,7 +38,7 @@
 %          {latex-team at latex-project.org}^^A
 %    }^^A
 % }
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx	2018-06-15 21:10:05 UTC (rev 48021)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx	2018-06-15 21:10:33 UTC (rev 48022)
@@ -38,7 +38,7 @@
 %          {latex-team at latex-project.org}^^A
 %    }^^A
 % }
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx	2018-06-15 21:10:05 UTC (rev 48021)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx	2018-06-15 21:10:33 UTC (rev 48022)
@@ -38,7 +38,7 @@
 %          {latex-team at latex-project.org}^^A
 %    }^^A
 % }
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-random.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-random.dtx	2018-06-15 21:10:05 UTC (rev 48021)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-random.dtx	2018-06-15 21:10:33 UTC (rev 48022)
@@ -38,7 +38,7 @@
 %          {latex-team at latex-project.org}^^A
 %    }^^A
 % }
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-round.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-round.dtx	2018-06-15 21:10:05 UTC (rev 48021)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-round.dtx	2018-06-15 21:10:33 UTC (rev 48022)
@@ -41,7 +41,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-traps.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-traps.dtx	2018-06-15 21:10:05 UTC (rev 48021)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-traps.dtx	2018-06-15 21:10:33 UTC (rev 48022)
@@ -38,7 +38,7 @@
 %          {latex-team at latex-project.org}^^A
 %    }^^A
 % }
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
 % \maketitle
 %
 % \begin{documentation}

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-trig.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-trig.dtx	2018-06-15 21:10:05 UTC (rev 48021)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-trig.dtx	2018-06-15 21:10:33 UTC (rev 48022)
@@ -38,7 +38,7 @@
 %          {latex-team at latex-project.org}^^A
 %    }^^A
 % }
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx	2018-06-15 21:10:05 UTC (rev 48021)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx	2018-06-15 21:10:33 UTC (rev 48022)
@@ -47,7 +47,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fparray.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fparray.dtx	2018-06-15 21:10:05 UTC (rev 48021)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fparray.dtx	2018-06-15 21:10:33 UTC (rev 48022)
@@ -42,7 +42,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3int.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3int.dtx	2018-06-15 21:10:05 UTC (rev 48021)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3int.dtx	2018-06-15 21:10:33 UTC (rev 48022)
@@ -41,7 +41,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx	2018-06-15 21:10:05 UTC (rev 48021)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx	2018-06-15 21:10:33 UTC (rev 48022)
@@ -42,7 +42,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3kernel-functions.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3kernel-functions.dtx	2018-06-15 21:10:05 UTC (rev 48021)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3kernel-functions.dtx	2018-06-15 21:10:33 UTC (rev 48022)
@@ -41,7 +41,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx	2018-06-15 21:10:05 UTC (rev 48021)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx	2018-06-15 21:10:33 UTC (rev 48022)
@@ -41,7 +41,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx	2018-06-15 21:10:05 UTC (rev 48021)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx	2018-06-15 21:10:33 UTC (rev 48022)
@@ -41,7 +41,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx	2018-06-15 21:10:05 UTC (rev 48021)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx	2018-06-15 21:10:33 UTC (rev 48022)
@@ -41,7 +41,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
 %
 % \maketitle
 %
@@ -1902,6 +1902,11 @@
   { Relation~'#1'~unknown:~use~=,~<,~>,~==,~!=,~<=,~>=. }
 \__kernel_msg_new:nnn { kernel } { zero-step }
   { Zero~step~size~for~step~function~#1. }
+\cs_if_exist:NF \tex_expanded:D
+  {
+    \__kernel_msg_new:nnn { kernel } { e-type }
+      { #1 ~ in~e-type~argument }
+  }
 %    \end{macrocode}
 %
 % Messages used by the \enquote{\texttt{show}} functions.

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3names.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3names.dtx	2018-06-15 21:10:05 UTC (rev 48021)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3names.dtx	2018-06-15 21:10:33 UTC (rev 48022)
@@ -41,7 +41,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3oldmodules.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3oldmodules.dtx	2018-06-15 21:10:05 UTC (rev 48021)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3oldmodules.dtx	2018-06-15 21:10:33 UTC (rev 48022)
@@ -42,7 +42,7 @@
 % }
 %
 %
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx	2018-06-15 21:10:05 UTC (rev 48021)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx	2018-06-15 21:10:33 UTC (rev 48022)
@@ -41,7 +41,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx	2018-06-15 21:10:05 UTC (rev 48021)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx	2018-06-15 21:10:33 UTC (rev 48022)
@@ -41,7 +41,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3quark.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3quark.dtx	2018-06-15 21:10:05 UTC (rev 48021)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3quark.dtx	2018-06-15 21:10:33 UTC (rev 48022)
@@ -41,7 +41,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3regex.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3regex.dtx	2018-06-15 21:10:05 UTC (rev 48021)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3regex.dtx	2018-06-15 21:10:33 UTC (rev 48022)
@@ -41,7 +41,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx	2018-06-15 21:10:05 UTC (rev 48021)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx	2018-06-15 21:10:33 UTC (rev 48022)
@@ -41,7 +41,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx	2018-06-15 21:10:05 UTC (rev 48021)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx	2018-06-15 21:10:33 UTC (rev 48022)
@@ -42,7 +42,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3sort.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3sort.dtx	2018-06-15 21:10:05 UTC (rev 48021)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3sort.dtx	2018-06-15 21:10:33 UTC (rev 48022)
@@ -41,7 +41,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3str.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3str.dtx	2018-06-15 21:10:05 UTC (rev 48021)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3str.dtx	2018-06-15 21:10:33 UTC (rev 48022)
@@ -41,7 +41,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3sys.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3sys.dtx	2018-06-15 21:10:05 UTC (rev 48021)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3sys.dtx	2018-06-15 21:10:33 UTC (rev 48022)
@@ -41,7 +41,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3tl-analysis.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3tl-analysis.dtx	2018-06-15 21:10:05 UTC (rev 48021)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3tl-analysis.dtx	2018-06-15 21:10:33 UTC (rev 48022)
@@ -42,7 +42,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx	2018-06-15 21:10:05 UTC (rev 48021)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx	2018-06-15 21:10:33 UTC (rev 48022)
@@ -41,7 +41,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3token.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3token.dtx	2018-06-15 21:10:05 UTC (rev 48021)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3token.dtx	2018-06-15 21:10:33 UTC (rev 48022)
@@ -41,7 +41,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3unicode.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3unicode.dtx	2018-06-15 21:10:05 UTC (rev 48021)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3unicode.dtx	2018-06-15 21:10:33 UTC (rev 48022)
@@ -41,7 +41,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2018-06-01}
+% \date{Released 2018-06-14}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex	2018-06-15 21:10:05 UTC (rev 48021)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex	2018-06-15 21:10:33 UTC (rev 48022)
@@ -63,7 +63,7 @@
 %% and all files in that bundle must be distributed together.
 %% 
 %% File: expl3.dtx Copyright (C) 1990-2018 The LaTeX3 Project
-\def\ExplFileDate{2018-06-01}%
+\def\ExplFileDate{2018-06-14}%
 \begingroup
   \def\next{\endgroup}%
   \expandafter\ifx\csname PackageError\endcsname\relax
@@ -3175,6 +3175,15 @@
   { \exp_after:wN \__exp_arg_next:Nnn \cs:w #3 \cs_end: {#1} {#2} }
 \cs_new:Npn \::o #1 \::: #2#3
   { \exp_after:wN \__exp_arg_next:nnn \exp_after:wN {#3} {#1} {#2} }
+\cs_if_exist:NTF \tex_expanded:D
+  {
+    \cs_new:Npn \::e #1 \::: #2#3
+      { \tex_expanded:D { \exp_not:n { #1 \::: } { \exp_not:n {#2} {#3} } } }
+  }
+  {
+    \cs_new:Npn \::e #1 \::: #2#3
+      { \exp_args:Ne \__exp_arg_next:nnn {#3} {#1} {#2} }
+  }
 \cs_new:Npn \::f #1 \::: #2#3
   {
     \exp_after:wN \__exp_arg_next:nnn
@@ -3236,6 +3245,18 @@
   { \exp_after:wN #1 \exp_after:wN #2 \exp_after:wN {#3} }
 \cs_new:Npn \exp_args:NNNo #1#2#3#4
   { \exp_after:wN #1 \exp_after:wN#2 \exp_after:wN #3 \exp_after:wN {#4} }
+\cs_if_exist:NTF \tex_expanded:D
+  {
+    \cs_new:Npn \exp_args:Ne #1#2
+      { \exp_after:wN #1 \tex_expanded:D { {#2} } }
+  }
+  {
+    \cs_new:Npn \exp_args:Ne #1#2
+      {
+        \exp_after:wN #1 \exp_after:wN
+          { \exp:w \__exp_e:nn {#2} { } }
+      }
+  }
 \cs_new:Npn \exp_args:Nf #1#2
   { \exp_after:wN #1 \exp_after:wN { \exp:w \exp_end_continue_f:w #2 } }
 \cs_new:Npn \exp_args:Nv #1#2
@@ -3260,6 +3281,16 @@
     \exp_after:wN #2
     \exp_after:wN { \exp:w \__exp_eval_register:c {#3} }
   }
+\cs_if_exist:NTF \tex_expanded:D
+  {
+    \cs_new:Npn \exp_args:NNe #1#2#3
+      {
+        \exp_after:wN #1
+        \exp_after:wN #2
+        \tex_expanded:D { {#3} }
+      }
+  }
+  { \cs_new:Npn \exp_args:NNe { \::N \::e \::: } }
 \cs_new:Npn \exp_args:NNf #1#2#3
   {
     \exp_after:wN #1
@@ -3330,6 +3361,7 @@
 \cs_new:Npn \exp_args:Nno { \::n \::o \::: }
 \cs_new:Npn \exp_args:NnV { \::n \::V \::: }
 \cs_new:Npn \exp_args:Nnv { \::n \::v \::: }
+\cs_new:Npn \exp_args:Nne { \::n \::e \::: }
 \cs_new:Npn \exp_args:Nnf { \::n \::f \::: }
 \cs_new:Npn \exp_args:Noc { \::o \::c \::: }
 \cs_new:Npn \exp_args:Noo { \::o \::o \::: }
@@ -3380,6 +3412,15 @@
     \exp_after:wN \__exp_arg_last_unbraced:nn
       \exp_after:wN { \exp:w \__exp_eval_register:c {#2} } {#1}
   }
+\cs_if_exist:NTF \tex_expanded:D
+  {
+    \cs_new:Npn \::e_unbraced \::: #1#2
+      { \tex_expanded:D { \exp_not:n {#1} #2 } }
+  }
+  {
+    \cs_new:Npn \::e_unbraced \::: #1#2
+      { \exp:w \__exp_e:nn {#2} {#1} }
+  }
 \cs_new:Npn \::f_unbraced \::: #1#2
   {
     \exp_after:wN \__exp_arg_last_unbraced:nn
@@ -3395,6 +3436,12 @@
   { \exp_after:wN #1 \exp:w \__exp_eval_register:N #2 }
 \cs_new:Npn \exp_last_unbraced:Nv #1#2
   { \exp_after:wN #1 \exp:w \__exp_eval_register:c {#2} }
+\cs_if_exist:NTF \tex_expanded:D
+  {
+    \cs_new:Npn \exp_last_unbraced:Ne #1#2
+      { \exp_after:wN #1 \tex_expanded:D {#2} }
+  }
+  { \cs_new:Npn \exp_last_unbraced:Ne { \::e_unbraced \::: } }
 \cs_new:Npn \exp_last_unbraced:Nf #1#2
   { \exp_after:wN #1 \exp:w \exp_end_continue_f:w #2 }
 \cs_new:Npn \exp_last_unbraced:NNo #1#2#3
@@ -3457,8 +3504,17 @@
 \cs_new_eq:NN \__kernel_exp_not:w \tex_unexpanded:D
 \cs_new:Npn \exp_not:c #1 { \exp_after:wN \exp_not:N \cs:w #1 \cs_end: }
 \cs_new:Npn \exp_not:o #1 { \__kernel_exp_not:w \exp_after:wN {#1} }
+\cs_if_exist:NTF \tex_expanded:D
+  {
+    \cs_new:Npn \exp_not:e #1
+      { \__kernel_exp_not:w \tex_expanded:D { {#1} } }
+  }
+  {
+    \cs_new:Npn \exp_not:e
+      { \__kernel_exp_not:w \exp_args:Ne \prg_do_nothing: }
+  }
 \cs_new:Npn \exp_not:f #1
-  { \tex_unexpanded:D \exp_after:wN { \exp:w \exp_end_continue_f:w #1 } }
+  { \__kernel_exp_not:w \exp_after:wN { \exp:w \exp_end_continue_f:w #1 } }
 \cs_new:Npn \exp_not:V #1
   {
     \__kernel_exp_not:w \exp_after:wN
@@ -3479,6 +3535,238 @@
   \fi:
   \cs_new:Npn \exp_end_continue_f:nw #1 { `^^@ #1 }
 \group_end:
+\cs_if_exist:NF \tex_expanded:D
+  {
+    \cs_new:Npn \__exp_e:nn #1
+      {
+        \if_false: { \fi:
+          \tl_if_head_is_N_type:nTF {#1}
+            { \__exp_e:N }
+            {
+              \tl_if_head_is_group:nTF {#1}
+                { \__exp_e_group:n }
+                {
+                  \tl_if_empty:nTF {#1}
+                    { \exp_after:wN \__exp_e_end:nn }
+                    { \exp_after:wN \__exp_e_space:nn }
+                  \exp_after:wN { \if_false: } \fi:
+                }
+            }
+          #1
+        }
+      }
+    \cs_new:Npn \__exp_e_end:nn #1#2 { \exp_end: #2 }
+    \cs_new:Npn \__exp_e_space:nn #1#2
+      { \exp_args:Nf \__exp_e:nn {#1} { #2 ~ } }
+    \cs_new:Npn \__exp_e_group:n #1
+      {
+        \exp_after:wN \__exp_e_put:nn
+        \exp_after:wN { \exp_after:wN { \exp_after:wN {
+              \exp:w \if_false: } \fi: \__exp_e:nn {#1} { } } }
+      }
+    \cs_new:Npn \__exp_e_put:nn #1
+      {
+        \exp_args:NNo \exp_args:No \__exp_e_put:nnn
+          { \tl_head:n {#1} } {#1}
+      }
+    \cs_new:Npn \__exp_e_put:nnn #1#2#3
+      { \exp_args:No \__exp_e:nn { \use_none:n #2 } { #3 #1 } }
+    \cs_new:Npn \__exp_e:N #1
+      {
+        \exp_after:wN \__exp_e:Nnn
+        \exp_after:wN #1
+        \exp_after:wN { \if_false: } \fi:
+      }
+    \cs_new:Npn \__exp_e:Nnn #1
+      {
+        \if_case:w
+          \exp_after:wN \if_meaning:w \exp_not:N #1 #1 1 ~ \fi:
+          \token_if_protected_macro:NT #1 { 1 ~ }
+          \token_if_protected_long_macro:NT #1 { 1 ~ }
+          \if_meaning:w \exp_not:n #1 2 ~ \fi:
+          \if_meaning:w \exp_not:N #1 3 ~ \fi:
+          \if_meaning:w \tex_the:D #1 4 ~ \fi:
+          \if_meaning:w \tex_primitive:D #1 5 ~ \fi:
+          0 ~
+          \exp_after:wN \__exp_e_expandable:Nnn
+        \or: \exp_after:wN \__exp_e_protected:Nnn
+        \or: \exp_after:wN \__exp_e_unexpanded:Nnn
+        \or: \exp_after:wN \__exp_e_noexpand:Nnn
+        \or: \exp_after:wN \__exp_e_the:Nnn
+        \or: \exp_after:wN \__exp_e_primitive:Nnn
+        \fi:
+        #1
+      }
+    \cs_new:Npn \__exp_e_protected:Nnn #1#2#3
+      { \__exp_e:nn {#2} { #3 #1 } }
+    \cs_new:Npn \__exp_e_expandable:Nnn #1#2
+      { \exp_args:No \__exp_e:nn { #1 #2 } }
+    \cs_new:Npn \__exp_e_primitive:Nnn #1
+      {
+        \__kernel_msg_expandable_error:nnn { kernel } { e-type }
+          { \primitive not~implemented }
+        \__exp_e:nn
+      }
+    \cs_new:Npn \__exp_e_noexpand:Nnn #1#2
+      {
+        \tl_if_head_is_N_type:nTF {#2}
+          { \__exp_e_put:nn } { \__exp_e:nn } {#2}
+      }
+    \cs_new:Npn \__exp_e_unexpanded:Nnn #1 { \__exp_e_unexpanded:nn }
+    \cs_new:Npn \__exp_e_unexpanded:nn #1
+      {
+        \tl_if_head_is_N_type:nTF {#1}
+          {
+            \exp_args:Nf \__exp_e_unexpanded:nn
+              { \__exp_e_unexpanded:nN {#1} #1 }
+          }
+          {
+            \tl_if_head_is_group:nTF {#1}
+              { \__exp_e_put:nn }
+              {
+                \tl_if_empty:nTF {#1}
+                  {
+                    \__kernel_msg_expandable_error:nnn
+                      { kernel } { e-type }
+                      { \unexpanded missing~brace }
+                    \__exp_e_end:nn
+                  }
+                  { \exp_args:Nf \__exp_e_unexpanded:nn }
+              }
+            {#1}
+          }
+      }
+    \cs_new:Npn \__exp_e_unexpanded:nN #1#2
+      {
+        \exp_after:wN \if_meaning:w \exp_not:N #2 #2
+          \exp_after:wN \use_i:nn
+        \else:
+          \exp_after:wN \use_ii:nn
+        \fi:
+        {
+          \token_if_eq_catcode:NNTF #2 \c_space_token
+            { \exp_stop_f: }
+            {
+              \token_if_eq_meaning:NNTF #2 \scan_stop:
+                { \exp_stop_f: }
+                {
+                  \__kernel_msg_expandable_error:nnn
+                    { kernel } { e-type }
+                    { \unexpanded missing~brace }
+                  { }
+                }
+            }
+        }
+        {
+          \token_if_eq_meaning:NNTF #2 \exp_not:N
+            {
+              \exp_args:No \tl_if_head_is_N_type:nT { \use_none:n #1 }
+                { \__exp_e_unexpanded:N }
+            }
+            { \exp_after:wN \exp_stop_f: #2 }
+        }
+      }
+    \cs_new:Npn \__exp_e_unexpanded:N #1
+      {
+        \exp_after:wN \if_meaning:w \exp_not:N #1 #1 \else:
+          \exp_after:wN \use_i:nn
+        \fi:
+        \exp_stop_f: #1
+      }
+    \cs_new:Npn \__exp_e_the:Nnn #1#2
+      {
+        \tl_if_head_is_N_type:nTF {#2}
+          { \if_false: { \fi: \__exp_e_the:N #2 } }
+          { \exp_args:No \__exp_e:nn { \tex_the:D #2 } }
+      }
+    \cs_new:Npn \__exp_e_the:N #1
+      {
+        \exp_after:wN \if_meaning:w \exp_not:N #1 #1
+          \exp_after:wN \use_i:nn
+        \else:
+          \exp_after:wN \use_ii:nn
+        \fi:
+        {
+          \if_meaning:w \tex_toks:D #1
+            \exp_after:wN \__exp_e_the_toks:wnn \int_value:w
+            \exp_after:wN \__exp_e_the_toks:n
+            \exp_after:wN { \int_value:w \if_false: } \fi:
+          \else:
+            \__exp_e_if_toks_register:NTF #1
+              { \exp_after:wN \__exp_e_the_toks_reg:N }
+              {
+                \exp_after:wN \__exp_e:nn \exp_after:wN {
+                  \tex_the:D \if_false: } \fi:
+              }
+            \exp_after:wN #1
+          \fi:
+        }
+        {
+          \exp_after:wN \__exp_e_the:Nnn \exp_after:wN ?
+          \exp_after:wN { \exp:w \if_false: } \fi:
+          \exp_after:wN \exp_end: #1
+        }
+      }
+    \cs_new:Npn \__exp_e_the_toks_reg:N #1
+      {
+        \exp_after:wN \__exp_e_put:nn \exp_after:wN {
+          \exp_after:wN {
+            \tex_the:D \if_false: } \fi: #1 }
+      }
+    \cs_new:Npn \__exp_e_the_toks:wnn #1; #2
+      {
+        \exp_args:No \__exp_e_put:nnn
+          { \tex_the:D \tex_toks:D #1 } { ? #2 }
+      }
+    \cs_new:Npn \__exp_e_the_toks:n #1
+      {
+        \tl_if_head_is_N_type:nTF {#1}
+          { \exp_after:wN \__exp_e_the_toks:N \if_false: { \fi: #1 } }
+          { ; {#1} }
+      }
+    \cs_new:Npn \__exp_e_the_toks:N #1
+      {
+        \if_int_compare:w 10 < 9 \token_to_str:N #1 \exp_stop_f:
+          \exp_after:wN \use_i:nn
+        \else:
+          \exp_after:wN \use_ii:nn
+        \fi:
+        {
+          #1
+          \exp_after:wN \__exp_e_the_toks:n
+        }
+        { \exp_after:wN ; }
+        \exp_after:wN { \if_false: } \fi:
+      }
+    \prg_new_conditional:Npnn \__exp_e_if_toks_register:N #1 { TF }
+      {
+        \token_if_toks_register:NTF #1 { \prg_return_true: }
+          {
+            \cs_if_exist:cTF
+              {
+                __exp_e_the_
+                \exp_after:wN \cs_to_str:N
+                \token_to_meaning:N #1
+                :
+              } { \prg_return_true: } { \prg_return_false: }
+          }
+      }
+    \cs_new_eq:NN \__exp_e_the_XeTeXinterchartoks: ?
+    \cs_new_eq:NN \__exp_e_the_errhelp: ?
+    \cs_new_eq:NN \__exp_e_the_everycr: ?
+    \cs_new_eq:NN \__exp_e_the_everydisplay: ?
+    \cs_new_eq:NN \__exp_e_the_everyeof: ?
+    \cs_new_eq:NN \__exp_e_the_everyhbox: ?
+    \cs_new_eq:NN \__exp_e_the_everyjob: ?
+    \cs_new_eq:NN \__exp_e_the_everymath: ?
+    \cs_new_eq:NN \__exp_e_the_everypar: ?
+    \cs_new_eq:NN \__exp_e_the_everyvbox: ?
+    \cs_new_eq:NN \__exp_e_the_output: ?
+    \cs_new_eq:NN \__exp_e_the_pdfpageattr: ?
+    \cs_new_eq:NN \__exp_e_the_pdfpageresources: ?
+    \cs_new_eq:NN \__exp_e_the_pdfpagesattr: ?
+    \cs_new_eq:NN \__exp_e_the_pdfpkmode: ?
+  }
 \__kernel_patch:nnNNpn { \__kernel_chk_cs_exist:N #1 } { }
 \cs_new_protected:Npn \cs_generate_variant:Nn #1#2
   {
@@ -3575,10 +3863,12 @@
         \if:w V #1 n \else:
           \if:w v #1 n \else:
             \if:w f #1 n \else:
-              \if:w x #1 n \else:
-                \if:w n #1 n \else:
-                  \if:w N #1 N \else:
-                    \scan_stop:
+              \if:w e #1 n \else:
+                \if:w x #1 n \else:
+                  \if:w n #1 n \else:
+                    \if:w N #1 N \else:
+                      \scan_stop:
+                    \fi:
                   \fi:
                 \fi:
               \fi:
@@ -9731,6 +10021,11 @@
   { Relation~'#1'~unknown:~use~=,~<,~>,~==,~!=,~<=,~>=. }
 \__kernel_msg_new:nnn { kernel } { zero-step }
   { Zero~step~size~for~step~function~#1. }
+\cs_if_exist:NF \tex_expanded:D
+  {
+    \__kernel_msg_new:nnn { kernel } { e-type }
+      { #1 ~ in~e-type~argument }
+  }
 \__kernel_msg_new:nnn { kernel } { show-clist }
   {
     The~comma~list~ \tl_if_empty:nF {#1} { #1 ~ }

Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex	2018-06-15 21:10:05 UTC (rev 48021)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex	2018-06-15 21:10:33 UTC (rev 48022)
@@ -19,7 +19,7 @@
 %% and all files in that bundle must be distributed together.
 %% 
 %% File: expl3.dtx Copyright (C) 1990-2018 The LaTeX3 Project
-\def\ExplFileDate{2018-06-01}%
+\def\ExplFileDate{2018-06-14}%
 \let\ExplLoaderFileDate\ExplFileDate
 \begingroup
   \def\tempa{LaTeX2e}%

Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/expl3.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/expl3.sty	2018-06-15 21:10:05 UTC (rev 48021)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/expl3.sty	2018-06-15 21:10:33 UTC (rev 48022)
@@ -19,7 +19,7 @@
 %% and all files in that bundle must be distributed together.
 %% 
 %% File: expl3.dtx Copyright (C) 1990-2018 The LaTeX3 Project
-\def\ExplFileDate{2018-06-01}%
+\def\ExplFileDate{2018-06-14}%
 \let\ExplLoaderFileDate\ExplFileDate
 \ProvidesPackage{expl3}
   [%

Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/l3dvipdfmx.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/l3dvipdfmx.def	2018-06-15 21:10:05 UTC (rev 48021)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/l3dvipdfmx.def	2018-06-15 21:10:33 UTC (rev 48022)
@@ -20,7 +20,7 @@
 %% 
 %% File: l3drivers.dtx Copyright(C) 2011-2018 The LaTeX3 Project
 \ProvidesExplFile
-  {l3dvidpfmx.def}{2018-06-01}{}
+  {l3dvidpfmx.def}{2018-06-14}{}
   {L3 Experimental driver: dvipdfmx}
 \cs_new_eq:NN \__driver_literal_x:n \tex_special:D
 \cs_new_protected:Npn \__driver_literal:n #1

Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/l3dvips.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/l3dvips.def	2018-06-15 21:10:05 UTC (rev 48021)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/l3dvips.def	2018-06-15 21:10:33 UTC (rev 48022)
@@ -20,7 +20,7 @@
 %% 
 %% File: l3drivers.dtx Copyright(C) 2011-2018 The LaTeX3 Project
 \ProvidesExplFile
-  {l3dvips.def}{2018-06-01}{}
+  {l3dvips.def}{2018-06-14}{}
   {L3 Experimental driver: dvips}
 \cs_new_eq:NN \__driver_literal_x:n \tex_special:D
 \cs_new_protected:Npn \__driver_literal:n #1

Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/l3dvisvgm.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/l3dvisvgm.def	2018-06-15 21:10:05 UTC (rev 48021)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/l3dvisvgm.def	2018-06-15 21:10:33 UTC (rev 48022)
@@ -20,7 +20,7 @@
 %% 
 %% File: l3drivers.dtx Copyright(C) 2011-2018 The LaTeX3 Project
 \ProvidesExplFile
-  {l3dvisvgm.def}{2018-06-01}{}
+  {l3dvisvgm.def}{2018-06-14}{}
   {L3 Experimental driver: dvisvgm}
 \cs_new_eq:NN \__driver_literal_x:n \tex_special:D
 \cs_new_protected:Npn \__driver_literal:n #1

Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/l3pdfmode.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/l3pdfmode.def	2018-06-15 21:10:05 UTC (rev 48021)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/l3pdfmode.def	2018-06-15 21:10:33 UTC (rev 48022)
@@ -20,7 +20,7 @@
 %% 
 %% File: l3drivers.dtx Copyright(C) 2011-2018 The LaTeX3 Project
 \ProvidesExplFile
-  {l3pdfmode.def}{2018-06-01}{}
+  {l3pdfmode.def}{2018-06-14}{}
   {L3 Experimental driver: PDF mode}
 \cs_new_eq:NN \__driver_literal_x:n \tex_special:D
 \cs_new_protected:Npn \__driver_literal:n #1

Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/l3xdvipdfmx.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/l3xdvipdfmx.def	2018-06-15 21:10:05 UTC (rev 48021)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/l3xdvipdfmx.def	2018-06-15 21:10:33 UTC (rev 48022)
@@ -20,7 +20,7 @@
 %% 
 %% File: l3drivers.dtx Copyright(C) 2011-2018 The LaTeX3 Project
 \ProvidesExplFile
-  {l3xdvidpfmx.def}{2018-06-01}{}
+  {l3xdvidpfmx.def}{2018-06-14}{}
   {L3 Experimental driver: xdvipdfmx}
 \cs_new_eq:NN \__driver_literal_x:n \tex_special:D
 \cs_new_protected:Npn \__driver_literal:n #1



More information about the tex-live-commits mailing list