LNode KeywordStmt(int startIndex, VList<LNode> attrs, bool hasWordAttrs)
{
TokenType la1;
// line 1300
LNode r;
bool addAttrs = true;
string showWordAttrErrorFor = null;
// Line 1304: ( ((IfStmt | EventDecl | DelegateDecl | SpaceDecl | EnumDecl | CheckedOrUncheckedStmt | DoStmt | CaseStmt | ReturnBreakContinueThrow TT.Semicolon) | (GotoCaseStmt TT.Semicolon / GotoStmt TT.Semicolon) | SwitchStmt | WhileStmt | ForStmt | ForEachStmt) | (UsingStmt / UsingDirective) | LockStmt | FixedStmt | TryStmt )
do {
switch (LA0) {
case TT.If:
{
r = IfStmt(startIndex);
// line 1305
showWordAttrErrorFor = "if statement";
addAttrs = true;
}
break;
case TT.Event:
r = EventDecl(startIndex);
break;
case TT.Delegate:
{
r = DelegateDecl(startIndex, attrs);
// line 1307
addAttrs = false;
}
break;
case TT.Class: case TT.Interface: case TT.Namespace: case TT.Struct:
r = SpaceDecl(startIndex);
break;
case TT.Enum:
r = EnumDecl(startIndex);
break;
case TT.Checked: case TT.Unchecked:
r = CheckedOrUncheckedStmt(startIndex);
break;
case TT.Do:
r = DoStmt(startIndex);
break;
case TT.Case:
r = CaseStmt(startIndex);
break;
case TT.Break: case TT.Continue: case TT.Return: case TT.Throw:
{
r = ReturnBreakContinueThrow(startIndex);
Match((int) TT.Semicolon);
}
break;
case TT.Goto:
{
la1 = LA(1);
if (la1 == TT.Case) {
r = GotoCaseStmt(startIndex);
Match((int) TT.Semicolon);
} else if (KeywordStmt_set0.Contains((int) la1)) {
r = GotoStmt(startIndex);
Match((int) TT.Semicolon);
} else
goto error;
}
break;
case TT.Switch:
r = SwitchStmt(startIndex);
break;
case TT.While:
r = WhileStmt(startIndex);
break;
case TT.For:
r = ForStmt(startIndex);
break;
case TT.Foreach:
r = ForEachStmt(startIndex);
break;
case TT.Using:
{
la1 = LA(1);
if (la1 == TT.LParen) {
r = UsingStmt(startIndex);
// line 1328
showWordAttrErrorFor = "using statement";
} else if (KeywordStmt_set1.Contains((int) la1)) {
r = UsingDirective(startIndex, attrs);
addAttrs = false;
showWordAttrErrorFor = "using directive";
} else
goto error;
}
break;
case TT.Lock:
r = LockStmt(startIndex);
break;
case TT.Fixed:
r = FixedStmt(startIndex);
break;
case TT.Try:
r = TryStmt(startIndex);
break;
default:
goto error;
}
break;
error:
{
// line 1334
r = Error("Bug: Keyword statement expected, but got '{0}'", CurrentTokenText());
ScanToEndOfStmt();
}
} while (false);
// line 1338
if (addAttrs) {
r = r.PlusAttrs(attrs);
}
if (hasWordAttrs && showWordAttrErrorFor != null) {
NonKeywordAttrError(attrs, showWordAttrErrorFor);
}
return r;
}