]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: break apart dumptypestructs
authorJosh Bleecher Snyder <josharian@gmail.com>
Mon, 24 Apr 2017 00:35:12 +0000 (17:35 -0700)
committerJosh Bleecher Snyder <josharian@gmail.com>
Mon, 24 Apr 2017 00:58:15 +0000 (00:58 +0000)
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>
src/cmd/compile/internal/gc/obj.go
src/cmd/compile/internal/gc/reflect.go

index 5067330e5232c58deb71e30c1670d36ac1a787dd..e9d94607ec1e06db949488d0f1f4e0e72118c669 100644 (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
        }
index 08ca0f13e65f281ebcd6e19e46bd7d2aeaf25692..5bbeb954c6299327537c98b596090ad204ea9dff 100644 (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]))