[latex3-commits] [l3svn] r6990 - Make mandatory argument of -NoValue- remain -NoValue- (fixes #349)

noreply at latex-project.org noreply at latex-project.org
Mon Mar 13 02:19:18 CET 2017


Author: bruno
Date: 2017-03-13 02:19:18 +0100 (Mon, 13 Mar 2017)
New Revision: 6990

Modified:
   trunk/l3packages/xparse/testfiles/xparse001.ptex.tlg
   trunk/l3packages/xparse/testfiles/xparse001.tlg
   trunk/l3packages/xparse/testfiles/xparse001.uptex.tlg
   trunk/l3packages/xparse/testfiles/xparse004.luatex.tlg
   trunk/l3packages/xparse/testfiles/xparse004.lvt
   trunk/l3packages/xparse/testfiles/xparse004.tlg
   trunk/l3packages/xparse/xparse.dtx
Log:
Make mandatory argument of -NoValue- remain -NoValue- (fixes #349)

Previously that became an empty argument (if the command had any
default arguments) because the machinery for default arguments replaces
-NoValue- by the corresponding default indiscriminately.  I simply put
a default value of -NoValue- for mandatory arguments.

As a side-effect, I've optimized the code so that a function such that
all default values are -NoValue- does not use the machinery at all.


Modified: trunk/l3packages/xparse/testfiles/xparse001.ptex.tlg
===================================================================
--- trunk/l3packages/xparse/testfiles/xparse001.ptex.tlg	2017-03-12 05:08:10 UTC (rev 6989)
+++ trunk/l3packages/xparse/testfiles/xparse001.ptex.tlg	2017-03-13 01:19:18 UTC (rev 6990)
@@ -549,8 +549,7 @@
 . Defining command \foo with sig. 'som' on line ....
 .................................................
 > \foo=\protected macro:->\__xparse_start:nNNnnn {som}\foo  \foo code
-{\__xparse_grab_t:w *\__xparse_grab_D:w []\__xparse_grab_m_1:w
-}{.{.-NoValue-}.}{}.
+{\__xparse_grab_t:w *\__xparse_grab_D:w []\__xparse_grab_m_1:w }{}{}.
 <recently read> }
 l. ...}
 > \foo code=\protected\long macro:#1#2#3->(#1)(#2)(#3).
@@ -562,8 +561,7 @@
 . Redefining command \foo with sig. 't+d()+m' on line ....
 .................................................
 > \foo=\protected macro:->\__xparse_start:nNNnnn {t+d()+m}\foo  \foo code
-{\__xparse_grab_t:w +\__xparse_grab_D:w ()\__xparse_grab_m_long:w
-}{.{.-NoValue-}.}{}.
+{\__xparse_grab_t:w +\__xparse_grab_D:w ()\__xparse_grab_m_long:w }{}{}.
 <recently read> }
 l. ...}
 > \foo code=\protected\long macro:#1#2#3->(#1)(#2)(#3).
@@ -576,7 +574,9 @@
 .................................................
 > \foo=\protected macro:->\__xparse_start:nNNnnn {+t\par O{default}mmm}\foo 
 \foo code {\__xparse_grab_t_long:w \par \__xparse_grab_D:w
-[]\__xparse_grab_m_3:w }{.{.default}...}{}.
+[]\__xparse_grab_m_3:w }{\c__xparse_no_value_tl {\prg_do_nothing:
+default}\c__xparse_no_value_tl \c__xparse_no_value_tl \c__xparse_no_value_tl
+}{}.
 <recently read> }
 l. ...}
 > \foo code=\protected\long macro:#1#2#3#4#5->(#1)(#2)(#3)(#4).
@@ -589,7 +589,7 @@
 .................................................
 > \foo=\protected macro:->\__xparse_start:nNNnnn {momo}\foo  \foo code
 {\__xparse_grab_m_1:w \__xparse_grab_D:w []\__xparse_grab_m_1:w
-\__xparse_grab_D_trailing:w []}{.{.-NoValue-}.{.-NoValue-}}{}.
+\__xparse_grab_D_trailing:w []}{}{}.
 <recently read> }
 l. ...}
 > \foo code=\protected\long macro:#1#2#3#4->(#1)(#2)(#3)(#4).
@@ -609,7 +609,7 @@
 *************************************************
 > \foo=\protected macro:->\__xparse_start:nNNnnn {mgom}\foo  \foo code
 {\__xparse_grab_m_1:w \__xparse_grab_G:w \__xparse_grab_D:w
-[]\__xparse_grab_m_1:w }{.{.-NoValue-}{.-NoValue-}.}{}.
+[]\__xparse_grab_m_1:w }{}{}.
 <recently read> }
 l. ...}
 > \foo code=\protected\long macro:#1#2#3#4->(#1)(#2)(#3)(#4).
