Skip to content

Commit

Permalink
Retain one level of indirection in optimised ltcmd defs
Browse files Browse the repository at this point in the history
  • Loading branch information
josephwright committed Nov 28, 2023
1 parent cbeaaa7 commit 7d3e79e
Show file tree
Hide file tree
Showing 5 changed files with 58 additions and 43 deletions.
22 changes: 18 additions & 4 deletions base/ltcmd.dtx
Original file line number Diff line number Diff line change
Expand Up @@ -442,6 +442,11 @@
% \@@_declare_cmd_code_aux:Nnn,
% \@@_declare_cmd_code_expandable:Nnn
% }
% \begin{macro}
% {
% \@@_declare_cmd_optimised:NNNn,
% \@@_declare_cmd_optimised:NcNn
% }
% \changes{v1.2b}{2023/11/28}
% {Optimise cmd creation for all-\texttt{m} arguments}
% At this stage we can check for a short-cut possibility: if the signature
Expand All @@ -465,15 +470,23 @@
}
% \end{macrocode}
% The optimised version of commands just has to worry about whether to make
% them protected.
% them protected. We retain one level of indirection so it is still clear
% these are \pkg{ltcmd}-derived.
% \begin{macrocode}
\cs_new_protected:Npn \@@_declare_cmd_optimised:Nnn #1#2#3
{
\bool_if:NTF \l_@@_expandable_bool
{ \cs_generate_from_arg_count:NNnn #1 \cs_set_nopar:Npn }
{ \cs_generate_from_arg_count:NNnn #1 \cs_set_protected_nopar:Npn }
\l_@@_current_arg_int {#3}
{ \@@_declare_cmd_optimised:NcNn \cs_set_nopar:Npn }
{ \@@_declare_cmd_optimised:NcNn \cs_set_protected_nopar:Npn }
{ \l_@@_function_tl \c_space_tl code } #1 {#3}
}
\cs_new_protected:Npn \@@_declare_cmd_optimised:NNNn #1#2#3#4
{
#1 #3 {#2}
\cs_generate_from_arg_count:NNnn #2 #1
\l_@@_current_arg_int {#4}
}
\cs_generate_variant:Nn \@@_declare_cmd_optimised:NNNn { Nc }
% \end{macrocode}
% Standard functions call \cs{@@_start:nNNnnn}, which receives the
% argument specification, an auxiliary used for
Expand Down Expand Up @@ -572,6 +585,7 @@
% \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\@@_declare_env:nnnn}
% \begin{macro}{\@@_declare_env_internal:nnnn}
Expand Down
16 changes: 8 additions & 8 deletions base/testfiles-ltcmd/github-1009.tlg
Original file line number Diff line number Diff line change
Expand Up @@ -4,19 +4,19 @@ Don't change this file in any respect.
TEST 1: Non-expandable Document Commands with m-type arguments
============================================================
> \foo=\protected macro:
->.
->\foo code .
<argument> \foo
l. ...}
> \baz=\protected macro:
->.
->\foo code .
<argument> \baz
l. ...}
> \foo=\protected macro:
#1->.
->\foo code .
<argument> \foo
l. ...}
> \baz=\protected macro:
#1->.
->\foo code .
<argument> \baz
l. ...}
> \foo=document command:
Expand Down Expand Up @@ -44,19 +44,19 @@ l. ...}
TEST 2: Expandable Document Commands with m-type arguments
============================================================
> \foo=macro:
->.
->\foo code .
<argument> \foo
l. ...}
> \baz=macro:
->.
->\foo code .
<argument> \baz
l. ...}
> \foo=macro:
#1->.
->\foo code .
<argument> \foo
l. ...}
> \baz=macro:
#1->.
->\foo code .
<argument> \baz
l. ...}
> \foo=expandable document command:
Expand Down
59 changes: 30 additions & 29 deletions base/testfiles-ltcmd/ltcmd001.tlg
Original file line number Diff line number Diff line change
Expand Up @@ -17,69 +17,70 @@ For immediate help type H <return>.
l. ...}
You have used \RenewDocumentCommand with a command that was never defined.
LaTeX will ignore this entire definition.
> \foo=\protected macro:->First definition.
> \foo=\protected macro:->\foo code .
<recently read> }
l. ...}
> \foo code=undefined.
> \foo code=\protected macro:->First definition.
<recently read> }
l. ...}
============================================================
============================================================
TEST 2: Commands with simple mandatory arguments
============================================================
> \foo=\protected macro:#1->(#1).
> \foo=\protected macro:->\foo code .
<recently read> }
l. ...}
> \foo code=undefined.
> \foo code=\protected macro:#1->(#1).
<recently read> }
l. ...}
> \foo=\protected macro:#1#2->(#1)(#2).
> \foo=\protected macro:->\foo code .
<recently read> }
l. ...}
> \foo code=undefined.
> \foo code=\protected macro:#1#2->(#1)(#2).
<recently read> }
l. ...}
> \foo=\protected macro:#1#2#3->(#1)(#2)(#3).
> \foo=\protected macro:->\foo code .
<recently read> }
l. ...}
> \foo code=undefined.
> \foo code=\protected macro:#1#2#3->(#1)(#2)(#3).
<recently read> }
l. ...}
> \foo=\protected macro:#1#2#3#4->(#1)(#2)(#3)(#4).
> \foo=\protected macro:->\foo code .
<recently read> }
l. ...}
> \foo code=undefined.
> \foo code=\protected macro:#1#2#3#4->(#1)(#2)(#3)(#4).
<recently read> }
l. ...}
> \foo=\protected macro:#1#2#3#4#5->(#1)(#2)(#3)(#4)(#5).
> \foo=\protected macro:->\foo code .
<recently read> }
l. ...}
> \foo code=undefined.
> \foo code=\protected macro:#1#2#3#4#5->(#1)(#2)(#3)(#4)(#5).
<recently read> }
l. ...}
> \foo=\protected macro:#1#2#3#4#5#6->(#1)(#2)(#3)(#4)(#5)(#6).
> \foo=\protected macro:->\foo code .
<recently read> }
l. ...}
> \foo code=undefined.
> \foo code=\protected macro:#1#2#3#4#5#6->(#1)(#2)(#3)(#4)(#5)(#6).
<recently read> }
l. ...}
> \foo=\protected macro:#1#2#3#4#5#6#7->(#1)(#2)(#3)(#4)(#5)(#6)(#7).
> \foo=\protected macro:->\foo code .
<recently read> }
l. ...}
> \foo code=undefined.
> \foo code=\protected macro:#1#2#3#4#5#6#7->(#1)(#2)(#3)(#4)(#5)(#6)(#7).
<recently read> }
l. ...}
> \foo=\protected macro:#1#2#3#4#5#6#7#8->(#1)(#2)(#3)(#4)(#5)(#6)(#7)(#8).
> \foo=\protected macro:->\foo code .
<recently read> }
l. ...}
> \foo code=undefined.
> \foo code=\protected
macro:#1#2#3#4#5#6#7#8->(#1)(#2)(#3)(#4)(#5)(#6)(#7)(#8).
<recently read> }
l. ...}
> \foo=\protected
macro:#1#2#3#4#5#6#7#8#9->(#1)(#2)(#3)(#4)(#5)(#6)(#7)(#8)(#9).
> \foo=\protected macro:->\foo code .
<recently read> }
l. ...}
> \foo code=undefined.
> \foo code=\protected
macro:#1#2#3#4#5#6#7#8#9->(#1)(#2)(#3)(#4)(#5)(#6)(#7)(#8)(#9).
<recently read> }
l. ...}
============================================================
Expand Down Expand Up @@ -321,10 +322,10 @@ l. ...}
============================================================
TEST 8: Some valid expandable functions
============================================================
> \foo=macro:#1->(#1).
> \foo=macro:->\foo code .
<recently read> }
l. ...}
> \foo code=undefined.
> \foo code=macro:#1->(#1).
<recently read> }
l. ...}
> \foo=macro:->\__cmd_start_expandable:nNNNNn {+m}\foo \foo \foo code
Expand All @@ -334,10 +335,10 @@ l. ...}
> \foo code=\long macro:#1->(#1).
<recently read> }
l. ...}
> \foo=macro:#1#2#3->(#1)(#2)(#3).
> \foo=macro:->\foo code .
<recently read> }
l. ...}
> \foo code=\long macro:#1->(#1).
> \foo code=macro:#1#2#3->(#1)(#2)(#3).
<recently read> }
l. ...}
> \foo=macro:->\__cmd_start_expandable:nNNNNn {om}\foo \foo \foo code
Expand Down Expand Up @@ -437,10 +438,10 @@ l. ...}
You have used \RenewDocumentEnvironment with an environment that was never
defined.
LaTeX will ignore this entire definition.
> \environment foo=\protected macro:->First.
> \environment foo=\protected macro:->\environment foo code .
<recently read> }
l. ...}
> \environment foo code=undefined.
> \environment foo code=\protected macro:->First.
<recently read> }
l. ...}
============================================================
Expand Down Expand Up @@ -695,10 +696,10 @@ l. ...}
You have used \RenewExpandableDocumentCommand with a command that was never
defined.
LaTeX will ignore this entire definition.
> \foo=macro:->First definition.
> \foo=macro:->\foo code .
<recently read> }
l. ...}
> \foo code=undefined.
> \foo code=macro:->First definition.
<recently read> }
l. ...}
============================================================
2 changes: 1 addition & 1 deletion base/testfiles-ltcmd/ltcmd002.luatex.tlg
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ TEST 2: Nesting optional arguments
TEST 3: Invalid arguments (types s, o m)
============================================================
Runaway argument?
! Paragraph ended before \foo was complete.
! Paragraph ended before \foo code was complete.
<to be read again>
\par
l. ...}
Expand Down
2 changes: 1 addition & 1 deletion base/testfiles-ltcmd/ltcmd002.tlg
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ TEST 2: Nesting optional arguments
TEST 3: Invalid arguments (types s, o m)
============================================================
Runaway argument?
! Paragraph ended before \foo was complete.
! Paragraph ended before \foo code was complete.
<to be read again>
\par
l. ...}
Expand Down

0 comments on commit 7d3e79e

Please sign in to comment.