[latex3-commits] [git/latex3] master: More defensive \scan_stop: (fixes #417) (bf69f14)
Bruno Le Floch
bruno at le-floch.fr
Wed Nov 29 07:36:53 CET 2017
Repository : https://github.com/latex3/latex3
On branch : master
Link : https://github.com/latex3/latex3/commit/bf69f14d6cebe4cca5d6a5e73dce64f434355294
>---------------------------------------------------------------
commit bf69f14d6cebe4cca5d6a5e73dce64f434355294
Author: Bruno Le Floch <bruno at le-floch.fr>
Date: Wed Nov 29 01:36:53 2017 -0500
More defensive \scan_stop: (fixes #417)
Some past commit only added \scan_stop: to \dim_set:Nn, but there is also
\dim_add:Nn, \dim_set_eq:NN, \dim_zero:N and friends.
>---------------------------------------------------------------
bf69f14d6cebe4cca5d6a5e73dce64f434355294
l3kernel/l3skip.dtx | 31 +++++++++++++++++++------------
1 file changed, 19 insertions(+), 12 deletions(-)
diff --git a/l3kernel/l3skip.dtx b/l3kernel/l3skip.dtx
index 991916e..348ac29 100644
--- a/l3kernel/l3skip.dtx
+++ b/l3kernel/l3skip.dtx
@@ -1075,12 +1075,15 @@
%
% \begin{macro}{\dim_zero:N, \dim_zero:c}
% \begin{macro}{\dim_gzero:N, \dim_gzero:c}
-% Reset the register to zero.
+% Reset the register to zero. Using \cs{c_zero_skip} deals with the
+% case where the variable passed is incorrectly a skip (for example a
+% \LaTeXe{} length).
% \begin{macrocode}
\__debug_patch:nnNNpn { \__debug_chk_var_local:N #1 } { }
-\cs_new_protected:Npn \dim_zero:N #1 { #1 \c_zero_dim }
+\cs_new_protected:Npn \dim_zero:N #1 { #1 \c_zero_skip }
\__debug_patch:nnNNpn { \__debug_chk_var_global:N #1 } { }
-\cs_new_protected:Npn \dim_gzero:N #1 { \tex_global:D #1 \c_zero_dim }
+\cs_new_protected:Npn \dim_gzero:N #1
+ { \tex_global:D #1 \c_zero_skip }
\cs_generate_variant:Nn \dim_zero:N { c }
\cs_generate_variant:Nn \dim_gzero:N { c }
% \end{macrocode}
@@ -1132,7 +1135,7 @@
% \begin{macro}{\dim_gset:Nn, \dim_gset:cn}
% Setting dimensions is easy enough but when debugging we want both to
% check that the variable is correctly local/global and to wrap the
-% expression in some code. The |\scan_stop:| deals with the case
+% expression in some code. The \cs{scan_stop:} deals with the case
% where the variable passed is a skip (for example a \LaTeXe{}
% length).
% \begin{macrocode}
@@ -1151,14 +1154,17 @@
% \begin{macro}{\dim_set_eq:NN, \dim_set_eq:cN, \dim_set_eq:Nc, \dim_set_eq:cc}
% \begin{macro}
% {\dim_gset_eq:NN, \dim_gset_eq:cN, \dim_gset_eq:Nc, \dim_gset_eq:cc}
-% All straightforward.
+% All straightforward, with a \cs{scan_stop:} to deal with the case
+% where |#1| is (incorrectly) a skip.
% \begin{macrocode}
\__debug_patch:nnNNpn { \__debug_chk_var_local:N #1 } { }
-\cs_new_protected:Npn \dim_set_eq:NN #1#2 { #1 = #2 }
+\cs_new_protected:Npn \dim_set_eq:NN #1#2
+ { #1 = #2 \scan_stop: }
\cs_generate_variant:Nn \dim_set_eq:NN { c }
\cs_generate_variant:Nn \dim_set_eq:NN { Nc , cc }
\__debug_patch:nnNNpn { \__debug_chk_var_global:N #1 } { }
-\cs_new_protected:Npn \dim_gset_eq:NN #1#2 { \tex_global:D #1 = #2 }
+\cs_new_protected:Npn \dim_gset_eq:NN #1#2
+ { \tex_global:D #1 = #2 \scan_stop: }
\cs_generate_variant:Nn \dim_gset_eq:NN { c }
\cs_generate_variant:Nn \dim_gset_eq:NN { Nc , cc }
% \end{macrocode}
@@ -1169,7 +1175,8 @@
% \begin{macro}{\dim_gadd:Nn, \dim_gadd:cn}
% \begin{macro}{\dim_sub:Nn, \dim_sub:cn}
% \begin{macro}{\dim_gsub:Nn, \dim_gsub:cn}
-% Using |by| here deals with the (incorrect) case |\dimen123|. Since
+% Using |by| here deals with the (incorrect) case |\dimen123|.
+% Using \cs{scan_stop:} deals with skip variables. Since
% debugging checks that the variable is correctly local/global, the
% global versions cannot be defined as \cs{tex_global:D} followed by
% the local versions. The debugging code is inserted by
@@ -1177,18 +1184,18 @@
% \begin{macrocode}
\@@_tmp:w \__debug_chk_var_local:N
\cs_new_protected:Npn \dim_add:Nn #1#2
- { \tex_advance:D #1 by \@@_eval:w #2 \@@_eval_end: }
+ { \tex_advance:D #1 by \@@_eval:w #2 \@@_eval_end: \scan_stop: }
\@@_tmp:w \__debug_chk_var_global:N
\cs_new_protected:Npn \dim_gadd:Nn #1#2
- { \tex_global:D \tex_advance:D #1 by \@@_eval:w #2 \@@_eval_end: }
+ { \tex_global:D \tex_advance:D #1 by \@@_eval:w #2 \@@_eval_end: \scan_stop: }
\cs_generate_variant:Nn \dim_add:Nn { c }
\cs_generate_variant:Nn \dim_gadd:Nn { c }
\@@_tmp:w \__debug_chk_var_local:N
\cs_new_protected:Npn \dim_sub:Nn #1#2
- { \tex_advance:D #1 by - \@@_eval:w #2 \@@_eval_end: }
+ { \tex_advance:D #1 by - \@@_eval:w #2 \@@_eval_end: \scan_stop: }
\@@_tmp:w \__debug_chk_var_global:N
\cs_new_protected:Npn \dim_gsub:Nn #1#2
- { \tex_global:D \tex_advance:D #1 by - \@@_eval:w #2 \@@_eval_end: }
+ { \tex_global:D \tex_advance:D #1 by - \@@_eval:w #2 \@@_eval_end: \scan_stop: }
\cs_generate_variant:Nn \dim_sub:Nn { c }
\cs_generate_variant:Nn \dim_gsub:Nn { c }
% \end{macrocode}
More information about the latex3-commits
mailing list