]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: cleanup import logic slightly
authorMatthew Dempsky <mdempsky@google.com>
Tue, 17 Apr 2018 21:59:13 +0000 (14:59 -0700)
committerMatthew Dempsky <mdempsky@google.com>
Tue, 17 Apr 2018 23:48:09 +0000 (23:48 +0000)
Use bio.Reader. Include newline character in the expected string value
instead of truncating it. Get rid of weird "empty archive" check.

Passes toolstash-check.

Change-Id: I16e42542db4827e6ee3644b9a5540a4a30b9bc41
Reviewed-on: https://go-review.googlesource.com/107620
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
src/cmd/compile/internal/gc/main.go

index fb51ef537c73506c1cef3c780a2cdf0314338b7f..89904286052469607cb6d6e34df292484cc21c7b 100644 (file)
@@ -11,6 +11,7 @@ import (
        "bytes"
        "cmd/compile/internal/ssa"
        "cmd/compile/internal/types"
+       "cmd/internal/bio"
        "cmd/internal/dwarf"
        "cmd/internal/obj"
        "cmd/internal/objabi"
@@ -1008,13 +1009,12 @@ func importfile(f *Val) *types.Pkg {
 
        importpkg.Imported = true
 
-       impf, err := os.Open(file)
+       imp, err := bio.Open(file)
        if err != nil {
                yyerror("can't open import: %q: %v", path_, err)
                errorexit()
        }
-       defer impf.Close()
-       imp := bufio.NewReader(impf)
+       defer imp.Close()
 
        // check object header
        p, err := imp.ReadString('\n')
@@ -1022,13 +1022,10 @@ func importfile(f *Val) *types.Pkg {
                yyerror("import %s: reading input: %v", file, err)
                errorexit()
        }
-       if len(p) > 0 {
-               p = p[:len(p)-1]
-       }
 
-       if p == "!<arch>" { // package archive
+       if p == "!<arch>\n" { // package archive
                // package export block should be first
-               sz := arsize(imp, "__.PKGDEF")
+               sz := arsize(imp.Reader, "__.PKGDEF")
                if sz <= 0 {
                        yyerror("import %s: not a package file", file)
                        errorexit()
@@ -1038,22 +1035,16 @@ func importfile(f *Val) *types.Pkg {
                        yyerror("import %s: reading input: %v", file, err)
                        errorexit()
                }
-               if len(p) > 0 {
-                       p = p[:len(p)-1]
-               }
        }
 
-       if p != "empty archive" {
-               if !strings.HasPrefix(p, "go object ") {
-                       yyerror("import %s: not a go object file: %s", file, p)
-                       errorexit()
-               }
-
-               q := fmt.Sprintf("%s %s %s %s", objabi.GOOS, objabi.GOARCH, objabi.Version, objabi.Expstring())
-               if p[10:] != q {
-                       yyerror("import %s: object is [%s] expected [%s]", file, p[10:], q)
-                       errorexit()
-               }
+       if !strings.HasPrefix(p, "go object ") {
+               yyerror("import %s: not a go object file: %s", file, p)
+               errorexit()
+       }
+       q := fmt.Sprintf("%s %s %s %s\n", objabi.GOOS, objabi.GOARCH, objabi.Version, objabi.Expstring())
+       if p[10:] != q {
+               yyerror("import %s: object is [%s] expected [%s]", file, p[10:], q)
+               errorexit()
        }
 
        // process header lines
@@ -1119,7 +1110,7 @@ func importfile(f *Val) *types.Pkg {
                        fmt.Printf("importing %s (%s)\n", path_, file)
                }
                imp.ReadByte() // skip \n after $$B
-               Import(importpkg, imp)
+               Import(importpkg, imp.Reader)
 
        default:
                yyerror("no import in %q", path_)