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;
}
/**