anchor.diff:    static _FunctionParameters _getFunctionParameters(Rti rti) {
       assert(_getKind(rti) == kindFunction);
       return JS('_FunctionParameters', '#', _getRest(rti));
  +  }
  +
  +  static Rti _getGenericFunctionBase(Rti rti) {
  +    assert(_getKind(rti) == kindGenericFunction);
  +    return _castToRti(_getPrimary(rti));
  +  }
  +
  +  static JSArray _getGenericFunctionBounds(Rti rti) {
  +    assert(_getKind(rti) == kindGenericFunction);
  +    return JS('JSUnmodifiableArray', '#', _getRest(rti));
  +  }
  +
  +  static int _getGenericFunctionParameterIndex(Rti rti) {
  +    assert(_getKind(rti) == kindGenericFunctionParameter);
  +    return _Utils.asInt(_getPrimary(rti));
     }
   
     /// On [Rti]s that are type environments*, derived types are cached on the
  
positive.code:   /// - Class part of a type environment inside a generic class, or `null` for
    ///   type tuple.
    /// - Return type of a function type.
    dynamic _primary;
  
    static Object _getPrimary(Rti rti) => rti._primary;
  
negative.code:   /// - The type arguments from enclosing functions and closures for a
    ///   kindBinding.
    /// - The [_FunctionParameters] of a function type.
    /// - The type parameter bounds of a generic function.
    dynamic _rest;
  
    static Object _getRest(Rti rti) => rti._rest;
  