{
// Haxe.g:223:39: ^( TYPE_PARAM[\"TYPE_PARAM\"] typeList )
{
Object root_1 = (Object)adaptor.nil();
root_1 = (Object)adaptor.becomeRoot(
new HaxeTree(TYPE_PARAM, "TYPE_PARAM")
, root_1);
adaptor.addChild(root_1, stream_typeList.nextTree());
adaptor.addChild(root_0, root_1);
}
}
retval.tree = root_0;
}
}
break;
case 2 :
// Haxe.g:224:19: LT typeList ( typeParam )? GTGTGT
{
LT91=(Token)match(input,LT,FOLLOW_LT_in_typeParamPart2019); if (state.failed) return retval;
if ( state.backtracking==0 ) stream_LT.add(LT91);
pushFollow(FOLLOW_typeList_in_typeParamPart2021);
typeList92=typeList();
state._fsp--;
if (state.failed) return retval;
if ( state.backtracking==0 ) stream_typeList.add(typeList92.getTree());
// Haxe.g:224:31: ( typeParam )?
int alt34=2;
int LA34_0 = input.LA(1);
if ( (LA34_0==LT) ) {
alt34=1;
}
switch (alt34) {
case 1 :
// Haxe.g:224:31: typeParam
{
pushFollow(FOLLOW_typeParam_in_typeParamPart2023);
typeParam93=typeParam();
state._fsp--;
if (state.failed) return retval;
if ( state.backtracking==0 ) stream_typeParam.add(typeParam93.getTree());
}
break;
}
GTGTGT94=(Token)match(input,GTGTGT,FOLLOW_GTGTGT_in_typeParamPart2026); if (state.failed) return retval;
if ( state.backtracking==0 ) stream_GTGTGT.add(GTGTGT94);
// AST REWRITE
// elements: typeList, typeParam
// token labels:
// rule labels: retval
// token list labels:
// rule list labels:
// wildcard labels:
if ( state.backtracking==0 ) {
retval.tree = root_0;
RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);
root_0 = (Object)adaptor.nil();
// 224:49: -> ^( TYPE_PARAM[\"TYPE_PARAM\"] typeList ( typeParam )? )
{
// Haxe.g:224:52: ^( TYPE_PARAM[\"TYPE_PARAM\"] typeList ( typeParam )? )
{
Object root_1 = (Object)adaptor.nil();
root_1 = (Object)adaptor.becomeRoot(
new HaxeTree(TYPE_PARAM, "TYPE_PARAM")
, root_1);
adaptor.addChild(root_1, stream_typeList.nextTree());
// Haxe.g:224:98: ( typeParam )?