@@ -193,6 +193,16 @@ class Rti {
193193 return JS ('JSUnmodifiableArray' , '#' , _getRest (rti));
194194 }
195195
196+ static Rti _getStarArgument (Rti rti) {
197+ assert (_getKind (rti) == kindStar);
198+ return _castToRti (_getPrimary (rti));
199+ }
200+
201+ static Rti _getQuestionArgument (Rti rti) {
202+ assert (_getKind (rti) == kindQuestion);
203+ return _castToRti (_getPrimary (rti));
204+ }
205+
196206 static Rti _getFutureOrArgument (Rti rti) {
197207 assert (_getKind (rti) == kindFutureOr);
198208 return _castToRti (_getPrimary (rti));
@@ -741,10 +751,10 @@ String _functionRtiToString(Rti functionType, List<String> genericContext,
741751 sep = '' ;
742752 for (int i = 0 ; i < optionalNamedLength; i += 2 ) {
743753 argumentsText += sep +
744- _Utils . asString ( _Utils .arrayAt (optionalNamed, i)) +
745- ': ' +
746- _rtiToString (
747- _castToRti (_Utils .arrayAt (optionalNamed, i + 1 )), genericContext );
754+ _rtiToString ( _castToRti ( _Utils .arrayAt (optionalNamed, i + 1 )),
755+ genericContext) +
756+ ' ' +
757+ _Utils . asString (_Utils .arrayAt (optionalNamed, i) );
748758 sep = ', ' ;
749759 }
750760 argumentsText += '}' ;
@@ -770,6 +780,21 @@ String _rtiToString(Rti rti, List<String> genericContext) {
770780 if (kind == Rti .kindNever) return 'Never' ;
771781 if (kind == Rti .kindAny) return 'any' ;
772782
783+ if (kind == Rti .kindStar) {
784+ Rti starArgument = Rti ._getStarArgument (rti);
785+ return '${_rtiToString (starArgument , genericContext )}*' ;
786+ }
787+
788+ if (kind == Rti .kindQuestion) {
789+ Rti questionArgument = Rti ._getQuestionArgument (rti);
790+ return '${_rtiToString (questionArgument , genericContext )}?' ;
791+ }
792+
793+ if (kind == Rti .kindFutureOr) {
794+ Rti futureOrArgument = Rti ._getFutureOrArgument (rti);
795+ return 'FutureOr<${_rtiToString (futureOrArgument , genericContext )}>' ;
796+ }
797+
773798 if (kind == Rti .kindInterface) {
774799 String name = Rti ._getInterfaceName (rti);
775800 name = _unminifyOrTag (name);
@@ -814,61 +839,75 @@ String _rtiArrayToDebugString(Object array) {
814839 return s + ']' ;
815840}
816841
817- String _rtiToDebugString (Rti rti) {
818- String functionParametersToString (_FunctionParameters parameters) {
819- // TODO(fishythefish): Support required named parameters.
820- String s = '(' , sep = '' ;
821- var requiredPositional =
822- _FunctionParameters ._getRequiredPositional (parameters);
823- int requiredPositionalLength = _Utils .arrayLength (requiredPositional);
824- var optionalPositional =
825- _FunctionParameters ._getOptionalPositional (parameters);
826- int optionalPositionalLength = _Utils .arrayLength (optionalPositional);
827- var optionalNamed = _FunctionParameters ._getOptionalNamed (parameters);
828- int optionalNamedLength = _Utils .arrayLength (optionalNamed);
829- assert (optionalPositionalLength == 0 || optionalNamedLength == 0 );
842+ String functionParametersToString (_FunctionParameters parameters) {
843+ // TODO(fishythefish): Support required named parameters.
844+ String s = '(' , sep = '' ;
845+ var requiredPositional =
846+ _FunctionParameters ._getRequiredPositional (parameters);
847+ int requiredPositionalLength = _Utils .arrayLength (requiredPositional);
848+ var optionalPositional =
849+ _FunctionParameters ._getOptionalPositional (parameters);
850+ int optionalPositionalLength = _Utils .arrayLength (optionalPositional);
851+ var optionalNamed = _FunctionParameters ._getOptionalNamed (parameters);
852+ int optionalNamedLength = _Utils .arrayLength (optionalNamed);
853+ assert (optionalPositionalLength == 0 || optionalNamedLength == 0 );
854+
855+ for (int i = 0 ; i < requiredPositionalLength; i++ ) {
856+ s += sep +
857+ _rtiToDebugString (_castToRti (_Utils .arrayAt (requiredPositional, i)));
858+ sep = ', ' ;
859+ }
830860
831- for (int i = 0 ; i < requiredPositionalLength; i++ ) {
861+ if (optionalPositionalLength > 0 ) {
862+ s += sep + '[' ;
863+ sep = '' ;
864+ for (int i = 0 ; i < optionalPositionalLength; i++ ) {
832865 s += sep +
833- _rtiToDebugString (_castToRti (_Utils .arrayAt (requiredPositional , i)));
866+ _rtiToDebugString (_castToRti (_Utils .arrayAt (optionalPositional , i)));
834867 sep = ', ' ;
835868 }
869+ s += ']' ;
870+ }
836871
837- if (optionalPositionalLength > 0 ) {
838- s += sep + '[' ;
839- sep = '' ;
840- for (int i = 0 ; i < optionalPositionalLength; i++ ) {
841- s += sep +
842- _rtiToDebugString (
843- _castToRti (_Utils .arrayAt (optionalPositional, i)));
844- sep = ', ' ;
845- }
846- s += ']' ;
847- }
848-
849- if (optionalNamedLength > 0 ) {
850- s += sep + '{' ;
851- sep = '' ;
852- for (int i = 0 ; i < optionalNamedLength; i += 2 ) {
853- s += sep +
854- _Utils .asString (_Utils .arrayAt (optionalNamed, i)) +
855- ': ' +
856- _rtiToDebugString (_castToRti (_Utils .arrayAt (optionalNamed, i + 1 )));
857- sep = ', ' ;
858- }
859- s += '}' ;
872+ if (optionalNamedLength > 0 ) {
873+ s += sep + '{' ;
874+ sep = '' ;
875+ for (int i = 0 ; i < optionalNamedLength; i += 2 ) {
876+ s += sep +
877+ _rtiToDebugString (_castToRti (_Utils .arrayAt (optionalNamed, i + 1 ))) +
878+ ' ' +
879+ _Utils .asString (_Utils .arrayAt (optionalNamed, i));
880+ sep = ', ' ;
860881 }
861-
862- return s + ')' ;
882+ s += '}' ;
863883 }
864884
885+ return s + ')' ;
886+ }
887+
888+ String _rtiToDebugString (Rti rti) {
865889 int kind = Rti ._getKind (rti);
866890
867891 if (kind == Rti .kindDynamic) return 'dynamic' ;
868892 if (kind == Rti .kindVoid) return 'void' ;
869893 if (kind == Rti .kindNever) return 'Never' ;
870894 if (kind == Rti .kindAny) return 'any' ;
871895
896+ if (kind == Rti .kindStar) {
897+ Rti starArgument = Rti ._getStarArgument (rti);
898+ return 'star(${_rtiToDebugString (starArgument )})' ;
899+ }
900+
901+ if (kind == Rti .kindQuestion) {
902+ Rti questionArgument = Rti ._getQuestionArgument (rti);
903+ return 'question(${_rtiToDebugString (questionArgument )})' ;
904+ }
905+
906+ if (kind == Rti .kindFutureOr) {
907+ Rti futureOrArgument = Rti ._getFutureOrArgument (rti);
908+ return 'FutureOr(${_rtiToDebugString (futureOrArgument )})' ;
909+ }
910+
872911 if (kind == Rti .kindInterface) {
873912 String name = Rti ._getInterfaceName (rti);
874913 var arguments = Rti ._getInterfaceTypeArguments (rti);
0 commit comments