private void recordConcreteType (VM_Method m, VM_Field f, VM_Type t) {  if (!f.isPrivate()) return; OPT_FieldDatabase.FieldDatabaseEntry entry = db.findOrCreateEntry(f); OPT_FieldDatabase.FieldWriterInfo info = entry.findMethodInfo(m); info.setAnalyzed(); if (info.isBottom()) return; VM_Type oldType = info.concreteType; if (oldType == null) {  info.concreteType = t; } else if (oldType != t) {   info.setBottom(); } }
  private static void recordBottom (VM_Method m, VM_Field f) {    // for now, only track private fields    if (!f.isPrivate())      return;    if (isTrouble(f))      return;    OPT_FieldDatabase.FieldDatabaseEntry entry = db.findOrCreateEntry(f);    OPT_FieldDatabase.FieldWriterInfo info = entry.findMethodInfo(m);    if (VM.VerifyAssertions) {      if (info == null)        VM.sysWrite("ERROR recordBottom: method " + m + " field " + f);      VM.assert(info != null);    }    info.setBottom();    info.setAnalyzed();  }  /**   * Record that a method stores an object of a particular concrete type   * to a field.   */  private void recordConcreteType (VM_Method m, VM_Field f, VM_Type t) {    // for now, only track private fields    if (!f.isPrivate())      return;    OPT_FieldDatabase.FieldDatabaseEntry entry = db.findOrCreateEntry(f);    OPT_FieldDatabase.FieldWriterInfo info = entry.findMethodInfo(m);    info.setAnalyzed();    if (info.isBottom())      return;    VM_Type oldType = info.concreteType;    if (oldType == null) {      // set a new concrete type for this field.      info.concreteType = t;    }     else if (oldType != t) {      // we've previously determined a DIFFERENT! concrete type.      // meet the two types: ie., change it to bottom.      info.setBottom();    }  }