OSDN Git Service

Imported GNU Classpath 0.90
[pf3gnuchains/gcc-fork.git] / libjava / classpath / gnu / regexp / RETokenLookBehind.java
index a6c1b34..8311d1a 100644 (file)
@@ -55,35 +55,37 @@ final class RETokenLookBehind extends REToken
     return 0;
   }
 
-  boolean match(CharIndexed input, REMatch mymatch)
+  REMatch matchThis(CharIndexed input, REMatch mymatch)
   {
     int max = re.getMaximumLength();
     CharIndexed behind = input.lookBehind(mymatch.index, max);
     REMatch trymatch = (REMatch)mymatch.clone();
     REMatch trymatch1 = (REMatch)mymatch.clone();
     REMatch newMatch = null;
-    int curIndex = trymatch.index + behind.length() - input.length();
+    int diff = behind.length() - input.length();
+    int curIndex = trymatch.index + diff;
     trymatch.index = 0;
+    trymatch.offset = 0;
     RETokenMatchHereOnly stopper = new RETokenMatchHereOnly(curIndex);
     REToken re1 = (REToken) re.clone();
     re1.chain(stopper);
     if (re1.match(behind, trymatch)) {
-      if (negative) return false;
-      if (next(input, trymatch1))
-        newMatch = trymatch1;
+      if (negative) return null;
+      for (int i = 0; i < trymatch.start.length; i++) {
+         if (trymatch.start[i] != -1 && trymatch.end[i] != -1) {
+             trymatch.start[i] -= diff;
+             if (trymatch.start[i] < 0) trymatch.start[i] -= 1;
+             trymatch.end[i] -= diff;
+             if (trymatch.end[i] < 0) trymatch.end[i] -= 1;
+         }
+      }
+      trymatch.index = mymatch.index;
+      trymatch.offset = mymatch.offset;
+      return trymatch;
     }
-
-    if (newMatch != null) {
-      if (negative) return false;
-      //else
-      mymatch.assignFrom(newMatch);
-      return true;
-    }
-    else { // no match
-      if (negative)
-        return next(input, mymatch);
-      //else
-      return false;
+    else {
+      if (negative) return mymatch;
+      return null;
     }
   }
 
@@ -105,8 +107,8 @@ final class RETokenLookBehind extends REToken
            this.index = index;
        }
 
-       boolean match(CharIndexed input, REMatch mymatch) {
-           return index == mymatch.index;
+       REMatch matchThis(CharIndexed input, REMatch mymatch) {
+           return (index == mymatch.index ? mymatch : null);
        }
 
         void dump(StringBuffer os) {}