for _, cas := range n.Cases { // cases
cas := cas.(*ir.CaseStmt)
if typesw && n.Tag.(*ir.TypeSwitchGuard).Tag != nil {
- cv := cas.Vars[0]
+ cv := cas.Var
k := e.dcl(cv) // type switch variables have no ODCL.
if cv.Type().HasPointers() {
ks = append(ks, k.dotType(cv.Type(), cas, "switch case"))
func (n *CaseStmt) copy() Node {
c := *n
c.init = c.init.Copy()
- c.Vars = c.Vars.Copy()
c.List = c.List.Copy()
c.Body = c.Body.Copy()
return &c
func (n *CaseStmt) doChildren(do func(Node) error) error {
var err error
err = maybeDoList(n.init, err, do)
- err = maybeDoList(n.Vars, err, do)
+ err = maybeDo(n.Var, err, do)
err = maybeDoList(n.List, err, do)
err = maybeDo(n.Comm, err, do)
err = maybeDoList(n.Body, err, do)
}
func (n *CaseStmt) editChildren(edit func(Node) Node) {
editList(n.init, edit)
- editList(n.Vars, edit)
+ n.Var = maybeEdit(n.Var, edit)
editList(n.List, edit)
n.Comm = maybeEdit(n.Comm, edit)
editList(n.Body, edit)
// A CaseStmt is a case statement in a switch or select: case List: Body.
type CaseStmt struct {
miniStmt
- Vars Nodes // declared variable for this case in type switch
+ Var Node // declared variable for this case in type switch
List Nodes // list of expressions for switch, early select
Comm Node // communication case (Exprs[0]) after select is type-checked
Body Nodes
if tswitch != nil && tswitch.Tag != nil {
nn := typecheck.NewName(tswitch.Tag.Sym())
typecheck.Declare(nn, typecheck.DeclContext)
- n.Vars = []ir.Node{nn}
+ n.Var = nn
// keep track of the instances for reporting unused
nn.Defn = tswitch
}
w.pos(cas.Pos())
w.stmtList(cas.List)
if namedTypeSwitch {
- w.localName(cas.Vars[0].(*ir.Name))
+ w.localName(cas.Var.(*ir.Name))
}
w.stmtList(cas.Body)
}
// Sym for diagnostics anyway.
caseVar := ir.NewNameAt(cas.Pos(), r.ident())
Declare(caseVar, DeclContext)
- cas.Vars = []ir.Node{caseVar}
+ cas.Var = caseVar
caseVar.Defn = switchExpr
}
cas.Body.Set(r.stmtList())
ts.add(ncase.Pos(), n1.Type())
}
- if len(ncase.Vars) != 0 {
+ if ncase.Var != nil {
// Assign the clause variable's type.
vt := t
if len(ls) == 1 {
}
}
- nvar := ncase.Vars[0]
+ nvar := ncase.Var
nvar.SetType(vt)
if vt != nil {
nvar = AssignExpr(nvar)
nvar.SetTypecheck(1)
nvar.SetWalkdef(1)
}
- ncase.Vars[0] = nvar
+ ncase.Var = nvar
}
Stmts(ncase.Body)
var body ir.Nodes
for _, ncase := range sw.Cases {
ncase := ncase.(*ir.CaseStmt)
- var caseVar ir.Node
- if len(ncase.Vars) != 0 {
- caseVar = ncase.Vars[0]
- }
+ caseVar := ncase.Var
// For single-type cases with an interface type,
// we initialize the case variable as part of the type assertion.