@@ -629,7 +629,8 @@
 *************************************************
 > \foo=\protected macro:->\__xparse_start:nNNnnn {mG{test}sm}\foo  \foo code
 {\__xparse_grab_m_1:w \__xparse_grab_G:w \__xparse_grab_t:w
-*\__xparse_grab_m_1:w }{.{.test}..}{}.
+*\__xparse_grab_m_1:w }{\c__xparse_no_value_tl {\prg_do_nothing:
+test}\c__xparse_no_value_tl \c__xparse_no_value_tl }{}.
 <recently read> }
 l. ...}
 > \foo code=\protected\long macro:#1#2#3#4->(#1)(#2)(#3)(#4).
@@ -742,8 +743,8 @@
 . Redefining command \foo with sig. 'om' on line ....
 .................................................
 > \foo=macro:->\__xparse_start_expandable:nNNNNn {om}\foo  \foo  \foo code
-\foo defaults {\__xparse_expandable_grab_D:w \foo (arg 1)
-[]\__xparse_expandable_grab_m:w }.
+?{\__xparse_expandable_grab_D:w \foo (arg 1) []\__xparse_expandable_grab_m:w
+}.
 <recently read> }
 l. ...}
 > \foo code=\long macro:#1#2->(#1)(#2).
@@ -755,7 +756,7 @@
 . Redefining command \foo with sig. '+o+m' on line ....
 .................................................
 > \foo=macro:->\__xparse_start_expandable:nNNNNn {+o+m}\foo  \foo  \foo code
-\foo defaults {\__xparse_expandable_grab_D:w \foo (arg 1)
+?{\__xparse_expandable_grab_D:w \foo (arg 1)
 []\__xparse_expandable_grab_m_long:w }.
 <recently read> }
 l. ...}
@@ -781,9 +782,8 @@
 . Redefining command \foo with sig. 'osm' on line ....
 .................................................
 > \foo=macro:->\__xparse_start_expandable:nNNNNn {osm}\foo  \foo  \foo code
-\foo defaults {\__xparse_expandable_grab_D:w \foo (arg 1)
-[]\__xparse_expandable_grab_t:w \__xparse_grabber_*:w
-*\__xparse_expandable_grab_m:w }.
+?{\__xparse_expandable_grab_D:w \foo (arg 1) []\__xparse_expandable_grab_t:w
+\__xparse_grabber_*:w *\__xparse_expandable_grab_m:w }.
 <recently read> }
 l. ...}
 > \foo code=\long macro:#1#2#3->(#1)(#2)(#3).
@@ -856,7 +856,7 @@
 . Defining command \foo with sig. 'o+m' on line ....
 .................................................
 > \foo=macro:->\__xparse_start_expandable:nNNNNn {o+m}\foo  \foo   \foo code
-\foo defaults {\__xparse_expandable_grab_D:w \foo (arg 1)
+?{\__xparse_expandable_grab_D:w \foo (arg 1)
 []\__xparse_expandable_grab_m_long:w }.
 <recently read> }
 l. ...}
@@ -969,7 +969,7 @@
 .................................................
 > \environment foo=\protected macro:->\__xparse_start:nNNnnn {som}\environment
 foo  \environment foo code {\__xparse_grab_t:w *\__xparse_grab_D:w
-[]\__xparse_grab_m_1:w }{.{.-NoValue-}.}{}.
+[]\__xparse_grab_m_1:w }{}{}.
 <recently read> }
 l. ...}
 > \environment foo code=\protected\long macro:#1#2#3->\cs_set_nopar:Npx
@@ -984,7 +984,7 @@
 .................................................
 > \environment foo=\protected macro:->\__xparse_start:nNNnnn
 {so+m}\environment foo  \environment foo code {\__xparse_grab_t:w
-*\__xparse_grab_D:w []\__xparse_grab_m_long:w }{.{.-NoValue-}.}{}.
+*\__xparse_grab_D:w []\__xparse_grab_m_long:w }{}{}.
 <recently read> }
 l. ...}
 > \environment foo code=\protected\long macro:#1#2#3->\cs_set_nopar:Npx
@@ -999,7 +999,7 @@
 .................................................
 > \environment foo=\protected macro:->\__xparse_start:nNNnnn
 {u{stop}om}\environment foo  \environment foo code {\__xparse_grab_u:w
-{stop}\__xparse_grab_D:w []\__xparse_grab_m_1:w }{.{.-NoValue-}.}{}.
+{stop}\__xparse_grab_D:w []\__xparse_grab_m_1:w }{}{}.
 <recently read> }
 l. ...}
 > \environment foo code=\protected\long macro:#1#2#3->\cs_set_nopar:Npx
