From cde95caf86c78ec9b7641198abfd0a7768f5100e Mon Sep 17 00:00:00 2001
From: Karl Berry <karl@freefriends.org>
Date: Sun, 29 Sep 2019 21:16:44 +0000
Subject: l3 (29sep19)

git-svn-id: svn://tug.org/texlive/trunk@52214 c570f23f-e606-0410-a88d-b1316a301751
---
 Master/texmf-dist/source/latex/l3kernel/l3int.dtx | 138 ++++++++--------------
 1 file changed, 47 insertions(+), 91 deletions(-)

(limited to 'Master/texmf-dist/source/latex/l3kernel/l3int.dtx')

diff --git a/Master/texmf-dist/source/latex/l3kernel/l3int.dtx b/Master/texmf-dist/source/latex/l3kernel/l3int.dtx
index 1cd7e62c93d..042f4d656cf 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3int.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3int.dtx
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-09-19}
+% \date{Released 2019-09-28}
 %
 % \maketitle
 %
@@ -134,6 +134,14 @@
 %   since the digit~\texttt{9} is not part of the expression.
 % \end{function}
 %
+% \begin{function}[EXP, added = 2018-11-03]{\int_sign:n}
+%   \begin{syntax}
+%     \cs{int_sign:n} \Arg{intexpr}
+%   \end{syntax}
+%   Evaluates the \meta{integer expression} then leaves $1$ or $0$ or
+%   $-1$ in the input stream according to the sign of the result.
+% \end{function}
+%
 % \begin{function}[EXP, updated = 2012-09-26]{\int_abs:n}
 %   \begin{syntax}
 %     \cs{int_abs:n} \Arg{integer expression}
@@ -1053,8 +1061,6 @@
 %   or directly in the input stream.
 %   When debugging, use parentheses to catch early termination.
 %    \begin{macrocode}
