]> Cypherpunks repositories - gostls13.git/commitdiff
[dev.regabi] cmd/compile: use *ir.Name instead of ir.Node for CaseClause.Var
authorCuong Manh Le <cuong.manhle.vn@gmail.com>
Tue, 29 Dec 2020 18:24:30 +0000 (01:24 +0700)
committerCuong Manh Le <cuong.manhle.vn@gmail.com>
Tue, 29 Dec 2020 19:21:18 +0000 (19:21 +0000)
Passes toolstash -cmp.

Change-Id: Ib0b6ebf5751ffce2c9500dc67d78e54937ead208
Reviewed-on: https://go-review.googlesource.com/c/go/+/279449
Trust: Cuong Manh Le <cuong.manhle.vn@gmail.com>
Run-TryBot: Cuong Manh Le <cuong.manhle.vn@gmail.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
src/cmd/compile/internal/escape/escape.go
src/cmd/compile/internal/ir/node_gen.go
src/cmd/compile/internal/ir/stmt.go
src/cmd/compile/internal/typecheck/iexport.go
src/cmd/compile/internal/typecheck/stmt.go
src/cmd/compile/internal/walk/switch.go

index b953666ce62679f4c667b4eb3b7c3bf74f875e2a..ec99c86c06b620a805ec132c41da76ee13770b0b 100644 (file)
@@ -374,7 +374,7 @@ func (e *escape) stmt(n ir.Node) {
                var ks []hole
                for _, cas := range n.Cases { // cases
                        if typesw && n.Tag.(*ir.TypeSwitchGuard).Tag != nil {
-                               cv := cas.Var.(*ir.Name)
+                               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"))
index d8bb4200efb46982f6d1c3111c5f4c39bb01d389..6c1a28022f3a849769a04fdb0693739331f1dde6 100644 (file)
@@ -230,14 +230,18 @@ func (n *CaseClause) copy() Node {
 func (n *CaseClause) doChildren(do func(Node) error) error {
        var err error
        err = maybeDoList(n.init, err, do)
-       err = maybeDo(n.Var, err, do)
+       if n.Var != nil {
+               err = maybeDo(n.Var, err, do)
+       }
        err = maybeDoList(n.List, err, do)
        err = maybeDoList(n.Body, err, do)
        return err
 }
 func (n *CaseClause) editChildren(edit func(Node) Node) {
        editList(n.init, edit)
-       n.Var = maybeEdit(n.Var, edit)
+       if n.Var != nil {
+               n.Var = edit(n.Var).(*Name)
+       }
        editList(n.List, edit)
        editList(n.Body, edit)
 }
index d88280dda767e96239f82f5744d0f29b24d2bfbe..a1f5e5933f2e0eb0c299d393bdb79756d625cf44 100644 (file)
@@ -172,7 +172,7 @@ func (n *BranchStmt) Sym() *types.Sym { return n.Label }
 // A CaseClause is a case statement in a switch or select: case List: Body.
 type CaseClause struct {
        miniStmt
-       Var  Node  // declared variable for this case in type switch
+       Var  *Name // declared variable for this case in type switch
        List Nodes // list of expressions for switch, early select
        Body Nodes
 }
index c287d76c4370f628adf55c0a27bdce6202a3d2a5..489879b3b434544b9e3a48757078106129142aa8 100644 (file)
@@ -1187,7 +1187,7 @@ func (w *exportWriter) caseList(cases []*ir.CaseClause, namedTypeSwitch bool) {
                w.pos(cas.Pos())
                w.stmtList(cas.List)
                if namedTypeSwitch {
-                       w.localName(cas.Var.(*ir.Name))
+                       w.localName(cas.Var)
                }
                w.stmtList(cas.Body)
        }
index f5d36a663d17a85ce413fe8a4c7374192156d4d1..d90d13b44cdf3fff829ecd2cecc4da696d98b067 100644 (file)
@@ -631,7 +631,7 @@ func tcSwitchType(n *ir.SwitchStmt) {
                        nvar := ncase.Var
                        nvar.SetType(vt)
                        if vt != nil {
-                               nvar = AssignExpr(nvar)
+                               nvar = AssignExpr(nvar).(*ir.Name)
                        } else {
                                // Clause variable is broken; prevent typechecking.
                                nvar.SetTypecheck(1)
index de0b471b34e490366dc83a80a5fbf20e95b4195f..b03bc3eba7c4d9868312195b9b92308fd05a7e42 100644 (file)
@@ -440,7 +440,7 @@ type typeClause struct {
        body ir.Nodes
 }
 
-func (s *typeSwitch) Add(pos src.XPos, typ *types.Type, caseVar, jmp ir.Node) {
+func (s *typeSwitch) Add(pos src.XPos, typ *types.Type, caseVar *ir.Name, jmp ir.Node) {
        var body ir.Nodes
        if caseVar != nil {
                l := []ir.Node{
@@ -450,7 +450,7 @@ func (s *typeSwitch) Add(pos src.XPos, typ *types.Type, caseVar, jmp ir.Node) {
                typecheck.Stmts(l)
                body.Append(l...)
        } else {
-               caseVar = ir.BlankNode
+               caseVar = ir.BlankNode.(*ir.Name)
        }
 
        // cv, ok = iface.(type)