[latex3-commits] [git/LaTeX3-latex3-latex3] master: Correct an assignment for \seq_shuffle:N inside a seq mapping (fix #687) (42c70c63f)

Bruno Le Floch bruno at le-floch.fr
Sat Mar 14 10:53:08 CET 2020


Repository : https://github.com/latex3/latex3
On branch  : master
Link       : https://github.com/latex3/latex3/commit/42c70c63fd83324c5792dd14538a39dd7e388a55

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

commit 42c70c63fd83324c5792dd14538a39dd7e388a55
Author: Bruno Le Floch <bruno at le-floch.fr>
Date:   Sat Mar 14 10:51:35 2020 +0100

    Correct an assignment for \seq_shuffle:N inside a seq mapping (fix #687)
    
    We were making a local assignment to \@@_item:n within a group, but
    then in the same group also calling a seq function that used the
    general \@@_push_item_def: approach, which saves \@@_item:n globally,
    then later restores it globally at \@@_pop_item_def:.


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

42c70c63fd83324c5792dd14538a39dd7e388a55
 l3kernel/CHANGELOG.md           |  3 +++
 l3kernel/l3seq.dtx              |  4 +++-
 l3kernel/testfiles/m3seq009.lvt | 17 ++++++++++++++++-
 l3kernel/testfiles/m3seq009.tlg |  7 +++++++
 4 files changed, 29 insertions(+), 2 deletions(-)

diff --git a/l3kernel/CHANGELOG.md b/l3kernel/CHANGELOG.md
index 6076561c5..5e2a5f06b 100644
--- a/l3kernel/CHANGELOG.md
+++ b/l3kernel/CHANGELOG.md
@@ -7,6 +7,9 @@ this project uses date-based 'snapshot' version identifiers.
 
 ## [Unreleased]
 
+### Fixed
+- Nesting of `\seq_shuffle:N` in another sequence mapping (issue #687)
+
 ## [2020-03-06]
 
 ### Added
diff --git a/l3kernel/l3seq.dtx b/l3kernel/l3seq.dtx
index 44ce65943..dd37f2242 100644
--- a/l3kernel/l3seq.dtx
+++ b/l3kernel/l3seq.dtx
@@ -1525,9 +1525,11 @@
           }
           {
             \group_begin:
-              \cs_set_eq:NN \@@_item:n \@@_shuffle_item:n
               \int_zero:N \l_@@_internal_a_int
+              \@@_push_item_def:
+              \cs_gset_eq:NN \@@_item:n \@@_shuffle_item:n
               #2
+              \@@_pop_item_def:
               \seq_gset_from_inline_x:Nnn \g_@@_internal_seq
                 { \int_step_function:nN { \l_@@_internal_a_int } }
                 { \tex_the:D \tex_toks:D ##1 }
diff --git a/l3kernel/testfiles/m3seq009.lvt b/l3kernel/testfiles/m3seq009.lvt
index 59a288d3c..8dae69c90 100644
--- a/l3kernel/testfiles/m3seq009.lvt
+++ b/l3kernel/testfiles/m3seq009.lvt
@@ -1,5 +1,5 @@
 %
-% Copyright (C) 2018 The LaTeX3 Project
+% Copyright (C) 2018,2020 The LaTeX3 Project
 %
 
 \documentclass{minimal}
@@ -44,4 +44,19 @@
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
+\seq_set_from_clist:Nn \l_tmpa_seq { A, B, C, D }
+\seq_set_from_clist:Nn \l_tmpb_seq { a, b, c }
+\sys_gset_rand_seed:n { 1234 }
+
+\TEST { seq_shuffle~nesting }
+  {
+    \seq_map_inline:Nn \l_tmpb_seq
+      {
+        \seq_shuffle:N \l_tmpa_seq
+        \TYPE { #1 ; \seq_map_function:NN \l_tmpa_seq \prg_do_nothing: }
+      }
+  }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
 \END
diff --git a/l3kernel/testfiles/m3seq009.tlg b/l3kernel/testfiles/m3seq009.tlg
index fca806927..ec6661a9f 100644
--- a/l3kernel/testfiles/m3seq009.tlg
+++ b/l3kernel/testfiles/m3seq009.tlg
@@ -8,3 +8,10 @@ TEST 1: seq_shuffle
 ||
 4,5,3,9,6,7,2,1,10,8
 ============================================================
+============================================================
+TEST 2: seq_shuffle nesting
+============================================================
+a;{B}{A}{C}{D}
+b;{A}{B}{C}{D}
+c;{A}{C}{D}{B}
+============================================================





More information about the latex3-commits mailing list.