void IfStmt(out Statement ifStmt)
{
StatementSequence ifBranch = null;
StatementSequence elseBranch = null;
Statement tmpStmt = null;
Expression exp = null;
ifStmt = null;
Expect(18);
int sl = t.line; int sc = t.col; Token tok = t;
Expr(out exp);
if (!ExpectBool(exp, tok, true)) {
return;
}
Expect(19);
int el = t.line; int ec = t.col+t.val.Length;
if (Options.BookVersion) {
Stmt(out tmpStmt);
ifBranch = ToStatementSequence(tmpStmt);
if (la.kind == 20) {
Get();
Stmt(out tmpStmt);
elseBranch = ToStatementSequence(tmpStmt);
}
} else if (StartOf(1)) {
StmtSeq(out ifBranch);
if (la.kind == 20) {
Get();
StmtSeq(out elseBranch);
}
Expect(21);
ifBranch.AddSequencePoint(t);
if (elseBranch != null) {
elseBranch.AddSequencePoint(t);
}
} else SynErr(53);
ifStmt = new If((TypedExpression<bool>)exp, ifBranch, elseBranch);
ifStmt.AddSequencePoint(sl,sc,el,ec);
}