func (p *parser) parseIfStmt(n *parse.Node) ast.Stmt { p.openScope() ifStmt := ast.IfStmt{ If: token.Pos(n.Child(0).Pos()), } ifStmt.Init, ifStmt.Cond = p.parseInitCond(n.Child(1)) if blockElse := n.Child(2).Child(0); blockElse.Is(block) { ifStmt.Body = p.parseBlock(blockElse, p.topScope) } else { ifStmt.Body = p.parseBlock(blockElse.Child(1).Child(0), p.topScope) ifStmt.Else = p.parseElse(blockElse.Child(1).Child(2)) } p.closeScope() return &ifStmt }