1
0
mirror of https://github.com/golang/go synced 2024-11-11 23:50:22 -07:00

cmd/internal/obj: remove use of package bio

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>
This commit is contained in:
Matthew Dempsky 2016-04-12 17:58:46 -07:00
parent b623b71509
commit 045411e6f2
5 changed files with 57 additions and 12 deletions

View 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()
}

View File

@ -88,7 +88,7 @@ func dumpobj() {
externdcl = tmp
dumpdata()
obj.Writeobjdirect(Ctxt, bout)
obj.Writeobjdirect(Ctxt, bout.Writer)
if writearchive {
bout.Flush()

View 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 (

View File

@ -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
}

View 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