void TParams(bool declContext, ref LNode r)
{
TokenType la0, la1;
Token op = default(Token);
VList<LNode> list = new VList<LNode>(r);
int endIndex;
// Line 203: ( TT.LT (TParamDeclOrDataType (TT.Comma TParamDeclOrDataType)*)? TT.GT | TT.Dot TT.LBrack TT.RBrack | TT.Not TT.LParen TT.RParen | TT.Not IdWithOptionalTypeParams )
la0 = LA0;
if (la0 == TT.LT) {
op = MatchAny();
// Line 203: (TParamDeclOrDataType (TT.Comma TParamDeclOrDataType)*)?
switch (LA0) {
case TT.AttrKeyword: case TT.ContextualKeyword: case TT.Id: case TT.In:
case TT.LBrack: case TT.Operator: case TT.Substitute: case TT.TypeKeyword:
{
list.Add(TParamDeclOrDataType(declContext));
// Line 204: (TT.Comma TParamDeclOrDataType)*
for (;;) {
la0 = LA0;
if (la0 == TT.Comma) {
Skip();
list.Add(TParamDeclOrDataType(declContext));
} else
break;
}
}
break;
}
var end = Match((int) TT.GT);
// line 204
endIndex = end.EndIndex;
} else if (la0 == TT.Dot) {
op = MatchAny();
var t = Match((int) TT.LBrack);
var end = Match((int) TT.RBrack);
// line 205
list = AppendExprsInside(t, list);
endIndex = end.EndIndex;
} else {
la1 = LA(1);
if (la1 == TT.LParen) {
op = Match((int) TT.Not);
var t = MatchAny();
var end = Match((int) TT.RParen);
// line 206
list = AppendExprsInside(t, list);
endIndex = end.EndIndex;
} else {
op = Match((int) TT.Not);
list.Add(IdWithOptionalTypeParams(declContext));
// line 207
endIndex = list.Last.Range.EndIndex;
}
}
// line 210
int start = r.Range.StartIndex;
r = F.Call(S.Of, list, start, endIndex, op.StartIndex, op.EndIndex, NodeStyle.Operator);
}