code: public int put(Object value) {
          value = makePoolValue(value);
          Assert.check(!(value instanceof Type.TypeVar));
          Assert.check(!(value instanceof Types.UniqueType &&
                         ((UniqueType) value).type instanceof Type.TypeVar));
          Integer index = indices.get(value);
          if (index == null) {
              index = pp;
              indices.put(value, index);
              pool = ArrayUtils.ensureCapacity(pool, pp);
              pool[pp++] = value;
              if (value instanceof Long || value instanceof Double) {
                  pool = ArrayUtils.ensureCapacity(pool, pp);
                  pool[pp++] = null;
              }
          }
          return index.intValue();
      }
docs: Place an object in the pool, unless it is already there.
  If object is a symbol also enter its owner unless the owner is a
  package.  Return the object's index in the pool.