iTable[getITableIndex(I, im)] = vm.compile();
vm.compile(); iTable[getITableIndex(I, im)] = vm.getCurrentInstructions();
  private static Object[] buildITable(VM_Class C, VM_Class I) {    VM_Method [] interfaceMethods = I.getDeclaredMethods();    Object[] tib = C.getTypeInformationBlock();    Object[] iTable = new Object[interfaceMethods.length+1];    iTable[0] = I;     for (int i=0; i<interfaceMethods.length; i++) {      VM_Method im = interfaceMethods[i];      if (im.isClassInitializer()) continue;       if (VM.VerifyAssertions) VM.assert(im.isPublic() && im.isAbstract());       VM_Method vm = C.findVirtualMethod(im.getName(), im.getDescriptor());      // NOTE: if there is some error condition, then we are playing a dirty trick and      //       pretending that a static method of VM_Runtime is a virtual method.      //       Since the methods in question take no arguments, we can get away with this.      if (vm == null || vm.isAbstract()) {	vm = VM_Entrypoints.raiseAbstractMethodError;      } else if (!vm.isPublic()) {	vm = VM_Entrypoints.raiseIllegalAccessError;      }      if (vm.isStatic()) {	iTable[getITableIndex(I, im)] = vm.compile();      } else {	iTable[getITableIndex(I, im)] = (INSTRUCTION []) tib[vm.getOffset()>>2];      }    }    return iTable;  }