diff options
| author | mark <mark@138bc75d-0d04-0410-961f-82ee72b054a4> | 2006-01-17 18:09:40 +0000 |
|---|---|---|
| committer | mark <mark@138bc75d-0d04-0410-961f-82ee72b054a4> | 2006-01-17 18:09:40 +0000 |
| commit | 2d8cf20d0d5ca6b1fbdefc22229d4b7cf1497ede (patch) | |
| tree | c976ca91e3ef0bda3b34b37c0195145638d8d08e /libjava/classpath/gnu/regexp/RETokenRepeated.java | |
| parent | a3ef37ddfeddcc5b0f1c5068d8fdeb25a302d5cd (diff) | |
| download | ppe42-gcc-2d8cf20d0d5ca6b1fbdefc22229d4b7cf1497ede.tar.gz ppe42-gcc-2d8cf20d0d5ca6b1fbdefc22229d4b7cf1497ede.zip | |
Imported GNU Classpath 0.20
* Makefile.am (AM_CPPFLAGS): Add classpath/include.
* java/nio/charset/spi/CharsetProvider.java: New override file.
* java/security/Security.java: Likewise.
* sources.am: Regenerated.
* Makefile.in: Likewise.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@109831 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libjava/classpath/gnu/regexp/RETokenRepeated.java')
| -rw-r--r-- | libjava/classpath/gnu/regexp/RETokenRepeated.java | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/libjava/classpath/gnu/regexp/RETokenRepeated.java b/libjava/classpath/gnu/regexp/RETokenRepeated.java index 3165a6f1654..6291a3c3960 100644 --- a/libjava/classpath/gnu/regexp/RETokenRepeated.java +++ b/libjava/classpath/gnu/regexp/RETokenRepeated.java @@ -108,6 +108,7 @@ final class RETokenRepeated extends REToken { REMatch doables; REMatch doablesLast; REMatch recurrent; + int lastIndex = mymatch.index; do { // Check for stingy match for each possibility. @@ -151,6 +152,15 @@ final class RETokenRepeated extends REToken { ++numRepeats; positions.addElement(newMatch); + + // doables.index == lastIndex means an empty string + // was the longest that matched this token. + // We break here, otherwise we will fall into an endless loop. + if (doables.index == lastIndex) { + if (numRepeats < min) numRepeats = min; + break; + } + lastIndex = doables.index; } while (numRepeats < max); // If there aren't enough repeats, then fail @@ -165,7 +175,16 @@ final class RETokenRepeated extends REToken { REMatch allResultsLast = null; REMatch results = null; - while (--posIndex >= min) { + int indexCount = posIndex - min; + if (indexCount <= 0) { + // This case occurs when we exited the previous do loop before + // numRepeats >= min because an empty string matched the token. + // In this case, an empty string can match as many times as + // desired. + indexCount = 1; + } + while (indexCount-- > 0) { + --posIndex; newMatch = (REMatch) positions.elementAt(posIndex); results = matchRest(input, newMatch); if (results != null) { |

