Skip to content

Commit

Permalink
Speed up \exp_args some more and reduce tracingall output by half
Browse files Browse the repository at this point in the history
Compared to before the last few commits, \exp_args:NXY for various
letters X and Y became around 1.5 to 2 times faster, and more
importantly perhaps we get 2 times fewer lines in the log.
  • Loading branch information
Bruno Le Floch committed Feb 11, 2019
1 parent 4abfee1 commit 3aecb35
Show file tree
Hide file tree
Showing 14 changed files with 489 additions and 387 deletions.
48 changes: 26 additions & 22 deletions l3kernel/l3expan.dtx
Expand Up @@ -2478,13 +2478,13 @@
% should be protected (done by setting \cs{@@_tmp:w}). Then call
% \cs{@@_generate_internal_variant:NNn} with arguments
% \cs{cs_new_protected:cpn} \cs{use:x} (for protected) or
% \cs{cs_new:cpn} \cs{use:e} (expandable) and the signature. If |p|
% \cs{cs_new:cpn} \cs{tex_expanded:D} (expandable) and the signature. If |p|
% appears in the signature, or if the function to be defined is
% expandable and the primitive \tn{expanded} is not available, call
% some fall-back code that just puts the appropriate |\::| commands.
% Otherwise, call \cs{@@_generate_internal_one_go:NNn} to construct
% the \cs[no-index]{exp_args:N\dots} function as a macro taking up to
% $9$~arguments and expanding them using \cs{use:x} or \cs{use:e}.
% $9$~arguments and expanding them using \cs{use:x} or \cs{tex_expanded:D}.
% \begin{macrocode}
\cs_new_protected:Npx \@@_generate_internal_variant:n #1
{
Expand All @@ -2496,7 +2496,7 @@
\token_to_str:N x \exp_not:N \q_mark
{ }
\cs_new:cpn
\exp_not:N \use:e
\exp_not:N \tex_expanded:D
\exp_not:N \q_stop
{#1}
}
Expand Down Expand Up @@ -2536,7 +2536,7 @@
{
\cs_new_protected:Npn \@@_generate_internal_test:Nw ##1
{
\if_meaning:w \use:e ##1
\if_meaning:w \tex_expanded:D ##1
\exp_after:wN \@@_generate_internal_test_aux:w
\exp_after:wN #1
\else:
Expand All @@ -2558,28 +2558,32 @@
{
\use_none:n #5
\use_none:n #7
\cs:w
use_
\if:w N #5 i \else:
\if:w c #5 ii \else:
\if:w x #5 iii \else:
iv \fi: \fi: \fi:
:nnnn
\cs_end:
{ \@@_generate_internal_loop:nwnnw { \exp_not:N ## #7 } }
{ \@@_generate_internal_loop:nwnnw { \exp_not:c { ## #7 } } }
{ \@@_generate_internal_loop:nwnnw { { ## #7 } } }
{
\exp_args:No \@@_generate_internal_loop:nwnnw
{
\exp_after:wN
{ \exp:w \exp_args:Nc \exp_end: { exp_not:#5 } { ## #7 } }
}
}
\cs_if_exist_use:cF { @@_generate_internal_#5:NN }
{ \@@_generate_internal_other:NN }
#5 #7
#7 .
{ #3 #1 } { #4 ## #2 }
#6 ;
}
\cs_new_protected:Npn \@@_generate_internal_N:NN #1#2
{ \@@_generate_internal_loop:nwnnw { \exp_not:N ###2 } }
\cs_new_protected:Npn \@@_generate_internal_c:NN #1#2
{ \exp_args:No \@@_generate_internal_loop:nwnnw { \exp_not:c {###2} } }
\cs_new_protected:Npn \@@_generate_internal_n:NN #1#2
{ \@@_generate_internal_loop:nwnnw { { \exp_not:n {###2} } } }
\cs_new_protected:Npn \@@_generate_internal_x:NN #1#2
{ \@@_generate_internal_loop:nwnnw { {###2} } }
\cs_new_protected:Npn \@@_generate_internal_other:NN #1#2
{
\exp_args:No \@@_generate_internal_loop:nwnnw
{
\exp_after:wN
{
\exp:w \exp_args:NNc \exp_after:wN \exp_end:
{ exp_not:#1 } {###2}
}
}
}
\cs_new_protected:Npn \@@_generate_internal_end:w #1 . #2#3#4 ; #5 ; #6#7#8
{ #6 { exp_args:N #8 } #3 { #7 {#2} } }
\cs_new_protected:Npn \@@_generate_internal_long:w #1 N #2#3 . #4#5#6#
Expand Down
2 changes: 1 addition & 1 deletion l3kernel/testfiles/m3expan001.tlg
Expand Up @@ -49,7 +49,7 @@ TEST 1: protection
\protected\long macro:->\exp_args:Nfx \foo:nn
\protected\long macro:->\exp_args:Nxf \foo:nn
\protected\long macro:->\exp_args:NfvVonx \bar:nnnnnn
\protected\long macro:#1#2#3#4#5#6#7->\use:x {\exp_not:N #1{\exp_not:f {#2}}{\exp_not:v {#3}}{\exp_not:V {#4}}{\exp_not:o {#5}}{\exp_not:n {#6}}{#7}}
\protected\long macro:#1#2#3#4#5#6#7->\use:x {\exp_not:N #1{\__kernel_exp_not:w \exp_after:wN {\exp:w \exp_end_continue_f:w #2}}{\__kernel_exp_not:w \exp_after:wN {\exp:w \__exp_eval_register:c {#3}}}{\__kernel_exp_not:w \exp_after:wN {\exp:w \__exp_eval_register:N #4}}{\__kernel_exp_not:w \exp_after:wN {#5}}{\exp_not:n {#6}}{#7}}
============================================================
============================================================
TEST 2: expansion
Expand Down
4 changes: 2 additions & 2 deletions l3kernel/testfiles/m3expan002.luatex.tlg
Expand Up @@ -142,6 +142,6 @@ LaTeX has been asked to create an \exp_args:N... function with signature
'Nabc' but 'a' is not a valid argument specifier.
Defining \exp_args:Nfoo on line ...
Defining \exp_args:Nfox on line ...
undefined,\long macro:#1#2#3#4->\use:e {\exp_not:N #1{\exp_not:f {#2}}{\exp_not:o {#3}}{\exp_not:o {#4}}},\protected\long macro:#1#2#3#4->\use:x {\exp_not:N #1{\exp_not:f {#2}}{\exp_not:o {#3}}{#4}}
\long macro:#1#2#3#4->\use:e {\exp_not:N #1{\exp_not:f {#2}}{\exp_not:o {#3}}{\exp_not:o {#4}}},\protected\long macro:#1#2#3#4->\use:x {\exp_not:N #1{\exp_not:f {#2}}{\exp_not:o {#3}}{#4}}
undefined,\long macro:#1#2#3#4->\tex_expanded:D {\exp_not:N #1{\__kernel_exp_not:w \exp_after:wN {\exp:w \exp_end_continue_f:w #2}}{\__kernel_exp_not:w \exp_after:wN {#3}}{\__kernel_exp_not:w \exp_after:wN {#4}}},\protected\long macro:#1#2#3#4->\use:x {\exp_not:N #1{\__kernel_exp_not:w \exp_after:wN {\exp:w \exp_end_continue_f:w #2}}{\__kernel_exp_not:w \exp_after:wN {#3}}{#4}}
\long macro:#1#2#3#4->\tex_expanded:D {\exp_not:N #1{\__kernel_exp_not:w \exp_after:wN {\exp:w \exp_end_continue_f:w #2}}{\__kernel_exp_not:w \exp_after:wN {#3}}{\__kernel_exp_not:w \exp_after:wN {#4}}},\protected\long macro:#1#2#3#4->\use:x {\exp_not:N #1{\__kernel_exp_not:w \exp_after:wN {\exp:w \exp_end_continue_f:w #2}}{\__kernel_exp_not:w \exp_after:wN {#3}}{#4}}
============================================================
4 changes: 2 additions & 2 deletions l3kernel/testfiles/m3expan002.tlg
Expand Up @@ -142,6 +142,6 @@ LaTeX has been asked to create an \exp_args:N... function with signature
'Nabc' but 'a' is not a valid argument specifier.
Defining \exp_args:Nfoo on line ...
Defining \exp_args:Nfox on line ...
undefined,\long macro:->\::f \::o \::o \::: ,\protected\long macro:#1#2#3#4->\use:x {\exp_not:N #1{\exp_not:f {#2}}{\exp_not:o {#3}}{#4}}
\long macro:->\::f \::o \::o \::: ,\protected\long macro:#1#2#3#4->\use:x {\exp_not:N #1{\exp_not:f {#2}}{\exp_not:o {#3}}{#4}}
undefined,\long macro:->\::f \::o \::o \::: ,\protected\long macro:#1#2#3#4->\use:x {\exp_not:N #1{\__kernel_exp_not:w \exp_after:wN {\exp:w \exp_end_continue_f:w #2}}{\__kernel_exp_not:w \exp_after:wN {#3}}{#4}}
\long macro:->\::f \::o \::o \::: ,\protected\long macro:#1#2#3#4->\use:x {\exp_not:N #1{\__kernel_exp_not:w \exp_after:wN {\exp:w \exp_end_continue_f:w #2}}{\__kernel_exp_not:w \exp_after:wN {#3}}{#4}}
============================================================
5 changes: 5 additions & 0 deletions l3kernel/testfiles/m3expl001.luatex.tlg
Expand Up @@ -238,6 +238,11 @@ Defining \__cs_generate_internal_test_aux:w on line ...
Defining \__cs_generate_internal_test:Nw on line ...
Defining \__cs_generate_internal_one_go:NNn on line ...
Defining \__cs_generate_internal_loop:nwnnw on line ...
Defining \__cs_generate_internal_N:NN on line ...
Defining \__cs_generate_internal_c:NN on line ...
Defining \__cs_generate_internal_n:NN on line ...
Defining \__cs_generate_internal_x:NN on line ...
Defining \__cs_generate_internal_other:NN on line ...
Defining \__cs_generate_internal_end:w on line ...
Defining \__cs_generate_internal_long:w on line ...
Defining \__cs_generate_internal_long:nnnNNn on line ...
Expand Down
101 changes: 56 additions & 45 deletions l3kernel/testfiles/m3expl001.ptex.tlg
Expand Up @@ -175,48 +175,6 @@ Defining \exp_args:NcNc on line ...
Defining \exp_args:NcNo on line ...
Defining \exp_args:Ncco on line ...
Defining \exp_args:Nx on line ...
Defining \exp_args:Nnc on line ...
Defining \exp_args:Nno on line ...
Defining \exp_args:NnV on line ...
Defining \exp_args:Nnv on line ...
Defining \exp_args:Nne on line ...
Defining \exp_args:Nnf on line ...
Defining \exp_args:Noc on line ...
Defining \exp_args:Noo on line ...
Defining \exp_args:Nof on line ...
Defining \exp_args:NVo on line ...
Defining \exp_args:Nfo on line ...
Defining \exp_args:Nff on line ...
Defining \exp_args:NNx on line ...
Defining \exp_args:Ncx on line ...
Defining \exp_args:Nnx on line ...
Defining \exp_args:Nox on line ...
Defining \exp_args:Nxo on line ...
Defining \exp_args:Nxx on line ...
Defining \exp_args:NNcf on line ...
Defining \exp_args:NNno on line ...
Defining \exp_args:NNnV on line ...
Defining \exp_args:NNoo on line ...
Defining \exp_args:NNVV on line ...
Defining \exp_args:Ncno on line ...
Defining \exp_args:NcnV on line ...
Defining \exp_args:Ncoo on line ...
Defining \exp_args:NcVV on line ...
Defining \exp_args:Nnnc on line ...
Defining \exp_args:Nnno on line ...
Defining \exp_args:Nnnf on line ...
Defining \exp_args:Nnff on line ...
Defining \exp_args:Nooo on line ...
Defining \exp_args:Noof on line ...
Defining \exp_args:Nffo on line ...
Defining \exp_args:NNNx on line ...
Defining \exp_args:NNnx on line ...
Defining \exp_args:NNox on line ...
Defining \exp_args:Nnnx on line ...
Defining \exp_args:Nnox on line ...
Defining \exp_args:Nccx on line ...
Defining \exp_args:Ncnx on line ...
Defining \exp_args:Noox on line ...
Defining \__exp_arg_last_unbraced:nn on line ...
Defining \::o_unbraced on line ...
Defining \::V_unbraced on line ...
Expand Down Expand Up @@ -311,7 +269,20 @@ Defining \__cs_generate_variant_loop_special:NNwNNnn on line ...
Defining \__cs_generate_variant_same:N on line ...
Defining \__cs_generate_variant:wwNN on line ...
Defining \__cs_generate_internal_variant:n on line ...
Defining \__cs_generate_internal_variant:wwnNwnn on line ...
Defining \__cs_generate_internal_variant:wwnNwn on line ...
Defining \__cs_generate_internal_variant:NNn on line ...
Defining \__cs_generate_internal_test_aux:w on line ...
Defining \__cs_generate_internal_test:Nw on line ...
Defining \__cs_generate_internal_one_go:NNn on line ...
Defining \__cs_generate_internal_loop:nwnnw on line ...
Defining \__cs_generate_internal_N:NN on line ...
Defining \__cs_generate_internal_c:NN on line ...
Defining \__cs_generate_internal_n:NN on line ...
Defining \__cs_generate_internal_x:NN on line ...
Defining \__cs_generate_internal_other:NN on line ...
Defining \__cs_generate_internal_end:w on line ...
Defining \__cs_generate_internal_long:w on line ...
Defining \__cs_generate_internal_long:nnnNNn on line ...
Defining \__cs_generate_internal_variant_loop:n on line ...
Defining \prg_generate_conditional_variant:Nnn on line ...
Defining \__cs_generate_variant:nnNnn on line ...
Expand All @@ -321,8 +292,48 @@ Defining \__cs_generate_variant_T_form:nnn on line ...
Defining \__cs_generate_variant_F_form:nnn on line ...
Defining \__cs_generate_variant_TF_form:nnn on line ...
Defining \exp_args_generate:n on line ...
Defining \__cs_args_generate:Nn on line ...
Defining \__cs_args_generate:n on line ...
Defining \exp_args:Nnc on line ...
Defining \exp_args:Nno on line ...
Defining \exp_args:NnV on line ...
Defining \exp_args:Nnv on line ...
Defining \exp_args:Nne on line ...
Defining \exp_args:Nnf on line ...
Defining \exp_args:Noc on line ...
Defining \exp_args:Noo on line ...
Defining \exp_args:Nof on line ...
Defining \exp_args:NVo on line ...
Defining \exp_args:Nfo on line ...
Defining \exp_args:Nff on line ...
Defining \exp_args:NNx on line ...
Defining \exp_args:Ncx on line ...
Defining \exp_args:Nnx on line ...
Defining \exp_args:Nox on line ...
Defining \exp_args:Nxo on line ...
Defining \exp_args:Nxx on line ...
Defining \exp_args:NNcf on line ...
Defining \exp_args:NNno on line ...
Defining \exp_args:NNnV on line ...
Defining \exp_args:NNoo on line ...
Defining \exp_args:NNVV on line ...
Defining \exp_args:Ncno on line ...
Defining \exp_args:NcnV on line ...
Defining \exp_args:Ncoo on line ...
Defining \exp_args:NcVV on line ...
Defining \exp_args:Nnnc on line ...
Defining \exp_args:Nnno on line ...
Defining \exp_args:Nnnf on line ...
Defining \exp_args:Nnff on line ...
Defining \exp_args:Nooo on line ...
Defining \exp_args:Noof on line ...
Defining \exp_args:Nffo on line ...
Defining \exp_args:NNNx on line ...
Defining \exp_args:NNnx on line ...
Defining \exp_args:NNox on line ...
Defining \exp_args:Nnnx on line ...
Defining \exp_args:Nnox on line ...
Defining \exp_args:Nccx on line ...
Defining \exp_args:Ncnx on line ...
Defining \exp_args:Noox on line ...
Defining \tl_new:N on line ...
Defining \tl_new:c on line ...
Defining \tl_const:Nn on line ...
Expand Down
101 changes: 56 additions & 45 deletions l3kernel/testfiles/m3expl001.tlg
Expand Up @@ -175,48 +175,6 @@ Defining \exp_args:NcNc on line ...
Defining \exp_args:NcNo on line ...
Defining \exp_args:Ncco on line ...
Defining \exp_args:Nx on line ...
Defining \exp_args:Nnc on line ...
Defining \exp_args:Nno on line ...
Defining \exp_args:NnV on line ...
Defining \exp_args:Nnv on line ...
Defining \exp_args:Nne on line ...
Defining \exp_args:Nnf on line ...
Defining \exp_args:Noc on line ...
Defining \exp_args:Noo on line ...
Defining \exp_args:Nof on line ...
Defining \exp_args:NVo on line ...
Defining \exp_args:Nfo on line ...
Defining \exp_args:Nff on line ...
Defining \exp_args:NNx on line ...
Defining \exp_args:Ncx on line ...
Defining \exp_args:Nnx on line ...
Defining \exp_args:Nox on line ...
Defining \exp_args:Nxo on line ...
Defining \exp_args:Nxx on line ...
Defining \exp_args:NNcf on line ...
Defining \exp_args:NNno on line ...
Defining \exp_args:NNnV on line ...
Defining \exp_args:NNoo on line ...
Defining \exp_args:NNVV on line ...
Defining \exp_args:Ncno on line ...
Defining \exp_args:NcnV on line ...
Defining \exp_args:Ncoo on line ...
Defining \exp_args:NcVV on line ...
Defining \exp_args:Nnnc on line ...
Defining \exp_args:Nnno on line ...
Defining \exp_args:Nnnf on line ...
Defining \exp_args:Nnff on line ...
Defining \exp_args:Nooo on line ...
Defining \exp_args:Noof on line ...
Defining \exp_args:Nffo on line ...
Defining \exp_args:NNNx on line ...
Defining \exp_args:NNnx on line ...
Defining \exp_args:NNox on line ...
Defining \exp_args:Nnnx on line ...
Defining \exp_args:Nnox on line ...
Defining \exp_args:Nccx on line ...
Defining \exp_args:Ncnx on line ...
Defining \exp_args:Noox on line ...
Defining \__exp_arg_last_unbraced:nn on line ...
Defining \::o_unbraced on line ...
Defining \::V_unbraced on line ...
Expand Down Expand Up @@ -311,7 +269,20 @@ Defining \__cs_generate_variant_loop_special:NNwNNnn on line ...
Defining \__cs_generate_variant_same:N on line ...
Defining \__cs_generate_variant:wwNN on line ...
Defining \__cs_generate_internal_variant:n on line ...
Defining \__cs_generate_internal_variant:wwnNwnn on line ...
Defining \__cs_generate_internal_variant:wwnNwn on line ...
Defining \__cs_generate_internal_variant:NNn on line ...
Defining \__cs_generate_internal_test_aux:w on line ...
Defining \__cs_generate_internal_test:Nw on line ...
Defining \__cs_generate_internal_one_go:NNn on line ...
Defining \__cs_generate_internal_loop:nwnnw on line ...
Defining \__cs_generate_internal_N:NN on line ...
Defining \__cs_generate_internal_c:NN on line ...
Defining \__cs_generate_internal_n:NN on line ...
Defining \__cs_generate_internal_x:NN on line ...
Defining \__cs_generate_internal_other:NN on line ...
Defining \__cs_generate_internal_end:w on line ...
Defining \__cs_generate_internal_long:w on line ...
Defining \__cs_generate_internal_long:nnnNNn on line ...
Defining \__cs_generate_internal_variant_loop:n on line ...
Defining \prg_generate_conditional_variant:Nnn on line ...
Defining \__cs_generate_variant:nnNnn on line ...
Expand All @@ -321,8 +292,48 @@ Defining \__cs_generate_variant_T_form:nnn on line ...
Defining \__cs_generate_variant_F_form:nnn on line ...
Defining \__cs_generate_variant_TF_form:nnn on line ...
Defining \exp_args_generate:n on line ...
Defining \__cs_args_generate:Nn on line ...
Defining \__cs_args_generate:n on line ...
Defining \exp_args:Nnc on line ...
Defining \exp_args:Nno on line ...
Defining \exp_args:NnV on line ...
Defining \exp_args:Nnv on line ...
Defining \exp_args:Nne on line ...
Defining \exp_args:Nnf on line ...
Defining \exp_args:Noc on line ...
Defining \exp_args:Noo on line ...
Defining \exp_args:Nof on line ...
Defining \exp_args:NVo on line ...
Defining \exp_args:Nfo on line ...
Defining \exp_args:Nff on line ...
Defining \exp_args:NNx on line ...
Defining \exp_args:Ncx on line ...
Defining \exp_args:Nnx on line ...
Defining \exp_args:Nox on line ...
Defining \exp_args:Nxo on line ...
Defining \exp_args:Nxx on line ...
Defining \exp_args:NNcf on line ...
Defining \exp_args:NNno on line ...
Defining \exp_args:NNnV on line ...
Defining \exp_args:NNoo on line ...
Defining \exp_args:NNVV on line ...
Defining \exp_args:Ncno on line ...
Defining \exp_args:NcnV on line ...
Defining \exp_args:Ncoo on line ...
Defining \exp_args:NcVV on line ...
Defining \exp_args:Nnnc on line ...
Defining \exp_args:Nnno on line ...
Defining \exp_args:Nnnf on line ...
Defining \exp_args:Nnff on line ...
Defining \exp_args:Nooo on line ...
Defining \exp_args:Noof on line ...
Defining \exp_args:Nffo on line ...
Defining \exp_args:NNNx on line ...
Defining \exp_args:NNnx on line ...
Defining \exp_args:NNox on line ...
Defining \exp_args:Nnnx on line ...
Defining \exp_args:Nnox on line ...
Defining \exp_args:Nccx on line ...
Defining \exp_args:Ncnx on line ...
Defining \exp_args:Noox on line ...
Defining \tl_new:N on line ...
Defining \tl_new:c on line ...
Defining \tl_const:Nn on line ...
Expand Down

0 comments on commit 3aecb35

Please sign in to comment.