@@ -1014,7 +1014,7 @@
 .................................................
 > \environment foo=\protected macro:->\__xparse_start:nNNnnn {moo}\environment
 foo  \environment foo code {\__xparse_grab_m_1:w \__xparse_grab_D_trailing:w
-[]\__xparse_grab_D_trailing:w []}{.{.-NoValue-}{.-NoValue-}}{}.
+[]\__xparse_grab_D_trailing:w []}{}{}.
 <recently read> }
 l. ...}
 > \environment foo code=\protected\long macro:#1#2#3->\cs_set_nopar:Npx
@@ -1229,7 +1229,7 @@
 l. ...  }
 The control sequence marked <to be read again> should
 not appear between \csname and \endcsname.
-\test- \xparse function is not expandable \__xparse_start_aux:nNNnnn {D...}\foo code {\__xparse_grab_D_trailing:w ..}{{..}}{}....\cs_end: 
+\test- \xparse function is not expandable \__xparse_start_aux:nNNnnn {D...}\foo code {\__xparse_grab_D_trailing:w ..}{{.}}{}....\cs_end: 
 ============================================================
 ============================================================
 TEST 20: Checking for existing expandable definitions

Modified: trunk/l3packages/xparse/testfiles/xparse001.tlg
===================================================================
--- trunk/l3packages/xparse/testfiles/xparse001.tlg	2017-03-12 05:08:10 UTC (rev 6989)
+++ trunk/l3packages/xparse/testfiles/xparse001.tlg	2017-03-13 01:19:18 UTC (rev 6990)
@@ -549,8 +549,7 @@
 . Defining command \foo with sig. 'som' on line ....
 .................................................
 > \foo=\protected macro:->\__xparse_start:nNNnnn {som}\foo  \foo code
-{\__xparse_grab_t:w *\__xparse_grab_D:w []\__xparse_grab_m_1:w
-}{.{.-NoValue-}.}{}.
+{\__xparse_grab_t:w *\__xparse_grab_D:w []\__xparse_grab_m_1:w }{}{}.
 <recently read> }
 l. ...}
 > \foo code=\protected\long macro:#1#2#3->(#1)(#2)(#3).
@@ -562,8 +561,7 @@
 . Redefining command \foo with sig. 't+d()+m' on line ....
 .................................................
 > \foo=\protected macro:->\__xparse_start:nNNnnn {t+d()+m}\foo  \foo code
-{\__xparse_grab_t:w +\__xparse_grab_D:w ()\__xparse_grab_m_long:w
-}{.{.-NoValue-}.}{}.
+{\__xparse_grab_t:w +\__xparse_grab_D:w ()\__xparse_grab_m_long:w }{}{}.
 <recently read> }
 l. ...}
 > \foo code=\protected\long macro:#1#2#3->(#1)(#2)(#3).
@@ -576,7 +574,9 @@
 .................................................
 > \foo=\protected macro:->\__xparse_start:nNNnnn {+t\par O{default}mmm}\foo 
 \foo code {\__xparse_grab_t_long:w \par \__xparse_grab_D:w
-[]\__xparse_grab_m_3:w }{.{.default}...}{}.
+[]\__xparse_grab_m_3:w }{\c__xparse_no_value_tl {\prg_do_nothing:
+default}\c__xparse_no_value_tl \c__xparse_no_value_tl \c__xparse_no_value_tl
+}{}.
 <recently read> }
 l. ...}
 > \foo code=\protected\long macro:#1#2#3#4#5->(#1)(#2)(#3)(#4).
@@ -589,7 +589,7 @@
 .................................................
 > \foo=\protected macro:->\__xparse_start:nNNnnn {momo}\foo  \foo code
 {\__xparse_grab_m_1:w \__xparse_grab_D:w []\__xparse_grab_m_1:w
-\__xparse_grab_D_trailing:w []}{.{.-NoValue-}.{.-NoValue-}}{}.
+\__xparse_grab_D_trailing:w []}{}{}.
 <recently read> }
 l. ...}
 > \foo code=\protected\long macro:#1#2#3#4->(#1)(#2)(#3)(#4).
@@ -609,7 +609,7 @@
 *************************************************
 > \foo=\protected macro:->\__xparse_start:nNNnnn {mgom}\foo  \foo code
 {\__xparse_grab_m_1:w \__xparse_grab_G:w \__xparse_grab_D:w
-[]\__xparse_grab_m_1:w }{.{.-NoValue-}{.-NoValue-}.}{}.
+[]\__xparse_grab_m_1:w }{}{}.
 <recently read> }
 l. ...}
 > \foo code=\protected\long macro:#1#2#3#4->(#1)(#2)(#3)(#4).
