[latex3-commits] [git/LaTeX3-latex3-latex3] cctab: Fix the code detecting bad nesting of cctab and groups (fb3601f84)

Bruno Le Floch bruno at le-floch.fr
Wed Jul 15 00:24:33 CEST 2020


Repository : https://github.com/latex3/latex3
On branch  : cctab
Link       : https://github.com/latex3/latex3/commit/fb3601f84f82d3f7b4a12c507ecabe7127789ac5

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

commit fb3601f84f82d3f7b4a12c507ecabe7127789ac5
Author: Bruno Le Floch <bruno at le-floch.fr>
Date:   Wed Jul 15 00:24:33 2020 +0200

    Fix the code detecting bad nesting of cctab and groups


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

fb3601f84f82d3f7b4a12c507ecabe7127789ac5
 l3kernel/l3cctab.dtx              | 23 ++++++++++-------------
 l3kernel/testfiles/m3cctab002.tlg |  7 +++++++
 2 files changed, 17 insertions(+), 13 deletions(-)

diff --git a/l3kernel/l3cctab.dtx b/l3kernel/l3cctab.dtx
index a50b17cdf..37f9bcad3 100644
--- a/l3kernel/l3cctab.dtx
+++ b/l3kernel/l3cctab.dtx
@@ -600,9 +600,10 @@
 %   the \cs{cctab_end:} is reached, we had a problem.
 %
 %   Unfortunately these tests only flag the wrong usage at the
-%   \cs{cctab_end:}, which might be farfrom the \cs{cctab_begin:N}.
+%   \cs{cctab_end:}, which might be far from the \cs{cctab_begin:N}.
 %   However it isn't possible to signal the wrong usage at the
-%   \cs{group_end:} without abusing \cs{tex_aftergroup:D}.
+%   \cs{group_end:} without using \cs{tex_aftergroup:D}, which is
+%   unsafe in certain types of groups.
 %
 %   The three cases checked here just raise an error, and no recovery is
 %   attempted:  usually interleaving groups and catcode tables will work
@@ -617,24 +618,20 @@
 \cs_new_protected:Npn \@@_chk_group_end:n #1
   {
     \seq_gpop:NN \g_@@_group_seq \l_@@_internal_b_tl
-    \int_compare:nNnTF
-        { \tex_currentgrouplevel:D } = { \l_@@_internal_b_tl }
+    \bool_lazy_and:nnF
       {
-        \cs_if_exist:cTF { @@_group_ #1 _chk: }
-          { \cs_set_eq:cN { @@_group_ #1 _chk: } \tex_undefined:D }
-          {
-            \__kernel_msg_error:nnx { kernel } { cctab-group-mismatch }
-              { 0 }
-          }
+        \int_compare_p:nNn
+          { \tex_currentgrouplevel:D } = { \l_@@_internal_b_tl }
       }
+      { \cs_if_exist_p:c { @@_group_ #1 _chk: } }
       {
         \__kernel_msg_error:nnx { kernel } { cctab-group-mismatch }
           {
-            \int_compare:nNnTF
-                { \tex_currentgrouplevel:D } < { \l_@@_internal_b_tl }
-                { -1 } { 1 }
+            \int_sign:n
+              { \tex_currentgrouplevel:D - \l_@@_internal_b_tl }
           }
       }
+    \cs_undefine:c { @@_group_ #1 _chk: }
   }
 %    \end{macrocode}
 % \end{macro}
diff --git a/l3kernel/testfiles/m3cctab002.tlg b/l3kernel/testfiles/m3cctab002.tlg
index 172492d9b..4af04cf76 100644
--- a/l3kernel/testfiles/m3cctab002.tlg
+++ b/l3kernel/testfiles/m3cctab002.tlg
@@ -158,6 +158,13 @@ TRUE
 TRUE
 TRUE
 TRUE
+! LaTeX3 Error: \cctab_end: occurred in a different group than the matching
+(LaTeX3)        \cctab_begin:N.
+For immediate help type H <return>.
+ ...                                              
+l. ...  }
+Catcode tables and groups must be properly nested, but you tried to interleave
+them. LaTeX will try to proceed, but results may be unexpected.
 TRUE
 TRUE
 ============================================================





More information about the latex3-commits mailing list.