1
0
mirror of https://github.com/golang/go synced 2024-11-05 16:06: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)
dumpglobls()
dumpptabs()
dumptypestructs()
addptabs()
dumptypestructs(externdcl)
dumptabs()
dumpimportstrings()
dumpbasictypes()
// Dump extra globals.
tmp := externdcl
@ -171,7 +174,7 @@ func dumpobj1(outfile string, mode int) {
bout.Close()
}
func dumpptabs() {
func addptabs() {
if !Ctxt.Flag_dynlink || localpkg.Name != "main" {
return
}

View File

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