@@ -629,7 +629,8 @@
 *************************************************
 > \foo=\protected macro:->\__xparse_start:nNNnnn {mG{test}sm}\foo  \foo code
 {\__xparse_grab_m_1:w \__xparse_grab_G:w \__xparse_grab_t:w
-*\__xparse_grab_m_1:w }{.{.test}..}{}.
+*\__xparse_grab_m_1:w }{\c__xparse_no_value_tl {\prg_do_nothing:
+test}\c__xparse_no_value_tl \c__xparse_no_value_tl }{}.
 <recently read> }
 l. ...}
 > \foo code=\protected\long macro:#1#2#3#4->(#1)(#2)(#3)(#4).
@@ -742,8 +743,8 @@
 . Redefining command \foo with sig. 'om' on line ....
 .................................................
 > \foo=macro:->\__xparse_start_expandable:nNNNNn {om}\foo  \foo  \foo code
-\foo defaults {\__xparse_expandable_grab_D:w \foo (arg 1)
-[]\__xparse_expandable_grab_m:w }.
+?{\__xparse_expandable_grab_D:w \foo (arg 1) []\__xparse_expandable_grab_m:w
+}.
 <recently read> }
 l. ...}
 > \foo code=\long macro:#1#2->(#1)(#2).
@@ -755,7 +756,7 @@
 . Redefining command \foo with sig. '+o+m' on line ....
 .................................................
 > \foo=macro:->\__xparse_start_expandable:nNNNNn {+o+m}\foo  \foo  \foo code
-\foo defaults {\__xparse_expandable_grab_D:w \foo (arg 1)
+?{\__xparse_expandable_grab_D:w \foo (arg 1)
 []\__xparse_expandable_grab_m_long:w }.
 <recently read> }
 l. ...}
@@ -781,9 +782,8 @@
 . Redefining command \foo with sig. 'osm' on line ....
 .................................................
 > \foo=macro:->\__xparse_start_expandable:nNNNNn {osm}\foo  \foo  \foo code
-\foo defaults {\__xparse_expandable_grab_D:w \foo (arg 1)
-[]\__xparse_expandable_grab_t:w \__xparse_grabber_*:w
-*\__xparse_expandable_grab_m:w }.
+?{\__xparse_expandable_grab_D:w \foo (arg 1) []\__xparse_expandable_grab_t:w
+\__xparse_grabber_*:w *\__xparse_expandable_grab_m:w }.
 <recently read> }
 l. ...}
 > \foo code=\long macro:#1#2#3->(#1)(#2)(#3).
@@ -856,7 +856,7 @@
 . Defining command \foo with sig. 'o+m' on line ....
 .................................................
 > \foo=macro:->\__xparse_start_expandable:nNNNNn {o+m}\foo  \foo   \foo code
-\foo defaults {\__xparse_expandable_grab_D:w \foo (arg 1)
+?{\__xparse_expandable_grab_D:w \foo (arg 1)
 []\__xparse_expandable_grab_m_long:w }.
 <recently read> }
 l. ...}
@@ -969,7 +969,7 @@
 .................................................
 > \environment foo=\protected macro:->\__xparse_start:nNNnnn {som}\environment
 foo  \environment foo code {\__xparse_grab_t:w *\__xparse_grab_D:w
-[]\__xparse_grab_m_1:w }{.{.-NoValue-}.}{}.
+[]\__xparse_grab_m_1:w }{}{}.
 <recently read> }
 l. ...}
 > \environment foo code=\protected\long macro:#1#2#3->\cs_set_nopar:Npx
@@ -984,7 +984,7 @@
 .................................................
 > \environment foo=\protected macro:->\__xparse_start:nNNnnn
 {so+m}\environment foo  \environment foo code {\__xparse_grab_t:w
-*\__xparse_grab_D:w []\__xparse_grab_m_long:w }{.{.-NoValue-}.}{}.
+*\__xparse_grab_D:w []\__xparse_grab_m_long:w }{}{}.
 <recently read> }
 l. ...}
 > \environment foo code=\protected\long macro:#1#2#3->\cs_set_nopar:Npx
