]> Cypherpunks repositories - gostls13.git/commitdiff
[dev.inline] cmd/compile: split mkpackage into separate functions
authorMatthew Dempsky <mdempsky@google.com>
Wed, 11 Jan 2017 23:20:38 +0000 (15:20 -0800)
committerMatthew Dempsky <mdempsky@google.com>
Fri, 13 Jan 2017 23:06:22 +0000 (23:06 +0000)
Previously, mkpackage jumbled together three unrelated tasks: handling
package declarations, clearing imports from processing previous source
files, and assigning a default value to outfile.

Change-Id: I1e124335768aeabfd1a6d9cc2499fbb980d951cf
Reviewed-on: https://go-review.googlesource.com/35124
Reviewed-by: Robert Griesemer <gri@golang.org>
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>

src/cmd/compile/internal/gc/go.go
src/cmd/compile/internal/gc/main.go
src/cmd/compile/internal/gc/noder.go

index 3d4b511109bf9d2fdd3bf7d3122a94ec59a68fdb..26b11a27b6f584ff1d2070441acb6ab3e1c9ac2f 100644 (file)
@@ -113,8 +113,6 @@ var sizeof_String int // runtime sizeof(String)
 
 var pragcgobuf string
 
-var infile string
-
 var outfile string
 var linkobj string
 
index 3ce9994eb1f8914f5f0b3340c00a6d429447ec82..46c02b46e59693d61ea910a3a2a33278d7bd6220 100644 (file)
@@ -218,6 +218,26 @@ func Main() {
                usage()
        }
 
+       if outfile == "" {
+               p := flag.Arg(0)
+               if i := strings.LastIndex(p, "/"); i >= 0 {
+                       p = p[i+1:]
+               }
+               if runtime.GOOS == "windows" {
+                       if i := strings.LastIndex(p, `\`); i >= 0 {
+                               p = p[i+1:]
+                       }
+               }
+               if i := strings.LastIndex(p, "."); i >= 0 {
+                       p = p[:i]
+               }
+               suffix := ".o"
+               if writearchive {
+                       suffix = ".a"
+               }
+               outfile = p + suffix
+       }
+
        startProfile()
 
        if flag_race {
@@ -306,7 +326,7 @@ func Main() {
 
        timings.Start("fe", "parse")
        var lines uint
-       for _, infile = range flag.Args() {
+       for _, infile := range flag.Args() {
                block = 1
                iota_ = -1000000
                imported_unsafe = false
@@ -319,7 +339,6 @@ func Main() {
        timings.AddEvent(int64(lines), "lines")
 
        testdclstack()
-       mkpackage(localpkg.Name) // final import not used checks
        finishUniverse()
 
        typecheckok = true
@@ -900,54 +919,37 @@ func mkpackage(pkgname string) {
                if pkgname != localpkg.Name {
                        yyerror("package %s; expected %s", pkgname, localpkg.Name)
                }
-               for _, s := range localpkg.Syms {
-                       if s.Def == nil {
-                               continue
-                       }
-                       if s.Def.Op == OPACK {
-                               // throw away top-level package name leftover
-                               // from previous file.
-                               // leave s->block set to cause redeclaration
-                               // errors if a conflicting top-level name is
-                               // introduced by a different file.
-                               if !s.Def.Used && nsyntaxerrors == 0 {
-                                       pkgnotused(s.Def.Pos, s.Def.Name.Pkg.Path, s.Name)
-                               }
-                               s.Def = nil
-                               continue
-                       }
-
-                       if s.Def.Sym != s && s.Flags&SymAlias == 0 {
-                               // throw away top-level name left over
-                               // from previous import . "x"
-                               if s.Def.Name != nil && s.Def.Name.Pack != nil && !s.Def.Name.Pack.Used && nsyntaxerrors == 0 {
-                                       pkgnotused(s.Def.Name.Pack.Pos, s.Def.Name.Pack.Name.Pkg.Path, "")
-                                       s.Def.Name.Pack.Used = true
-                               }
+       }
+}
 
-                               s.Def = nil
-                               continue
+func clearImports() {
+       for _, s := range localpkg.Syms {
+               if s.Def == nil {
+                       continue
+               }
+               if s.Def.Op == OPACK {
+                       // throw away top-level package name leftover
+                       // from previous file.
+                       // leave s->block set to cause redeclaration
+                       // errors if a conflicting top-level name is
+                       // introduced by a different file.
+                       if !s.Def.Used && nsyntaxerrors == 0 {
+                               pkgnotused(s.Def.Pos, s.Def.Name.Pkg.Path, s.Name)
                        }
+                       s.Def = nil
+                       continue
                }
-       }
 
-       if outfile == "" {
-               p := infile
-               if i := strings.LastIndex(p, "/"); i >= 0 {
-                       p = p[i+1:]
-               }
-               if runtime.GOOS == "windows" {
-                       if i := strings.LastIndex(p, `\`); i >= 0 {
-                               p = p[i+1:]
+               if s.Def.Sym != s && s.Flags&SymAlias == 0 {
+                       // throw away top-level name left over
+                       // from previous import . "x"
+                       if s.Def.Name != nil && s.Def.Name.Pack != nil && !s.Def.Name.Pack.Used && nsyntaxerrors == 0 {
+                               pkgnotused(s.Def.Name.Pack.Pos, s.Def.Name.Pack.Name.Pkg.Path, "")
+                               s.Def.Name.Pack.Used = true
                        }
+
+                       s.Def = nil
+                       continue
                }
-               if i := strings.LastIndex(p, "."); i >= 0 {
-                       p = p[:i]
-               }
-               suffix := ".o"
-               if writearchive {
-                       suffix = ".a"
-               }
-               outfile = p + suffix
        }
 }
index d7e3023102aa52c5cbb60b626aebd85d38e06ee4..27edffea339e0d779cd40e672824398393fe7d37 100644 (file)
@@ -70,6 +70,8 @@ func (p *noder) file(file *syntax.File) {
        // TODO(gri) fix this once we switched permanently to the new
        // position information.
        lineno = MakePos(file.Pos().Base(), uint(file.Lines), 0)
+
+       clearImports()
 }
 
 func (p *noder) decls(decls []syntax.Decl) (l []*Node) {