if (verboseJNI) VM.sysWrite("JNI called: GetFieldID  \n");
if (traceJNI) VM.sysWrite("JNI called: GetFieldID  \n");
  private static int GetFieldID(int envJREF, int classJREF,                                 VM_Address fieldNameAddress, VM_Address descriptorAddress) {    if (verboseJNI) VM.sysWrite("JNI called: GetFieldID  \n");      VM_JNIEnvironment  env;    try {      env = VM_Thread.getCurrentThread().getJNIEnv();      Class cls = (Class) env.getJNIRef(classJREF);      String fieldString = VM_JNIEnvironment.createStringFromC(fieldNameAddress);      VM_Atom fieldName = VM_Atom.findOrCreateAsciiAtom(fieldString);      String descriptorString = VM_JNIEnvironment.createStringFromC(descriptorAddress);      VM_Atom descriptor = VM_Atom.findOrCreateAsciiAtom(descriptorString);      // VM.sysWrite("JNI.GetFieldID: reflection on instance field " + fieldString + ", type " + descriptorString + "\n");      // list of all instance fields including superclasses      VM_Field[] fields = java.lang.JikesRVMSupport.getTypeForClass(cls).getInstanceFields();      int i = 0;      int length = fields.length;      for (i = 0; i < length; ++i) {        if (fields[i].getName() == fieldName && fields[i].getDescriptor() == descriptor)          return i+1;                  // return index as 1-based to avoid the 0 value used for not found      }      // create exception and return 0 if not found      env.recordException(new NoSuchFieldError(fieldString + ", " + descriptorString + " of " + cls));      return 0;                          } catch (Throwable unexpected) {      env = VM_Thread.getCurrentThread().getJNIEnv();      env.recordException(unexpected);      return 0;                          }  }