class InstructionAdapter extends MethodVisitor {

  @Override
  public void visitVarInsn(final int opcode, final int var) {
    switch (opcode) {
      case Opcodes.ILOAD:
        load(var, Type.INT_TYPE);
        break;
      case Opcodes.LLOAD:
        load(var, Type.LONG_TYPE);
        break;
      case Opcodes.FLOAD:
        load(var, Type.FLOAT_TYPE);
        break;
      case Opcodes.DLOAD:
        load(var, Type.DOUBLE_TYPE);
        break;
      case Opcodes.ALOAD:
        load(var, OBJECT_TYPE);
        break;
      case Opcodes.ISTORE:
        store(var, Type.INT_TYPE);
        break;
      case Opcodes.LSTORE:
        store(var, Type.LONG_TYPE);
        break;
      case Opcodes.FSTORE:
        store(var, Type.FLOAT_TYPE);
        break;
      case Opcodes.DSTORE:
        store(var, Type.DOUBLE_TYPE);
        break;
      case Opcodes.ASTORE:
        store(var, OBJECT_TYPE);
        break;
      case Opcodes.RET:
        ret(var);
        break;
      default:
        throw new IllegalArgumentException();
    }
  }

  public  InstructionAdapter(final MethodVisitor methodVisitor);
  protected  InstructionAdapter(final int api, final MethodVisitor methodVisitor);

}