void indexPool(){
  poolIdx=new int[nextChar()];
  poolObj=new Object[poolIdx.length];
  int i=1;
  while (i < poolIdx.length) {
    poolIdx[i++]=bp;
    byte tag=buf[bp++];
switch (tag) {
case CONSTANT_Utf8:
case CONSTANT_Unicode:
{
        int len=nextChar();
        bp=bp + len;
        break;
      }
case CONSTANT_Class:
case CONSTANT_String:
case CONSTANT_MethodType:
    bp=bp + 2;
  break;
case CONSTANT_MethodHandle:
bp=bp + 3;
break;
case CONSTANT_Fieldref:
case CONSTANT_Methodref:
case CONSTANT_InterfaceMethodref:
case CONSTANT_NameandType:
case CONSTANT_Integer:
case CONSTANT_Float:
case CONSTANT_InvokeDynamic:
bp=bp + 4;
break;
case CONSTANT_Long:
case CONSTANT_Double:
bp=bp + 8;
i++;
break;
default :
throw badClassFile("bad.const.pool.tag.at",Byte.toString(tag),Integer.toString(bp - 1));
}
}
}

void indexPool ( ) { poolIdx = new int [ nextChar ( ) ] ; poolObj = new Object [ poolIdx . length ] ; int i = 1 ; while ( i < poolIdx . length ) { poolIdx [ i ++ ] = bp ; byte tag = buf [ bp ++ ] ; switch ( tag ) { case CONSTANT_Utf8 : case CONSTANT_Unicode : { int len = nextChar ( ) ; bp = bp + len ; break ; } case CONSTANT_Class : case CONSTANT_String : case CONSTANT_MethodType : bp = bp + 2 ; break ; case CONSTANT_MethodHandle : bp = bp + 3 ; break ; case CONSTANT_Fieldref : case CONSTANT_Methodref : case CONSTANT_InterfaceMethodref : case CONSTANT_NameandType : case CONSTANT_Integer : case CONSTANT_Float : case CONSTANT_InvokeDynamic : bp = bp + 4 ; break ; case CONSTANT_Long : case CONSTANT_Double : bp = bp + 8 ; i ++ ; break ; default : throw badClassFile ( "bad.const.pool.tag.at" , Byte . toString ( tag ) , Integer . toString ( bp - 1 ) ) ; } } }
index all constant pool entries , writing their start addresses into poolidx .