@@ -999,7 +999,7 @@
 .................................................
 > \environment foo=\protected macro:->\__xparse_start:nNNnnn
 {u{stop}om}\environment foo  \environment foo code {\__xparse_grab_u:w
-{stop}\__xparse_grab_D:w []\__xparse_grab_m_1:w }{.{.-NoValue-}.}{}.
+{stop}\__xparse_grab_D:w []\__xparse_grab_m_1:w }{}{}.
 <recently read> }
 l. ...}
 > \environment foo code=\protected\long macro:#1#2#3->\cs_set_nopar:Npx
@@ -1014,7 +1014,7 @@
 .................................................
 > \environment foo=\protected macro:->\__xparse_start:nNNnnn {moo}\environment
 foo  \environment foo code {\__xparse_grab_m_1:w \__xparse_grab_D_trailing:w
-[]\__xparse_grab_D_trailing:w []}{.{.-NoValue-}{.-NoValue-}}{}.
+[]\__xparse_grab_D_trailing:w []}{}{}.
 <recently read> }
 l. ...}
 > \environment foo code=\protected\long macro:#1#2#3->\cs_set_nopar:Npx
@@ -1225,7 +1225,7 @@
 l. ...  }
 The control sequence marked <to be read again> should
 not appear between \csname and \endcsname.
-\test- \xparse function is not expandable \__xparse_start_aux:nNNnnn {D...}\foo code {\__xparse_grab_D_trailing:w ..}{{..}}{}....\cs_end: 
+\test- \xparse function is not expandable \__xparse_start_aux:nNNnnn {D...}\foo code {\__xparse_grab_D_trailing:w ..}{{.}}{}....\cs_end: 
 ============================================================
 ============================================================
 TEST 20: Checking for existing expandable definitions

Modified: trunk/l3packages/xparse/testfiles/xparse001.uptex.tlg
===================================================================
--- trunk/l3packages/xparse/testfiles/xparse001.uptex.tlg	2017-03-12 05:08:10 UTC (rev 6989)
+++ trunk/l3packages/xparse/testfiles/xparse001.uptex.tlg	2017-03-13 01:19:18 UTC (rev 6990)
@@ -549,8 +549,7 @@
 . Defining command \foo with sig. 'som' on line ....
 .................................................
 > \foo=\protected macro:->\__xparse_start:nNNnnn {som}\foo  \foo code
-{\__xparse_grab_t:w *\__xparse_grab_D:w []\__xparse_grab_m_1:w
-}{.{.-NoValue-}.}{}.
+{\__xparse_grab_t:w *\__xparse_grab_D:w []\__xparse_grab_m_1:w }{}{}.
 <recently read> }
 l. ...}
 > \foo code=\protected\long macro:#1#2#3->(#1)(#2)(#3).
@@ -562,8 +561,7 @@
 . Redefining command \foo with sig. 't+d()+m' on line ....
 .................................................
 > \foo=\protected macro:->\__xparse_start:nNNnnn {t+d()+m}\foo  \foo code
-{\__xparse_grab_t:w +\__xparse_grab_D:w ()\__xparse_grab_m_long:w
-}{.{.-NoValue-}.}{}.
+{\__xparse_grab_t:w +\__xparse_grab_D:w ()\__xparse_grab_m_long:w }{}{}.
 <recently read> }
 l. ...}
 > \foo code=\protected\long macro:#1#2#3->(#1)(#2)(#3).
@@ -576,7 +574,9 @@
 .................................................
 > \foo=\protected macro:->\__xparse_start:nNNnnn {+t\par O{default}mmm}\foo 
 \foo code {\__xparse_grab_t_long:w \par \__xparse_grab_D:w
-[]\__xparse_grab_m_3:w }{.{.default}...}{}.
+[]\__xparse_grab_m_3:w }{\c__xparse_no_value_tl {\prg_do_nothing:
+default}\c__xparse_no_value_tl \c__xparse_no_value_tl \c__xparse_no_value_tl
+}{}.
 <recently read> }
 l. ...}
 > \foo code=\protected\long macro:#1#2#3#4#5->(#1)(#2)(#3)(#4).
@@ -589,7 +589,7 @@
 .................................................
 > \foo=\protected macro:->\__xparse_start:nNNnnn {momo}\foo  \foo code
 {\__xparse_grab_m_1:w \__xparse_grab_D:w []\__xparse_grab_m_1:w
-\__xparse_grab_D_trailing:w []}{.{.-NoValue-}.{.-NoValue-}}{}.
+\__xparse_grab_D_trailing:w []}{}{}.
 <recently read> }
 l. ...}
 > \foo code=\protected\long macro:#1#2#3#4->(#1)(#2)(#3)(#4).
