[latex3-commits] [git/LaTeX3-latex3-latex3] master: Implement fp_to_decimal and fp_to_scientific for tuples (450c700)

Bruno Le Floch bruno at le-floch.fr
Mon Feb 12 03:02:34 CET 2018


Repository : https://github.com/latex3/latex3
On branch  : master
Link       : https://github.com/latex3/latex3/commit/450c70098fc7fd2c061038cfc7b12db1c2903ef4

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

commit 450c70098fc7fd2c061038cfc7b12db1c2903ef4
Author: Bruno Le Floch <bruno at le-floch.fr>
Date:   Sun Feb 11 17:13:15 2018 -0500

    Implement fp_to_decimal and fp_to_scientific for tuples
    
    The fp_to_tl representation is hard to parse, so it is useful to have
    a more parseable one such as fp_to_scientific or fp_to_decimal whose
    components can easily be converted for instance to dimensions.
    The main drawback is that "\fp_to_decimal:n { ... } pt" is not
    guaranteed anymore to be a dimension; I suspect however that in general
    one knows when to expect a tuple or single number as a result.


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

450c70098fc7fd2c061038cfc7b12db1c2903ef4
 l3kernel/l3fp-convert.dtx               |  162 +++++++++++++++++++------------
 l3kernel/l3fp-traps.dtx                 |    2 +
 l3kernel/testfiles/m3expl001.luatex.tlg |   17 +++-
 l3kernel/testfiles/m3expl001.ptex.tlg   |   17 +++-
 l3kernel/testfiles/m3expl001.tlg        |   17 +++-
 l3kernel/testfiles/m3expl001.uptex.tlg  |   17 +++-
 l3kernel/testfiles/m3expl001.xetex.tlg  |   17 +++-
 l3kernel/testfiles/m3expl003.luatex.tlg |   17 +++-
 l3kernel/testfiles/m3expl003.ptex.tlg   |   17 +++-
 l3kernel/testfiles/m3expl003.tlg        |   17 +++-
 l3kernel/testfiles/m3expl003.uptex.tlg  |   17 +++-
 l3kernel/testfiles/m3expl003.xetex.tlg  |   17 +++-
 l3kernel/testfiles/m3fp-parse002.lvt    |    3 +-
 l3kernel/testfiles/m3fp-parse002.tlg    |   18 +---
 14 files changed, 247 insertions(+), 108 deletions(-)

diff --git a/l3kernel/l3fp-convert.dtx b/l3kernel/l3fp-convert.dtx
index ee0d9a2..f7d447f 100644
--- a/l3kernel/l3fp-convert.dtx
+++ b/l3kernel/l3fp-convert.dtx
@@ -61,6 +61,39 @@
 %<@@=fp>
 %    \end{macrocode}
 %
