[latex3-commits] [git/LaTeX3-latex3-latex2e] develop: Update l3kernel to 2020-02-08 (674f14dc)

Joseph Wright joseph.wright at morningstar2.co.uk
Sat Feb 8 11:13:54 CET 2020


Repository : https://github.com/latex3/latex2e
On branch  : develop
Link       : https://github.com/latex3/latex2e/commit/674f14dc80dd3ec8ea4cbf9894c6b01279ade15d

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

commit 674f14dc80dd3ec8ea4cbf9894c6b01279ade15d
Author: Joseph Wright <joseph.wright at morningstar2.co.uk>
Date:   Sat Feb 8 10:13:54 2020 +0000

    Update l3kernel to 2020-02-08


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

674f14dc80dd3ec8ea4cbf9894c6b01279ade15d
 texmf/tex/latex/l3kernel/expl3-code.tex    | 389 +++++++++++++++--------------
 texmf/tex/latex/l3kernel/expl3-generic.tex |   2 +-
 texmf/tex/latex/l3kernel/expl3.ltx         |   2 +-
 texmf/tex/latex/l3kernel/expl3.sty         |   2 +-
 texmf/tex/latex/l3kernel/l3debug.def       |   2 +-
 5 files changed, 200 insertions(+), 197 deletions(-)

diff --git a/texmf/tex/latex/l3kernel/expl3-code.tex b/texmf/tex/latex/l3kernel/expl3-code.tex
index f416769c..043647b1 100644
--- a/texmf/tex/latex/l3kernel/expl3-code.tex
+++ b/texmf/tex/latex/l3kernel/expl3-code.tex
@@ -67,7 +67,7 @@
 %% and all files in that bundle must be distributed together.
 %% 
 %% File: expl3.dtx
-\def\ExplFileDate{2020-02-03}%
+\def\ExplFileDate{2020-02-08}%
 \begingroup
   \def\next{\endgroup}%
   \expandafter\ifx\csname PackageError\endcsname\relax
@@ -12660,25 +12660,27 @@
     LaTeX~is~attempting~to~parse~some~key-value~input~but~found~
     two~equals~signs~not~separated~by~a~comma.
   }
-\tl_const:Nn \c__keys_code_root_tl     { key~code~>~ }
-\tl_const:Nn \c__keys_default_root_tl  { key~default~>~ }
-\tl_const:Nn \c__keys_groups_root_tl   { key~groups~>~ }
-\tl_const:Nn \c__keys_inherit_root_tl  { key~inherit~>~ }
-\tl_const:Nn \c__keys_type_root_tl     { key~type~>~ }
-\tl_const:Nn \c__keys_validate_root_tl { key~validate~>~ }
-\tl_const:Nn \c__keys_props_root_tl { key~prop~>~ }
+\str_const:Nn \c__keys_code_root_str     { key~code~>~ }
+\str_const:Nn \c__keys_default_root_str  { key~default~>~ }
+\str_const:Nn \c__keys_groups_root_str   { key~groups~>~ }
+\str_const:Nn \c__keys_inherit_root_str  { key~inherit~>~ }
+\str_const:Nn \c__keys_type_root_str     { key~type~>~ }
+\str_const:Nn \c__keys_validate_root_str { key~validate~>~ }
+\str_const:Nn \c__keys_props_root_str { key~prop~>~ }
 \int_new:N \l_keys_choice_int
 \tl_new:N \l_keys_choice_tl
 \clist_new:N \l__keys_groups_clist
+\str_new:N \l_keys_key_str
 \tl_new:N \l_keys_key_tl
-\tl_new:N \l__keys_module_tl
+\str_new:N \l__keys_module_str
 \bool_new:N \l__keys_no_value_bool
 \bool_new:N \l__keys_only_known_bool
+\str_new:N \l_keys_path_str
 \tl_new:N \l_keys_path_tl
-\tl_new:N \l__keys_inherit_tl
+\str_new:N \l__keys_inherit_str
 \tl_new:N \l__keys_relative_tl
 \tl_set:Nn \l__keys_relative_tl { \q_no_value }
-\tl_new:N \l__keys_property_tl
+\str_new:N \l__keys_property_str
 \bool_new:N \l__keys_selective_bool
 \bool_new:N \l__keys_filtered_bool
 \seq_new:N \l__keys_selective_seq
@@ -12688,12 +12690,12 @@
 \tl_new:N \l__keys_tmpa_tl
 \tl_new:N \l__keys_tmpb_tl
 \cs_new_protected:Npn \keys_define:nn
