[latex3-commits] [git/LaTeX3-latex3-latex3] master: In l3regex, set \l_@@_max_pos_int as late as possible (dc176591b)

Joseph Wright joseph.wright at morningstar2.co.uk
Thu Dec 3 17:27:34 CET 2020


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

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

commit dc176591b6c78d656a4709cd19b988be860aca21
Author: Bruno Le Floch <blflatex at gmail.com>
Date:   Sun Jul 19 18:11:46 2020 +0200

    In l3regex, set \l_@@_max_pos_int as late as possible


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

dc176591b6c78d656a4709cd19b988be860aca21
 l3kernel/l3regex.dtx | 26 ++++++++++++++------------
 1 file changed, 14 insertions(+), 12 deletions(-)

diff --git a/l3kernel/l3regex.dtx b/l3kernel/l3regex.dtx
index 70dbe752c..2b4a26bc0 100644
--- a/l3kernel/l3regex.dtx
+++ b/l3kernel/l3regex.dtx
@@ -852,6 +852,7 @@
 %     positions $\texttt{min_pos} - 1$ and $\texttt{max_pos}$
 %     correspond to imaginary begin and end markers (with
 %     non-existent category code and character code).
+%     $\texttt{max_pos}$ is only set quite late in the processing.
 %   \item \emph{Query}: the token list to which we apply the regular
 %     expression.
 %   \item \emph{State}: each state of the \textsc{nfa} is labelled by an
@@ -4643,7 +4644,6 @@
 \cs_new_protected:Npn \@@_match:n #1
   {
     \int_set:Nn \l_@@_min_pos_int { 2 }
-    \int_set:Nn \l_@@_max_pos_int { 2 + \tl_count_tokens:n {#1} }
     \@@_match_init:
     \@@_match_once_init:
     \tl_analysis_map_inline:nn {#1}
@@ -4653,8 +4653,7 @@
   }
 \cs_new_protected:Npn \@@_match_cs:n #1
   {
-    \int_set:Nn \l_@@_min_pos_int { 2 + \l_@@_max_pos_int }
-    \int_set:Nn \l_@@_max_pos_int { \l_@@_min_pos_int + \str_count:n {#1} }
+    \int_set:Nn \l_@@_min_pos_int { 2 }
     \int_set_eq:NN \l_@@_min_thread_int \l_@@_max_thread_int
     \@@_match_init:
     \@@_match_once_init:
@@ -4809,7 +4808,7 @@
     \prg_break_point:
     \bool_set_false:N \l_@@_fresh_thread_bool
     \if_int_compare:w \l_@@_max_thread_int > \l_@@_min_thread_int
-      \if_int_compare:w \l_@@_curr_pos_int < \l_@@_max_pos_int
+      \if_int_compare:w -2 < \l_@@_curr_char_int
         \exp_after:wN \exp_after:wN \exp_after:wN \use_none:n
       \fi:
     \fi:
@@ -5950,18 +5949,19 @@
 \cs_new_protected:Npn \@@_query_set:n #1
   {
     \int_zero:N \l_@@_balance_int
-    \int_set:Nn \l_@@_curr_pos_int { 1 }
+    \int_zero:N \l_@@_curr_pos_int
     \@@_query_set_aux:nN { } F
     \tl_analysis_map_inline:nn {#1}
       { \@@_query_set_aux:nN {##1} ##3 }
     \@@_query_set_aux:nN { } F
+    \int_set_eq:NN \l_@@_max_pos_int \l_@@_curr_pos_int
   }
 \cs_new_protected:Npn \@@_query_set_aux:nN #1#2
   {
+    \int_incr:N \l_@@_curr_pos_int
     \@@_toks_set:Nn \l_@@_curr_pos_int {#1}
     \__kernel_intarray_gset:Nnn \g_@@_balance_intarray
       { \l_@@_curr_pos_int } { \l_@@_balance_int }
-    \int_incr:N \l_@@_curr_pos_int
     \if_case:w "#2 \exp_stop_f:
     \or: \int_incr:N \l_@@_balance_int
     \or: \int_decr:N \l_@@_balance_int
@@ -6025,7 +6025,8 @@
       #1
       \@@_match:n {#2}
       \@@_extract:
-    \@@_group_end_extract_seq:Nn #3 {#2}
+      \@@_query_set:n {#2}
+    \@@_group_end_extract_seq:N #3
   }
 \cs_new_protected:Npn \@@_extract_all:nnN #1#2#3
   {
@@ -6033,7 +6034,8 @@
       \@@_multi_match:n { \@@_extract: }
       #1
       \@@_match:n {#2}
-    \@@_group_end_extract_seq:Nn #3 {#2}
+      \@@_query_set:n {#2}
+    \@@_group_end_extract_seq:N #3
   }
 %    \end{macrocode}
 % \end{macro}
@@ -6072,6 +6074,7 @@
         }
       #1
       \@@_match:n {#2}
+      \@@_query_set:n {#2}
       \__kernel_intarray_gset:Nnn \g_@@_submatch_prev_intarray
         { \l_@@_submatch_int } { 0 }
       \__kernel_intarray_gset:Nnn \g_@@_submatch_end_intarray
@@ -6086,12 +6089,12 @@
           \int_decr:N \l_@@_submatch_int
         \fi:
       \fi:
-    \@@_group_end_extract_seq:Nn #3 {#2}
+    \@@_group_end_extract_seq:N #3
   }
 %    \end{macrocode}
 % \end{macro}
 %
-% \begin{macro}{\@@_group_end_extract_seq:Nn}
+% \begin{macro}{\@@_group_end_extract_seq:N}
 %   The end-points of submatches are stored as entries of two arrays
 %   from \cs{l_@@_min_submatch_int} to
 %   \cs{l_@@_submatch_int} (exclusive). Extract the relevant ranges
@@ -6100,9 +6103,8 @@
 %   whenever we see too many begin-group or end-group tokens in a
 %   submatch.
 %    \begin{macrocode}
-\cs_new_protected:Npn \@@_group_end_extract_seq:Nn #1#2
+\cs_new_protected:Npn \@@_group_end_extract_seq:N #1
   {
-      \@@_query_set:n {#2}
       \flag_clear:n { @@_begin }
       \flag_clear:n { @@_end }
       \seq_set_from_function:NnN \l_@@_internal_seq





More information about the latex3-commits mailing list.