@@ -609,7 +609,7 @@
 *************************************************
 > \foo=\protected macro:->\__xparse_start:nNNnnn {mgom}\foo  \foo code
 {\__xparse_grab_m_1:w \__xparse_grab_G:w \__xparse_grab_D:w
-[]\__xparse_grab_m_1:w }{.{.-NoValue-}{.-NoValue-}.}{}.
+[]\__xparse_grab_m_1:w }{}{}.
 <recently read> }
 l. ...}
 > \foo code=\protected\long macro:#1#2#3#4->(#1)(#2)(#3)(#4).
@@ -629,7 +629,8 @@
 *************************************************
 > \foo=\protected macro:->\__xparse_start:nNNnnn {mG{test}sm}\foo  \foo code
 {\__xparse_grab_m_1:w \__xparse_grab_G:w \__xparse_grab_t:w
-*\__xparse_grab_m_1:w }{.{.test}..}{}.
+*\__xparse_grab_m_1:w }{\c__xparse_no_value_tl {\prg_do_nothing:
+test}\c__xparse_no_value_tl \c__xparse_no_value_tl }{}.
 <recently read> }
 l. ...}
 > \foo code=\protected\long macro:#1#2#3#4->(#1)(#2)(#3)(#4).
@@ -742,8 +743,8 @@
 . Redefining command \foo with sig. 'om' on line ....
 .................................................
 > \foo=macro:->\__xparse_start_expandable:nNNNNn {om}\foo  \foo  \foo code
-\foo defaults {\__xparse_expandable_grab_D:w \foo (arg 1)
-[]\__xparse_expandable_grab_m:w }.
+?{\__xparse_expandable_grab_D:w \foo (arg 1) []\__xparse_expandable_grab_m:w
+}.
 <recently read> }
 l. ...}
 > \foo code=\long macro:#1#2->(#1)(#2).
@@ -755,7 +756,7 @@
 . Redefining command \foo with sig. '+o+m' on line ....
 .................................................
 > \foo=macro:->\__xparse_start_expandable:nNNNNn {+o+m}\foo  \foo  \foo code
-\foo defaults {\__xparse_expandable_grab_D:w \foo (arg 1)
+?{\__xparse_expandable_grab_D:w \foo (arg 1)
 []\__xparse_expandable_grab_m_long:w }.
 <recently read> }
 l. ...}
@@ -781,9 +782,8 @@
 . Redefining command \foo with sig. 'osm' on line ....
 .................................................
 > \foo=macro:->\__xparse_start_expandable:nNNNNn {osm}\foo  \foo  \foo code
-\foo defaults {\__xparse_expandable_grab_D:w \foo (arg 1)
-[]\__xparse_expandable_grab_t:w \__xparse_grabber_*:w
-*\__xparse_expandable_grab_m:w }.
+?{\__xparse_expandable_grab_D:w \foo (arg 1) []\__xparse_expandable_grab_t:w
+\__xparse_grabber_*:w *\__xparse_expandable_grab_m:w }.
 <recently read> }
 l. ...}
 > \foo code=\long macro:#1#2#3->(#1)(#2)(#3).
@@ -856,7 +856,7 @@
 . Defining command \foo with sig. 'o+m' on line ....
 .................................................
 > \foo=macro:->\__xparse_start_expandable:nNNNNn {o+m}\foo  \foo   \foo code
-\foo defaults {\__xparse_expandable_grab_D:w \foo (arg 1)
+?{\__xparse_expandable_grab_D:w \foo (arg 1)
 []\__xparse_expandable_grab_m_long:w }.
 <recently read> }
 l. ...}
@@ -969,7 +969,7 @@
 .................................................
 > \environment foo=\protected macro:->\__xparse_start:nNNnnn {som}\environment
 foo  \environment foo code {\__xparse_grab_t:w *\__xparse_grab_D:w
-[]\__xparse_grab_m_1:w }{.{.-NoValue-}.}{}.
+[]\__xparse_grab_m_1:w }{}{}.
 <recently read> }
 l. ...}
 > \environment foo code=\protected\long macro:#1#2#3->\cs_set_nopar:Npx
@@ -984,7 +984,7 @@
 .................................................
 > \environment foo=\protected macro:->\__xparse_start:nNNnnn
 {so+m}\environment foo  \environment foo code {\__xparse_grab_t:w
-*\__xparse_grab_D:w []\__xparse_grab_m_long:w }{.{.-NoValue-}.}{}.
+*\__xparse_grab_D:w []\__xparse_grab_m_long:w }{}{}.
 <recently read> }
 l. ...}
 > \environment foo code=\protected\long macro:#1#2#3->\cs_set_nopar:Npx
