cmd/internal/gc: fmt.Sprintf elimination and minor cleanup

Change-Id: Iaf5a7d25e6308b32c17a38afbbd46befa17aa3a4
Reviewed-on: https://go-review.googlesource.com/7629
Reviewed-by: Rob Pike <r@golang.org>
diff --git a/src/cmd/internal/gc/subr.go b/src/cmd/internal/gc/subr.go
index 7786a68..6347d66 100644
--- a/src/cmd/internal/gc/subr.go
+++ b/src/cmd/internal/gc/subr.go
@@ -291,7 +291,9 @@
 
 var initSyms []*Sym
 
-var nopkg = new(Pkg)
+var nopkg = &Pkg{
+	Syms: make(map[string]*Sym),
+}
 
 func (pkg *Pkg) Lookup(name string) *Sym {
 	if pkg == nil {
@@ -306,12 +308,9 @@
 		Pkg:     pkg,
 		Lexical: LNAME,
 	}
-	if s.Name == "init" {
+	if name == "init" {
 		initSyms = append(initSyms, s)
 	}
-	if pkg.Syms == nil {
-		pkg.Syms = make(map[string]*Sym)
-	}
 	pkg.Syms[name] = s
 	return s
 }
@@ -1028,16 +1027,13 @@
 		t1 = t1.Type
 		t2 = t2.Type
 		for ; t1 != nil && t2 != nil; t1, t2 = t1.Down, t2.Down {
-			var ta *Type
-			var tb *Type
-
 			if t1.Etype != TSTRUCT || t2.Etype != TSTRUCT {
 				Fatal("func missing struct: %v %v", Tconv(t1, 0), Tconv(t2, 0))
 			}
 
 			// Loop over fields in structs, ignoring argument names.
-			ta = t1.Type
-			tb = t2.Type
+			ta := t1.Type
+			tb := t2.Type
 			for ; ta != nil && tb != nil; ta, tb = ta.Down, tb.Down {
 				if ta.Etype != TFIELD || tb.Etype != TFIELD {
 					Fatal("func struct missing field: %v %v", Tconv(ta, 0), Tconv(tb, 0))
@@ -1320,8 +1316,12 @@
 	return 0
 }
 
-// Convert node n for assignment to type t.
 func assignconv(n *Node, t *Type, context string) *Node {
+	return assignconvfn(n, t, func() string { return context })
+}
+
+// Convert node n for assignment to type t.
+func assignconvfn(n *Node, t *Type, context func() string) *Node {
 	if n == nil || n.Type == nil || n.Type.Broke != 0 {
 		return n
 	}
@@ -1357,7 +1357,7 @@
 	var why string
 	op := assignop(n.Type, t, &why)
 	if op == 0 {
-		Yyerror("cannot use %v as type %v in %s%s", Nconv(n, obj.FmtLong), Tconv(t, 0), context, why)
+		Yyerror("cannot use %v as type %v in %s%s", Nconv(n, obj.FmtLong), Tconv(t, 0), context(), why)
 		op = OCONV
 	}
 
@@ -1570,10 +1570,10 @@
 		// hide method receiver from Tpretty
 		t.Thistuple = 0
 
-		p = fmt.Sprintf("%v", Tconv(t, obj.FmtLeft|obj.FmtUnsigned))
+		p = Tconv(t, obj.FmtLeft|obj.FmtUnsigned)
 		t.Thistuple = 1
 	} else {
-		p = fmt.Sprintf("%v", Tconv(t, obj.FmtLeft|obj.FmtUnsigned))
+		p = Tconv(t, obj.FmtLeft|obj.FmtUnsigned)
 	}
 
 	//print("typehash: %s\n", p);
@@ -3457,6 +3457,7 @@
 	p := new(Pkg)
 	p.Path = path
 	p.Prefix = pathtoprefix(path)
+	p.Syms = make(map[string]*Sym)
 	pkgMap[path] = p
 	pkgs = append(pkgs, p)
 	return p