[latex3-commits] [git/LaTeX3-latex3-latex3] master: faster keys_find_key_module: (3e2020477)

Joseph Wright joseph.wright at morningstar2.co.uk
Wed Aug 5 08:40:39 CEST 2020


Repository : https://github.com/latex3/latex3
On branch  : master
Link       : https://github.com/latex3/latex3/commit/3e2020477788b299fac994ee8acc9201fe5e01f7

>---------------------------------------------------------------

commit 3e2020477788b299fac994ee8acc9201fe5e01f7
Author: Jonathan Spratte <jspratte at yahoo.de>
Date:   Tue Aug 4 14:19:16 2020 +0200

    faster keys_find_key_module:


>---------------------------------------------------------------

3e2020477788b299fac994ee8acc9201fe5e01f7
 l3kernel/l3keys.dtx | 62 ++++++++++++++++++++++++++++++++++++-----------------
 1 file changed, 42 insertions(+), 20 deletions(-)

diff --git a/l3kernel/l3keys.dtx b/l3kernel/l3keys.dtx
index 52388279a..660fee6aa 100644
--- a/l3kernel/l3keys.dtx
+++ b/l3kernel/l3keys.dtx
@@ -1901,10 +1901,8 @@
 \cs_new_protected:Npn \@@_prop_put:Nn #1#2
   {
     \prop_if_exist:NF #1 { \prop_new:N #1 }
-    \exp_after:wN \@@_find_key_module:NNw
-      \exp_after:wN \l_@@_tmpa_tl
-      \exp_after:wN \l_@@_tmpb_tl
-      \l_keys_path_str / \s_@@_stop
+    \exp_after:wN \@@_find_key_module:wNN \l_keys_path_str \s_@@_stop
+      \l_@@_tmpa_tl \l_@@_tmpb_tl
     \@@_cmd_set:nx { \l_keys_path_str }
       {
         \exp_not:c { prop_ #2 put:Nnn }
@@ -2586,7 +2584,14 @@
 %
 % \begin{macro}{\@@_set_keyval:n, \@@_set_keyval:nn}
 % \begin{macro}{\@@_set_keyval:nnn, \@@_set_keyval:onn}
-% \begin{macro}{\@@_find_key_module:NNw}
+% \begin{macro}{\@@_find_key_module:wNN}
+% \begin{macro}
+%   {
+%     \@@_find_key_module_auxi:Nw   ,
+%     \@@_find_key_module_auxii:Nw  ,
+%     \@@_find_key_module_auxiii:Nn ,
+%     \@@_find_key_module_auxiv:Nw
+%   }
 % \begin{macro}{\@@_set_selective:}
 %   A shared system once again. First, set the current path and add a
 %   default if needed. There are then checks to see if the a value is
@@ -2620,10 +2625,8 @@
       }
     \str_clear:N \l_@@_module_str
     \str_clear:N \l_@@_inherit_str
-    \exp_after:wN \@@_find_key_module:NNw
-      \exp_after:wN \l_@@_module_str
-      \exp_after:wN \l_keys_key_str
-      \l_keys_path_str / \s_@@_stop
+    \exp_after:wN \@@_find_key_module:wNN \l_keys_path_str \s_@@_stop
+      \l_@@_module_str \l_keys_key_str
     \tl_set_eq:NN \l_keys_key_tl \l_keys_key_str
     \@@_value_or_default:n {#3}
     \bool_if:NTF \l_@@_selective_bool
@@ -2632,18 +2635,36 @@
     \str_set:Nn \l_@@_module_str {#1}
   }
 \cs_generate_variant:Nn \@@_set_keyval:nnn { o }
-\cs_new_protected:Npn \@@_find_key_module:NNw #1#2#3 / #4 \s_@@_stop
+%    \end{macrocode}
+%   This function uses \cs{cs_set_nopar:Npx} internally for performance reasons,
+%   the argument |#1| is already a string in every usage, so turning it into a
+%   string again seems unnecessary.
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_find_key_module:wNN #1 \s_@@_stop #2 #3
   {
-    \tl_if_blank:nTF {#4}
-      { \str_set:Nn #2 {#3} }
-      {
-        \str_put_right:Nx #1
-          {
-            \str_if_empty:NF #1 { / }
-            #3
-          }
-        \@@_find_key_module:NNw #1#2 #4 \s_@@_stop
-      }
+    \@@_find_key_module_auxi:Nw #2 #1 \s_@@_nil \@@_find_key_module_auxii:Nw
+      / \s_@@_nil \@@_find_key_module_auxiv:Nw #3
+  }
+\cs_new:Npn \@@_find_key_module_auxi:Nw #1 #2 / #3 \s_@@_nil #4
+  {
+    #4 #1 #2 \s_@@_mark #3 \s_@@_nil #4
+  }
+\cs_new:Npn \@@_find_key_module_auxii:Nw
+    #1 #2 \s_@@_mark #3 \s_@@_nil \@@_find_key_module_auxii:Nw
+  {
+    \cs_set_nopar:Npx #1 { \tl_if_empty:NF #1 { #1 / } #2 }
+    \@@_find_key_module_auxi:Nw #1 #3 \s_@@_nil \@@_find_key_module_auxiii:Nw
+  }
+\cs_new:Npn \@@_find_key_module_auxiii:Nw #1 #2 \s_@@_mark
+  {
+    \cs_set_nopar:Npx #1 { \tl_if_empty:NF #1 { #1 / } #2 }
+    \@@_find_key_module_auxi:Nw #1
+  }
+\cs_new:Npn \@@_find_key_module_auxiv:Nw
+    #1 #2 \s_@@_nil #3 \s_@@_mark
+    \s_@@_nil \@@_find_key_module_auxiv:Nw #4
+  {
+    \cs_set_nopar:Npn #4 { #2 }
   }
 %    \end{macrocode}
 %  If selective setting is active, there are a number of possible sub-cases
@@ -2702,6 +2723,7 @@
 % \end{macro}
 % \end{macro}
 % \end{macro}
+% \end{macro}
 %
 % \begin{macro}{\@@_value_or_default:n}
 % \begin{macro}{\@@_default_inherit:}





More information about the latex3-commits mailing list.