src/java.base/share/classes/java/util/regex/Matcher.java

Print this page

        

@@ -24,10 +24,11 @@
  */
 
 package java.util.regex;
 
 import java.util.ConcurrentModificationException;
+import java.util.HashSet;
 import java.util.Iterator;
 import java.util.NoSuchElementException;
 import java.util.Objects;
 import java.util.Spliterator;
 import java.util.Spliterators;

@@ -176,10 +177,18 @@
      * so they rely on this field to hold state during a match.
      */
     int[] locals;
 
     /**
+     * Storage used by top greedy Loop node to store a specific hash set to
+     * keep the beginning index of the failed repetition match. The nodes
+     * themselves are stateless, so they rely on this field to hold state
+     * during a match.
+     */
+    HashSetInt[] localsPos;
+
+    /**
      * Boolean indicating whether or not more input could change
      * the results of the last match.
      *
      * If hitEnd is true, and a match was found, then more input
      * might cause a different match to be found.

@@ -237,10 +246,11 @@
 
         // Allocate state storage
         int parentGroupCount = Math.max(parent.capturingGroupCount, 10);
         groups = new int[parentGroupCount * 2];
         locals = new int[parent.localCount];
+        localsPos = new HashSetInt[parent.localTGRGroupCount];
 
         // Put fields into initial states
         reset();
     }
 

@@ -373,10 +383,11 @@
         locals = new int[newPattern.localCount];
         for (int i = 0; i < groups.length; i++)
             groups[i] = -1;
         for (int i = 0; i < locals.length; i++)
             locals[i] = -1;
+        localsPos = new HashSetInt[parentPattern.localTGRGroupCount];
         modCount++;
         return this;
     }
 
     /**