code: public final ObjectType getPrototype() {
      // lazy initialization of the prototype field
      if (prototypeSlot == null) {
        String refName = getReferenceName();
        if (refName == null) {
          // Someone is trying to access the prototype of a structural function.
          // We don't want to give real properties to this prototype, because
          // then it would propagate to all structural functions.
          setPrototypeNoCheck(registry.getNativeObjectType(JSTypeNative.UNKNOWN_TYPE), null);
        } else {
          setPrototype(
              new PrototypeObjectType(
                  registry,
                  getReferenceName() + ".prototype",
                  registry.getNativeObjectType(OBJECT_TYPE),
                  isNativeObjectType(),
                  null),
              null);
        }
      }
      return (ObjectType) prototypeSlot.getType();
    }
docs: Gets the {@code prototype} property of this function type. This is equivalent to {@code
  (ObjectType) getPropertyType("prototype")}.