Skip to content

Commit

Permalink
cmd/internal/obj: remove Biobuf unget
Browse files Browse the repository at this point in the history
This change applies CL 9365 to the copy of Biobuf in cmd/internal/obj.

In the process I discovered that some of the methods that should have been
checking the unget buffer before reading were not and it was probably just
dumb luck that we handn't hit these issues before; Bungetc is only used in
one place in cmd/internal/gc and only an unlikely code path.

Change-Id: Ifa0c5c08442e9fe951a5078c6e9ec77a8a4dc2ff
Reviewed-on: https://go-review.googlesource.com/9529
Reviewed-by: Daniel Morsing <[email protected]>
Reviewed-by: Ian Lance Taylor <[email protected]>
Reviewed-by: Dave Cheney <[email protected]>
Run-TryBot: Dave Cheney <[email protected]>
  • Loading branch information
davecheney committed May 1, 2015
1 parent c723230 commit 8d16253
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 27 deletions.
17 changes: 9 additions & 8 deletions src/cmd/internal/gc/lex.go
Original file line number Diff line number Diff line change
Expand Up @@ -1865,20 +1865,21 @@ func getc() int {
curio.cp = curio.cp[1:]
}
} else {
var c1 int
var c2 int
loop:
c = obj.Bgetc(curio.bin)
if c == 0xef {
c1 = obj.Bgetc(curio.bin)
c2 = obj.Bgetc(curio.bin)
if c1 == 0xbb && c2 == 0xbf {
buf, err := curio.bin.Peek(2)
if err != nil {
log.Fatalf("getc: peeking: %v", err)
}
if buf[0] == 0xbb && buf[1] == 0xbf {
yyerrorl(int(lexlineno), "Unicode (UTF-8) BOM in middle of file")

// consume BOM bytes
obj.Bgetc(curio.bin)
obj.Bgetc(curio.bin)
goto loop
}

obj.Bungetc(curio.bin)
obj.Bungetc(curio.bin)
}
}

Expand Down
29 changes: 10 additions & 19 deletions src/cmd/internal/obj/util.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,12 +28,10 @@ func Cputime() float64 {
}

type Biobuf struct {
unget [2]int
numUnget int
f *os.File
r *bufio.Reader
w *bufio.Writer
linelen int
f *os.File
r *bufio.Reader
w *bufio.Writer
linelen int
}

func Bopenw(name string) (*Biobuf, error) {
Expand Down Expand Up @@ -116,18 +114,11 @@ func Bread(b *Biobuf, p []byte) int {
}

func Bgetc(b *Biobuf) int {
if b.numUnget > 0 {
b.numUnget--
return int(b.unget[b.numUnget])
}
c, err := b.r.ReadByte()
r := int(c)
if err != nil {
r = -1
return -1
}
b.unget[1] = b.unget[0]
b.unget[0] = r
return r
return int(c)
}

func Bgetrune(b *Biobuf) int {
Expand All @@ -146,6 +137,10 @@ func (b *Biobuf) Read(p []byte) (int, error) {
return b.r.Read(p)
}

func (b *Biobuf) Peek(n int) ([]byte, error) {
return b.r.Peek(n)
}

func Brdline(b *Biobuf, delim int) string {
s, err := b.r.ReadBytes(byte(delim))
if err != nil {
Expand Down Expand Up @@ -181,10 +176,6 @@ func Blinelen(b *Biobuf) int {
return b.linelen
}

func Bungetc(b *Biobuf) {
b.numUnget++
}

func Bterm(b *Biobuf) error {
var err error
if b.w != nil {
Expand Down

0 comments on commit 8d16253

Please sign in to comment.