cmd: extract obj's Biobuf code into new bio package
API could still be made more Go-ey.
Updates #15165.
Change-Id: I514ffceffa43c293ae5d7e5f1e9193fda0098865
Reviewed-on: https://go-review.googlesource.com/21644
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
diff --git a/src/cmd/compile/internal/gc/bexport.go b/src/cmd/compile/internal/gc/bexport.go
index 092cdac..7020902 100644
--- a/src/cmd/compile/internal/gc/bexport.go
+++ b/src/cmd/compile/internal/gc/bexport.go
@@ -92,7 +92,7 @@
import (
"bytes"
"cmd/compile/internal/big"
- "cmd/internal/obj"
+ "cmd/internal/bio"
"encoding/binary"
"fmt"
"sort"
@@ -124,7 +124,7 @@
const exportInlined = true // default: true
type exporter struct {
- out *obj.Biobuf
+ out *bio.Buf
pkgIndex map[*Pkg]int
typIndex map[*Type]int
inlined []*Func
@@ -136,7 +136,7 @@
}
// Export writes the exportlist for localpkg to out and returns the number of bytes written.
-func Export(out *obj.Biobuf, trace bool) int {
+func Export(out *bio.Buf, trace bool) int {
p := exporter{
out: out,
pkgIndex: make(map[*Pkg]int),
@@ -1531,10 +1531,10 @@
fallthrough
case '|':
// write '|' as '|' '|'
- obj.Bputc(p.out, '|')
+ p.out.WriteByte('|')
p.written++
}
- obj.Bputc(p.out, b)
+ p.out.WriteByte(b)
p.written++
}
diff --git a/src/cmd/compile/internal/gc/export.go b/src/cmd/compile/internal/gc/export.go
index 17311cf..5d4add8 100644
--- a/src/cmd/compile/internal/gc/export.go
+++ b/src/cmd/compile/internal/gc/export.go
@@ -7,7 +7,7 @@
import (
"bufio"
"bytes"
- "cmd/internal/obj"
+ "cmd/internal/bio"
"fmt"
"sort"
"unicode"
@@ -384,7 +384,7 @@
if debugFormat {
// save a copy of the export data
var copy bytes.Buffer
- bcopy := obj.Binitw(©)
+ bcopy := bio.BufWriter(©)
size = Export(bcopy, Debug_export != 0)
bcopy.Flush() // flushing to bytes.Buffer cannot fail
if n, err := bout.Write(copy.Bytes()); n != size || err != nil {
@@ -577,7 +577,7 @@
}
func dumpasmhdr() {
- b, err := obj.Bopenw(asmhdr)
+ b, err := bio.Create(asmhdr)
if err != nil {
Fatalf("%v", err)
}
@@ -604,5 +604,5 @@
}
}
- obj.Bterm(b)
+ b.Close()
}
diff --git a/src/cmd/compile/internal/gc/go.go b/src/cmd/compile/internal/gc/go.go
index ef8b516..cd9db38 100644
--- a/src/cmd/compile/internal/gc/go.go
+++ b/src/cmd/compile/internal/gc/go.go
@@ -6,6 +6,7 @@
import (
"cmd/compile/internal/ssa"
+ "cmd/internal/bio"
"cmd/internal/obj"
)
@@ -132,7 +133,7 @@
var outfile string
-var bout *obj.Biobuf
+var bout *bio.Buf
var nerrors int
@@ -287,7 +288,7 @@
var writearchive int
-var bstdout obj.Biobuf
+var bstdout *bio.Buf
var Nacl bool
diff --git a/src/cmd/compile/internal/gc/main.go b/src/cmd/compile/internal/gc/main.go
index 079f491..c8a778c 100644
--- a/src/cmd/compile/internal/gc/main.go
+++ b/src/cmd/compile/internal/gc/main.go
@@ -9,6 +9,7 @@
import (
"bufio"
"cmd/compile/internal/ssa"
+ "cmd/internal/bio"
"cmd/internal/obj"
"cmd/internal/sys"
"flag"
@@ -97,8 +98,8 @@
Ctxt = obj.Linknew(Thearch.LinkArch)
Ctxt.DiagFunc = Yyerror
- Ctxt.Bso = &bstdout
- bstdout = *obj.Binitw(os.Stdout)
+ bstdout = bio.BufWriter(os.Stdout)
+ Ctxt.Bso = bstdout
localpkg = mkpkg("")
localpkg.Prefix = "\"\""
diff --git a/src/cmd/compile/internal/gc/obj.go b/src/cmd/compile/internal/gc/obj.go
index 99eb73b..3920e25 100644
--- a/src/cmd/compile/internal/gc/obj.go
+++ b/src/cmd/compile/internal/gc/obj.go
@@ -5,6 +5,7 @@
package gc
import (
+ "cmd/internal/bio"
"cmd/internal/obj"
"crypto/sha256"
"fmt"
@@ -23,7 +24,7 @@
func dumpobj() {
var err error
- bout, err = obj.Bopenw(outfile)
+ bout, err = bio.Create(outfile)
if err != nil {
Flusherrors()
fmt.Printf("can't create %s: %v\n", outfile, err)
@@ -33,10 +34,10 @@
startobj := int64(0)
var arhdr [ArhdrSize]byte
if writearchive != 0 {
- obj.Bwritestring(bout, "!<arch>\n")
+ bout.WriteString("!<arch>\n")
arhdr = [ArhdrSize]byte{}
bout.Write(arhdr[:])
- startobj = obj.Boffset(bout)
+ startobj = bio.Boffset(bout)
}
fmt.Fprintf(bout, "go object %s %s %s %s\n", obj.Getgoos(), obj.Getgoarch(), obj.Getgoversion(), obj.Expstring())
@@ -44,19 +45,19 @@
if writearchive != 0 {
bout.Flush()
- size := obj.Boffset(bout) - startobj
+ size := bio.Boffset(bout) - startobj
if size&1 != 0 {
- obj.Bputc(bout, 0)
+ bout.WriteByte(0)
}
- obj.Bseek(bout, startobj-ArhdrSize, 0)
+ bio.Bseek(bout, startobj-ArhdrSize, 0)
formathdr(arhdr[:], "__.PKGDEF", size)
bout.Write(arhdr[:])
bout.Flush()
- obj.Bseek(bout, startobj+size+(size&1), 0)
+ bio.Bseek(bout, startobj+size+(size&1), 0)
arhdr = [ArhdrSize]byte{}
bout.Write(arhdr[:])
- startobj = obj.Boffset(bout)
+ startobj = bio.Boffset(bout)
fmt.Fprintf(bout, "go object %s %s %s %s\n", obj.Getgoos(), obj.Getgoarch(), obj.Getgoversion(), obj.Expstring())
}
@@ -91,16 +92,16 @@
if writearchive != 0 {
bout.Flush()
- size := obj.Boffset(bout) - startobj
+ size := bio.Boffset(bout) - startobj
if size&1 != 0 {
- obj.Bputc(bout, 0)
+ bout.WriteByte(0)
}
- obj.Bseek(bout, startobj-ArhdrSize, 0)
+ bio.Bseek(bout, startobj-ArhdrSize, 0)
formathdr(arhdr[:], "_go_.o", size)
bout.Write(arhdr[:])
}
- obj.Bterm(bout)
+ bout.Close()
}
func dumpglobls() {
@@ -132,9 +133,9 @@
funcsyms = nil
}
-func Bputname(b *obj.Biobuf, s *obj.LSym) {
- obj.Bwritestring(b, s.Name)
- obj.Bputc(b, 0)
+func Bputname(b *bio.Buf, s *obj.LSym) {
+ b.WriteString(s.Name)
+ b.WriteByte(0)
}
func Linksym(s *Sym) *obj.LSym {