+% \subsection{Dealing with tuples}
+%
+% \begin{macro}[EXP]
+%   {\@@_tuple_convert:Nw, \@@_tuple_convert_loop:nNw, \@@_tuple_convert_end:w}
+%   The first argument is for instance \cs{@@_to_tl_dispatch:w}, which
+%   converts any floating point object to the appropriate
+%   representation.  We loop through all items, putting |,~| between all
+%   of them and making sure to remove the leading |,~|.
+%    \begin{macrocode}
+\cs_new:Npn \@@_tuple_convert:Nw #1 \s_@@_tuple \@@_tuple_chk:w #2 ;
+  {
+    \int_case:nnF { \@@_array_count:n {#2} }
+      {
+        { 0 } { ( ) }
+        { 1 } { \@@_tuple_convert_end:w @ { #1 #2 , } }
+      }
+      {
+        \@@_tuple_convert_loop:nNw { } #1
+          #2 { ? \@@_tuple_convert_end:w } ;
+          @ { \use_none:nn }
+      }
+  }
+\cs_new:Npn \@@_tuple_convert_loop:nNw #1#2#3#4; #5 @ #6
+  {
+    \use_none:n #3
+    \exp_args:Nf \@@_tuple_convert_loop:nNw { #2 #3#4 ; } #2 #5
+      @ { #6 , ~ #1 }
+  }
+\cs_new:Npn \@@_tuple_convert_end:w #1 @ #2
+  { \exp_after:wN ( \exp:w \exp_end_continue_f:w #2 ) }
+%    \end{macrocode}
+% \end{macro}
+%
 % \subsection{Trimming trailing zeros}
 %
 % \begin{macro}[EXP]{\@@_trim_zeros:w}
@@ -103,24 +136,23 @@
 %    \end{macrocode}
 % \end{macro}
 %
-% \begin{macro}[EXP]{\@@_to_scientific_dispatch:w, \@@_to_scientific_other:w}
-%   For a floating point number call \cs{@@_to_scientific:w}, otherwise
-%   complain.
+% \begin{macro}[EXP]
+%   {\@@_to_scientific_dispatch:w, \@@_to_scientific_recover:w, \@@_tuple_to_scientific:w}
+%   We allow tuples.
 %    \begin{macrocode}
 \cs_new:Npn \@@_to_scientific_dispatch:w #1
   {
-    \@@_if_type_fp:NTwFw
-      #1 \@@_to_scientific:w
-      \s_@@ \@@_to_scientific_other:w
-      \q_stop
+    \@@_change_func_type:NNN
+      #1 \@@_to_scientific:w \@@_to_scientific_recover:w
     #1
   }
-\cs_new:Npn \@@_to_scientific_other:w
+\cs_new:Npn \@@_to_scientific_recover:w #1 #2 ;
   {
-    \@@_invalid_operation:nnw
-      { \fp_to_scientific:N \c_zero_fp }
-      { fp_to_scientific }
+    \@@_error:nffn { fp-unknown-type } { \tl_to_str:n { #2 ; } } { } { }
+    nan
   }
+\cs_new:Npn \@@_tuple_to_scientific:w
+  { \@@_tuple_convert:Nw \@@_to_scientific_dispatch:w }
 %    \end{macrocode}
 % \end{macro}
 %
@@ -198,23 +230,23 @@
 %    \end{macrocode}
 % \end{macro}
 %
-% \begin{macro}[EXP]{\@@_to_decimal_dispatch:w, \@@_to_decimal_other:w}
-%   Very similar to \cs{@@_to_scientific_dispatch:w}.
+% \begin{macro}[EXP]
+%   {\@@_to_decimal_dispatch:w, \@@_to_decimal_recover:w, \@@_tuple_to_decimal:w}
+%   We allow tuples.
 %    \begin{macrocode}
 \cs_new:Npn \@@_to_decimal_dispatch:w #1
   {
-    \@@_if_type_fp:NTwFw
-      #1 \@@_to_decimal:w
-      \s_@@ \@@_to_decimal_other:w
-      \q_stop
+    \@@_change_func_type:NNN
+      #1 \@@_to_decimal:w \@@_to_decimal_recover:w
     #1
   }
-\cs_new:Npn \@@_to_decimal_other:w
+\cs_new:Npn \@@_to_decimal_recover:w #1 #2 ;
   {
-    \@@_invalid_operation:nnw
-      { \fp_to_decimal:N \c_zero_fp }
-      { fp_to_decimal }
+    \@@_error:nffn { fp-unknown-type } { \tl_to_str:n { #2 ; } } { } { }
+    nan
   }
+\cs_new:Npn \@@_tuple_to_decimal:w
+  { \@@_tuple_convert:Nw \@@_to_decimal_dispatch:w }
 %    \end{macrocode}
 % \end{macro}
 %
@@ -316,35 +348,18 @@
 %    \end{macrocode}
 % \end{macro}
 %
-% \begin{macro}[EXP]{\@@_to_tl_dispatch:w, \@@_to_tl_other:w, \@@_tuple_to_tl:w}
-%   Contrarily to \cs{@@_to_scientific_dispatch:w}, we allow tuples.
+% \begin{macro}[EXP]{\@@_to_tl_dispatch:w, \@@_to_tl_recover:w, \@@_tuple_to_tl:w}
+%   We allow tuples.
 %    \begin{macrocode}
 \cs_new:Npn \@@_to_tl_dispatch:w #1
+  { \@@_change_func_type:NNN #1 \@@_to_tl:w \@@_to_tl_recover:w #1 }
+\cs_new:Npn \@@_to_tl_recover:w #1 #2 ;
   {
-    \@@_if_type_fp:NTwFw
-      #1 \@@_to_tl:w
-      \s_@@ \@@_to_tl_other:w
-      \q_stop
-    #1
-  }
-\cs_new:Npn \@@_to_tl_other:w #1
-  { \cs:w @@ \@@_type_from_scan_other:N #1 _to_tl:w \cs_end: #1 }
-\cs_new:Npn \@@_tuple_to_tl:w \s_@@_tuple \@@_tuple_chk:w #1 ;
-  {
-    \int_case:nnF { \@@_array_count:n {#1} }
-      {
-        { 0 } { ( ) }
-        { 1 }
-          {
-            \exp_after:wN ( \exp:w \exp_end_continue_f:w
-            \@@_to_tl_dispatch:w #1 , )
-          }
-      }
-      {
-        \exp_after:wN ( \exp:w \exp_end_continue_f:w
-        \@@_array_to_clist:n {#1} )
-      }
+    \@@_error:nffn { fp-unknown-type } { \tl_to_str:n { #2 ; } } { } { }
+    nan
   }
+\cs_new:Npn \@@_tuple_to_tl:w
+  { \@@_tuple_convert:Nw \@@_to_tl_dispatch:w }
 %    \end{macrocode}
 % \end{macro}
 %
@@ -400,20 +415,40 @@
 % \subsection{Convert to dimension or integer}
 %
 % \begin{macro}[EXP]{\fp_to_dim:N, \fp_to_dim:c, \fp_to_dim:n}
-%   These three public functions rely on \cs{fp_to_decimal:n}
-%   internally.
+% \begin{macro}[EXP]{\@@_to_dim_dispatch:w, \@@_to_dim_recover:w, \@@_to_dim:w}
+%   All three public variants are based on the same
+%   \cs{@@_to_dim_dispatch:w} after evaluating their argument to an
+%   internal floating point.
+%   We only allow floating point numbers, not tuples.
 %    \begin{macrocode}
 \cs_new:Npn \fp_to_dim:N #1
-  { \fp_to_decimal:N #1 pt }
+  { \exp_after:wN \@@_to_dim_dispatch:w #1 }
 \cs_generate_variant:Nn \fp_to_dim:N { c }
-\cs_new:Npn \fp_to_dim:n #1
-  { \fp_to_decimal:n {#1} pt }
+\cs_new:Npn \fp_to_dim:n
+  {
+    \exp_after:wN \@@_to_dim_dispatch:w
+    \exp:w \exp_end_continue_f:w \@@_parse:n
+  }
+\cs_new:Npn \@@_to_dim_dispatch:w #1#2 ;
+  {
+    \@@_change_func_type:NNN #1 \@@_to_dim:w \@@_to_dim_recover:w
+    #1 #2 ;
+  }
+\cs_new:Npn \@@_to_dim_recover:w #1
+  { \@@_invalid_operation:nnw { 0pt } { fp_to_dim } }
+\cs_new:Npn \@@_to_dim:w #1 ; { \@@_to_decimal:w #1 ; pt }
 %    \end{macrocode}
 % \end{macro}
+% \end{macro}
 %
 % \begin{macro}[EXP]{\fp_to_int:N, \fp_to_int:c, \fp_to_int:n}
-%   These three public functions evaluate their argument, then pass it
-%   to \cs{fp_to_int_dispatch:w}.
+% \begin{macro}[EXP]{\@@_to_int_dispatch:w, \@@_to_int_recover:w}
+%   For the most part identical to \cs{fp_to_dim:N} but without |pt|,
+%   and where \cs{@@_to_int:w} does more work.
+%   To convert to an integer, first round to $0$ places (to the nearest
+%   integer), then express the result as a decimal number: the
+%   definition of \cs{@@_to_decimal_dispatch:w} is such that there are no
+%   trailing dot nor zero.
 %    \begin{macrocode}
 \cs_new:Npn \fp_to_int:N #1 { \exp_after:wN \@@_to_int_dispatch:w #1 }
 \cs_generate_variant:Nn \fp_to_int:N { c }
@@ -422,22 +457,21 @@
     \exp_after:wN \@@_to_int_dispatch:w
     \exp:w \exp_end_continue_f:w \@@_parse:n
   }
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_to_int_dispatch:w}
-%   To convert to an integer, first round to $0$ places (to the nearest
-%   integer), then express the result as a decimal number: the
-%   definition of \cs{@@_to_decimal_dispatch:w} is such that there are no
-%   trailing dot nor zero.
-%    \begin{macrocode}
-\cs_new:Npn \@@_to_int_dispatch:w #1;
+\cs_new:Npn \@@_to_int_dispatch:w #1#2 ;
   {
-    \exp_after:wN \@@_to_decimal_dispatch:w \exp:w \exp_end_continue_f:w
+    \@@_change_func_type:NNN #1 \@@_to_int:w \@@_to_int_recover:w
+    #1 #2 ;
+  }
+\cs_new:Npn \@@_to_int_recover:w #1
+  { \@@_invalid_operation:nnw { 0 } { fp_to_int } }
+\cs_new:Npn \@@_to_int:w #1;
+  {
+    \exp_after:wN \@@_to_decimal:w \exp:w \exp_end_continue_f:w
     \@@_round:Nwn \@@_round_to_nearest:NNN #1; { 0 }
   }
 %    \end{macrocode}
 % \end{macro}
+% \end{macro}
 %
 % \subsection{Convert from a dimension}
 %
diff --git a/l3kernel/l3fp-traps.dtx b/l3kernel/l3fp-traps.dtx
index 3043bcb..008cb3c 100644
--- a/l3kernel/l3fp-traps.dtx
+++ b/l3kernel/l3fp-traps.dtx
@@ -383,6 +383,8 @@
   { Invalid~operation~ #1 (#2) }
 \__kernel_msg_new:nnn { kernel } { fp-invalid-ii }
   { Invalid~operation~ (#1) #3 (#2) }
+\__kernel_msg_new:nnn { kernel } { fp-unknown-type }
+  { Unknown~type~for~'#1' }
 %    \end{macrocode}
 %
 %    \begin{macrocode}
diff --git a/l3kernel/testfiles/m3expl001.luatex.tlg b/l3kernel/testfiles/m3expl001.luatex.tlg
index a50e600..2d5efcc 100644
--- a/l3kernel/testfiles/m3expl001.luatex.tlg
+++ b/l3kernel/testfiles/m3expl001.luatex.tlg
@@ -3761,6 +3761,7 @@ Defining message LaTeX/kernel/fp-zero-div on line ...
 Defining message LaTeX/kernel/fp-zero-div-ii on line ...
 Defining message LaTeX/kernel/fp-invalid on line ...
 Defining message LaTeX/kernel/fp-invalid-ii on line ...
+Defining message LaTeX/kernel/fp-unknown-type on line ...
 Defining \__fp_parse_word_trunc:N on line ...
 Defining \__fp_parse_word_floor:N on line ...
 Defining \__fp_parse_word_ceil:N on line ...
@@ -4393,6 +4394,9 @@ Defining \__fp_asin_isqrt:wn on line ...
 Defining \__fp_acsc_o:w on line ...
 Defining \__fp_asec_o:w on line ...
 Defining \__fp_acsc_normal_o:NfwNnw on line ...
+Defining \__fp_tuple_convert:Nw on line ...
+Defining \__fp_tuple_convert_loop:nNw on line ...
+Defining \__fp_tuple_convert_end:w on line ...
 Defining \__fp_trim_zeros:w on line ...
 Defining \__fp_trim_zeros_loop:w on line ...
 Defining \__fp_trim_zeros_dot:w on line ...
@@ -4401,7 +4405,8 @@ Defining \fp_to_scientific:N on line ...
 Defining \fp_to_scientific:c on line ...
 Defining \fp_to_scientific:n on line ...
 Defining \__fp_to_scientific_dispatch:w on line ...
-Defining \__fp_to_scientific_other:w on line ...
+Defining \__fp_to_scientific_recover:w on line ...
+Defining \__fp_tuple_to_scientific:w on line ...
 Defining \__fp_to_scientific:w on line ...
 Defining \__fp_to_scientific_normal:wnnnnn on line ...
 Defining \__fp_to_scientific_normal:wNw on line ...
@@ -4409,7 +4414,8 @@ Defining \fp_to_decimal:N on line ...
 Defining \fp_to_decimal:c on line ...
 Defining \fp_to_decimal:n on line ...
 Defining \__fp_to_decimal_dispatch:w on line ...
-Defining \__fp_to_decimal_other:w on line ...
+Defining \__fp_to_decimal_recover:w on line ...
+Defining \__fp_tuple_to_decimal:w on line ...
 Defining \__fp_to_decimal:w on line ...
 Defining \__fp_to_decimal_normal:wnnnnn on line ...
 Defining \__fp_to_decimal_large:Nnnw on line ...
@@ -4418,7 +4424,7 @@ Defining \fp_to_tl:N on line ...
 Defining \fp_to_tl:c on line ...
 Defining \fp_to_tl:n on line ...
 Defining \__fp_to_tl_dispatch:w on line ...
-Defining \__fp_to_tl_other:w on line ...
+Defining \__fp_to_tl_recover:w on line ...
 Defining \__fp_tuple_to_tl:w on line ...
 Defining \__fp_to_tl:w on line ...
 Defining \__fp_to_tl_normal:nnnnn on line ...
@@ -4427,10 +4433,15 @@ Defining \__fp_to_tl_scientific:wNw on line ...
 Defining \fp_to_dim:N on line ...
 Defining \fp_to_dim:c on line ...
 Defining \fp_to_dim:n on line ...
+Defining \__fp_to_dim_dispatch:w on line ...
+Defining \__fp_to_dim_recover:w on line ...
+Defining \__fp_to_dim:w on line ...
 Defining \fp_to_int:N on line ...
 Defining \fp_to_int:c on line ...
 Defining \fp_to_int:n on line ...
 Defining \__fp_to_int_dispatch:w on line ...
+Defining \__fp_to_int_recover:w on line ...
+Defining \__fp_to_int:w on line ...
 Defining \dim_to_fp:n on line ...
 Defining \__fp_from_dim_test:ww on line ...
 Defining \__fp_from_dim:wNw on line ...
diff --git a/l3kernel/testfiles/m3expl001.ptex.tlg b/l3kernel/testfiles/m3expl001.ptex.tlg
index a4bb059..d5b9df4 100644
--- a/l3kernel/testfiles/m3expl001.ptex.tlg
+++ b/l3kernel/testfiles/m3expl001.ptex.tlg
@@ -3749,6 +3749,7 @@ Defining message LaTeX/kernel/fp-zero-div on line ...
 Defining message LaTeX/kernel/fp-zero-div-ii on line ...
 Defining message LaTeX/kernel/fp-invalid on line ...
 Defining message LaTeX/kernel/fp-invalid-ii on line ...
+Defining message LaTeX/kernel/fp-unknown-type on line ...
 Defining \__fp_parse_word_trunc:N on line ...
 Defining \__fp_parse_word_floor:N on line ...
 Defining \__fp_parse_word_ceil:N on line ...
@@ -4381,6 +4382,9 @@ Defining \__fp_asin_isqrt:wn on line ...
 Defining \__fp_acsc_o:w on line ...
 Defining \__fp_asec_o:w on line ...
 Defining \__fp_acsc_normal_o:NfwNnw on line ...
+Defining \__fp_tuple_convert:Nw on line ...
+Defining \__fp_tuple_convert_loop:nNw on line ...
+Defining \__fp_tuple_convert_end:w on line ...
 Defining \__fp_trim_zeros:w on line ...
 Defining \__fp_trim_zeros_loop:w on line ...
 Defining \__fp_trim_zeros_dot:w on line ...
@@ -4389,7 +4393,8 @@ Defining \fp_to_scientific:N on line ...
 Defining \fp_to_scientific:c on line ...
 Defining \fp_to_scientific:n on line ...
 Defining \__fp_to_scientific_dispatch:w on line ...
-Defining \__fp_to_scientific_other:w on line ...
+Defining \__fp_to_scientific_recover:w on line ...
+Defining \__fp_tuple_to_scientific:w on line ...
 Defining \__fp_to_scientific:w on line ...
 Defining \__fp_to_scientific_normal:wnnnnn on line ...
 Defining \__fp_to_scientific_normal:wNw on line ...
@@ -4397,7 +4402,8 @@ Defining \fp_to_decimal:N on line ...
 Defining \fp_to_decimal:c on line ...
 Defining \fp_to_decimal:n on line ...
 Defining \__fp_to_decimal_dispatch:w on line ...
-Defining \__fp_to_decimal_other:w on line ...
+Defining \__fp_to_decimal_recover:w on line ...
+Defining \__fp_tuple_to_decimal:w on line ...
 Defining \__fp_to_decimal:w on line ...
 Defining \__fp_to_decimal_normal:wnnnnn on line ...
 Defining \__fp_to_decimal_large:Nnnw on line ...
@@ -4406,7 +4412,7 @@ Defining \fp_to_tl:N on line ...
 Defining \fp_to_tl:c on line ...
 Defining \fp_to_tl:n on line ...
 Defining \__fp_to_tl_dispatch:w on line ...
-Defining \__fp_to_tl_other:w on line ...
+Defining \__fp_to_tl_recover:w on line ...
 Defining \__fp_tuple_to_tl:w on line ...
 Defining \__fp_to_tl:w on line ...
 Defining \__fp_to_tl_normal:nnnnn on line ...
@@ -4415,10 +4421,15 @@ Defining \__fp_to_tl_scientific:wNw on line ...
 Defining \fp_to_dim:N on line ...
 Defining \fp_to_dim:c on line ...
 Defining \fp_to_dim:n on line ...
+Defining \__fp_to_dim_dispatch:w on line ...
+Defining \__fp_to_dim_recover:w on line ...
+Defining \__fp_to_dim:w on line ...
 Defining \fp_to_int:N on line ...
 Defining \fp_to_int:c on line ...
 Defining \fp_to_int:n on line ...
 Defining \__fp_to_int_dispatch:w on line ...
+Defining \__fp_to_int_recover:w on line ...
+Defining \__fp_to_int:w on line ...
 Defining \dim_to_fp:n on line ...
 Defining \__fp_from_dim_test:ww on line ...
 Defining \__fp_from_dim:wNw on line ...
diff --git a/l3kernel/testfiles/m3expl001.tlg b/l3kernel/testfiles/m3expl001.tlg
index ca999f7..0581bec 100644
--- a/l3kernel/testfiles/m3expl001.tlg
+++ b/l3kernel/testfiles/m3expl001.tlg
@@ -3749,6 +3749,7 @@ Defining message LaTeX/kernel/fp-zero-div on line ...
 Defining message LaTeX/kernel/fp-zero-div-ii on line ...
 Defining message LaTeX/kernel/fp-invalid on line ...
 Defining message LaTeX/kernel/fp-invalid-ii on line ...
+Defining message LaTeX/kernel/fp-unknown-type on line ...
 Defining \__fp_parse_word_trunc:N on line ...
 Defining \__fp_parse_word_floor:N on line ...
 Defining \__fp_parse_word_ceil:N on line ...
@@ -4381,6 +4382,9 @@ Defining \__fp_asin_isqrt:wn on line ...
 Defining \__fp_acsc_o:w on line ...
 Defining \__fp_asec_o:w on line ...
 Defining \__fp_acsc_normal_o:NfwNnw on line ...
+Defining \__fp_tuple_convert:Nw on line ...
+Defining \__fp_tuple_convert_loop:nNw on line ...
+Defining \__fp_tuple_convert_end:w on line ...
 Defining \__fp_trim_zeros:w on line ...
 Defining \__fp_trim_zeros_loop:w on line ...
 Defining \__fp_trim_zeros_dot:w on line ...
@@ -4389,7 +4393,8 @@ Defining \fp_to_scientific:N on line ...
 Defining \fp_to_scientific:c on line ...
 Defining \fp_to_scientific:n on line ...
 Defining \__fp_to_scientific_dispatch:w on line ...
-Defining \__fp_to_scientific_other:w on line ...
+Defining \__fp_to_scientific_recover:w on line ...
+Defining \__fp_tuple_to_scientific:w on line ...
 Defining \__fp_to_scientific:w on line ...
 Defining \__fp_to_scientific_normal:wnnnnn on line ...
 Defining \__fp_to_scientific_normal:wNw on line ...
@@ -4397,7 +4402,8 @@ Defining \fp_to_decimal:N on line ...
 Defining \fp_to_decimal:c on line ...
 Defining \fp_to_decimal:n on line ...
 Defining \__fp_to_decimal_dispatch:w on line ...
-Defining \__fp_to_decimal_other:w on line ...
+Defining \__fp_to_decimal_recover:w on line ...
+Defining \__fp_tuple_to_decimal:w on line ...
 Defining \__fp_to_decimal:w on line ...
 Defining \__fp_to_decimal_normal:wnnnnn on line ...
 Defining \__fp_to_decimal_large:Nnnw on line ...
@@ -4406,7 +4412,7 @@ Defining \fp_to_tl:N on line ...
 Defining \fp_to_tl:c on line ...
 Defining \fp_to_tl:n on line ...
 Defining \__fp_to_tl_dispatch:w on line ...
-Defining \__fp_to_tl_other:w on line ...
+Defining \__fp_to_tl_recover:w on line ...
 Defining \__fp_tuple_to_tl:w on line ...
 Defining \__fp_to_tl:w on line ...
 Defining \__fp_to_tl_normal:nnnnn on line ...
@@ -4415,10 +4421,15 @@ Defining \__fp_to_tl_scientific:wNw on line ...
 Defining \fp_to_dim:N on line ...
 Defining \fp_to_dim:c on line ...
 Defining \fp_to_dim:n on line ...
+Defining \__fp_to_dim_dispatch:w on line ...
+Defining \__fp_to_dim_recover:w on line ...
+Defining \__fp_to_dim:w on line ...
 Defining \fp_to_int:N on line ...
 Defining \fp_to_int:c on line ...
 Defining \fp_to_int:n on line ...
 Defining \__fp_to_int_dispatch:w on line ...
+Defining \__fp_to_int_recover:w on line ...
+Defining \__fp_to_int:w on line ...
 Defining \dim_to_fp:n on line ...
 Defining \__fp_from_dim_test:ww on line ...
 Defining \__fp_from_dim:wNw on line ...
diff --git a/l3kernel/testfiles/m3expl001.uptex.tlg b/l3kernel/testfiles/m3expl001.uptex.tlg
index c6b90c4..7ebc563 100644
--- a/l3kernel/testfiles/m3expl001.uptex.tlg
+++ b/l3kernel/testfiles/m3expl001.uptex.tlg
@@ -3749,6 +3749,7 @@ Defining message LaTeX/kernel/fp-zero-div on line ...
 Defining message LaTeX/kernel/fp-zero-div-ii on line ...
 Defining message LaTeX/kernel/fp-invalid on line ...
 Defining message LaTeX/kernel/fp-invalid-ii on line ...
+Defining message LaTeX/kernel/fp-unknown-type on line ...
 Defining \__fp_parse_word_trunc:N on line ...
 Defining \__fp_parse_word_floor:N on line ...
 Defining \__fp_parse_word_ceil:N on line ...
@@ -4381,6 +4382,9 @@ Defining \__fp_asin_isqrt:wn on line ...
 Defining \__fp_acsc_o:w on line ...
 Defining \__fp_asec_o:w on line ...
 Defining \__fp_acsc_normal_o:NfwNnw on line ...
+Defining \__fp_tuple_convert:Nw on line ...
+Defining \__fp_tuple_convert_loop:nNw on line ...
+Defining \__fp_tuple_convert_end:w on line ...
 Defining \__fp_trim_zeros:w on line ...
 Defining \__fp_trim_zeros_loop:w on line ...
 Defining \__fp_trim_zeros_dot:w on line ...
@@ -4389,7 +4393,8 @@ Defining \fp_to_scientific:N on line ...
 Defining \fp_to_scientific:c on line ...
 Defining \fp_to_scientific:n on line ...
 Defining \__fp_to_scientific_dispatch:w on line ...
-Defining \__fp_to_scientific_other:w on line ...
+Defining \__fp_to_scientific_recover:w on line ...
+Defining \__fp_tuple_to_scientific:w on line ...
 Defining \__fp_to_scientific:w on line ...
 Defining \__fp_to_scientific_normal:wnnnnn on line ...
 Defining \__fp_to_scientific_normal:wNw on line ...
@@ -4397,7 +4402,8 @@ Defining \fp_to_decimal:N on line ...
 Defining \fp_to_decimal:c on line ...
 Defining \fp_to_decimal:n on line ...
 Defining \__fp_to_decimal_dispatch:w on line ...
-Defining \__fp_to_decimal_other:w on line ...
+Defining \__fp_to_decimal_recover:w on line ...
+Defining \__fp_tuple_to_decimal:w on line ...
 Defining \__fp_to_decimal:w on line ...
 Defining \__fp_to_decimal_normal:wnnnnn on line ...
 Defining \__fp_to_decimal_large:Nnnw on line ...
@@ -4406,7 +4412,7 @@ Defining \fp_to_tl:N on line ...
 Defining \fp_to_tl:c on line ...
 Defining \fp_to_tl:n on line ...
 Defining \__fp_to_tl_dispatch:w on line ...
-Defining \__fp_to_tl_other:w on line ...
+Defining \__fp_to_tl_recover:w on line ...
 Defining \__fp_tuple_to_tl:w on line ...
 Defining \__fp_to_tl:w on line ...
 Defining \__fp_to_tl_normal:nnnnn on line ...
@@ -4415,10 +4421,15 @@ Defining \__fp_to_tl_scientific:wNw on line ...
 Defining \fp_to_dim:N on line ...
 Defining \fp_to_dim:c on line ...
 Defining \fp_to_dim:n on line ...
+Defining \__fp_to_dim_dispatch:w on line ...
+Defining \__fp_to_dim_recover:w on line ...
+Defining \__fp_to_dim:w on line ...
 Defining \fp_to_int:N on line ...
 Defining \fp_to_int:c on line ...
 Defining \fp_to_int:n on line ...
 Defining \__fp_to_int_dispatch:w on line ...
+Defining \__fp_to_int_recover:w on line ...
+Defining \__fp_to_int:w on line ...
 Defining \dim_to_fp:n on line ...
 Defining \__fp_from_dim_test:ww on line ...
 Defining \__fp_from_dim:wNw on line ...
diff --git a/l3kernel/testfiles/m3expl001.xetex.tlg b/l3kernel/testfiles/m3expl001.xetex.tlg
index 656e6da..699c0e8 100644
--- a/l3kernel/testfiles/m3expl001.xetex.tlg
+++ b/l3kernel/testfiles/m3expl001.xetex.tlg
@@ -3759,6 +3759,7 @@ Defining message LaTeX/kernel/fp-zero-div on line ...
 Defining message LaTeX/kernel/fp-zero-div-ii on line ...
 Defining message LaTeX/kernel/fp-invalid on line ...
 Defining message LaTeX/kernel/fp-invalid-ii on line ...
+Defining message LaTeX/kernel/fp-unknown-type on line ...
 Defining \__fp_parse_word_trunc:N on line ...
 Defining \__fp_parse_word_floor:N on line ...
 Defining \__fp_parse_word_ceil:N on line ...
@@ -4391,6 +4392,9 @@ Defining \__fp_asin_isqrt:wn on line ...
 Defining \__fp_acsc_o:w on line ...
 Defining \__fp_asec_o:w on line ...
 Defining \__fp_acsc_normal_o:NfwNnw on line ...
+Defining \__fp_tuple_convert:Nw on line ...
+Defining \__fp_tuple_convert_loop:nNw on line ...
+Defining \__fp_tuple_convert_end:w on line ...
 Defining \__fp_trim_zeros:w on line ...
 Defining \__fp_trim_zeros_loop:w on line ...
 Defining \__fp_trim_zeros_dot:w on line ...
@@ -4399,7 +4403,8 @@ Defining \fp_to_scientific:N on line ...
 Defining \fp_to_scientific:c on line ...
 Defining \fp_to_scientific:n on line ...
 Defining \__fp_to_scientific_dispatch:w on line ...
-Defining \__fp_to_scientific_other:w on line ...
+Defining \__fp_to_scientific_recover:w on line ...
+Defining \__fp_tuple_to_scientific:w on line ...
 Defining \__fp_to_scientific:w on line ...
 Defining \__fp_to_scientific_normal:wnnnnn on line ...
 Defining \__fp_to_scientific_normal:wNw on line ...
@@ -4407,7 +4412,8 @@ Defining \fp_to_decimal:N on line ...
 Defining \fp_to_decimal:c on line ...
 Defining \fp_to_decimal:n on line ...
 Defining \__fp_to_decimal_dispatch:w on line ...
-Defining \__fp_to_decimal_other:w on line ...
+Defining \__fp_to_decimal_recover:w on line ...
+Defining \__fp_tuple_to_decimal:w on line ...
 Defining \__fp_to_decimal:w on line ...
 Defining \__fp_to_decimal_normal:wnnnnn on line ...
 Defining \__fp_to_decimal_large:Nnnw on line ...
@@ -4416,7 +4422,7 @@ Defining \fp_to_tl:N on line ...
 Defining \fp_to_tl:c on line ...
 Defining \fp_to_tl:n on line ...
 Defining \__fp_to_tl_dispatch:w on line ...
-Defining \__fp_to_tl_other:w on line ...
+Defining \__fp_to_tl_recover:w on line ...
 Defining \__fp_tuple_to_tl:w on line ...
 Defining \__fp_to_tl:w on line ...
 Defining \__fp_to_tl_normal:nnnnn on line ...
@@ -4425,10 +4431,15 @@ Defining \__fp_to_tl_scientific:wNw on line ...
 Defining \fp_to_dim:N on line ...
 Defining \fp_to_dim:c on line ...
 Defining \fp_to_dim:n on line ...
+Defining \__fp_to_dim_dispatch:w on line ...
+Defining \__fp_to_dim_recover:w on line ...
+Defining \__fp_to_dim:w on line ...
 Defining \fp_to_int:N on line ...
 Defining \fp_to_int:c on line ...
 Defining \fp_to_int:n on line ...
 Defining \__fp_to_int_dispatch:w on line ...
+Defining \__fp_to_int_recover:w on line ...
+Defining \__fp_to_int:w on line ...
 Defining \dim_to_fp:n on line ...
 Defining \__fp_from_dim_test:ww on line ...
 Defining \__fp_from_dim:wNw on line ...
diff --git a/l3kernel/testfiles/m3expl003.luatex.tlg b/l3kernel/testfiles/m3expl003.luatex.tlg
index a50e600..2d5efcc 100644
--- a/l3kernel/testfiles/m3expl003.luatex.tlg
+++ b/l3kernel/testfiles/m3expl003.luatex.tlg
@@ -3761,6 +3761,7 @@ Defining message LaTeX/kernel/fp-zero-div on line ...
 Defining message LaTeX/kernel/fp-zero-div-ii on line ...
 Defining message LaTeX/kernel/fp-invalid on line ...
 Defining message LaTeX/kernel/fp-invalid-ii on line ...
+Defining message LaTeX/kernel/fp-unknown-type on line ...
 Defining \__fp_parse_word_trunc:N on line ...
 Defining \__fp_parse_word_floor:N on line ...
 Defining \__fp_parse_word_ceil:N on line ...
@@ -4393,6 +4394,9 @@ Defining \__fp_asin_isqrt:wn on line ...
 Defining \__fp_acsc_o:w on line ...
 Defining \__fp_asec_o:w on line ...
 Defining \__fp_acsc_normal_o:NfwNnw on line ...
+Defining \__fp_tuple_convert:Nw on line ...
+Defining \__fp_tuple_convert_loop:nNw on line ...
+Defining \__fp_tuple_convert_end:w on line ...
 Defining \__fp_trim_zeros:w on line ...
 Defining \__fp_trim_zeros_loop:w on line ...
 Defining \__fp_trim_zeros_dot:w on line ...
@@ -4401,7 +4405,8 @@ Defining \fp_to_scientific:N on line ...
 Defining \fp_to_scientific:c on line ...
 Defining \fp_to_scientific:n on line ...
 Defining \__fp_to_scientific_dispatch:w on line ...
-Defining \__fp_to_scientific_other:w on line ...
+Defining \__fp_to_scientific_recover:w on line ...
+Defining \__fp_tuple_to_scientific:w on line ...
 Defining \__fp_to_scientific:w on line ...
 Defining \__fp_to_scientific_normal:wnnnnn on line ...
 Defining \__fp_to_scientific_normal:wNw on line ...
@@ -4409,7 +4414,8 @@ Defining \fp_to_decimal:N on line ...
 Defining \fp_to_decimal:c on line ...
 Defining \fp_to_decimal:n on line ...
 Defining \__fp_to_decimal_dispatch:w on line ...
-Defining \__fp_to_decimal_other:w on line ...
+Defining \__fp_to_decimal_recover:w on line ...
+Defining \__fp_tuple_to_decimal:w on line ...
 Defining \__fp_to_decimal:w on line ...
 Defining \__fp_to_decimal_normal:wnnnnn on line ...
 Defining \__fp_to_decimal_large:Nnnw on line ...
@@ -4418,7 +4424,7 @@ Defining \fp_to_tl:N on line ...
 Defining \fp_to_tl:c on line ...
 Defining \fp_to_tl:n on line ...
 Defining \__fp_to_tl_dispatch:w on line ...
-Defining \__fp_to_tl_other:w on line ...
+Defining \__fp_to_tl_recover:w on line ...
 Defining \__fp_tuple_to_tl:w on line ...
 Defining \__fp_to_tl:w on line ...
 Defining \__fp_to_tl_normal:nnnnn on line ...
@@ -4427,10 +4433,15 @@ Defining \__fp_to_tl_scientific:wNw on line ...
 Defining \fp_to_dim:N on line ...
 Defining \fp_to_dim:c on line ...
 Defining \fp_to_dim:n on line ...
+Defining \__fp_to_dim_dispatch:w on line ...
+Defining \__fp_to_dim_recover:w on line ...
+Defining \__fp_to_dim:w on line ...
 Defining \fp_to_int:N on line ...
 Defining \fp_to_int:c on line ...
 Defining \fp_to_int:n on line ...
 Defining \__fp_to_int_dispatch:w on line ...
+Defining \__fp_to_int_recover:w on line ...
+Defining \__fp_to_int:w on line ...
 Defining \dim_to_fp:n on line ...
 Defining \__fp_from_dim_test:ww on line ...
 Defining \__fp_from_dim:wNw on line ...
diff --git a/l3kernel/testfiles/m3expl003.ptex.tlg b/l3kernel/testfiles/m3expl003.ptex.tlg
index a4bb059..d5b9df4 100644
--- a/l3kernel/testfiles/m3expl003.ptex.tlg
+++ b/l3kernel/testfiles/m3expl003.ptex.tlg
@@ -3749,6 +3749,7 @@ Defining message LaTeX/kernel/fp-zero-div on line ...
 Defining message LaTeX/kernel/fp-zero-div-ii on line ...
 Defining message LaTeX/kernel/fp-invalid on line ...
 Defining message LaTeX/kernel/fp-invalid-ii on line ...
+Defining message LaTeX/kernel/fp-unknown-type on line ...
 Defining \__fp_parse_word_trunc:N on line ...
 Defining \__fp_parse_word_floor:N on line ...
 Defining \__fp_parse_word_ceil:N on line ...
@@ -4381,6 +4382,9 @@ Defining \__fp_asin_isqrt:wn on line ...
 Defining \__fp_acsc_o:w on line ...
 Defining \__fp_asec_o:w on line ...
 Defining \__fp_acsc_normal_o:NfwNnw on line ...
+Defining \__fp_tuple_convert:Nw on line ...
+Defining \__fp_tuple_convert_loop:nNw on line ...
+Defining \__fp_tuple_convert_end:w on line ...
 Defining \__fp_trim_zeros:w on line ...
 Defining \__fp_trim_zeros_loop:w on line ...
 Defining \__fp_trim_zeros_dot:w on line ...
@@ -4389,7 +4393,8 @@ Defining \fp_to_scientific:N on line ...
 Defining \fp_to_scientific:c on line ...
 Defining \fp_to_scientific:n on line ...
 Defining \__fp_to_scientific_dispatch:w on line ...
-Defining \__fp_to_scientific_other:w on line ...
+Defining \__fp_to_scientific_recover:w on line ...
+Defining \__fp_tuple_to_scientific:w on line ...
 Defining \__fp_to_scientific:w on line ...
 Defining \__fp_to_scientific_normal:wnnnnn on line ...
 Defining \__fp_to_scientific_normal:wNw on line ...
@@ -4397,7 +4402,8 @@ Defining \fp_to_decimal:N on line ...
 Defining \fp_to_decimal:c on line ...
 Defining \fp_to_decimal:n on line ...
 Defining \__fp_to_decimal_dispatch:w on line ...
-Defining \__fp_to_decimal_other:w on line ...
+Defining \__fp_to_decimal_recover:w on line ...
+Defining \__fp_tuple_to_decimal:w on line ...
 Defining \__fp_to_decimal:w on line ...
 Defining \__fp_to_decimal_normal:wnnnnn on line ...
 Defining \__fp_to_decimal_large:Nnnw on line ...
@@ -4406,7 +4412,7 @@ Defining \fp_to_tl:N on line ...
 Defining \fp_to_tl:c on line ...
 Defining \fp_to_tl:n on line ...
 Defining \__fp_to_tl_dispatch:w on line ...
-Defining \__fp_to_tl_other:w on line ...
+Defining \__fp_to_tl_recover:w on line ...
 Defining \__fp_tuple_to_tl:w on line ...
 Defining \__fp_to_tl:w on line ...
 Defining \__fp_to_tl_normal:nnnnn on line ...
@@ -4415,10 +4421,15 @@ Defining \__fp_to_tl_scientific:wNw on line ...
 Defining \fp_to_dim:N on line ...
 Defining \fp_to_dim:c on line ...
 Defining \fp_to_dim:n on line ...
+Defining \__fp_to_dim_dispatch:w on line ...
+Defining \__fp_to_dim_recover:w on line ...
+Defining \__fp_to_dim:w on line ...
 Defining \fp_to_int:N on line ...
 Defining \fp_to_int:c on line ...
 Defining \fp_to_int:n on line ...
 Defining \__fp_to_int_dispatch:w on line ...
+Defining \__fp_to_int_recover:w on line ...
+Defining \__fp_to_int:w on line ...
 Defining \dim_to_fp:n on line ...
 Defining \__fp_from_dim_test:ww on line ...
 Defining \__fp_from_dim:wNw on line ...
diff --git a/l3kernel/testfiles/m3expl003.tlg b/l3kernel/testfiles/m3expl003.tlg
index ca999f7..0581bec 100644
--- a/l3kernel/testfiles/m3expl003.tlg
+++ b/l3kernel/testfiles/m3expl003.tlg
@@ -3749,6 +3749,7 @@ Defining message LaTeX/kernel/fp-zero-div on line ...
 Defining message LaTeX/kernel/fp-zero-div-ii on line ...
 Defining message LaTeX/kernel/fp-invalid on line ...
 Defining message LaTeX/kernel/fp-invalid-ii on line ...
+Defining message LaTeX/kernel/fp-unknown-type on line ...
 Defining \__fp_parse_word_trunc:N on line ...
 Defining \__fp_parse_word_floor:N on line ...
 Defining \__fp_parse_word_ceil:N on line ...
@@ -4381,6 +4382,9 @@ Defining \__fp_asin_isqrt:wn on line ...
 Defining \__fp_acsc_o:w on line ...
 Defining \__fp_asec_o:w on line ...
 Defining \__fp_acsc_normal_o:NfwNnw on line ...
+Defining \__fp_tuple_convert:Nw on line ...
+Defining \__fp_tuple_convert_loop:nNw on line ...
+Defining \__fp_tuple_convert_end:w on line ...
 Defining \__fp_trim_zeros:w on line ...
 Defining \__fp_trim_zeros_loop:w on line ...
 Defining \__fp_trim_zeros_dot:w on line ...
@@ -4389,7 +4393,8 @@ Defining \fp_to_scientific:N on line ...
 Defining \fp_to_scientific:c on line ...
 Defining \fp_to_scientific:n on line ...
 Defining \__fp_to_scientific_dispatch:w on line ...
-Defining \__fp_to_scientific_other:w on line ...
+Defining \__fp_to_scientific_recover:w on line ...
+Defining \__fp_tuple_to_scientific:w on line ...
 Defining \__fp_to_scientific:w on line ...
 Defining \__fp_to_scientific_normal:wnnnnn on line ...
 Defining \__fp_to_scientific_normal:wNw on line ...
@@ -4397,7 +4402,8 @@ Defining \fp_to_decimal:N on line ...
 Defining \fp_to_decimal:c on line ...
 Defining \fp_to_decimal:n on line ...
 Defining \__fp_to_decimal_dispatch:w on line ...
-Defining \__fp_to_decimal_other:w on line ...
+Defining \__fp_to_decimal_recover:w on line ...
+Defining \__fp_tuple_to_decimal:w on line ...
 Defining \__fp_to_decimal:w on line ...
 Defining \__fp_to_decimal_normal:wnnnnn on line ...
 Defining \__fp_to_decimal_large:Nnnw on line ...
@@ -4406,7 +4412,7 @@ Defining \fp_to_tl:N on line ...
 Defining \fp_to_tl:c on line ...
 Defining \fp_to_tl:n on line ...
 Defining \__fp_to_tl_dispatch:w on line ...
-Defining \__fp_to_tl_other:w on line ...
+Defining \__fp_to_tl_recover:w on line ...
 Defining \__fp_tuple_to_tl:w on line ...
 Defining \__fp_to_tl:w on line ...
 Defining \__fp_to_tl_normal:nnnnn on line ...
@@ -4415,10 +4421,15 @@ Defining \__fp_to_tl_scientific:wNw on line ...
 Defining \fp_to_dim:N on line ...
 Defining \fp_to_dim:c on line ...
 Defining \fp_to_dim:n on line ...
+Defining \__fp_to_dim_dispatch:w on line ...
+Defining \__fp_to_dim_recover:w on line ...
+Defining \__fp_to_dim:w on line ...
 Defining \fp_to_int:N on line ...
 Defining \fp_to_int:c on line ...
 Defining \fp_to_int:n on line ...
 Defining \__fp_to_int_dispatch:w on line ...
+Defining \__fp_to_int_recover:w on line ...
+Defining \__fp_to_int:w on line ...
 Defining \dim_to_fp:n on line ...
 Defining \__fp_from_dim_test:ww on line ...
 Defining \__fp_from_dim:wNw on line ...
diff --git a/l3kernel/testfiles/m3expl003.uptex.tlg b/l3kernel/testfiles/m3expl003.uptex.tlg
index c6b90c4..7ebc563 100644
--- a/l3kernel/testfiles/m3expl003.uptex.tlg
+++ b/l3kernel/testfiles/m3expl003.uptex.tlg
@@ -3749,6 +3749,7 @@ Defining message LaTeX/kernel/fp-zero-div on line ...
 Defining message LaTeX/kernel/fp-zero-div-ii on line ...
 Defining message LaTeX/kernel/fp-invalid on line ...
 Defining message LaTeX/kernel/fp-invalid-ii on line ...
+Defining message LaTeX/kernel/fp-unknown-type on line ...
 Defining \__fp_parse_word_trunc:N on line ...
 Defining \__fp_parse_word_floor:N on line ...
 Defining \__fp_parse_word_ceil:N on line ...
@@ -4381,6 +4382,9 @@ Defining \__fp_asin_isqrt:wn on line ...
 Defining \__fp_acsc_o:w on line ...
 Defining \__fp_asec_o:w on line ...
 Defining \__fp_acsc_normal_o:NfwNnw on line ...
+Defining \__fp_tuple_convert:Nw on line ...
+Defining \__fp_tuple_convert_loop:nNw on line ...
+Defining \__fp_tuple_convert_end:w on line ...
 Defining \__fp_trim_zeros:w on line ...
 Defining \__fp_trim_zeros_loop:w on line ...
 Defining \__fp_trim_zeros_dot:w on line ...
@@ -4389,7 +4393,8 @@ Defining \fp_to_scientific:N on line ...
 Defining \fp_to_scientific:c on line ...
 Defining \fp_to_scientific:n on line ...
 Defining \__fp_to_scientific_dispatch:w on line ...
-Defining \__fp_to_scientific_other:w on line ...
+Defining \__fp_to_scientific_recover:w on line ...
+Defining \__fp_tuple_to_scientific:w on line ...
 Defining \__fp_to_scientific:w on line ...
 Defining \__fp_to_scientific_normal:wnnnnn on line ...
 Defining \__fp_to_scientific_normal:wNw on line ...
@@ -4397,7 +4402,8 @@ Defining \fp_to_decimal:N on line ...
 Defining \fp_to_decimal:c on line ...
 Defining \fp_to_decimal:n on line ...
 Defining \__fp_to_decimal_dispatch:w on line ...
-Defining \__fp_to_decimal_other:w on line ...
+Defining \__fp_to_decimal_recover:w on line ...
+Defining \__fp_tuple_to_decimal:w on line ...
 Defining \__fp_to_decimal:w on line ...
 Defining \__fp_to_decimal_normal:wnnnnn on line ...
 Defining \__fp_to_decimal_large:Nnnw on line ...
@@ -4406,7 +4412,7 @@ Defining \fp_to_tl:N on line ...
 Defining \fp_to_tl:c on line ...
 Defining \fp_to_tl:n on line ...
 Defining \__fp_to_tl_dispatch:w on line ...
-Defining \__fp_to_tl_other:w on line ...
+Defining \__fp_to_tl_recover:w on line ...
 Defining \__fp_tuple_to_tl:w on line ...
 Defining \__fp_to_tl:w on line ...
 Defining \__fp_to_tl_normal:nnnnn on line ...
@@ -4415,10 +4421,15 @@ Defining \__fp_to_tl_scientific:wNw on line ...
 Defining \fp_to_dim:N on line ...
 Defining \fp_to_dim:c on line ...
 Defining \fp_to_dim:n on line ...
+Defining \__fp_to_dim_dispatch:w on line ...
+Defining \__fp_to_dim_recover:w on line ...
+Defining \__fp_to_dim:w on line ...
 Defining \fp_to_int:N on line ...
 Defining \fp_to_int:c on line ...
 Defining \fp_to_int:n on line ...
 Defining \__fp_to_int_dispatch:w on line ...
+Defining \__fp_to_int_recover:w on line ...
+Defining \__fp_to_int:w on line ...
 Defining \dim_to_fp:n on line ...
 Defining \__fp_from_dim_test:ww on line ...
 Defining \__fp_from_dim:wNw on line ...
diff --git a/l3kernel/testfiles/m3expl003.xetex.tlg b/l3kernel/testfiles/m3expl003.xetex.tlg
index 656e6da..699c0e8 100644
--- a/l3kernel/testfiles/m3expl003.xetex.tlg
+++ b/l3kernel/testfiles/m3expl003.xetex.tlg
@@ -3759,6 +3759,7 @@ Defining message LaTeX/kernel/fp-zero-div on line ...
 Defining message LaTeX/kernel/fp-zero-div-ii on line ...
 Defining message LaTeX/kernel/fp-invalid on line ...
 Defining message LaTeX/kernel/fp-invalid-ii on line ...
+Defining message LaTeX/kernel/fp-unknown-type on line ...
 Defining \__fp_parse_word_trunc:N on line ...
 Defining \__fp_parse_word_floor:N on line ...
 Defining \__fp_parse_word_ceil:N on line ...
@@ -4391,6 +4392,9 @@ Defining \__fp_asin_isqrt:wn on line ...
 Defining \__fp_acsc_o:w on line ...
 Defining \__fp_asec_o:w on line ...
 Defining \__fp_acsc_normal_o:NfwNnw on line ...
+Defining \__fp_tuple_convert:Nw on line ...
+Defining \__fp_tuple_convert_loop:nNw on line ...
+Defining \__fp_tuple_convert_end:w on line ...
 Defining \__fp_trim_zeros:w on line ...
 Defining \__fp_trim_zeros_loop:w on line ...
 Defining \__fp_trim_zeros_dot:w on line ...
@@ -4399,7 +4403,8 @@ Defining \fp_to_scientific:N on line ...
 Defining \fp_to_scientific:c on line ...
 Defining \fp_to_scientific:n on line ...
 Defining \__fp_to_scientific_dispatch:w on line ...
-Defining \__fp_to_scientific_other:w on line ...
+Defining \__fp_to_scientific_recover:w on line ...
+Defining \__fp_tuple_to_scientific:w on line ...
 Defining \__fp_to_scientific:w on line ...
 Defining \__fp_to_scientific_normal:wnnnnn on line ...
 Defining \__fp_to_scientific_normal:wNw on line ...
@@ -4407,7 +4412,8 @@ Defining \fp_to_decimal:N on line ...
 Defining \fp_to_decimal:c on line ...
 Defining \fp_to_decimal:n on line ...
 Defining \__fp_to_decimal_dispatch:w on line ...
-Defining \__fp_to_decimal_other:w on line ...
+Defining \__fp_to_decimal_recover:w on line ...
+Defining \__fp_tuple_to_decimal:w on line ...
 Defining \__fp_to_decimal:w on line ...
 Defining \__fp_to_decimal_normal:wnnnnn on line ...
 Defining \__fp_to_decimal_large:Nnnw on line ...
@@ -4416,7 +4422,7 @@ Defining \fp_to_tl:N on line ...
 Defining \fp_to_tl:c on line ...
 Defining \fp_to_tl:n on line ...
 Defining \__fp_to_tl_dispatch:w on line ...
-Defining \__fp_to_tl_other:w on line ...
+Defining \__fp_to_tl_recover:w on line ...
 Defining \__fp_tuple_to_tl:w on line ...
 Defining \__fp_to_tl:w on line ...
 Defining \__fp_to_tl_normal:nnnnn on line ...
@@ -4425,10 +4431,15 @@ Defining \__fp_to_tl_scientific:wNw on line ...
 Defining \fp_to_dim:N on line ...
 Defining \fp_to_dim:c on line ...
 Defining \fp_to_dim:n on line ...
+Defining \__fp_to_dim_dispatch:w on line ...
+Defining \__fp_to_dim_recover:w on line ...
+Defining \__fp_to_dim:w on line ...
 Defining \fp_to_int:N on line ...
 Defining \fp_to_int:c on line ...
 Defining \fp_to_int:n on line ...
 Defining \__fp_to_int_dispatch:w on line ...
+Defining \__fp_to_int_recover:w on line ...
+Defining \__fp_to_int:w on line ...
 Defining \dim_to_fp:n on line ...
 Defining \__fp_from_dim_test:ww on line ...
 Defining \__fp_from_dim:wNw on line ...
diff --git a/l3kernel/testfiles/m3fp-parse002.lvt b/l3kernel/testfiles/m3fp-parse002.lvt
index e989ca3..dd04c17 100644
--- a/l3kernel/testfiles/m3fp-parse002.lvt
+++ b/l3kernel/testfiles/m3fp-parse002.lvt
@@ -160,7 +160,6 @@
     \fp_to_tl:n { (1,)+(2,) } \NEWLINE
     \fp_to_tl:n { (20,(40,60),()) - (1,(2,3),()) } \NEWLINE
     \fp_to_tl:n { - (1,(2,3),()) } \NEWLINE
-    \fp_to_tl:n { randint (1,2,3) } \NEWLINE
     \fp_to_tl:n { (1,2,3)&&(4,5,6) } \NEWLINE
     \fp_to_tl:n { sin((1,2),) } \NEWLINE
     \fp_to_tl:n { atan((1,2),()) } \NEWLINE
@@ -180,6 +179,8 @@
   {
     \fp_to_scientific:n { 1 , 2 } \NEWLINE
     \fp_to_decimal:n { 1 , 2 } \NEWLINE
+    \fp_to_dim:n { 1 , 2 } \NEWLINE
+    \fp_to_int:n { 1 , 2 } \NEWLINE
   }
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/l3kernel/testfiles/m3fp-parse002.tlg b/l3kernel/testfiles/m3fp-parse002.tlg
index abb773d..83a1006 100644
--- a/l3kernel/testfiles/m3fp-parse002.tlg
+++ b/l3kernel/testfiles/m3fp-parse002.tlg
@@ -277,15 +277,6 @@ spelling (e.g., `I\hbox'). Otherwise just continue,
 and I'll forget about whatever was undefined.
 ! Undefined control sequence.
 <argument> \LaTeX3 error: 
-                           Arguments in randint(1, 2, 3) are invalid.
-l. ...  }
-The control sequence at the end of the top line
-of your error message was never \def'ed. If you have
-misspelled it (e.g., `\hobx'), type `I' and the correct
-spelling (e.g., `I\hbox'). Otherwise just continue,
-and I'll forget about whatever was undefined.
-! Undefined control sequence.
-<argument> \LaTeX3 error: 
                            Invalid operation ((1, 2, 3))&((4, 5, 6))
 l. ...  }
 The control sequence at the end of the top line
@@ -432,7 +423,6 @@ nan
 nan
 nan
 nan
-nan
 ()
 (2, 3)
 (4, 6)
@@ -446,7 +436,7 @@ TEST 12: Tuple conversion
 ============================================================
 ! Undefined control sequence.
 <argument> \LaTeX3 error: 
-                           Invalid operation fp_to_scientific((1, 2))
+                           Invalid operation fp_to_dim((1, 2))
 l. ...  }
 The control sequence at the end of the top line
 of your error message was never \def'ed. If you have
@@ -455,13 +445,15 @@ spelling (e.g., `I\hbox'). Otherwise just continue,
 and I'll forget about whatever was undefined.
 ! Undefined control sequence.
 <argument> \LaTeX3 error: 
-                           Invalid operation fp_to_decimal((1, 2))
+                           Invalid operation fp_to_int((1, 2))
 l. ...  }
 The control sequence at the end of the top line
 of your error message was never \def'ed. If you have
 misspelled it (e.g., `\hobx'), type `I' and the correct
 spelling (e.g., `I\hbox'). Otherwise just continue,
 and I'll forget about whatever was undefined.
-0.000000000000000e0
+(1.000000000000000e0, 2.000000000000000e0)
+(1, 2)
+0pt
 0
 ============================================================





More information about the latex3-commits mailing list