private void parseClass(byte[] bytes) {
		try {
			this.classbytes = bytes;
			this.ptr = 0;
			int magic = readInt(); // magic 0xCAFEBABE
			if (magic != 0xCAFEBABE) {
				throw new IllegalStateException("not bytecode, magic was 0x" + Integer.toString(magic, 16));
			}
			ptr += 4; // skip minor and major versions
			cpsize = readUnsignedShort();
			if (DEBUG) {
				System.out.println("Constant Pool Size =" + cpsize);
			}
			cpdata = new Object[cpsize];
			type = new int[cpsize];
			for (int cpentry = 1; cpentry < cpsize; cpentry++) {
				boolean wasDoubleSlotItem = processConstantPoolEntry(cpentry);
				if (wasDoubleSlotItem) {
					cpentry++;
				}
			}
			ptr += 2; // access flags
			int thisclassname = readUnsignedShort();
			int classindex = ((Integer) cpdata[thisclassname]);
			slashedclassname = accessUtf8(classindex);
		}
		catch (Exception e) {
			throw new IllegalStateException("Unexpected problem processing bytes for class", e);
		}
	}
private void parseClass ( byte [ ] bytes ) { try { this . classbytes = bytes ; this . ptr = 0 ; int magic = readInt ( ) ; if ( magic != 0xCAFEBABE ) { throw new IllegalStateException ( "not bytecode, magic was 0x" + Integer . toString ( magic , 16 ) ) ; } ptr += 4 ; cpsize = readUnsignedShort ( ) ; if ( DEBUG ) { System . out . println ( "Constant Pool Size =" + cpsize ) ; } cpdata = new Object [ cpsize ] ; type = new int [ cpsize ] ; for ( int cpentry = 1 ; cpentry < cpsize ; cpentry ++ ) { boolean wasDoubleSlotItem = processConstantPoolEntry ( cpentry ) ; if ( wasDoubleSlotItem ) { cpentry ++ ; } } ptr += 2 ; int thisclassname = readUnsignedShort ( ) ; int classindex = ( ( Integer ) cpdata [ thisclassname ] ) ; slashedclassname = accessUtf8 ( classindex ) ; } catch ( Exception e ) { throw new IllegalStateException ( "Unexpected problem processing bytes for class" , e ) ; } }
}