]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: add and use gc.Node.funcname
authorJosh Bleecher Snyder <josharian@gmail.com>
Sun, 23 Apr 2017 12:10:21 +0000 (05:10 -0700)
committerJosh Bleecher Snyder <josharian@gmail.com>
Sun, 23 Apr 2017 19:00:28 +0000 (19:00 +0000)
Change-Id: If5631eae7e2ad2bef56e79b82f77105246e68773
Reviewed-on: https://go-review.googlesource.com/41494
Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
src/cmd/compile/internal/gc/closure.go
src/cmd/compile/internal/gc/noder.go
src/cmd/compile/internal/gc/pgen.go
src/cmd/compile/internal/gc/plive.go
src/cmd/compile/internal/gc/ssa.go
src/cmd/compile/internal/gc/syntax.go
src/cmd/compile/internal/gc/walk.go

index cc42ceff90e6afb46281bda8434116cb3aeba466..e258d58ae521398ccbe9c54109141b1e9abe5b5c 100644 (file)
@@ -173,7 +173,7 @@ func closurename(n *Node) *types.Sym {
                gen = closurename_closgen
        case n.Func.Outerfunc.Op == ODCLFUNC:
                // The outermost closure inside of a named function.
-               outer = n.Func.Outerfunc.Func.Nname.Sym.Name
+               outer = n.Func.Outerfunc.funcname()
 
                prefix = "func"
 
index d4c00c80426fb1f51ca99cf963923620f173d785..73b02ace38a37ab6dca0f1726441f4ea33028fea 100644 (file)
@@ -342,8 +342,8 @@ func (p *noder) funcDecl(fun *syntax.FuncDecl) *Node {
                lineno = Ctxt.PosTable.XPos(fun.Body.Rbrace)
                f.Func.Endlineno = lineno
        } else {
-               if pure_go || strings.HasPrefix(f.Func.Nname.Sym.Name, "init.") {
-                       yyerrorl(f.Pos, "missing function body for %q", f.Func.Nname.Sym.Name)
+               if pure_go || strings.HasPrefix(f.funcname(), "init.") {
+                       yyerrorl(f.Pos, "missing function body for %q", f.funcname())
                }
        }
 
index 1a521e6e43b6c7f614b458d11759d654cde28cca..af34778dd5e29153fb1ce760b7ea33eb6764eb04 100644 (file)
@@ -19,10 +19,10 @@ import (
 // "Portable" code generation.
 
 func emitptrargsmap() {
-       if Curfn.Func.Nname.Sym.Name == "_" {
+       if Curfn.funcname() == "_" {
                return
        }
-       sym := lookup(fmt.Sprintf("%s.args_stackmap", Curfn.Func.Nname.Sym.Name))
+       sym := lookup(fmt.Sprintf("%s.args_stackmap", Curfn.funcname()))
        lsym := sym.Linksym()
 
        nptr := int(Curfn.Type.ArgWidth() / int64(Widthptr))
index ac2f91841af77693a951628af5ac7d179a5f4835..c461eb4c47d216a2698d54d8c7bc5fc0c7272d2c 100644 (file)
@@ -819,13 +819,13 @@ func (lv *Liveness) clobber() {
                // Clobber only functions where the hash of the function name matches a pattern.
                // Useful for binary searching for a miscompiled function.
                hstr := ""
-               for _, b := range sha1.Sum([]byte(lv.fn.Func.Nname.Sym.Name)) {
+               for _, b := range sha1.Sum([]byte(lv.fn.funcname())) {
                        hstr += fmt.Sprintf("%08b", b)
                }
                if !strings.HasSuffix(hstr, h) {
                        return
                }
-               fmt.Printf("\t\t\tCLOBBERDEAD %s\n", lv.fn.Func.Nname.Sym.Name)
+               fmt.Printf("\t\t\tCLOBBERDEAD %s\n", lv.fn.funcname())
        }
        if lv.f.Name == "forkAndExecInChild" {
                // forkAndExecInChild calls vfork (on linux/amd64, anyway).
@@ -1087,7 +1087,7 @@ Outer:
 }
 
 func (lv *Liveness) showlive(v *ssa.Value, live bvec) {
-       if debuglive == 0 || lv.fn.Func.Nname.Sym.Name == "init" || strings.HasPrefix(lv.fn.Func.Nname.Sym.Name, ".") {
+       if debuglive == 0 || lv.fn.funcname() == "init" || strings.HasPrefix(lv.fn.funcname(), ".") {
                return
        }
        if live.IsEmpty() {
@@ -1101,7 +1101,7 @@ func (lv *Liveness) showlive(v *ssa.Value, live bvec) {
 
        s := "live at "
        if v == nil {
-               s += fmt.Sprintf("entry to %s:", lv.fn.Func.Nname.Sym.Name)
+               s += fmt.Sprintf("entry to %s:", lv.fn.funcname())
        } else if sym, ok := v.Aux.(*obj.LSym); ok {
                fn := sym.Name
                if pos := strings.Index(fn, "."); pos >= 0 {
@@ -1163,7 +1163,7 @@ func (lv *Liveness) printeffect(printed bool, name string, pos int32, x bool) bo
 // This format synthesizes the information used during the multiple passes
 // into a single presentation.
 func livenessprintdebug(lv *Liveness) {
-       fmt.Printf("liveness: %s\n", lv.fn.Func.Nname.Sym.Name)
+       fmt.Printf("liveness: %s\n", lv.fn.funcname())
 
        pcdata := 0
        for i, b := range lv.f.Blocks {
index 356a61e711afc3b49842bcf2620d714509fcd138..fe2756d25b339a46c6fa7a40287b42c81f3a464b 100644 (file)
@@ -96,7 +96,7 @@ func initssaconfig() {
 
 // buildssa builds an SSA function.
 func buildssa(fn *Node) *ssa.Func {
-       name := fn.Func.Nname.Sym.Name
+       name := fn.funcname()
        printssa := name == os.Getenv("GOSSAFUNC")
        if printssa {
                fmt.Println("generating SSA for", name)
index 8ccebded2a3881d02c67817963bf296f95ca8a74..5c3432cad171728a6abe304eb04bb4e5ad7b75ef 100644 (file)
@@ -191,6 +191,11 @@ func (n *Node) mayBeShared() bool {
        return false
 }
 
+// funcname returns the name of the function n.
+func (n *Node) funcname() string {
+       return n.Func.Nname.Sym.Name
+}
+
 // Name holds Node fields used only by named nodes (ONAME, OTYPE, OPACK, OLABEL, some OLITERAL).
 type Name struct {
        Pack      *Node      // real package for import . names
index d04c4ada1cd8ca33681af87ef3fc31730474cc0a..4f1a431f1d3e46b4be13b633cc00d8553dcf3295 100644 (file)
@@ -1733,7 +1733,7 @@ func ascompatee(op Op, nl, nr []*Node, init *Nodes) []*Node {
                var nln, nrn Nodes
                nln.Set(nl)
                nrn.Set(nr)
-               Fatalf("error in shape across %+v %v %+v / %d %d [%s]", nln, op, nrn, len(nl), len(nr), Curfn.Func.Nname.Sym.Name)
+               Fatalf("error in shape across %+v %v %+v / %d %d [%s]", nln, op, nrn, len(nl), len(nr), Curfn.funcname())
        }
        return nn
 }