anchor.diff:      return JS('JSUnmodifiableArray', '#', _getRest(rti));
     }
   
  +  static Rti _getStarArgument(Rti rti) {
  +    assert(_getKind(rti) == kindStar);
  +    return _castToRti(_getPrimary(rti));
  +  }
  +
  +  static Rti _getQuestionArgument(Rti rti) {
  +    assert(_getKind(rti) == kindQuestion);
  +    return _castToRti(_getPrimary(rti));
  +  }
  +
     static Rti _getFutureOrArgument(Rti rti) {
       assert(_getKind(rti) == kindFutureOr);
       return _castToRti(_getPrimary(rti));
  
positive.code:   if (kind == Rti.kindVoid) return 'void';
    if (kind == Rti.kindNever) return 'Never';
    if (kind == Rti.kindAny) return 'any';
  
    if (kind == Rti.kindInterface) {
      String name = Rti._getInterfaceName(rti);
  
negative.code:     sep = '';
      for (int i = 0; i < optionalNamedLength; i += 2) {
        argumentsText += sep +
            _rtiToString(_castToRti(_Utils.arrayAt(optionalNamed, i + 1)),
                genericContext) +
            ' ' +
            _Utils.asString(_Utils.arrayAt(optionalNamed, i));
        sep = ', ';
      }
      argumentsText += '}';
  