bool Scan_TypeSuffixOpt(bool afterAsOrIs)
{
TokenType la0, la1;
// Line 287: greedy( TT.QuestionMark (&!{afterAsOrIs} | &!(((TT.Add|TT.AndBits|TT.At|TT.Forward|TT.Id|TT.IncDec|TT.LBrace|TT.Literal|TT.LParen|TT.Mul|TT.New|TT.Not|TT.NotBits|TT.Sub|TT.Substitute|TT.TypeKeyword) | IdNotLinqKeyword))) | TT.Mul | &{(count = CountDims(LT($LI), @true)) > 0} TT.LBrack TT.RBrack greedy(&{(count = CountDims(LT($LI), @false)) > 0} TT.LBrack TT.RBrack)* )*
for (;;) {
la0 = LA0;
if (la0 == TT.QuestionMark) {
if (!afterAsOrIs)
goto match1;
else if ((count = CountDims(LT(1), true)) > 0) {
if (!Try_TypeSuffixOpt_Test0(1))
goto match1;
else
break;
} else if (!Try_TypeSuffixOpt_Test0(1))
goto match1;
else
break;
} else if (la0 == TT.Mul){
if (!TryMatch((int) TT.Mul))
return false;}
else if (la0 == TT.LBrack) {
if ((count = CountDims(LT(0), true)) > 0) {
la1 = LA(1);
if (la1 == TT.RBrack) {
if (!TryMatch((int) TT.LBrack))
return false;
if (!TryMatch((int) TT.RBrack))
return false;
// Line 299: greedy(&{(count = CountDims(LT($LI), @false)) > 0} TT.LBrack TT.RBrack)*
for (;;) {
la0 = LA0;
if (la0 == TT.LBrack) {
if ((count = CountDims(LT(0), false)) > 0) {
la1 = LA(1);
if (la1 == TT.RBrack) {
if (!TryMatch((int) TT.LBrack))
return false;
if (!TryMatch((int) TT.RBrack))
return false;
} else
break;
} else
break;
} else
break;
}
} else
break;
} else
break;
} else
break;
continue;
match1:
{
if (!TryMatch((int) TT.QuestionMark))
return false;
// Line 287: (&!{afterAsOrIs} | &!(((TT.Add|TT.AndBits|TT.At|TT.Forward|TT.Id|TT.IncDec|TT.LBrace|TT.Literal|TT.LParen|TT.Mul|TT.New|TT.Not|TT.NotBits|TT.Sub|TT.Substitute|TT.TypeKeyword) | IdNotLinqKeyword)))
if (!afterAsOrIs) { } else if (Try_TypeSuffixOpt_Test0(0))
return false;
}
}
return true;
}