From 94197135287ae2e1b886c4de9eaf4e1d8b1488ba Mon Sep 17 00:00:00 2001 From: Matthew Dempsky Date: Tue, 17 Apr 2018 14:59:13 -0700 Subject: [PATCH] cmd/compile: cleanup import logic slightly 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 TryBot-Result: Gobot Gobot Reviewed-by: Brad Fitzpatrick --- src/cmd/compile/internal/gc/main.go | 37 +++++++++++------------------ 1 file changed, 14 insertions(+), 23 deletions(-) diff --git a/src/cmd/compile/internal/gc/main.go b/src/cmd/compile/internal/gc/main.go index fb51ef537c..8990428605 100644 --- a/src/cmd/compile/internal/gc/main.go +++ b/src/cmd/compile/internal/gc/main.go @@ -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 == "!" { // package archive + if p == "!\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_) -- 2.48.1