@@ -999,7 +999,7 @@
 .................................................
 > \environment foo=\protected macro:->\__xparse_start:nNNnnn
 {u{stop}om}\environment foo  \environment foo code {\__xparse_grab_u:w
-{stop}\__xparse_grab_D:w []\__xparse_grab_m_1:w }{.{.-NoValue-}.}{}.
+{stop}\__xparse_grab_D:w []\__xparse_grab_m_1:w }{}{}.
 <recently read> }
 l. ...}
 > \environment foo code=\protected\long macro:#1#2#3->\cs_set_nopar:Npx
@@ -1014,7 +1014,7 @@
 .................................................
 > \environment foo=\protected macro:->\__xparse_start:nNNnnn {moo}\environment
 foo  \environment foo code {\__xparse_grab_m_1:w \__xparse_grab_D_trailing:w
-[]\__xparse_grab_D_trailing:w []}{.{.-NoValue-}{.-NoValue-}}{}.
+[]\__xparse_grab_D_trailing:w []}{}{}.
 <recently read> }
 l. ...}
 > \environment foo code=\protected\long macro:#1#2#3->\cs_set_nopar:Npx
@@ -1229,7 +1229,7 @@
 l. ...  }
 The control sequence marked <to be read again> should
 not appear between \csname and \endcsname.
-\test- \xparse function is not expandable \__xparse_start_aux:nNNnnn {D...}\foo code {\__xparse_grab_D_trailing:w ..}{{..}}{}....\cs_end: 
+\test- \xparse function is not expandable \__xparse_start_aux:nNNnnn {D...}\foo code {\__xparse_grab_D_trailing:w ..}{{.}}{}....\cs_end: 
 ============================================================
 ============================================================
 TEST 20: Checking for existing expandable definitions

Modified: trunk/l3packages/xparse/testfiles/xparse004.luatex.tlg
===================================================================
--- trunk/l3packages/xparse/testfiles/xparse004.luatex.tlg	2017-03-12 05:08:10 UTC (rev 6989)
+++ trunk/l3packages/xparse/testfiles/xparse004.luatex.tlg	2017-03-13 01:19:18 UTC (rev 6990)
@@ -1900,3 +1900,18 @@
 . Defining command \foo with sig. 'm' on line ....
 .................................................
 ============================================================
+============================================================
+TEST 25: NoValue passed to another command
+============================================================
+.................................................
+. LaTeX info: "xparse/redefine-command"
+. 
+. Redefining command \foo with sig. 'oom' on line ....
+.................................................
+.................................................
+. LaTeX info: "xparse/redefine-command"
+. 
+. Redefining command \baz with sig. 'mO{B}m' on line ....
+.................................................
+|-NoValue-|B|C|
+============================================================

Modified: trunk/l3packages/xparse/testfiles/xparse004.lvt
===================================================================
--- trunk/l3packages/xparse/testfiles/xparse004.lvt	2017-03-12 05:08:10 UTC (rev 6989)
+++ trunk/l3packages/xparse/testfiles/xparse004.lvt	2017-03-13 01:19:18 UTC (rev 6990)
@@ -431,4 +431,11 @@
     \DeclareDocumentCommand { \foo } { m } {|#1|}
   }
 
