public TryStatement ParseTryStatement()
{
var tryStatement = new TryStatement { Token = Next() };
Match(TokenType.Try);
tryStatement.Body = ParseStatementBlock();
if (Next().IsNot(TokenType.Rescue) && Next().IsNot(TokenType.Finally))
throw Error("Missing rescue or finally", Next());
if (Next().Is(TokenType.Rescue))
{
var rescueClause = new RescueClause { Token = Next() };
Match(TokenType.Rescue);
if (!Next().Is(TokenType.LeftBrace))
{
rescueClause.Identifier = ParseIdentifier();
}
rescueClause.StatementBlock = ParseStatementBlock();
tryStatement.Rescue = rescueClause;
}
if (Next().Is(TokenType.Finally))
{
Match(TokenType.Finally);
tryStatement.Finally = ParseStatementBlock();
}
return tryStatement;
}