]> Cypherpunks repositories - gostls13.git/commitdiff
[dev.inline] cmd/compile: reorganize file parsing logic
authorMatthew Dempsky <mdempsky@google.com>
Wed, 11 Jan 2017 23:31:48 +0000 (15:31 -0800)
committerMatthew Dempsky <mdempsky@google.com>
Fri, 13 Jan 2017 23:06:31 +0000 (23:06 +0000)
Preparation for concurrent parsing. No behavior change.

Change-Id: Ic1ec45fc3cb316778c29065cf055c82e92ffa874
Reviewed-on: https://go-review.googlesource.com/35125
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/main.go
src/cmd/compile/internal/gc/noder.go

index 46c02b46e59693d61ea910a3a2a33278d7bd6220..1f4f18eb80feba7c23c6753b402b97f4e0c97a7a 100644 (file)
@@ -325,16 +325,7 @@ func Main() {
        loadsys()
 
        timings.Start("fe", "parse")
-       var lines uint
-       for _, infile := range flag.Args() {
-               block = 1
-               iota_ = -1000000
-               imported_unsafe = false
-               lines += parseFile(infile)
-               if nsyntaxerrors != 0 {
-                       errorexit()
-               }
-       }
+       lines := parseFiles(flag.Args())
        timings.Stop()
        timings.AddEvent(int64(lines), "lines")
 
index 27edffea339e0d779cd40e672824398393fe7d37..3744da6165a407823a57413b29d64255cf1dfdfe 100644 (file)
@@ -16,6 +16,17 @@ import (
        "cmd/internal/src"
 )
 
+func parseFiles(filenames []string) uint {
+       var lines uint
+       for _, filename := range filenames {
+               lines += parseFile(filename)
+               if nsyntaxerrors != 0 {
+                       errorexit()
+               }
+       }
+       return lines
+}
+
 func parseFile(filename string) uint {
        f, err := os.Open(filename)
        if err != nil {
@@ -30,12 +41,6 @@ func parseFile(filename string) uint {
 
        p.file(file)
 
-       if !imported_unsafe {
-               for _, pos := range p.linknames {
-                       p.error(syntax.Error{Pos: pos, Msg: "//go:linkname only allowed in Go files that import \"unsafe\""})
-               }
-       }
-
        if nsyntaxerrors == 0 {
                testdclstack()
        }
@@ -55,11 +60,21 @@ type noder struct {
 }
 
 func (p *noder) file(file *syntax.File) {
+       block = 1
+       iota_ = -1000000
+       imported_unsafe = false
+
        p.lineno(file.PkgName)
        mkpackage(file.PkgName.Value)
 
        xtop = append(xtop, p.decls(file.DeclList)...)
 
+       if !imported_unsafe {
+               for _, pos := range p.linknames {
+                       p.error(syntax.Error{Pos: pos, Msg: "//go:linkname only allowed in Go files that import \"unsafe\""})
+               }
+       }
+
        // For compatibility with old code only (comparisons w/ toolstash):
        // The old line number tracking simply continued incrementing the
        // virtual line number (lexlineno) and using it also for lineno.