+\TEST { NoValue~passed~to~another~command }
+  {
+    \DeclareDocumentCommand { \foo } { o o m } { \baz {#1} [#2] {#3} }
+    \DeclareDocumentCommand { \baz } { m O{B} m } { \TYPE { \tl_to_str:n { | #1 | #2 | #3 | } } }
+    \foo{C}
+  }
+
 \END

Modified: trunk/l3packages/xparse/testfiles/xparse004.tlg
===================================================================
--- trunk/l3packages/xparse/testfiles/xparse004.tlg	2017-03-12 05:08:10 UTC (rev 6989)
+++ trunk/l3packages/xparse/testfiles/xparse004.tlg	2017-03-13 01:19:18 UTC (rev 6990)
@@ -1900,3 +1900,18 @@
 . Defining command \foo with sig. 'm' on line ....
 .................................................
 ============================================================
+============================================================
+TEST 25: NoValue passed to another command
+============================================================
+.................................................
+. LaTeX info: "xparse/redefine-command"
+. 
+. Redefining command \foo with sig. 'oom' on line ....
+.................................................
+.................................................
+. LaTeX info: "xparse/redefine-command"
+. 
+. Redefining command \baz with sig. 'mO{B}m' on line ....
+.................................................
+|-NoValue-|B|C|
+============================================================

Modified: trunk/l3packages/xparse/xparse.dtx
===================================================================
--- trunk/l3packages/xparse/xparse.dtx	2017-03-12 05:08:10 UTC (rev 6989)
+++ trunk/l3packages/xparse/xparse.dtx	2017-03-13 01:19:18 UTC (rev 6990)
@@ -844,9 +844,8 @@
 %
 % \begin{variable}{\l_@@_defaults_bool, \l_@@_defaults_tl}
 %   The boolean indicates whether there are any argument with default
-%   value; the token list holds the code to determine these default
-%   values in terms of other arguments, and dummy code for arguments
-%   that do not need a default.
+%   value other than |-NoValue-|; the token list holds the code to
+%   determine these default values in terms of other arguments.
 %    \begin{macrocode}
 \bool_new:N \l_@@_defaults_bool
 \tl_new:N \l_@@_defaults_tl
@@ -1380,7 +1379,7 @@
         \@@_if_no_value:nTF {#2}
           {
             \tl_put_right:Nx \l_@@_tmpa_tl
-              { { \exp_not:N \exp_not:n { \exp_not:o { \use_none:n #3 } } } }
+              { { \exp_not:N \exp_not:n { \exp_not:o {#3} } } }
           }
           {
             \tl_put_right:Nn \l_@@_tmpa_tl
@@ -1500,7 +1499,7 @@
       }
       {
         \@@_if_no_value:nTF {#2}
-          { \exp_args:No \@@_end_expandable_defaults:nw { \use_none:n #1 } }
+          { \exp_args:No \@@_end_expandable_defaults:nw {#1} }
           { \@@_end_expandable_defaults:nw {#2} }
       }
   }
@@ -2262,40 +2261,40 @@
 % \begin{macro}{\@@_add_default:n, \@@_add_default:, \@@_add_default_E:nn}
 % \begin{macro}[aux]{\@@_add_default_E_aux:n}
 %   Store the default value of an argument, or rather code that gives
-%   that default value (it may involve other arguments).  Defaults are
-%   always stored with a leading |.| except for \texttt{E}-type
-%   arguments, to distinguish them.  For \texttt{E}-type arguments, pad
-%   the defaults |#2| with some |{-NoValue-}| until there are the same
-%   numbers as embellishments~|#1|.  Then for technical reasons make
-%   sure the first default is wrapped in braces.  These functions are
-%   also used when defining expandable commands.
+%   that default value (it may involve other arguments).  This is
+%   \cs{c_@@_no_value_tl} for arguments with no actual default or with
+%   default |-NoValue-|; \cs{prg_do_nothing:} followed by a default
+%   value for most others, and a token list of braced arguments for
+%   \texttt{E}-type arguments.  For \texttt{E}-type arguments, pad the
+%   defaults |#2| with some |{-NoValue-}| until there are as many as
+%   embellishments~|#1|.  These functions are also used when defining
+%   expandable commands.
 %    \begin{macrocode}
 \cs_new_protected:Npn \@@_add_default:n #1
   {
-    \bool_set_true:N \l_@@_defaults_bool
-    \tl_put_right:Nn \l_@@_defaults_tl { { . #1} }
+    \@@_if_no_value:nTF {#1}
+      { \@@_add_default: }
+      {
+        \bool_set_true:N \l_@@_defaults_bool
+        \tl_put_right:Nn \l_@@_defaults_tl { { \prg_do_nothing: #1 } }
+      }
   }
 \cs_new_protected:Npn \@@_add_default:
-  { \tl_put_right:Nn \l_@@_defaults_tl { . } }
+  { \tl_put_right:Nn \l_@@_defaults_tl { \c_@@_no_value_tl } }
 \cs_new_protected:Npn \@@_add_default_E:nn #1#2
   {
     \bool_set_true:N \l_@@_defaults_bool
-    \tl_set:Nx \l_@@_tmpa_tl
-      {
-        \exp_not:n {#2}
-        \prg_replicate:nn
-          { \tl_count:n {#1} - \tl_count:n {#2} }
-          { { \c_@@_no_value_tl } }
-      }
     \tl_put_right:Nx \l_@@_defaults_tl
       {
         {
-          \exp_not:f
-            { \exp_after:wN \@@_add_default_E_aux:n \l_@@_tmpa_tl }
+          \tl_map_function:nN {#2} \@@_add_default_E_aux:n
+          \prg_replicate:nn
+            { \tl_count:n {#1} - \tl_count:n {#2} }
+            { { \c_@@_no_value_tl } }
         }
       }
   }
-\cs_new:Npn \@@_add_default_E_aux:n #1 { {#1} }
+\cs_new:Npn \@@_add_default_E_aux:n #1 { \exp_not:n { {#1} } }
 %    \end{macrocode}
 % \end{macro}
 % \end{macro}



More information about the latex3-commits mailing list