Updated Buffer and Matcher Classes (#171)
[jpf-core.git] / src / peers / gov / nasa / jpf / vm / JPF_java_util_regex_Matcher.java
index b514846765810c39fbb6b6571019010096e4ac74..968f07a07caf77894041df2e7134f3b602365422 100644 (file)
@@ -39,6 +39,16 @@ public class JPF_java_util_regex_Matcher extends NativePeer {
     matchers = new HashMap<Integer,Matcher>();
   }
 
+  Pattern getPatternFromMatcher(MJIEnv env, int objref) {
+    int patRef = env.getReferenceField(objref, "pattern");
+
+    int regexRef = env.getReferenceField(patRef, "regex");
+    String regex = env.getStringObject(regexRef);
+    int flags = env.getIntField(patRef, "flags");
+
+    return Pattern.compile(regex, flags);
+  }
+
   void putInstance (MJIEnv env, int objref, Matcher matcher) {
     int id = env.getIntField(objref,  "id");
     matchers.put(id, matcher);
@@ -52,13 +62,7 @@ public class JPF_java_util_regex_Matcher extends NativePeer {
   
   @MJI
   public void register____V (MJIEnv env, int objref) {
-    int patRef = env.getReferenceField(objref, "pattern");
-    
-    int regexRef = env.getReferenceField(patRef, "regex");
-    String regex = env.getStringObject(regexRef);
-    int flags = env.getIntField(patRef, "flags");
-    
-    Pattern pat = Pattern.compile(regex, flags);
+    Pattern pat = getPatternFromMatcher(env, objref);
 
     int inputRef = env.getReferenceField(objref, "input");
     String input = env.getStringObject(inputRef);
@@ -73,6 +77,12 @@ public class JPF_java_util_regex_Matcher extends NativePeer {
     return matcher.matches();
   }
   
+  @MJI
+  public boolean find__I__Z (MJIEnv env, int objref, int i) {
+       Matcher matcher = getInstance( env, objref);
+    return matcher.find(i);
+  }
+
   @MJI
   public boolean find____Z (MJIEnv env, int objref) {
        Matcher matcher = getInstance( env, objref);
@@ -202,6 +212,19 @@ public class JPF_java_util_regex_Matcher extends NativePeer {
     return objref;
   }
 
+  @MJI
+  public int updatePattern____Ljava_util_regex_Matcher_2(MJIEnv env, int objref) {
+    //We get the newly updated pattern
+    Pattern pat = getPatternFromMatcher(env, objref);
+
+    //We update the matcher with the new pattern
+    Matcher matcher = getInstance(env, objref);
+    matcher = matcher.usePattern(pat);
+    putInstance(env, objref, matcher);
+
+    return objref;
+  }
+
   @MJI
   public int toString____Ljava_lang_String_2 (MJIEnv env, int objref) {
     Matcher matcher = getInstance(env, objref);