1
0
mirror of https://github.com/golang/go synced 2024-11-05 18:26:10 -07:00

cmd/compile: break apart dumptypestructs

dumptypestructs did several different jobs.
Split them into separate functions
and call them in turn.

Hand dumptypestructs a list of dcls,
rather than reading the global.

Rename dumpptabs for (marginal) clarity.

This is groundwork for compiling autogenerated
functions concurrently.

Passes toolstash-check.

Change-Id: I627a1dffc70a7e4b7b4436ab19af1406267f01dc
Reviewed-on: https://go-review.googlesource.com/41501
Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
This commit is contained in:
Josh Bleecher Snyder 2017-04-23 17:35:12 -07:00
parent 07d09003f1
commit 976a5ce1a8
2 changed files with 16 additions and 7 deletions

View File

@ -136,8 +136,11 @@ func dumpobj1(outfile string, mode int) {
externs := len(externdcl) externs := len(externdcl)
dumpglobls() dumpglobls()
dumpptabs() addptabs()
dumptypestructs() dumptypestructs(externdcl)
dumptabs()
dumpimportstrings()
dumpbasictypes()
// Dump extra globals. // Dump extra globals.
tmp := externdcl tmp := externdcl
@ -171,7 +174,7 @@ func dumpobj1(outfile string, mode int) {
bout.Close() bout.Close()
} }
func dumpptabs() { func addptabs() {
if !Ctxt.Flag_dynlink || localpkg.Name != "main" { if !Ctxt.Flag_dynlink || localpkg.Name != "main" {
return return
} }

View File

@ -1394,9 +1394,9 @@ func addsignat(t *types.Type) {
signatlist[formalType(t)] = true signatlist[formalType(t)] = true
} }
func dumptypestructs() { func dumptypestructs(dcls []*Node) {
// copy types from externdcl list to signatlist // copy types from dcl list to signatlist
for _, n := range externdcl { for _, n := range dcls {
if n.Op == OTYPE { if n.Op == OTYPE {
addsignat(n.Type) addsignat(n.Type)
} }
@ -1421,7 +1421,9 @@ func dumptypestructs() {
} }
} }
} }
}
func dumptabs() {
// process itabs // process itabs
for _, i := range itabs { for _, i := range itabs {
// dump empty itab symbol into i.sym // dump empty itab symbol into i.sym
@ -1474,18 +1476,22 @@ func dumptypestructs() {
} }
ggloblsym(s, int32(ot), int16(obj.RODATA)) ggloblsym(s, int32(ot), int16(obj.RODATA))
} }
}
func dumpimportstrings() {
// generate import strings for imported packages // generate import strings for imported packages
for _, p := range types.ImportedPkgList() { for _, p := range types.ImportedPkgList() {
dimportpath(p) dimportpath(p)
} }
}
func dumpbasictypes() {
// do basic types if compiling package runtime. // do basic types if compiling package runtime.
// they have to be in at least one package, // they have to be in at least one package,
// and runtime is always loaded implicitly, // and runtime is always loaded implicitly,
// so this is as good as any. // so this is as good as any.
// another possible choice would be package main, // another possible choice would be package main,
// but using runtime means fewer copies in .6 files. // but using runtime means fewer copies in object files.
if myimportpath == "runtime" { if myimportpath == "runtime" {
for i := types.EType(1); i <= TBOOL; i++ { for i := types.EType(1); i <= TBOOL; i++ {
dtypesym(types.NewPtr(types.Types[i])) dtypesym(types.NewPtr(types.Types[i]))