docs: Item newConstItem(final Object cst) {
          if (cst instanceof Integer) {
              int val = ((Integer) cst).intValue();
              return newInteger(val);
          } else if (cst instanceof Byte) {
              int val = ((Byte) cst).intValue();
              return newInteger(val);
          } else if (cst instanceof Character) {
              int val = ((Character) cst).charValue();
              return newInteger(val);
          } else if (cst instanceof Short) {
              int val = ((Short) cst).intValue();
              return newInteger(val);
          } else if (cst instanceof Boolean) {
              int val = ((Boolean) cst).booleanValue() ? 1 : 0;
              return newInteger(val);
          } else if (cst instanceof Float) {
              float val = ((Float) cst).floatValue();
              return newFloat(val);
          } else if (cst instanceof Long) {
              long val = ((Long) cst).longValue();
              return newLong(val);
          } else if (cst instanceof Double) {
              double val = ((Double) cst).doubleValue();
              return newDouble(val);
          } else if (cst instanceof String) {
              return newStringishItem(STR, (String) cst);
          } else if (cst instanceof Type) {
              Type t = (Type) cst;
              int s = t.getSort();
              if (s == Type.OBJECT) {
                  return newStringishItem(CLASS, t.getInternalName());
              } else if (s == Type.METHOD) {
                  return newStringishItem(MTYPE, t.getDescriptor());
              } else { // s == primitive type or array
                  return newStringishItem(CLASS, t.getDescriptor());
              }
          } else if (cst instanceof Handle) {
              Handle h = (Handle) cst;
              return newHandleItem(h.tag, h.owner, h.name, h.desc, h.itf);
          } else {
              throw new IllegalArgumentException("value " + cst);
          }
      }