LNode ComplexId(bool declContext = false)
{
TokenType la0;
LNode result = default(LNode);
result = IdWithOptionalTypeParams(declContext);
// Line 159: (TT.ColonColon IdWithOptionalTypeParams)?
la0 = LA0;
if (la0 == TT.ColonColon) {
switch (LA(1)) {
case TT.ContextualKeyword: case TT.Id: case TT.Operator: case TT.Substitute:
case TT.TypeKeyword:
{
// line 159
if ((result.Calls(S.Of))) {
Error("Type parameters cannot appear before '::' in a declaration or type name");
}
var op = MatchAny();
var rhs = IdWithOptionalTypeParams(declContext);
// line 161
result = F.Call(S.ColonColon, result, rhs, result.Range.StartIndex, rhs.Range.EndIndex, op.StartIndex, op.EndIndex, NodeStyle.Operator);
}
break;
}
}
// Line 163: (TT.Dot IdWithOptionalTypeParams)*
for (;;) {
la0 = LA0;
if (la0 == TT.Dot) {
switch (LA(1)) {
case TT.ContextualKeyword: case TT.Id: case TT.Operator: case TT.Substitute:
case TT.TypeKeyword:
{
var op = MatchAny();
var rhs = IdWithOptionalTypeParams(declContext);
// line 164
result = F.Dot(result, rhs, result.Range.StartIndex, rhs.Range.EndIndex, op.StartIndex, op.EndIndex, NodeStyle.Operator);
}
break;
default:
goto stop;
}
} else
goto stop;
}
stop:;
return result;
}