-  { \__keys_define:onn \l__keys_module_tl }
+  { \__keys_define:onn \l__keys_module_str }
 \cs_new_protected:Npn \__keys_define:nnn #1#2#3
   {
-    \tl_set:Nx \l__keys_module_tl { \__keys_trim_spaces:n {#2} }
+    \str_set:Nx \l__keys_module_str { \__keys_trim_spaces:n {#2} }
     \keyval_parse:NNn \__keys_define:n \__keys_define:nn {#3}
-    \tl_set:Nn \l__keys_module_tl {#1}
+    \str_set:Nn \l__keys_module_str {#1}
   }
 \cs_generate_variant:Nn \__keys_define:nnn { o }
 \cs_new_protected:Npn \__keys_define:n #1
@@ -12709,56 +12711,56 @@
 \cs_new_protected:Npn \__keys_define_aux:nn #1#2
   {
     \__keys_property_find:n {#1}
-    \cs_if_exist:cTF { \c__keys_props_root_tl \l__keys_property_tl }
-      { \__keys_define_code:n {#2}
-      }
+    \cs_if_exist:cTF { \c__keys_props_root_str \l__keys_property_str }
+      { \__keys_define_code:n {#2} }
       {
-         \tl_if_empty:NF \l__keys_property_tl
+         \str_if_empty:NF \l__keys_property_str
            {
              \__kernel_msg_error:nnxx { kernel } { key-property-unknown }
-              { \l__keys_property_tl } { \l_keys_path_tl }
+              { \l__keys_property_str } { \l_keys_path_str }
            }
       }
   }
 \cs_new_protected:Npn \__keys_property_find:n #1
   {
-    \tl_set:Nx \l__keys_property_tl { \__keys_trim_spaces:n {#1} }
-    \exp_after:wN \__keys_property_find:w \l__keys_property_tl . .
+    \str_set:Nx \l__keys_property_str { \__keys_trim_spaces:n {#1} }
+    \exp_after:wN \__keys_property_find:w \l__keys_property_str . .
       \q_stop {#1}
   }
 \cs_new_protected:Npn \__keys_property_find:w #1 . #2 . #3 \q_stop #4
   {
     \tl_if_blank:nTF {#3}
       {
-        \tl_clear:N \l__keys_property_tl
+        \str_clear:N \l__keys_property_str
         \__kernel_msg_error:nnn { kernel } { key-no-property } {#4}
       }
       {
         \str_if_eq:nnTF {#3} { . }
           {
-            \tl_set:Nx \l_keys_path_tl
+            \str_set:Nx \l_keys_path_str
               {
-                \tl_if_empty:NF \l__keys_module_tl
-                  { \l__keys_module_tl  / }
+                \str_if_empty:NF \l__keys_module_str
+                  { \l__keys_module_str  / }
                \tl_trim_spaces:n {#1}
               }
-            \tl_set:Nn \l__keys_property_tl { . #2 }
+            \str_set:Nn \l__keys_property_str { . #2 }
           }
           {
-            \tl_set:Nx \l_keys_path_tl { \l__keys_module_tl / #1 . #2 }
+            \str_set:Nx \l_keys_path_str { \l__keys_module_str / #1 . #2 }
             \__keys_property_search:w #3 \q_stop
           }
+        \tl_set_eq:NN \l_keys_path_tl \l_keys_path_str
       }
   }
 \cs_new_protected:Npn \__keys_property_search:w #1 . #2 \q_stop
   {
     \str_if_eq:nnTF {#2} { . }
       {
-        \tl_set:Nx \l_keys_path_tl { \l_keys_path_tl }
-        \tl_set:Nn \l__keys_property_tl { . #1 }
+        \str_set:Nx \l_keys_path_str { \l_keys_path_str }
+        \str_set:Nn \l__keys_property_str { . #1 }
       }
       {
-        \tl_set:Nx \l_keys_path_tl { \l_keys_path_tl . #1 }
+        \str_set:Nx \l_keys_path_str { \l_keys_path_str . #1 }
         \__keys_property_search:w #2 \q_stop
       }
   }
@@ -12767,15 +12769,15 @@
     \bool_if:NTF \l__keys_no_value_bool
       {
         \exp_after:wN \__keys_define_code:w
-          \l__keys_property_tl \q_stop
-          { \use:c { \c__keys_props_root_tl \l__keys_property_tl } }
+          \l__keys_property_str \q_stop
+          { \use:c { \c__keys_props_root_str \l__keys_property_str } }
           {
             \__kernel_msg_error:nnxx { kernel }
-              { key-property-requires-value } { \l__keys_property_tl }
-              { \l_keys_path_tl }
+              { key-property-requires-value } { \l__keys_property_str }
+              { \l_keys_path_str }
             }
       }
-      { \use:c { \c__keys_props_root_tl \l__keys_property_tl } {#1} }
+      { \use:c { \c__keys_props_root_str \l__keys_property_str } {#1} }
   }
 \exp_last_unbraced:NNNNo
   \cs_new:Npn \__keys_define_code:w #1 \c_colon_str #2 \q_stop
@@ -12784,14 +12786,14 @@
   {
     \bool_if_exist:NF #1 { \bool_new:N #1 }
     \__keys_choice_make:
-    \__keys_cmd_set:nx { \l_keys_path_tl / true }
+    \__keys_cmd_set:nx { \l_keys_path_str / true }
       { \exp_not:c { bool_ #2 set_true:N } \exp_not:N #1 }
-    \__keys_cmd_set:nx { \l_keys_path_tl / false }
+    \__keys_cmd_set:nx { \l_keys_path_str / false }
       { \exp_not:c { bool_ #2 set_false:N } \exp_not:N #1 }
-    \__keys_cmd_set:nn { \l_keys_path_tl / unknown }
+    \__keys_cmd_set:nn { \l_keys_path_str / unknown }
       {
         \__kernel_msg_error:nnx { kernel } { boolean-values-only }
-          { \l_keys_key_tl }
+          { \l_keys_key_str }
       }
     \__keys_default_set:n { true }
   }
@@ -12800,14 +12802,14 @@
   {
     \bool_if_exist:NF #1 { \bool_new:N #1 }
     \__keys_choice_make:
-    \__keys_cmd_set:nx { \l_keys_path_tl / true }
+    \__keys_cmd_set:nx { \l_keys_path_str / true }
       { \exp_not:c { bool_ #2 set_false:N } \exp_not:N #1 }
-    \__keys_cmd_set:nx { \l_keys_path_tl / false }
+    \__keys_cmd_set:nx { \l_keys_path_str / false }
       { \exp_not:c { bool_ #2 set_true:N } \exp_not:N #1 }
-    \__keys_cmd_set:nn { \l_keys_path_tl / unknown }
+    \__keys_cmd_set:nn { \l_keys_path_str / unknown }
       {
         \__kernel_msg_error:nnx { kernel } { boolean-values-only }
-          { \l_keys_key_tl }
+          { \l_keys_key_str }
       }
     \__keys_default_set:n { true }
   }
@@ -12819,14 +12821,14 @@
 \cs_new_protected:Npn \__keys_choice_make:N #1
   {
     \cs_if_exist:cTF
-      { \c__keys_type_root_tl \__keys_parent:o \l_keys_path_tl }
+      { \c__keys_type_root_str \__keys_parent:o \l_keys_path_str }
       {
         \str_if_eq:vnTF
-          { \c__keys_type_root_tl \__keys_parent:o \l_keys_path_tl }
+          { \c__keys_type_root_str \__keys_parent:o \l_keys_path_str }
           { choice }
           {
             \__kernel_msg_error:nnxx { kernel } { nested-choice-key }
-              { \l_keys_path_tl } { \__keys_parent:o \l_keys_path_tl }
+              { \l_keys_path_tl } { \__keys_parent:o \l_keys_path_str }
           }
           { \__keys_choice_make_aux:N #1 }
       }
@@ -12834,13 +12836,13 @@
   }
 \cs_new_protected:Npn \__keys_choice_make_aux:N #1
   {
-    \cs_set_nopar:cpn { \c__keys_type_root_tl \l_keys_path_tl }
+    \cs_set_nopar:cpn { \c__keys_type_root_str \l_keys_path_str }
       { choice }
-    \__keys_cmd_set:nn { \l_keys_path_tl } { #1 {##1} }
-    \__keys_cmd_set:nn { \l_keys_path_tl / unknown }
+    \__keys_cmd_set:nn { \l_keys_path_str } { #1 {##1} }
+    \__keys_cmd_set:nn { \l_keys_path_str / unknown }
       {
         \__kernel_msg_error:nnxx { kernel } { key-choice-unknown }
-          { \l_keys_path_tl } {##1}
+          { \l_keys_path_str } {##1}
       }
   }
 \cs_new_protected:Npn \__keys_choices_make:nn
@@ -12855,7 +12857,7 @@
       {
         \int_incr:N \l_keys_choice_int
         \__keys_cmd_set:nx
-          { \l_keys_path_tl / \__keys_trim_spaces:n {##1} }
+          { \l_keys_path_str / \__keys_trim_spaces:n {##1} }
           {
             \tl_set:Nn \exp_not:N \l_keys_choice_tl {##1}
             \int_set:Nn \exp_not:N \l_keys_choice_int
@@ -12865,19 +12867,19 @@
       }
   }
 \cs_new_protected:Npn \__keys_cmd_set:nn #1#2
-  { \cs_set_protected:cpn { \c__keys_code_root_tl #1 } ##1 {#2} }
+  { \cs_set_protected:cpn { \c__keys_code_root_str #1 } ##1 {#2} }
 \cs_generate_variant:Nn \__keys_cmd_set:nn { nx , Vn , Vo }
 \cs_new_protected:Npn \__keys_default_set:n #1
   {
     \tl_if_empty:nTF {#1}
       {
         \cs_set_eq:cN
-          { \c__keys_default_root_tl \l_keys_path_tl }
+          { \c__keys_default_root_str \l_keys_path_str }
           \tex_undefined:D
       }
       {
         \cs_set_nopar:cpx
-          { \c__keys_default_root_tl \l_keys_path_tl }
+          { \c__keys_default_root_str \l_keys_path_str }
           { \exp_not:n {#1} }
         \__keys_value_requirement:nn { required } { false }
       }
@@ -12887,47 +12889,47 @@
     \clist_set:Nn \l__keys_groups_clist {#1}
     \clist_if_empty:NTF \l__keys_groups_clist
       {
-        \cs_set_eq:cN { \c__keys_groups_root_tl \l_keys_path_tl }
+        \cs_set_eq:cN { \c__keys_groups_root_str \l_keys_path_str }
           \tex_undefined:D
       }
       {
-        \cs_set_eq:cN { \c__keys_groups_root_tl \l_keys_path_tl }
+        \cs_set_eq:cN { \c__keys_groups_root_str \l_keys_path_str }
           \l__keys_groups_clist
       }
   }
 \cs_new_protected:Npn \__keys_inherit:n #1
   {
     \__keys_undefine:
-    \cs_set_nopar:cpn { \c__keys_inherit_root_tl \l_keys_path_tl } {#1}
+    \cs_set_nopar:cpn { \c__keys_inherit_root_str \l_keys_path_str } {#1}
   }
 \cs_new_protected:Npn \__keys_initialise:n #1
   {
     \cs_if_exist:cTF
-      { \c__keys_inherit_root_tl \__keys_parent:o \l_keys_path_tl }
+      { \c__keys_inherit_root_str \__keys_parent:o \l_keys_path_str }
       { \__keys_execute_inherit: }
       {
-        \tl_clear:N \l__keys_inherit_tl
-        \cs_if_exist_use:cT { \c__keys_code_root_tl \l_keys_path_tl } { {#1} }
+        \str_clear:N \l__keys_inherit_str
+        \cs_if_exist_use:cT { \c__keys_code_root_str \l_keys_path_str } { {#1} }
       }
   }
 \cs_new_protected:Npn \__keys_meta_make:n #1
   {
-    \__keys_cmd_set:Vo \l_keys_path_tl
+    \__keys_cmd_set:Vo \l_keys_path_str
       {
         \exp_after:wN \keys_set:nn
-        \exp_after:wN { \l__keys_module_tl } {#1}
+        \exp_after:wN { \l__keys_module_str } {#1}
       }
   }
 \cs_new_protected:Npn \__keys_meta_make:nn #1#2
-  { \__keys_cmd_set:Vn \l_keys_path_tl { \keys_set:nn {#1} {#2} } }
+  { \__keys_cmd_set:Vn \l_keys_path_str { \keys_set:nn {#1} {#2} } }
 \cs_new_protected:Npn \__keys_prop_put:Nn #1#2
   {
     \prop_if_exist:NF #1 { \prop_new:N #1 }
     \exp_after:wN \__keys_find_key_module:NNw
       \exp_after:wN \l__keys_tmpa_tl
       \exp_after:wN \l__keys_tmpb_tl
-      \l_keys_path_tl / \q_stop
-    \__keys_cmd_set:nx { \l_keys_path_tl }
+      \l_keys_path_str / \q_stop
+    \__keys_cmd_set:nx { \l_keys_path_str }
       {
         \exp_not:c { prop_ #2 put:Nnn }
         \exp_not:N #1
@@ -12942,7 +12944,7 @@
       { code , default , groups , inherit , type , validate }
       {
         \cs_set_eq:cN
-          { \tl_use:c { c__keys_ ##1 _root_tl } \l_keys_path_tl }
+          { \tl_use:c { c__keys_ ##1 _root_str } \l_keys_path_str }
           \tex_undefined:D
       }
   }
@@ -12953,17 +12955,17 @@
         { true }
           {
             \cs_set_eq:cc
-              { \c__keys_validate_root_tl \l_keys_path_tl }
+              { \c__keys_validate_root_str \l_keys_path_str }
               { __keys_validate_ #1 : }
           }
         { false }
           {
             \cs_if_eq:ccT
-              { \c__keys_validate_root_tl \l_keys_path_tl }
+              { \c__keys_validate_root_str \l_keys_path_str }
               { __keys_validate_ #1 : }
               {
                 \cs_set_eq:cN
-                  { \c__keys_validate_root_tl \l_keys_path_tl }
+                  { \c__keys_validate_root_str \l_keys_path_str }
                   \tex_undefined:D
               }
           }
@@ -12979,7 +12981,7 @@
     \bool_if:NF \l__keys_no_value_bool
       {
         \__kernel_msg_error:nnxx { kernel } { value-forbidden }
-          { \l_keys_path_tl } { \l_keys_value_tl }
+          { \l_keys_path_str } { \l_keys_value_tl }
         \__keys_validate_cleanup:w
       }
   }
@@ -12988,7 +12990,7 @@
     \bool_if:NT \l__keys_no_value_bool
       {
         \__kernel_msg_error:nnx { kernel } { value-required }
-          { \l_keys_path_tl }
+          { \l_keys_path_str }
         \__keys_validate_cleanup:w
       }
   }
@@ -12996,7 +12998,7 @@
 \cs_new_protected:Npn \__keys_variable_set:NnnN #1#2#3#4
   {
     \use:c { #2_if_exist:NF } #1 { \use:c { #2 _new:N } #1 }
-    \__keys_cmd_set:nx { \l_keys_path_tl }
+    \__keys_cmd_set:nx { \l_keys_path_str }
       {
         \exp_not:c { #2 _ #3 set:N #4 }
         \exp_not:N #1
@@ -13010,145 +13012,145 @@
     \__keys_value_requirement:nn { required } { true }
   }
 \cs_generate_variant:Nn \__keys_variable_set_required:NnnN { c }
-\cs_new_protected:cpn { \c__keys_props_root_tl .bool_set:N } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .bool_set:N } #1
   { \__keys_bool_set:Nn #1 { } }
-\cs_new_protected:cpn { \c__keys_props_root_tl .bool_set:c } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .bool_set:c } #1
   { \__keys_bool_set:cn {#1} { } }
-\cs_new_protected:cpn { \c__keys_props_root_tl .bool_gset:N } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .bool_gset:N } #1
   { \__keys_bool_set:Nn #1 { g } }
-\cs_new_protected:cpn { \c__keys_props_root_tl .bool_gset:c } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .bool_gset:c } #1
   { \__keys_bool_set:cn {#1} { g } }
-\cs_new_protected:cpn { \c__keys_props_root_tl .bool_set_inverse:N } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .bool_set_inverse:N } #1
   { \__keys_bool_set_inverse:Nn #1 { } }
-\cs_new_protected:cpn { \c__keys_props_root_tl .bool_set_inverse:c } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .bool_set_inverse:c } #1
   { \__keys_bool_set_inverse:cn {#1} { } }
-\cs_new_protected:cpn { \c__keys_props_root_tl .bool_gset_inverse:N } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .bool_gset_inverse:N } #1
   { \__keys_bool_set_inverse:Nn #1 { g } }
-\cs_new_protected:cpn { \c__keys_props_root_tl .bool_gset_inverse:c } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .bool_gset_inverse:c } #1
   { \__keys_bool_set_inverse:cn {#1} { g } }
-\cs_new_protected:cpn { \c__keys_props_root_tl .choice: }
+\cs_new_protected:cpn { \c__keys_props_root_str .choice: }
   { \__keys_choice_make: }
-\cs_new_protected:cpn { \c__keys_props_root_tl .choices:nn } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .choices:nn } #1
   { \__keys_choices_make:nn #1 }
-\cs_new_protected:cpn { \c__keys_props_root_tl .choices:Vn } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .choices:Vn } #1
   { \exp_args:NV \__keys_choices_make:nn #1 }
-\cs_new_protected:cpn { \c__keys_props_root_tl .choices:on } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .choices:on } #1
   { \exp_args:No \__keys_choices_make:nn #1 }
-\cs_new_protected:cpn { \c__keys_props_root_tl .choices:xn } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .choices:xn } #1
   { \exp_args:Nx \__keys_choices_make:nn #1 }
-\cs_new_protected:cpn { \c__keys_props_root_tl .code:n } #1
-  { \__keys_cmd_set:nn { \l_keys_path_tl } {#1} }
-\cs_new_protected:cpn { \c__keys_props_root_tl .clist_set:N } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .code:n } #1
+  { \__keys_cmd_set:nn { \l_keys_path_str } {#1} }
+\cs_new_protected:cpn { \c__keys_props_root_str .clist_set:N } #1
   { \__keys_variable_set:NnnN #1 { clist } { } n }
-\cs_new_protected:cpn { \c__keys_props_root_tl .clist_set:c } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .clist_set:c } #1
   { \__keys_variable_set:cnnN {#1} { clist } { } n }
-\cs_new_protected:cpn { \c__keys_props_root_tl .clist_gset:N } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .clist_gset:N } #1
   { \__keys_variable_set:NnnN #1 { clist } { g } n }
-\cs_new_protected:cpn { \c__keys_props_root_tl .clist_gset:c } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .clist_gset:c } #1
   { \__keys_variable_set:cnnN {#1} { clist } { g } n }
-\cs_new_protected:cpn { \c__keys_props_root_tl .default:n } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .default:n } #1
   { \__keys_default_set:n {#1} }
-\cs_new_protected:cpn { \c__keys_props_root_tl .default:V } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .default:V } #1
   { \exp_args:NV \__keys_default_set:n #1 }
-\cs_new_protected:cpn { \c__keys_props_root_tl .default:o } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .default:o } #1
   { \exp_args:No \__keys_default_set:n {#1} }
-\cs_new_protected:cpn { \c__keys_props_root_tl .default:x } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .default:x } #1
   { \exp_args:Nx \__keys_default_set:n {#1} }
-\cs_new_protected:cpn { \c__keys_props_root_tl .dim_set:N } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .dim_set:N } #1
   { \__keys_variable_set_required:NnnN #1 { dim } { } n }
-\cs_new_protected:cpn { \c__keys_props_root_tl .dim_set:c } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .dim_set:c } #1
   { \__keys_variable_set_required:cnnN {#1} { dim } { } n }
-\cs_new_protected:cpn { \c__keys_props_root_tl .dim_gset:N } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .dim_gset:N } #1
   { \__keys_variable_set_required:NnnN #1 { dim } { g } n }
-\cs_new_protected:cpn { \c__keys_props_root_tl .dim_gset:c } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .dim_gset:c } #1
   { \__keys_variable_set_required:cnnN {#1} { dim } { g } n }
-\cs_new_protected:cpn { \c__keys_props_root_tl .fp_set:N } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .fp_set:N } #1
   { \__keys_variable_set_required:NnnN #1 { fp } { } n }
-\cs_new_protected:cpn { \c__keys_props_root_tl .fp_set:c } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .fp_set:c } #1
   { \__keys_variable_set_required:cnnN {#1} { fp } { } n }
-\cs_new_protected:cpn { \c__keys_props_root_tl .fp_gset:N } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .fp_gset:N } #1
   { \__keys_variable_set_required:NnnN #1 { fp } { g } n }
-\cs_new_protected:cpn { \c__keys_props_root_tl .fp_gset:c } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .fp_gset:c } #1
   { \__keys_variable_set_required:cnnN {#1} { fp } { g } n }
-\cs_new_protected:cpn { \c__keys_props_root_tl .groups:n } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .groups:n } #1
   { \__keys_groups_set:n {#1} }
-\cs_new_protected:cpn { \c__keys_props_root_tl .inherit:n } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .inherit:n } #1
   { \__keys_inherit:n {#1} }
-\cs_new_protected:cpn { \c__keys_props_root_tl .initial:n } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .initial:n } #1
   { \__keys_initialise:n {#1} }
-\cs_new_protected:cpn { \c__keys_props_root_tl .initial:V } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .initial:V } #1
   { \exp_args:NV \__keys_initialise:n #1 }
-\cs_new_protected:cpn { \c__keys_props_root_tl .initial:o } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .initial:o } #1
   { \exp_args:No \__keys_initialise:n {#1} }
-\cs_new_protected:cpn { \c__keys_props_root_tl .initial:x } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .initial:x } #1
   { \exp_args:Nx \__keys_initialise:n {#1} }
-\cs_new_protected:cpn { \c__keys_props_root_tl .int_set:N } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .int_set:N } #1
   { \__keys_variable_set_required:NnnN #1 { int } { } n }
-\cs_new_protected:cpn { \c__keys_props_root_tl .int_set:c } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .int_set:c } #1
   { \__keys_variable_set_required:cnnN {#1} { int } { } n }
-\cs_new_protected:cpn { \c__keys_props_root_tl .int_gset:N } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .int_gset:N } #1
   { \__keys_variable_set_required:NnnN #1 { int } { g } n }
-\cs_new_protected:cpn { \c__keys_props_root_tl .int_gset:c } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .int_gset:c } #1
   { \__keys_variable_set_required:cnnN {#1} { int } { g } n }
-\cs_new_protected:cpn { \c__keys_props_root_tl .meta:n } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .meta:n } #1
   { \__keys_meta_make:n {#1} }
-\cs_new_protected:cpn { \c__keys_props_root_tl .meta:nn } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .meta:nn } #1
   { \__keys_meta_make:nn #1 }
-\cs_new_protected:cpn { \c__keys_props_root_tl .multichoice: }
+\cs_new_protected:cpn { \c__keys_props_root_str .multichoice: }
   { \__keys_multichoice_make: }
-\cs_new_protected:cpn { \c__keys_props_root_tl .multichoices:nn } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .multichoices:nn } #1
   { \__keys_multichoices_make:nn #1 }
-\cs_new_protected:cpn { \c__keys_props_root_tl .multichoices:Vn } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .multichoices:Vn } #1
   { \exp_args:NV \__keys_multichoices_make:nn #1 }
-\cs_new_protected:cpn { \c__keys_props_root_tl .multichoices:on } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .multichoices:on } #1
   { \exp_args:No \__keys_multichoices_make:nn #1 }
-\cs_new_protected:cpn { \c__keys_props_root_tl .multichoices:xn } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .multichoices:xn } #1
   { \exp_args:Nx \__keys_multichoices_make:nn #1 }
-\cs_new_protected:cpn { \c__keys_props_root_tl .muskip_set:N } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .muskip_set:N } #1
   { \__keys_variable_set_required:NnnN #1 { muskip } { } n }
-\cs_new_protected:cpn { \c__keys_props_root_tl .muskip_set:c } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .muskip_set:c } #1
   { \__keys_variable_set_required:cnnN {#1} { muskip } { } n }
-\cs_new_protected:cpn { \c__keys_props_root_tl .muskip_gset:N } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .muskip_gset:N } #1
   { \__keys_variable_set_required:NnnN #1 { muskip } { g } n }
-\cs_new_protected:cpn { \c__keys_props_root_tl .muskip_gset:c } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .muskip_gset:c } #1
   { \__keys_variable_set_required:cnnN {#1} { muskip } { g } n }
-\cs_new_protected:cpn { \c__keys_props_root_tl .prop_put:N } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .prop_put:N } #1
   { \__keys_prop_put:Nn #1 { } }
-\cs_new_protected:cpn { \c__keys_props_root_tl .prop_put:c } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .prop_put:c } #1
   { \__keys_prop_put:cn {#1} { } }
-\cs_new_protected:cpn { \c__keys_props_root_tl .prop_gput:N } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .prop_gput:N } #1
   { \__keys_prop_put:Nn #1 { g } }
-\cs_new_protected:cpn { \c__keys_props_root_tl .prop_gput:c } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .prop_gput:c } #1
   { \__keys_prop_put:cn {#1} { g } }
-\cs_new_protected:cpn { \c__keys_props_root_tl .skip_set:N } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .skip_set:N } #1
   { \__keys_variable_set_required:NnnN #1 { skip } { } n }
-\cs_new_protected:cpn { \c__keys_props_root_tl .skip_set:c } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .skip_set:c } #1
   { \__keys_variable_set_required:cnnN {#1} { skip } { } n }
-\cs_new_protected:cpn { \c__keys_props_root_tl .skip_gset:N } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .skip_gset:N } #1
   { \__keys_variable_set_required:NnnN #1 { skip } { g } n }
-\cs_new_protected:cpn { \c__keys_props_root_tl .skip_gset:c } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .skip_gset:c } #1
   { \__keys_variable_set_required:cnnN {#1} { skip } { g } n }
-\cs_new_protected:cpn { \c__keys_props_root_tl .tl_set:N } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .tl_set:N } #1
   { \__keys_variable_set:NnnN #1 { tl } { } n }
-\cs_new_protected:cpn { \c__keys_props_root_tl .tl_set:c } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .tl_set:c } #1
   { \__keys_variable_set:cnnN {#1} { tl } { } n }
-\cs_new_protected:cpn { \c__keys_props_root_tl .tl_set_x:N } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .tl_set_x:N } #1
   { \__keys_variable_set:NnnN #1 { tl } { } x }
-\cs_new_protected:cpn { \c__keys_props_root_tl .tl_set_x:c } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .tl_set_x:c } #1
   { \__keys_variable_set:cnnN {#1} { tl } { } x }
-\cs_new_protected:cpn { \c__keys_props_root_tl .tl_gset:N } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .tl_gset:N } #1
   { \__keys_variable_set:NnnN #1 { tl } { g } n }
-\cs_new_protected:cpn { \c__keys_props_root_tl .tl_gset:c } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .tl_gset:c } #1
   { \__keys_variable_set:cnnN {#1} { tl } { g } n }
-\cs_new_protected:cpn { \c__keys_props_root_tl .tl_gset_x:N } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .tl_gset_x:N } #1
   { \__keys_variable_set:NnnN #1 { tl } { g } x }
-\cs_new_protected:cpn { \c__keys_props_root_tl .tl_gset_x:c } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .tl_gset_x:c } #1
   { \__keys_variable_set:cnnN {#1} { tl } { g } x }
-\cs_new_protected:cpn { \c__keys_props_root_tl .undefine: }
+\cs_new_protected:cpn { \c__keys_props_root_str .undefine: }
   { \__keys_undefine: }
-\cs_new_protected:cpn { \c__keys_props_root_tl .value_forbidden:n } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .value_forbidden:n } #1
   { \__keys_value_requirement:nn { forbidden } {#1} }
-\cs_new_protected:cpn { \c__keys_props_root_tl .value_required:n } #1
+\cs_new_protected:cpn { \c__keys_props_root_str .value_required:n } #1
   { \__keys_value_requirement:nn { required } {#1} }
 \cs_new_protected:Npn \keys_set:nn #1#2
   {
@@ -13172,12 +13174,12 @@
   }
 \cs_generate_variant:Nn \keys_set:nn { nV , nv , no }
 \cs_new_protected:Npn \__keys_set:nn #1#2
-  { \exp_args:No \__keys_set:nnn \l__keys_module_tl {#1} {#2} }
+  { \exp_args:No \__keys_set:nnn \l__keys_module_str {#1} {#2} }
 \cs_new_protected:Npn \__keys_set:nnn #1#2#3
   {
-    \tl_set:Nx \l__keys_module_tl { \__keys_trim_spaces:n {#2} }
+    \str_set:Nx \l__keys_module_str { \__keys_trim_spaces:n {#2} }
     \keyval_parse:NNn \__keys_set_keyval:n \__keys_set_keyval:nn {#3}
-    \tl_set:Nn \l__keys_module_tl {#1}
+    \str_set:Nn \l__keys_module_str {#1}
   }
 \cs_new_protected:Npn \keys_set_known:nnN #1#2#3
   {
@@ -13294,42 +13296,43 @@
 \cs_new_protected:Npn \__keys_set_keyval:n #1
   {
     \bool_set_true:N \l__keys_no_value_bool
-    \__keys_set_keyval:onn \l__keys_module_tl {#1} { }
+    \__keys_set_keyval:onn \l__keys_module_str {#1} { }
   }
 \cs_new_protected:Npn \__keys_set_keyval:nn #1#2
   {
     \bool_set_false:N \l__keys_no_value_bool
-    \__keys_set_keyval:onn \l__keys_module_tl {#1} {#2}
+    \__keys_set_keyval:onn \l__keys_module_str {#1} {#2}
   }
 \cs_new_protected:Npn \__keys_set_keyval:nnn #1#2#3
   {
-    \tl_set:Nx \l_keys_path_tl
+    \tl_set:Nx \l_keys_path_str
       {
         \tl_if_blank:nF {#1}
           { #1 / }
         \__keys_trim_spaces:n {#2}
       }
-    \tl_clear:N \l__keys_module_tl
-    \tl_clear:N \l__keys_inherit_tl
+    \str_clear:N \l__keys_module_str
+    \str_clear:N \l__keys_inherit_str
     \exp_after:wN \__keys_find_key_module:NNw
-      \exp_after:wN \l__keys_module_tl
-      \exp_after:wN \l_keys_key_tl
-      \l_keys_path_tl / \q_stop
+      \exp_after:wN \l__keys_module_str
+      \exp_after:wN \l_keys_key_str
+      \l_keys_path_str / \q_stop
+    \tl_set_eq:NN \l_keys_key_tl \l_keys_key_str
     \__keys_value_or_default:n {#3}
     \bool_if:NTF \l__keys_selective_bool
       { \__keys_set_selective: }
       { \__keys_execute: }
-    \tl_set:Nn \l__keys_module_tl {#1}
+    \str_set:Nn \l__keys_module_str {#1}
   }
 \cs_generate_variant:Nn \__keys_set_keyval:nnn { o }
 \cs_new_protected:Npn \__keys_find_key_module:NNw #1#2#3 / #4 \q_stop
   {
     \tl_if_blank:nTF {#4}
-      { \tl_set:Nn #2 {#3} }
+      { \str_set:Nn #2 {#3} }
       {
-        \tl_put_right:Nx #1
+        \str_put_right:Nx #1
           {
-            \tl_if_empty:NF #1 { / }
+            \str_if_empty:NF #1 { / }
             #3
           }
         \__keys_find_key_module:NNw #1#2 #4 \q_stop
@@ -13337,10 +13340,10 @@
   }
 \cs_new_protected:Npn \__keys_set_selective:
   {
-    \cs_if_exist:cTF { \c__keys_groups_root_tl \l_keys_path_tl }
+    \cs_if_exist:cTF { \c__keys_groups_root_str \l_keys_path_str }
       {
         \clist_set_eq:Nc \l__keys_groups_clist
-          { \c__keys_groups_root_tl \l_keys_path_tl }
+          { \c__keys_groups_root_str \l_keys_path_str }
         \__keys_check_groups:
       }
       {
@@ -13379,16 +13382,16 @@
   {
     \bool_if:NTF \l__keys_no_value_bool
       {
-        \cs_if_exist:cTF { \c__keys_default_root_tl \l_keys_path_tl }
+        \cs_if_exist:cTF { \c__keys_default_root_str \l_keys_path_str }
           {
             \tl_set_eq:Nc
               \l_keys_value_tl
-              { \c__keys_default_root_tl \l_keys_path_tl }
+              { \c__keys_default_root_str \l_keys_path_str }
           }
           {
             \tl_clear:N \l_keys_value_tl
             \cs_if_exist:cT
-              { \c__keys_inherit_root_tl \__keys_parent:o \l_keys_path_tl }
+              { \c__keys_inherit_root_str \__keys_parent:o \l_keys_path_str }
               { \__keys_default_inherit: }
           }
       }
@@ -13397,29 +13400,29 @@
 \cs_new_protected:Npn \__keys_default_inherit:
   {
     \clist_map_inline:cn
-      { \c__keys_inherit_root_tl \__keys_parent:o \l_keys_path_tl }
+      { \c__keys_inherit_root_str \__keys_parent:o \l_keys_path_str }
       {
         \cs_if_exist:cT
-          { \c__keys_default_root_tl ##1 / \l_keys_key_tl }
+          { \c__keys_default_root_str ##1 / \l_keys_key_str }
           {
             \tl_set_eq:Nc
               \l_keys_value_tl
-              { \c__keys_default_root_tl ##1 / \l_keys_key_tl }
+              { \c__keys_default_root_str ##1 / \l_keys_key_str }
             \clist_map_break:
           }
       }
   }
 \cs_new_protected:Npn \__keys_execute:
   {
-    \cs_if_exist:cTF { \c__keys_code_root_tl \l_keys_path_tl }
+    \cs_if_exist:cTF { \c__keys_code_root_str \l_keys_path_str }
       {
-        \cs_if_exist_use:c { \c__keys_validate_root_tl \l_keys_path_tl }
-        \cs:w \c__keys_code_root_tl \l_keys_path_tl \exp_after:wN \cs_end:
+        \cs_if_exist_use:c { \c__keys_validate_root_str \l_keys_path_str }
+        \cs:w \c__keys_code_root_str \l_keys_path_str \exp_after:wN \cs_end:
           \exp_after:wN { \l_keys_value_tl }
       }
       {
         \cs_if_exist:cTF
-          { \c__keys_inherit_root_tl \__keys_parent:o \l_keys_path_tl }
+          { \c__keys_inherit_root_str \__keys_parent:o \l_keys_path_str }
           { \__keys_execute_inherit: }
           { \__keys_execute_unknown: }
       }
@@ -13427,14 +13430,14 @@
 \cs_new_protected:Npn \__keys_execute_inherit:
   {
     \clist_map_inline:cn
-      { \c__keys_inherit_root_tl \__keys_parent:o \l_keys_path_tl }
+      { \c__keys_inherit_root_str \__keys_parent:o \l_keys_path_str }
       {
         \cs_if_exist:cT
-          { \c__keys_code_root_tl ##1 / \l_keys_key_tl }
+          { \c__keys_code_root_str ##1 / \l_keys_key_str }
           {
-            \tl_set:Nn \l__keys_inherit_tl {##1}
-            \cs_if_exist_use:c { \c__keys_validate_root_tl ##1 / \l_keys_key_tl }
-            \cs:w \c__keys_code_root_tl ##1 / \l_keys_key_tl
+            \str_set:Nn \l__keys_inherit_str {##1}
+            \cs_if_exist_use:c { \c__keys_validate_root_str ##1 / \l_keys_key_str }
+            \cs:w \c__keys_code_root_str ##1 / \l_keys_key_str
               \exp_after:wN \cs_end: \exp_after:wN
               { \l_keys_value_tl }
             \clist_map_break:n { \use_none:n }
@@ -13448,22 +13451,22 @@
       { \__keys_store_unused: }
       {
         \cs_if_exist:cTF
-          { \c__keys_code_root_tl \l__keys_module_tl / unknown }
+          { \c__keys_code_root_str \l__keys_module_str / unknown }
           {
-            \cs:w \c__keys_code_root_tl \l__keys_module_tl / unknown
+            \cs:w \c__keys_code_root_str \l__keys_module_str / unknown
               \exp_after:wN \cs_end: \exp_after:wN { \l_keys_value_tl }
           }
           {
             \__kernel_msg_error:nnxx { kernel } { key-unknown }
-             { \l_keys_path_tl } { \l__keys_module_tl }
+             { \l_keys_path_str } { \l__keys_module_str }
           }
       }
   }
 \cs_new:Npn \__keys_execute:nn #1#2
   {
-    \cs_if_exist:cTF { \c__keys_code_root_tl #1 }
+    \cs_if_exist:cTF { \c__keys_code_root_str #1 }
       {
-        \cs:w \c__keys_code_root_tl #1 \exp_after:wN \cs_end:
+        \cs:w \c__keys_code_root_str #1 \exp_after:wN \cs_end:
           \exp_after:wN { \l_keys_value_tl }
       }
       {#2}
@@ -13474,7 +13477,7 @@
       {
         \clist_put_right:Nx \l__keys_unused_clist
           {
-            \exp_not:o \l_keys_key_tl
+            \exp_not:o \l_keys_key_str
             \bool_if:NF \l__keys_no_value_bool
               { = { \exp_not:o \l_keys_value_tl } }
           }
@@ -13484,7 +13487,7 @@
           {
             \clist_put_right:Nx \l__keys_unused_clist
               {
-                \exp_not:o \l_keys_path_tl
+                \exp_not:o \l_keys_path_str
                 \bool_if:NF \l__keys_no_value_bool
                   { = { \exp_not:o \l_keys_value_tl } }
               }
@@ -13507,7 +13510,7 @@
           \tl_if_blank:nF {##1}
             {
               \__kernel_msg_error:nnxx { kernel } { bad-relative-key-path }
-                \l_keys_path_tl
+                \l_keys_path_str
                 \l__keys_relative_tl
             }
           \clist_put_right:Nx \l__keys_unused_clist
@@ -13519,7 +13522,7 @@
         }
     \use:x
       {
-        \__keys_store_unused:w \l_keys_path_tl
+        \__keys_store_unused:w \l_keys_path_str
           \l__keys_relative_tl / \l__keys_relative_tl /
           \exp_not:N \q_stop
       }
@@ -13527,18 +13530,18 @@
 \cs_new_protected:Npn \__keys_store_unused:w { }
 \cs_new:Npn \__keys_choice_find:n #1
   {
-    \tl_if_empty:NTF \l__keys_inherit_tl
-      { \__keys_choice_find:nn { \l_keys_path_tl } {#1} }
+    \str_if_empty:NTF \l__keys_inherit_str
+      { \__keys_choice_find:nn { \l_keys_path_str } {#1} }
       {
         \__keys_choice_find:nn
-          { \l__keys_inherit_tl / \l_keys_key_tl } {#1}
+          { \l__keys_inherit_str / \l_keys_key_str } {#1}
       }
   }
 \cs_new:Npn \__keys_choice_find:nn #1#2
   {
-    \cs_if_exist:cTF { \c__keys_code_root_tl #1 / \__keys_trim_spaces:n {#2} }
-      { \use:c { \c__keys_code_root_tl #1 / \__keys_trim_spaces:n {#2} } {#2} }
-      { \use:c { \c__keys_code_root_tl #1 / unknown } {#2} }
+    \cs_if_exist:cTF { \c__keys_code_root_str #1 / \__keys_trim_spaces:n {#2} }
+      { \use:c { \c__keys_code_root_str #1 / \__keys_trim_spaces:n {#2} } {#2} }
+      { \use:c { \c__keys_code_root_str #1 / unknown } {#2} }
   }
 \cs_new:Npn \__keys_multichoice_find:n #1
   { \clist_map_function:nN {#1} \__keys_choice_find:n }
@@ -13582,7 +13585,7 @@
 \prg_new_conditional:Npnn \keys_if_exist:nn #1#2 { p , T , F , TF }
   {
     \cs_if_exist:cTF
-      { \c__keys_code_root_tl \__keys_trim_spaces:n { #1 / #2 } }
+      { \c__keys_code_root_str \__keys_trim_spaces:n { #1 / #2 } }
       { \prg_return_true: }
       { \prg_return_false: }
   }
@@ -13590,7 +13593,7 @@
   { p , T , F , TF }
   {
     \cs_if_exist:cTF
-      { \c__keys_code_root_tl \__keys_trim_spaces:n { #1 / #2 / #3 } }
+      { \c__keys_code_root_str \__keys_trim_spaces:n { #1 / #2 / #3 } }
       { \prg_return_true: }
       { \prg_return_false: }
   }
@@ -13609,7 +13612,7 @@
               {
                 \exp_args:Nc \cs_replacement_spec:N
                   {
-                    \c__keys_code_root_tl
+                    \c__keys_code_root_str
                     \__keys_trim_spaces:n { #2 / #3 }
                   }
               }
diff --git a/texmf/tex/latex/l3kernel/expl3-generic.tex b/texmf/tex/latex/l3kernel/expl3-generic.tex
index 7bad8ed4..8fa72ac8 100644
--- a/texmf/tex/latex/l3kernel/expl3-generic.tex
+++ b/texmf/tex/latex/l3kernel/expl3-generic.tex
@@ -19,7 +19,7 @@
 %% and all files in that bundle must be distributed together.
 %% 
 %% File: expl3.dtx
-\def\ExplFileDate{2020-02-03}%
+\def\ExplFileDate{2020-02-08}%
 \let\ExplLoaderFileDate\ExplFileDate
 \begingroup
   \def\tempa{LaTeX2e}%
diff --git a/texmf/tex/latex/l3kernel/expl3.ltx b/texmf/tex/latex/l3kernel/expl3.ltx
index 30aca55e..ffd8f808 100644
--- a/texmf/tex/latex/l3kernel/expl3.ltx
+++ b/texmf/tex/latex/l3kernel/expl3.ltx
@@ -19,7 +19,7 @@
 %% and all files in that bundle must be distributed together.
 %% 
 %% File: expl3.dtx
-\def\ExplFileDate{2020-02-03}%
+\def\ExplFileDate{2020-02-08}%
 \let\ExplLoaderFileDate\ExplFileDate
 \everyjob\expandafter{\the\everyjob
   \message{L3 programming layer <\ExplFileDate>}%
diff --git a/texmf/tex/latex/l3kernel/expl3.sty b/texmf/tex/latex/l3kernel/expl3.sty
index 46ead007..ac546568 100644
--- a/texmf/tex/latex/l3kernel/expl3.sty
+++ b/texmf/tex/latex/l3kernel/expl3.sty
@@ -19,7 +19,7 @@
 %% and all files in that bundle must be distributed together.
 %% 
 %% File: expl3.dtx
-\def\ExplFileDate{2020-02-03}%
+\def\ExplFileDate{2020-02-08}%
 \let\ExplLoaderFileDate\ExplFileDate
 \ProvidesPackage{expl3}
   [%
diff --git a/texmf/tex/latex/l3kernel/l3debug.def b/texmf/tex/latex/l3kernel/l3debug.def
index 60433253..cfe9bcf7 100644
--- a/texmf/tex/latex/l3kernel/l3debug.def
+++ b/texmf/tex/latex/l3kernel/l3debug.def
@@ -605,7 +605,7 @@
     { \__cs_generate_variant:wwNN  }
   \__kernel_patch:nnn
     {
-      \cs_if_exist:cF { \c__keys_code_root_tl #1 }
+      \cs_if_exist:cF { \c__keys_code_root_str #1 }
         { \__kernel_debug_log:x { Defining~key~#1~\msg_line_context: } }
     }
     { }





More information about the latex3-commits mailing list.