]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/internal/obj: remove use of package bio
authorMatthew Dempsky <mdempsky@google.com>
Wed, 13 Apr 2016 00:58:46 +0000 (17:58 -0700)
committerMatthew Dempsky <mdempsky@google.com>
Thu, 14 Apr 2016 17:58:33 +0000 (17:58 +0000)
Also add MustClose and MustWriter to cmd/internal/bio, and use them in
cmd/asm.

Change-Id: I07f5df3b66c17bc5b2e6ec9c4357d9b653e354e0
Reviewed-on: https://go-review.googlesource.com/21938
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
src/cmd/asm/main.go
src/cmd/compile/internal/gc/obj.go
src/cmd/internal/bio/buf.go
src/cmd/internal/bio/must.go [new file with mode: 0644]
src/cmd/internal/obj/objfile.go

index 40e1d9c4a97fdb9850903a9e5a48a46465b4f97f..c612583e6bcd1763e5c5b1ec774ba25d24bffb36 100644 (file)
@@ -44,12 +44,15 @@ func main() {
        defer ctxt.Bso.Flush()
 
        // Create object file, write header.
-       output, err := bio.Create(*flags.OutputFile)
+       out, err := os.Create(*flags.OutputFile)
        if err != nil {
                log.Fatal(err)
        }
-       fmt.Fprintf(output, "go object %s %s %s\n", obj.Getgoos(), obj.Getgoarch(), obj.Getgoversion())
-       fmt.Fprintf(output, "!\n")
+       defer bio.MustClose(out)
+       buf := bufio.NewWriter(bio.MustWriter(out))
+
+       fmt.Fprintf(buf, "go object %s %s %s\n", obj.Getgoos(), obj.Getgoarch(), obj.Getgoversion())
+       fmt.Fprintf(buf, "!\n")
 
        lexer := lex.NewLexer(flag.Arg(0), ctxt)
        parser := asm.NewParser(ctxt, architecture, lexer)
@@ -63,12 +66,12 @@ func main() {
        pList.Firstpc, ok = parser.Parse()
        if ok {
                // reports errors to parser.Errorf
-               obj.Writeobjdirect(ctxt, output)
+               obj.Writeobjdirect(ctxt, buf)
        }
        if !ok || diag {
                log.Printf("assembly of %s failed", flag.Arg(0))
                os.Remove(*flags.OutputFile)
                os.Exit(1)
        }
-       output.Flush()
+       buf.Flush()
 }
index 59ce0547c80bb1baebb417dc80b62945c24292be..b60f78f6382d7df5472e031c379eb74d4967ee32 100644 (file)
@@ -88,7 +88,7 @@ func dumpobj() {
        externdcl = tmp
 
        dumpdata()
-       obj.Writeobjdirect(Ctxt, bout)
+       obj.Writeobjdirect(Ctxt, bout.Writer)
 
        if writearchive {
                bout.Flush()
index 7a077041c24d098caca4c167b03a05fe9b2607d0..54ce3c7681f2039aec5dbf8b8b0b9e2e42a65f10 100644 (file)
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// Package bio implements seekable buffered I/O.
+// Package bio implements common I/O abstractions used within the Go toolchain.
 package bio
 
 import (
diff --git a/src/cmd/internal/bio/must.go b/src/cmd/internal/bio/must.go
new file mode 100644 (file)
index 0000000..3604b29
--- /dev/null
@@ -0,0 +1,43 @@
+// Copyright 2016 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package bio
+
+import (
+       "io"
+       "log"
+)
+
+// MustClose closes Closer c and calls log.Fatal if it returns a non-nil error.
+func MustClose(c io.Closer) {
+       if err := c.Close(); err != nil {
+               log.Fatal(err)
+       }
+}
+
+// MustWriter returns a Writer that wraps the provided Writer,
+// except that it calls log.Fatal instead of returning a non-nil error.
+func MustWriter(w io.Writer) io.Writer {
+       return mustWriter{w}
+}
+
+type mustWriter struct {
+       w io.Writer
+}
+
+func (w mustWriter) Write(b []byte) (int, error) {
+       n, err := w.w.Write(b)
+       if err != nil {
+               log.Fatal(err)
+       }
+       return n, nil
+}
+
+func (w mustWriter) WriteString(s string) (int, error) {
+       n, err := io.WriteString(w.w, s)
+       if err != nil {
+               log.Fatal(err)
+       }
+       return n, nil
+}
index 7d88db2bccec81bf6a41b95240a8f813a4406360..60505dfbb5cffcbb9e17b1b27b339eaecbf9d39a 100644 (file)
@@ -109,7 +109,6 @@ package obj
 
 import (
        "bufio"
-       "cmd/internal/bio"
        "cmd/internal/sys"
        "fmt"
        "log"
@@ -120,7 +119,7 @@ import (
 // The Go and C compilers, and the assembler, call writeobj to write
 // out a Go object file. The linker does not call this; the linker
 // does not write out object files.
-func Writeobjdirect(ctxt *Link, b *bio.Writer) {
+func Writeobjdirect(ctxt *Link, b *bufio.Writer) {
        Flushplist(ctxt)
        WriteObjFile(ctxt, b)
 }
@@ -187,16 +186,16 @@ func (w *objWriter) writeLengths() {
        w.writeInt(int64(w.nFile))
 }
 
-func newObjWriter(ctxt *Link, b *bio.Writer) *objWriter {
+func newObjWriter(ctxt *Link, b *bufio.Writer) *objWriter {
        return &objWriter{
                ctxt:    ctxt,
-               wr:      b.Writer,
+               wr:      b,
                vrefIdx: make(map[string]int),
                refIdx:  make(map[string]int),
        }
 }
 
-func WriteObjFile(ctxt *Link, b *bio.Writer) {
+func WriteObjFile(ctxt *Link, b *bufio.Writer) {
        w := newObjWriter(ctxt, b)
 
        // Magic header