[latex3-commits] [l3svn] r6786 - Make \clist_item:Nn etc evaluate the item number once
noreply at latex-project.org
noreply at latex-project.org
Tue Dec 6 14:36:34 CET 2016
Author: bruno
Date: 2016-12-06 14:36:34 +0100 (Tue, 06 Dec 2016)
New Revision: 6786
Modified:
trunk/l3kernel/l3clist.dtx
trunk/l3kernel/l3seq.dtx
trunk/l3kernel/l3tl.dtx
trunk/l3kernel/testfiles/m3expl001.luatex.tlg
trunk/l3kernel/testfiles/m3expl001.ptex.tlg
trunk/l3kernel/testfiles/m3expl001.tlg
trunk/l3kernel/testfiles/m3expl001.uptex.tlg
trunk/l3kernel/testfiles/m3expl001.xetex.tlg
trunk/l3kernel/testfiles/m3expl003.luatex.tlg
trunk/l3kernel/testfiles/m3expl003.ptex.tlg
trunk/l3kernel/testfiles/m3expl003.tlg
trunk/l3kernel/testfiles/m3expl003.uptex.tlg
trunk/l3kernel/testfiles/m3expl003.xetex.tlg
Log:
Make \clist_item:Nn etc evaluate the item number once
This alters the clist, seq and tl item functions. Instead
of testing the sign of their integer argument and then
evaluating it again, the argument is now evaluated up front.
This will be useful when the argument is random.
Modified: trunk/l3kernel/l3clist.dtx
===================================================================
--- trunk/l3kernel/l3clist.dtx 2016-12-06 05:49:48 UTC (rev 6785)
+++ trunk/l3kernel/l3clist.dtx 2016-12-06 13:36:34 UTC (rev 6786)
@@ -1720,7 +1720,7 @@
% \subsection{Using a single item}
%
% \begin{macro}{\clist_item:Nn, \clist_item:cn}
-% \begin{macro}[aux]{\@@_item:nnNn}
+% \begin{macro}[aux]{\@@_item:nnnN, \@@_item:ffoN, \@@_item:ffnN}
% \begin{macro}[aux]{\@@_item_N_loop:nw}
% To avoid needing to test the end of the list at each step,
% we first compute the \meta{length} of the list. If the item number
@@ -1732,27 +1732,28 @@
% \begin{macrocode}
\cs_new:Npn \clist_item:Nn #1#2
{
- \exp_args:Nfo \@@_item:nnNn
+ \@@_item:ffoN
{ \clist_count:N #1 }
+ { \int_eval:n {#2} }
#1
\@@_item_N_loop:nw
- {#2}
}
-\cs_new:Npn \@@_item:nnNn #1#2#3#4
+\cs_new:Npn \@@_item:nnnN #1#2#3#4
{
- \int_compare:nNnTF {#4} < \c_zero
+ \int_compare:nNnTF {#2} < \c_zero
{
- \int_compare:nNnTF {#4} < { - #1 }
+ \int_compare:nNnTF {#2} < { - #1 }
{ \use_none_delimit_by_q_stop:w }
- { \exp_args:Nf #3 { \int_eval:n { #4 + \c_one + #1 } } }
+ { \exp_args:Nf #4 { \int_eval:n { #2 + \c_one + #1 } } }
}
{
- \int_compare:nNnTF {#4} > {#1}
+ \int_compare:nNnTF {#2} > {#1}
{ \use_none_delimit_by_q_stop:w }
- { #3 {#4} }
+ { #4 {#2} }
}
- { } , #2 , \q_stop
+ { } , #3 , \q_stop
}
+\cs_generate_variant:Nn \@@_item:nnnN { ffo, ff }
\cs_new:Npn \@@_item_N_loop:nw #1 #2,
{
\int_compare:nNnTF {#1} = \c_zero
@@ -1778,11 +1779,11 @@
% \begin{macrocode}
\cs_new:Npn \clist_item:nn #1#2
{
- \exp_args:Nf \@@_item:nnNn
+ \@@_item:ffnN
{ \clist_count:n {#1} }
+ { \int_eval:n {#2} }
{#1}
\@@_item_n:nw
- {#2}
}
\cs_new:Npn \@@_item_n:nw #1
{ \@@_item_n_loop:nw {#1} \prg_do_nothing: }
Modified: trunk/l3kernel/l3seq.dtx
===================================================================
--- trunk/l3kernel/l3seq.dtx 2016-12-06 05:49:48 UTC (rev 6785)
+++ trunk/l3kernel/l3seq.dtx 2016-12-06 13:36:34 UTC (rev 6786)
@@ -1684,7 +1684,7 @@
% \end{macro}
%
% \begin{macro}{\seq_item:Nn, \seq_item:cn}
-% \begin{macro}[aux]{\@@_item:wNn, \@@_item:nnn}
+% \begin{macro}[aux]{\@@_item:wNn, \@@_item:nN, \@@_item:nnn}
% The idea here is to find the offset of the item from the left, then use
% a loop to grab the correct item. If the resulting offset is too large,
% then the stop code |{ ? \__prg_break: } { }| will be used by the auxiliary,
@@ -1695,18 +1695,17 @@
\cs_new:Npn \@@_item:wNn \s_@@ #1 \q_stop #2#3
{
\exp_args:Nf \@@_item:nnn
- {
- \int_eval:n
- {
- \int_compare:nNnT {#3} < \c_zero
- { \seq_count:N #2 + \c_one + }
- #3
- }
- }
+ { \exp_args:Nf \@@_item:nN { \int_eval:n {#3} } #2 }
#1
{ ? \__prg_break: } { }
\__prg_break_point:
}
+\cs_new:Npn \@@_item:nN #1#2
+ {
+ \int_compare:nNnTF {#1} < \c_zero
+ { \int_eval:n { \seq_count:N #2 + \c_one + #1 } }
+ {#1}
+ }
\cs_new:Npn \@@_item:nnn #1#2#3
{
\use_none:n #2
Modified: trunk/l3kernel/l3tl.dtx
===================================================================
--- trunk/l3kernel/l3tl.dtx 2016-12-06 05:49:48 UTC (rev 6785)
+++ trunk/l3kernel/l3tl.dtx 2016-12-06 13:36:34 UTC (rev 6786)
@@ -2860,7 +2860,7 @@
% \subsection{Using a single item}
%
% \begin{macro}{\tl_item:nn, \tl_item:Nn, \tl_item:cn}
-% \begin{macro}[aux]{\@@_item:nn}
+% \begin{macro}[aux]{\@@_item_aux:nn, \@@_item:nn}
% The idea here is to find the offset of the item from the left, then use
% a loop to grab the correct item. If the resulting offset is too large,
% then \cs{quark_if_recursion_tail_stop:n} terminates the loop, and returns
@@ -2869,18 +2869,17 @@
\cs_new:Npn \tl_item:nn #1#2
{
\exp_args:Nf \@@_item:nn
- {
- \int_eval:n
- {
- \int_compare:nNnT {#2} < \c_zero
- { \tl_count:n {#1} + \c_one + }
- #2
- }
- }
+ { \exp_args:Nf \@@_item_aux:nn { \int_eval:n {#2} } {#1} }
#1
\q_recursion_tail
\__prg_break_point:
}
+\cs_new:Npn \@@_item_aux:nn #1#2
+ {
+ \int_compare:nNnTF {#1} < \c_zero
+ { \int_eval:n { \tl_count:n {#2} + \c_one + #1 } }
+ {#1}
+ }
\cs_new:Npn \@@_item:nn #1#2
{
\__quark_if_recursion_tail_break:nN {#2} \__prg_break:
Modified: trunk/l3kernel/testfiles/m3expl001.luatex.tlg
===================================================================
--- trunk/l3kernel/testfiles/m3expl001.luatex.tlg 2016-12-06 05:49:48 UTC (rev 6785)
+++ trunk/l3kernel/testfiles/m3expl001.luatex.tlg 2016-12-06 13:36:34 UTC (rev 6786)
@@ -564,6 +564,7 @@
Defining \tl_if_head_is_space:nTF on line ...
Defining \__tl_if_head_is_space:w on line ...
Defining \tl_item:nn on line ...
+Defining \__tl_item_aux:nn on line ...
Defining \__tl_item:nn on line ...
Defining \tl_item:Nn on line ...
Defining \tl_item:cn on line ...
@@ -1343,6 +1344,7 @@
Defining \seq_gpop_right:cNTF on line ...
Defining \seq_item:Nn on line ...
Defining \__seq_item:wNn on line ...
+Defining \__seq_item:nN on line ...
Defining \__seq_item:nnn on line ...
Defining \seq_item:cn on line ...
Defining \seq_map_break: on line ...
@@ -2064,7 +2066,10 @@
Defining \clist_use:Nn on line ...
Defining \clist_use:cn on line ...
Defining \clist_item:Nn on line ...
-Defining \__clist_item:nnNn on line ...
+Defining \__clist_item:nnnN on line ...
+Defining \exp_args:Nffo on line ...
+Defining \__clist_item:ffoN on line ...
+Defining \__clist_item:ffnN on line ...
Defining \__clist_item_N_loop:nw on line ...
Defining \clist_item:cn on line ...
Defining \clist_item:nn on line ...
Modified: trunk/l3kernel/testfiles/m3expl001.ptex.tlg
===================================================================
--- trunk/l3kernel/testfiles/m3expl001.ptex.tlg 2016-12-06 05:49:48 UTC (rev 6785)
+++ trunk/l3kernel/testfiles/m3expl001.ptex.tlg 2016-12-06 13:36:34 UTC (rev 6786)
@@ -563,6 +563,7 @@
Defining \tl_if_head_is_space:nTF on line ...
Defining \__tl_if_head_is_space:w on line ...
Defining \tl_item:nn on line ...
+Defining \__tl_item_aux:nn on line ...
Defining \__tl_item:nn on line ...
Defining \tl_item:Nn on line ...
Defining \tl_item:cn on line ...
@@ -1078,6 +1079,7 @@
Defining \seq_gpop_right:cNTF on line ...
Defining \seq_item:Nn on line ...
Defining \__seq_item:wNn on line ...
+Defining \__seq_item:nN on line ...
Defining \__seq_item:nnn on line ...
Defining \seq_item:cn on line ...
Defining \seq_map_break: on line ...
@@ -1799,7 +1801,10 @@
Defining \clist_use:Nn on line ...
Defining \clist_use:cn on line ...
Defining \clist_item:Nn on line ...
-Defining \__clist_item:nnNn on line ...
+Defining \__clist_item:nnnN on line ...
+Defining \exp_args:Nffo on line ...
+Defining \__clist_item:ffoN on line ...
+Defining \__clist_item:ffnN on line ...
Defining \__clist_item_N_loop:nw on line ...
Defining \clist_item:cn on line ...
Defining \clist_item:nn on line ...
Modified: trunk/l3kernel/testfiles/m3expl001.tlg
===================================================================
--- trunk/l3kernel/testfiles/m3expl001.tlg 2016-12-06 05:49:48 UTC (rev 6785)
+++ trunk/l3kernel/testfiles/m3expl001.tlg 2016-12-06 13:36:34 UTC (rev 6786)
@@ -563,6 +563,7 @@
Defining \tl_if_head_is_space:nTF on line ...
Defining \__tl_if_head_is_space:w on line ...
Defining \tl_item:nn on line ...
+Defining \__tl_item_aux:nn on line ...
Defining \__tl_item:nn on line ...
Defining \tl_item:Nn on line ...
Defining \tl_item:cn on line ...
@@ -1078,6 +1079,7 @@
Defining \seq_gpop_right:cNTF on line ...
Defining \seq_item:Nn on line ...
Defining \__seq_item:wNn on line ...
+Defining \__seq_item:nN on line ...
Defining \__seq_item:nnn on line ...
Defining \seq_item:cn on line ...
Defining \seq_map_break: on line ...
@@ -1799,7 +1801,10 @@
Defining \clist_use:Nn on line ...
Defining \clist_use:cn on line ...
Defining \clist_item:Nn on line ...
-Defining \__clist_item:nnNn on line ...
+Defining \__clist_item:nnnN on line ...
+Defining \exp_args:Nffo on line ...
+Defining \__clist_item:ffoN on line ...
+Defining \__clist_item:ffnN on line ...
Defining \__clist_item_N_loop:nw on line ...
Defining \clist_item:cn on line ...
Defining \clist_item:nn on line ...
Modified: trunk/l3kernel/testfiles/m3expl001.uptex.tlg
===================================================================
--- trunk/l3kernel/testfiles/m3expl001.uptex.tlg 2016-12-06 05:49:48 UTC (rev 6785)
+++ trunk/l3kernel/testfiles/m3expl001.uptex.tlg 2016-12-06 13:36:34 UTC (rev 6786)
@@ -563,6 +563,7 @@
Defining \tl_if_head_is_space:nTF on line ...
Defining \__tl_if_head_is_space:w on line ...
Defining \tl_item:nn on line ...
+Defining \__tl_item_aux:nn on line ...
Defining \__tl_item:nn on line ...
Defining \tl_item:Nn on line ...
Defining \tl_item:cn on line ...
@@ -1078,6 +1079,7 @@
Defining \seq_gpop_right:cNTF on line ...
Defining \seq_item:Nn on line ...
Defining \__seq_item:wNn on line ...
+Defining \__seq_item:nN on line ...
Defining \__seq_item:nnn on line ...
Defining \seq_item:cn on line ...
Defining \seq_map_break: on line ...
@@ -1799,7 +1801,10 @@
Defining \clist_use:Nn on line ...
Defining \clist_use:cn on line ...
Defining \clist_item:Nn on line ...
-Defining \__clist_item:nnNn on line ...
+Defining \__clist_item:nnnN on line ...
+Defining \exp_args:Nffo on line ...
+Defining \__clist_item:ffoN on line ...
+Defining \__clist_item:ffnN on line ...
Defining \__clist_item_N_loop:nw on line ...
Defining \clist_item:cn on line ...
Defining \clist_item:nn on line ...
Modified: trunk/l3kernel/testfiles/m3expl001.xetex.tlg
===================================================================
--- trunk/l3kernel/testfiles/m3expl001.xetex.tlg 2016-12-06 05:49:48 UTC (rev 6785)
+++ trunk/l3kernel/testfiles/m3expl001.xetex.tlg 2016-12-06 13:36:34 UTC (rev 6786)
@@ -563,6 +563,7 @@
Defining \tl_if_head_is_space:nTF on line ...
Defining \__tl_if_head_is_space:w on line ...
Defining \tl_item:nn on line ...
+Defining \__tl_item_aux:nn on line ...
Defining \__tl_item:nn on line ...
Defining \tl_item:Nn on line ...
Defining \tl_item:cn on line ...
@@ -1341,6 +1342,7 @@
Defining \seq_gpop_right:cNTF on line ...
Defining \seq_item:Nn on line ...
Defining \__seq_item:wNn on line ...
+Defining \__seq_item:nN on line ...
Defining \__seq_item:nnn on line ...
Defining \seq_item:cn on line ...
Defining \seq_map_break: on line ...
@@ -2062,7 +2064,10 @@
Defining \clist_use:Nn on line ...
Defining \clist_use:cn on line ...
Defining \clist_item:Nn on line ...
-Defining \__clist_item:nnNn on line ...
+Defining \__clist_item:nnnN on line ...
+Defining \exp_args:Nffo on line ...
+Defining \__clist_item:ffoN on line ...
+Defining \__clist_item:ffnN on line ...
Defining \__clist_item_N_loop:nw on line ...
Defining \clist_item:cn on line ...
Defining \clist_item:nn on line ...
Modified: trunk/l3kernel/testfiles/m3expl003.luatex.tlg
===================================================================
--- trunk/l3kernel/testfiles/m3expl003.luatex.tlg 2016-12-06 05:49:48 UTC (rev 6785)
+++ trunk/l3kernel/testfiles/m3expl003.luatex.tlg 2016-12-06 13:36:34 UTC (rev 6786)
@@ -564,6 +564,7 @@
Defining \tl_if_head_is_space:nTF on line ...
Defining \__tl_if_head_is_space:w on line ...
Defining \tl_item:nn on line ...
+Defining \__tl_item_aux:nn on line ...
Defining \__tl_item:nn on line ...
Defining \tl_item:Nn on line ...
Defining \tl_item:cn on line ...
@@ -1343,6 +1344,7 @@
Defining \seq_gpop_right:cNTF on line ...
Defining \seq_item:Nn on line ...
Defining \__seq_item:wNn on line ...
+Defining \__seq_item:nN on line ...
Defining \__seq_item:nnn on line ...
Defining \seq_item:cn on line ...
Defining \seq_map_break: on line ...
@@ -2064,7 +2066,10 @@
Defining \clist_use:Nn on line ...
Defining \clist_use:cn on line ...
Defining \clist_item:Nn on line ...
-Defining \__clist_item:nnNn on line ...
+Defining \__clist_item:nnnN on line ...
+Defining \exp_args:Nffo on line ...
+Defining \__clist_item:ffoN on line ...
+Defining \__clist_item:ffnN on line ...
Defining \__clist_item_N_loop:nw on line ...
Defining \clist_item:cn on line ...
Defining \clist_item:nn on line ...
Modified: trunk/l3kernel/testfiles/m3expl003.ptex.tlg
===================================================================
--- trunk/l3kernel/testfiles/m3expl003.ptex.tlg 2016-12-06 05:49:48 UTC (rev 6785)
+++ trunk/l3kernel/testfiles/m3expl003.ptex.tlg 2016-12-06 13:36:34 UTC (rev 6786)
@@ -563,6 +563,7 @@
Defining \tl_if_head_is_space:nTF on line ...
Defining \__tl_if_head_is_space:w on line ...
Defining \tl_item:nn on line ...
+Defining \__tl_item_aux:nn on line ...
Defining \__tl_item:nn on line ...
Defining \tl_item:Nn on line ...
Defining \tl_item:cn on line ...
@@ -1078,6 +1079,7 @@
Defining \seq_gpop_right:cNTF on line ...
Defining \seq_item:Nn on line ...
Defining \__seq_item:wNn on line ...
+Defining \__seq_item:nN on line ...
Defining \__seq_item:nnn on line ...
Defining \seq_item:cn on line ...
Defining \seq_map_break: on line ...
@@ -1799,7 +1801,10 @@
Defining \clist_use:Nn on line ...
Defining \clist_use:cn on line ...
Defining \clist_item:Nn on line ...
-Defining \__clist_item:nnNn on line ...
+Defining \__clist_item:nnnN on line ...
+Defining \exp_args:Nffo on line ...
+Defining \__clist_item:ffoN on line ...
+Defining \__clist_item:ffnN on line ...
Defining \__clist_item_N_loop:nw on line ...
Defining \clist_item:cn on line ...
Defining \clist_item:nn on line ...
Modified: trunk/l3kernel/testfiles/m3expl003.tlg
===================================================================
--- trunk/l3kernel/testfiles/m3expl003.tlg 2016-12-06 05:49:48 UTC (rev 6785)
+++ trunk/l3kernel/testfiles/m3expl003.tlg 2016-12-06 13:36:34 UTC (rev 6786)
@@ -563,6 +563,7 @@
Defining \tl_if_head_is_space:nTF on line ...
Defining \__tl_if_head_is_space:w on line ...
Defining \tl_item:nn on line ...
+Defining \__tl_item_aux:nn on line ...
Defining \__tl_item:nn on line ...
Defining \tl_item:Nn on line ...
Defining \tl_item:cn on line ...
@@ -1078,6 +1079,7 @@
Defining \seq_gpop_right:cNTF on line ...
Defining \seq_item:Nn on line ...
Defining \__seq_item:wNn on line ...
+Defining \__seq_item:nN on line ...
Defining \__seq_item:nnn on line ...
Defining \seq_item:cn on line ...
Defining \seq_map_break: on line ...
@@ -1799,7 +1801,10 @@
Defining \clist_use:Nn on line ...
Defining \clist_use:cn on line ...
Defining \clist_item:Nn on line ...
-Defining \__clist_item:nnNn on line ...
+Defining \__clist_item:nnnN on line ...
+Defining \exp_args:Nffo on line ...
+Defining \__clist_item:ffoN on line ...
+Defining \__clist_item:ffnN on line ...
Defining \__clist_item_N_loop:nw on line ...
Defining \clist_item:cn on line ...
Defining \clist_item:nn on line ...
Modified: trunk/l3kernel/testfiles/m3expl003.uptex.tlg
===================================================================
--- trunk/l3kernel/testfiles/m3expl003.uptex.tlg 2016-12-06 05:49:48 UTC (rev 6785)
+++ trunk/l3kernel/testfiles/m3expl003.uptex.tlg 2016-12-06 13:36:34 UTC (rev 6786)
@@ -563,6 +563,7 @@
Defining \tl_if_head_is_space:nTF on line ...
Defining \__tl_if_head_is_space:w on line ...
Defining \tl_item:nn on line ...
+Defining \__tl_item_aux:nn on line ...
Defining \__tl_item:nn on line ...
Defining \tl_item:Nn on line ...
Defining \tl_item:cn on line ...
@@ -1078,6 +1079,7 @@
Defining \seq_gpop_right:cNTF on line ...
Defining \seq_item:Nn on line ...
Defining \__seq_item:wNn on line ...
+Defining \__seq_item:nN on line ...
Defining \__seq_item:nnn on line ...
Defining \seq_item:cn on line ...
Defining \seq_map_break: on line ...
@@ -1799,7 +1801,10 @@
Defining \clist_use:Nn on line ...
Defining \clist_use:cn on line ...
Defining \clist_item:Nn on line ...
-Defining \__clist_item:nnNn on line ...
+Defining \__clist_item:nnnN on line ...
+Defining \exp_args:Nffo on line ...
+Defining \__clist_item:ffoN on line ...
+Defining \__clist_item:ffnN on line ...
Defining \__clist_item_N_loop:nw on line ...
Defining \clist_item:cn on line ...
Defining \clist_item:nn on line ...
Modified: trunk/l3kernel/testfiles/m3expl003.xetex.tlg
===================================================================
--- trunk/l3kernel/testfiles/m3expl003.xetex.tlg 2016-12-06 05:49:48 UTC (rev 6785)
+++ trunk/l3kernel/testfiles/m3expl003.xetex.tlg 2016-12-06 13:36:34 UTC (rev 6786)
@@ -563,6 +563,7 @@
Defining \tl_if_head_is_space:nTF on line ...
Defining \__tl_if_head_is_space:w on line ...
Defining \tl_item:nn on line ...
+Defining \__tl_item_aux:nn on line ...
Defining \__tl_item:nn on line ...
Defining \tl_item:Nn on line ...
Defining \tl_item:cn on line ...
@@ -1341,6 +1342,7 @@
Defining \seq_gpop_right:cNTF on line ...
Defining \seq_item:Nn on line ...
Defining \__seq_item:wNn on line ...
+Defining \__seq_item:nN on line ...
Defining \__seq_item:nnn on line ...
Defining \seq_item:cn on line ...
Defining \seq_map_break: on line ...
@@ -2062,7 +2064,10 @@
Defining \clist_use:Nn on line ...
Defining \clist_use:cn on line ...
Defining \clist_item:Nn on line ...
-Defining \__clist_item:nnNn on line ...
+Defining \__clist_item:nnnN on line ...
+Defining \exp_args:Nffo on line ...
+Defining \__clist_item:ffoN on line ...
+Defining \__clist_item:ffnN on line ...
Defining \__clist_item_N_loop:nw on line ...
Defining \clist_item:cn on line ...
Defining \clist_item:nn on line ...
More information about the latex3-commits
mailing list