[latex3-commits] [git/LaTeX3-latex3-latex3] master: Use dependency check in expl3.dtx (cbdbb5fe7)
Joseph Wright
joseph.wright at morningstar2.co.uk
Thu Aug 20 19:09:56 CEST 2020
Repository : https://github.com/latex3/latex3
On branch : master
Link : https://github.com/latex3/latex3/commit/cbdbb5fe74d93da44f153590f15879c8d636b2d1
>---------------------------------------------------------------
commit cbdbb5fe74d93da44f153590f15879c8d636b2d1
Author: PhelypeOleinik <tex.phelype at gmail.com>
Date: Fri Jul 31 22:32:39 2020 -0300
Use dependency check in expl3.dtx
>---------------------------------------------------------------
cbdbb5fe74d93da44f153590f15879c8d636b2d1
l3kernel/expl3.dtx | 97 ++++++++++++++++--------------------------------------
1 file changed, 29 insertions(+), 68 deletions(-)
diff --git a/l3kernel/expl3.dtx b/l3kernel/expl3.dtx
index 85284e594..e93e74ef9 100644
--- a/l3kernel/expl3.dtx
+++ b/l3kernel/expl3.dtx
@@ -1243,86 +1243,47 @@
%<@@=expl>
% \end{macrocode}
%
-% Several times users reported this error when loading \pkg{expl3}:
-% \begin{verbatim}
-% ! Undefined control sequence.
-% l.67 \bool
-% _new:N \g__expl_reload_bool
-% \end{verbatim}
-% raised in the reload block below. This happens because the reload
-% check below assumes that if the boolean \cs{g_@@_reload_bool} doesn't
-% exist, this file is being loaded for the first time, and \pkg{expl3}
-% syntax is on. This is a bit of a stretch for assumptions, but it's
-% valid as long as everything's in sync. However the problem reported
-% happened because of a stray format file in the user tree which didn't
-% have the reload code defined here (commit \texttt{1d16336}), so the
-% \cs{g_@@_reload_bool} doesn't exist, but \pkg{expl3} syntax is off,
-% thus the error.
-%
-% At this point, if we have \cs{c__kernel_expl_date_tl} defined, the
-% situation is straightforward: if it matches \cs{ExplLoaderFileDate},
-% then everything's as expected, so no need to worry. If it doesn't,
-% then the current version of \pkg{expl3} differs from the one in the
-% format, so raise a fatal error: the bahaviour is too unpredictable to
-% continue safely. Also, if the error is to be raised, then we're
-% reloading, which means that \pkg{expl3} syntax is off, so we turn it
-% on for the message.
+% At this point, if we have \cs{c__kernel_expl_date_tl} defined, just
+% call the \cs{__kernel_dependency_version_check:Nn} auxiliary to check
+% if it matches \cs{ExplLoaderFileDate}. Here the test is performed
+% only if \cs{c__kernel_expl_date_tl} exists because this file can be
+% loaded in a \LaTeXe{} format without \pkg{expl3} preloaded, where that
+% token list doesn't exist.
+%
+% This is all done in the \texttt{package} \pkg{docstrip} guard because
+% it doesn't apply to \pkg{expl3.ltx}.
% \begin{macrocode}
+%<*package>
\ifcsname\detokenize{c__kernel_expl_date_tl}\endcsname
- \expandafter\ifx\csname\detokenize
- {c__kernel_expl_date_tl}\endcsname\ExplLoaderFileDate
- \else
- \ExplSyntaxOn
- \__kernel_msg_set:nnn { kernel } { mismatched-expl3 }
- {
- Mismatched~expl3~detected!~Loading~expl3~will~abort.
- \\ \\
- The~version~of~expl3~preloaded~in~LaTeX~is~
- \c__kernel_expl_date_tl,~but~the~version~of~expl3~you~are~
- trying~to~load~is~dated~\ExplLoaderFileDate.~This~is~most~
- likely~due~to~a~stray~format~file~in~the~user~tree.~Please~
- make~sure~that~your~LaTeX~format~is~updated.
- }
- \exp_after:wN \ExplSyntaxOff \use:n
- {
- \__kernel_msg_critical:nn { kernel } { mismatched-expl3 }
- \use:c { fi: } \use:c { fi: }
- }
- \fi
+ \expandafter\@firstofone
+\else
% \end{macrocode}
-% If \cs{c__kernel_expl_date_tl} does \emph{not} exist, then we're on
-% uncharted lands (that is, any time prior to the version that
-% introduced this token list :-). Two cases might be here, depending
-% whether \pkg{expl3} is loaded into the kernel or not. If we're loading
-% \pkg{expl3} \enquote{normally} as a package, \pkg{expl3} syntax is on.
-% Otherwise it's already loaded in the kernel and we're reloading
-% \file{expl3.sty} so (\file{expl3-code.tex} doesn't load again and)
-% \pkg{expl3} syntax is off.
+% If \cs{c__kernel_expl_date_tl} does \emph{not} exist we may be loading
+% in a format without \pkg{expl3} preloaded or in the earlier (although
+% still compatible) version in which the error mentioned above showed
+% up. If loading as a package, \file{expl3-code.tex} got read and here
+% the \pkg{expl3} syntax is on. Otherwise it was already loaded in a
+% sligtly older kernel, so we fire the incompatibility error message and
+% abort loading.
% \begin{macrocode}
-\else
\ifodd\csname\detokenize{l__kernel_expl_bool}\endcsname
% \end{macrocode}
-% Package mode; all should be fine, since \file{expl3.sty} and
-% \file{expl3-code.tex} are both loaded in one go, so versions should
-% match (if they don't, it's detected above).
-% Also, we've just tested that \pkg{expl3} syntax is on, so the reload
-% test below will return false and \cs{bool_new:N} will run correctly.
+% In package mode all files are loaded in one go, so versions will
+% match, so nothing has to be done.
% \begin{macrocode}
+ \expandafter\expandafter
+ \expandafter\@gobble
\else
% \end{macrocode}
-% In this branch we're reloading, but there are still two cases to
-% consider (sigh\ldots); whether the version preloaded in the format
-% is recent enough to have \cs{g_@@_reload_bool} (2020-06-18 and
-% later) or not. If the boolean is there, we have to do nothing
-% because right ahead we deal with this case.
-% If it is not, we just have to create it:
+% And reloading in an incompatible version is an error:
% \begin{macrocode}
- \ExplSyntaxOn
- \bool_if_exist:NF \g_@@_reload_bool
- { \bool_new:N \g_@@_reload_bool }
- \ExplSyntaxOff
+ \expandafter\expandafter
+ \expandafter\@firstofone
\fi
\fi
+ {\csname\detokenize{__kernel_dependency_version_check:Nn}\endcsname
+ \ExplLoaderFileDate{expl3.sty}}%
+%</package>
% \end{macrocode}
%
% Here we can also detect whether we're reloading. This code goes into
More information about the latex3-commits
mailing list.