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); }