code: func (n *CaseExpr) Accept(v Visitor) (Node, bool) {
  	newNode, skipChildren := v.Enter(n)
  	if skipChildren {
  		return v.Leave(newNode)
  	}
  
  	n = newNode.(*CaseExpr)
  	if n.Value != nil {
  		node, ok := n.Value.Accept(v)
  		if !ok {
  			return n, false
  		}
  		n.Value = node.(ExprNode)
  	}
  	for i, val := range n.WhenClauses {
  		node, ok := val.Accept(v)
  		if !ok {
  			return n, false
  		}
  		n.WhenClauses[i] = node.(*WhenClause)
  	}
  	if n.ElseClause != nil {
  		node, ok := n.ElseClause.Accept(v)
  		if !ok {
  			return n, false
  		}
  		n.ElseClause = node.(ExprNode)
  	}
  	return v.Leave(n)
  }
docs: // Accept implements Node Accept interface.