[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