code: private static int convert(ClassWriter cw, int nInput, Object[] input,
              int[] output) {
          int i = 0;
          for (int j = 0; j < nInput; ++j) {
              if (input[j] instanceof Integer) {
                  output[i++] = BASE | ((Integer) input[j]).intValue();
                  if (input[j] == Opcodes.LONG || input[j] == Opcodes.DOUBLE) {
                      output[i++] = TOP;
                  }
              } else if (input[j] instanceof String) {
                  output[i++] = type(cw, Type.getObjectType((String) input[j])
                          .getDescriptor());
              } else {
                  output[i++] = UNINITIALIZED
                          | cw.addUninitializedType("",
                                  ((Label) input[j]).position);
              }
          }
          return i;
      }
docs: Converts types from the MethodWriter.visitFrame() format to the Frame
  format.
  
  @param cw
  the ClassWriter to which this label belongs.
  @param nInput
  the number of types to convert.
  @param input
  the types to convert. Primitive types are represented by
  {@link Opcodes#TOP}, {@link Opcodes#INTEGER},
  {@link Opcodes#FLOAT}, {@link Opcodes#LONG},
  {@link Opcodes#DOUBLE},{@link Opcodes#NULL} or
  {@link Opcodes#UNINITIALIZED_THIS} (long and double are
  represented by a single element). Reference types are
  represented by String objects (representing internal names),
  and uninitialized types by Label objects (this label
  designates the NEW instruction that created this uninitialized
  value).
  @param output
  where to store the converted types.
  @return the number of output elements.