LNode EventDecl(int startIndex)
{
TokenType la0;
Token eventkw = default(Token);
Token lit_semi = default(Token);
LNode result = default(LNode);
eventkw = MatchAny();
var type = DataType();
var name = ComplexNameDecl();
// Line 1820: (TT.Comma ComplexNameDecl (TT.Comma ComplexNameDecl)*)?
la0 = LA0;
if (la0 == TT.Comma) {
// line 1820
var parts = new VList<LNode>(name);
Skip();
parts.Add(ComplexNameDecl());
// Line 1821: (TT.Comma ComplexNameDecl)*
for (;;) {
la0 = LA0;
if (la0 == TT.Comma) {
Skip();
parts.Add(ComplexNameDecl());
} else
break;
}
// line 1822
name = F.List(parts, name.Range.StartIndex, parts.Last.Range.EndIndex);
}
// Line 1824: (TT.Semicolon | BracedBlock)
la0 = LA0;
if (la0 == TT.Semicolon) {
lit_semi = MatchAny();
// line 1825
result = F.Call(eventkw, type, name, startIndex, lit_semi.EndIndex);
} else {
var body = BracedBlock(S.Fn);
if (name.Calls(S.AltList)) {
Error("A body is not allowed when defining multiple events.");
}
result = F.Call(eventkw, LNode.List(type, name, body), startIndex, body.Range.EndIndex);
}
return result;
}