-\__kernel_patch_args:nNNpn
-  { { \__kernel_chk_expr:nNnN {#1} \@@_eval:w { } \int_eval:n } }
 \cs_new:Npn \int_eval:n #1
   { \int_value:w \@@_eval:w #1 \@@_eval_end: }
 \cs_new:Npn \int_eval:w { \int_value:w \@@_eval:w }
@@ -1062,6 +1068,31 @@
 % \end{macro}
 % \end{macro}
 %
+% \begin{macro}[EXP]{\int_sign:n, \@@_sign:Nw}
+%   See \cs{int_abs:n}.  Evaluate the expression once (and when
+%   debugging is enabled, check that the expression is well-formed),
+%   then test the first character to determine the sign.  This is
+%   wrapped in \cs{int_value:w} \ldots{} \cs{exp_stop_f:} to ensure a
+%   fixed number of expansions and to avoid dealing with closing the
+%   conditionals.
+%    \begin{macrocode}
+\cs_new:Npn \int_sign:n #1
+  {
+    \int_value:w \exp_after:wN \@@_sign:Nw
+      \int_value:w \@@_eval:w #1 \@@_eval_end: ;
+    \exp_stop_f:
+  }
+\cs_new:Npn \@@_sign:Nw #1#2 ;
+  {
+    \if_meaning:w 0 #1
+      0
+    \else:
+      \if_meaning:w - #1 - \fi: 1
+    \fi:
+  }
+%    \end{macrocode}
+% \end{macro}
+%
 % \begin{macro}[EXP]{\int_abs:n}
 % \begin{macro}[EXP]{\@@_abs:N}
 % \UnitTested
@@ -1074,8 +1105,6 @@
 %   evaluation.  The absolute value is obtained by removing a leading
 %   sign if any.  All three functions expand in two steps.
 %    \begin{macrocode}
-\__kernel_patch_args:nNNpn
-  { { \__kernel_chk_expr:nNnN {#1} \@@_eval:w { } \int_abs:n } }
 \cs_new:Npn \int_abs:n #1
   {
     \int_value:w \exp_after:wN \@@_abs:N
@@ -1084,11 +1113,6 @@
   }
 \cs_new:Npn \@@_abs:N #1
   { \if_meaning:w - #1 \else: \exp_after:wN #1 \fi: }
-\__kernel_patch_args:nNNpn
-  {
-    { \__kernel_chk_expr:nNnN {#1} \@@_eval:w { } \int_max:nn }
-    { \__kernel_chk_expr:nNnN {#2} \@@_eval:w { } \int_max:nn }
-  }
 \cs_set:Npn \int_max:nn #1#2
   {
     \int_value:w \exp_after:wN \@@_maxmin:wwN
@@ -1097,11 +1121,6 @@
       >
     \exp_stop_f:
   }
-\__kernel_patch_args:nNNpn
-  {
-    { \__kernel_chk_expr:nNnN {#1} \@@_eval:w { } \int_min:nn }
-    { \__kernel_chk_expr:nNnN {#2} \@@_eval:w { } \int_min:nn }
-  }
 \cs_set:Npn \int_min:nn #1#2
   {
     \int_value:w \exp_after:wN \@@_maxmin:wwN
@@ -1146,11 +1165,6 @@
 %   truncating behaviour that we want. The details are thanks to Heiko
 %   Oberdiek: getting things right in all cases is not so easy.
 %    \begin{macrocode}
-\__kernel_patch_args:nNNpn
-  {
-    { \__kernel_chk_expr:nNnN {#1} \@@_eval:w { } \int_div_truncate:nn }
-    { \__kernel_chk_expr:nNnN {#2} \@@_eval:w { } \int_div_truncate:nn }
-  }
 \cs_new:Npn \int_div_truncate:nn #1#2
   {
     \int_value:w \@@_eval:w
@@ -1180,11 +1194,6 @@
 %    \end{macrocode}
 %   Finally there's the modulus operation.
 %    \begin{macrocode}
-\__kernel_patch_args:nNNpn
-  {
-    { \__kernel_chk_expr:nNnN {#1} \@@_eval:w { } \int_mod:nn }
-    { \__kernel_chk_expr:nNnN {#2} \@@_eval:w { } \int_mod:nn }
-  }
 \cs_new:Npn \int_mod:nn #1#2
   {
     \int_value:w \@@_eval:w \exp_after:wN \@@_mod:ww
@@ -1254,10 +1263,6 @@
 %   We cannot use \cs{int_gset:Nn} because (when |check-declarations| is
 %   enabled) this runs some checks that constants would fail.
 %    \begin{macrocode}
-\__kernel_patch_args:nnnNNpn
-  { \__kernel_chk_var_scope:NN c #1 }
-  { }
-  { {#1} { \__kernel_chk_expr:nNnN {#2} \@@_eval:w { } \int_const:Nn } }
 \cs_new_protected:Npn \int_const:Nn #1#2
   {
     \int_compare:nNnTF {#2} < \c_zero_int
@@ -1303,9 +1308,7 @@
 % \UnitTested
 %   Functions that reset an \meta{integer} register to zero.
 %    \begin{macrocode}
-\__kernel_patch:nnNNpn { \__kernel_chk_var_local:N #1 } { }
 \cs_new_protected:Npn \int_zero:N  #1 { #1 = \c_zero_int }
-\__kernel_patch:nnNNpn { \__kernel_chk_var_global:N #1 } { }
 \cs_new_protected:Npn \int_gzero:N #1 { \tex_global:D #1 = \c_zero_int }
 \cs_generate_variant:Nn \int_zero:N  { c }
 \cs_generate_variant:Nn \int_gzero:N { c }
@@ -1335,10 +1338,8 @@
 %   another.  Check that assigned integer is local/global.  No need to
 %   check that the other one is defined as \TeX{} does it for us.
 %    \begin{macrocode}
-\__kernel_patch:nnNNpn { \__kernel_chk_var_local:N #1 } { }
 \cs_new_protected:Npn \int_set_eq:NN #1#2 { #1 = #2 }
 \cs_generate_variant:Nn \int_set_eq:NN { c , Nc , cc }
-\__kernel_patch:nnNNpn { \__kernel_chk_var_global:N #1 } { }
 \cs_new_protected:Npn \int_gset_eq:NN #1#2 { \tex_global:D #1 = #2 }
 \cs_generate_variant:Nn \int_gset_eq:NN { c , Nc , cc }
 %    \end{macrocode}
@@ -1357,22 +1358,6 @@
 %
 % \subsection{Setting and incrementing integers}
 %
-% Several functions here have a signature |:Nn| and are such that when
-% debugging, the first argument should be checked to be a local/global
-% variable and the second should be wrapped in code for an expression.
-% The temporary function \cs{@@_tmp:w} finds the name |#3| of the
-% function being redefined and writes the appropriate patch.
-%    \begin{macrocode}
-\cs_set_protected:Npn \@@_tmp:w #1#2#3
-  {
-    \__kernel_patch_args:nnnNNpn
-      { #1 ##1 }
-      { }
-      { {##1} { \__kernel_chk_expr:nNnN {##2} \@@_eval:w { } #3 } }
-    #2 #3
-  }
-%    \end{macrocode}
-%
 % \begin{macro}{\int_add:Nn, \int_add:cn}
 % \UnitTested
 % \begin{macro}{\int_gadd:Nn, \int_gadd:cn}
@@ -1381,21 +1366,14 @@
 % \UnitTested
 % \begin{macro}{\int_gsub:Nn, \int_gsub:cn}
 % \UnitTested
-%    Adding and subtracting to and from a counter.  For each function,
-%    the debugging code produced by \cs{@@_tmp:w} checks that the
-%    assigned variable is correctly local/global and wraps the
-%    expression in some checking code.
+%    Adding and subtracting to and from a counter.
 %    \begin{macrocode}
-\@@_tmp:w \__kernel_chk_var_local:N
 \cs_new_protected:Npn \int_add:Nn #1#2
   { \tex_advance:D #1 by \@@_eval:w #2 \@@_eval_end: }
-\@@_tmp:w \__kernel_chk_var_local:N
 \cs_new_protected:Npn \int_sub:Nn #1#2
   { \tex_advance:D #1 by - \@@_eval:w #2 \@@_eval_end: }
-\@@_tmp:w \__kernel_chk_var_global:N
 \cs_new_protected:Npn \int_gadd:Nn #1#2
   { \tex_global:D \tex_advance:D #1 by \@@_eval:w #2 \@@_eval_end: }
-\@@_tmp:w \__kernel_chk_var_global:N
 \cs_new_protected:Npn \int_gsub:Nn #1#2
   { \tex_global:D \tex_advance:D #1 by - \@@_eval:w #2 \@@_eval_end: }
 \cs_generate_variant:Nn \int_add:Nn  { c }
@@ -1419,16 +1397,12 @@
 %   Incrementing and decrementing of integer registers is done with
 %   the following functions.
 %    \begin{macrocode}
-\__kernel_patch:nnNNpn { \__kernel_chk_var_local:N #1 } { }
 \cs_new_protected:Npn \int_incr:N #1
   { \tex_advance:D #1 \c_one_int }
-\__kernel_patch:nnNNpn { \__kernel_chk_var_local:N #1 } { }
 \cs_new_protected:Npn \int_decr:N #1
   { \tex_advance:D #1 - \c_one_int }
-\__kernel_patch:nnNNpn { \__kernel_chk_var_global:N #1 } { }
 \cs_new_protected:Npn \int_gincr:N #1
   { \tex_global:D \tex_advance:D #1 \c_one_int }
-\__kernel_patch:nnNNpn { \__kernel_chk_var_global:N #1 } { }
 \cs_new_protected:Npn \int_gdecr:N #1
   { \tex_global:D \tex_advance:D #1 - \c_one_int }
 \cs_generate_variant:Nn \int_incr:N  { c }
@@ -1446,14 +1420,10 @@
 % \begin{macro}{\int_gset:Nn, \int_gset:cn}
 % \UnitTested
 %   As integers are register-based \TeX{} issues an error
-%   if they are not defined. Thus there is no need to check their
-%   existence as for token list variables.  However, the code that
-%   checks whether the assignment is local or global is still needed.
+%   if they are not defined.
 %    \begin{macrocode}
-\@@_tmp:w \__kernel_chk_var_local:N
 \cs_new_protected:Npn \int_set:Nn #1#2
   { #1 ~ \@@_eval:w #2 \@@_eval_end: }
-\@@_tmp:w \__kernel_chk_var_global:N
 \cs_new_protected:Npn \int_gset:Nn #1#2
   { \tex_global:D #1 ~ \@@_eval:w #2 \@@_eval_end: }
 \cs_generate_variant:Nn \int_set:Nn  { c }
@@ -1657,12 +1627,6 @@
 % \UnitTested
 % More efficient but less natural in typing.
 %    \begin{macrocode}
-\__kernel_patch_conditional_args:nNNpnn
-  {
-    { \__kernel_chk_expr:nNnN {#1} \@@_eval:w { } \int_compare:nNn }
-    { \@@_eval_end: #2 }
-    { \__kernel_chk_expr:nNnN {#3} \@@_eval:w { } \int_compare:nNn }
-  }
 \prg_new_conditional:Npnn \int_compare:nNn #1#2#3 { p , T , F , TF }
   {
     \if_int_compare:w \@@_eval:w #1 #2 \@@_eval:w #3 \@@_eval_end:
@@ -1722,8 +1686,6 @@
 % \UnitTested
 %   A predicate function.
 %    \begin{macrocode}
-\__kernel_patch_conditional_args:nNNpnn
-  { { \__kernel_chk_expr:nNnN {#1} \@@_eval:w { } \int_if_odd:n } }
 \prg_new_conditional:Npnn \int_if_odd:n #1 { p , T , F , TF}
   {
     \if_int_odd:w \@@_eval:w #1 \@@_eval_end:
@@ -1732,8 +1694,6 @@
       \prg_return_false:
     \fi:
   }
-\__kernel_patch_conditional_args:nNNpnn
-  { { \__kernel_chk_expr:nNnN {#1} \@@_eval:w { } \int_if_even:n } }
 \prg_new_conditional:Npnn \int_if_even:n #1 { p , T , F , TF}
   {
     \reverse_if:N \if_int_odd:w \@@_eval:w #1 \@@_eval_end:
@@ -1851,21 +1811,6 @@
 %   step size of zero before checking the sign, but we optimize for the
 %   most frequent case (positive step).
 %    \begin{macrocode}
-\__kernel_patch_args:nNNpn
-  {
-    {
-      \__kernel_chk_expr:nNnN {#1} \@@_eval:w { }
-        \int_step_function:nnnN
-    }
-    {
-      \__kernel_chk_expr:nNnN {#2} \@@_eval:w { }
-        \int_step_function:nnnN
-    }
-    {
-      \__kernel_chk_expr:nNnN {#3} \@@_eval:w { }
-        \int_step_function:nnnN
-    }
-  }
 \cs_new:Npn \int_step_function:nnnN #1#2#3
   {
     \exp_after:wN \@@_step:wwwN
@@ -2594,6 +2539,17 @@
 % \end{variable}
 % \end{variable}
 %
+% \subsection{Integers for earlier modules}
+%
+%<@@=seq>
+%
+% \begin{variable}{\l_@@_internal_a_int, \l_@@_internal_b_int}
+%    \begin{macrocode}
+\int_new:N \l_@@_internal_a_int
+\int_new:N \l_@@_internal_b_int
+%    \end{macrocode}
+% \end{variable}
+%
 %    \begin{macrocode}
 %</initex|package>
 %    \end{macrocode}
-- 
cgit v1.2.3

