code: public TypeBindings withUnboundVariable(String name)
      {
          int len = (_unboundVariables == null) ? 0 : _unboundVariables.length;
          String[] names =  (len == 0)
                  ? new String[1] : Arrays.copyOf(_unboundVariables, len+1);
          names[len] = name;
          return new TypeBindings(_names, _types, names);
      }
docs: Method for creating an instance that has same bindings as this object,
  plus an indicator for additional type variable that may be unbound within
  this context; this is needed to resolve recursive self-references.