diff options
author | Ian Lance Taylor <iant@golang.org> | 2017-01-14 00:05:42 +0000 |
---|---|---|
committer | Ian Lance Taylor <ian@gcc.gnu.org> | 2017-01-14 00:05:42 +0000 |
commit | c2047754c300b68c05d65faa8dc2925fe67b71b4 (patch) | |
tree | e183ae81a1f48a02945cb6de463a70c5be1b06f6 /libgo/go/bufio | |
parent | 829afb8f05602bb31c9c597b24df7377fed4f059 (diff) | |
download | gcc-c2047754c300b68c05d65faa8dc2925fe67b71b4.tar.gz |
libgo: update to Go 1.8 release candidate 1
Compiler changes:
* Change map assignment to use mapassign and assign value directly.
* Change string iteration to use decoderune, faster for ASCII strings.
* Change makeslice to take int, and use makeslice64 for larger values.
* Add new noverflow field to hmap struct used for maps.
Unresolved problems, to be fixed later:
* Commented out test in go/types/sizes_test.go that doesn't compile.
* Commented out reflect.TestStructOf test for padding after zero-sized field.
Reviewed-on: https://go-review.googlesource.com/35231
gotools/:
Updates for Go 1.8rc1.
* Makefile.am (go_cmd_go_files): Add bug.go.
(s-zdefaultcc): Write defaultPkgConfig.
* Makefile.in: Rebuild.
From-SVN: r244456
Diffstat (limited to 'libgo/go/bufio')
-rw-r--r-- | libgo/go/bufio/bufio.go | 29 | ||||
-rw-r--r-- | libgo/go/bufio/bufio_test.go | 21 | ||||
-rw-r--r-- | libgo/go/bufio/scan.go | 1 |
3 files changed, 37 insertions, 14 deletions
diff --git a/libgo/go/bufio/bufio.go b/libgo/go/bufio/bufio.go index 3b30b8b80cd..e1e8fb22720 100644 --- a/libgo/go/bufio/bufio.go +++ b/libgo/go/bufio/bufio.go @@ -206,10 +206,18 @@ func (b *Reader) Read(p []byte) (n int, err error) { } return n, b.readErr() } - b.fill() // buffer is empty - if b.r == b.w { + // One read. + // Do not use b.fill, which will loop. + b.r = 0 + b.w = 0 + n, b.err = b.rd.Read(b.buf) + if n < 0 { + panic(errNegativeRead) + } + if n == 0 { return 0, b.readErr() } + b.w += n } // copy as much as we can @@ -549,11 +557,6 @@ func (b *Writer) Reset(w io.Writer) { // Flush writes any buffered data to the underlying io.Writer. func (b *Writer) Flush() error { - err := b.flush() - return err -} - -func (b *Writer) flush() error { if b.err != nil { return b.err } @@ -596,7 +599,7 @@ func (b *Writer) Write(p []byte) (nn int, err error) { } else { n = copy(b.buf[b.n:], p) b.n += n - b.flush() + b.Flush() } nn += n p = p[n:] @@ -615,7 +618,7 @@ func (b *Writer) WriteByte(c byte) error { if b.err != nil { return b.err } - if b.Available() <= 0 && b.flush() != nil { + if b.Available() <= 0 && b.Flush() != nil { return b.err } b.buf[b.n] = c @@ -638,7 +641,7 @@ func (b *Writer) WriteRune(r rune) (size int, err error) { } n := b.Available() if n < utf8.UTFMax { - if b.flush(); b.err != nil { + if b.Flush(); b.err != nil { return 0, b.err } n = b.Available() @@ -663,7 +666,7 @@ func (b *Writer) WriteString(s string) (int, error) { b.n += n nn += n s = s[n:] - b.flush() + b.Flush() } if b.err != nil { return nn, b.err @@ -684,7 +687,7 @@ func (b *Writer) ReadFrom(r io.Reader) (n int64, err error) { var m int for { if b.Available() == 0 { - if err1 := b.flush(); err1 != nil { + if err1 := b.Flush(); err1 != nil { return n, err1 } } @@ -708,7 +711,7 @@ func (b *Writer) ReadFrom(r io.Reader) (n int64, err error) { if err == io.EOF { // If we filled the buffer exactly, flush preemptively. if b.Available() == 0 { - err = b.flush() + err = b.Flush() } else { err = nil } diff --git a/libgo/go/bufio/bufio_test.go b/libgo/go/bufio/bufio_test.go index 858048696e4..ef0f6c834e8 100644 --- a/libgo/go/bufio/bufio_test.go +++ b/libgo/go/bufio/bufio_test.go @@ -1236,6 +1236,27 @@ func TestWriterReadFromErrNoProgress(t *testing.T) { } } +func TestReadZero(t *testing.T) { + for _, size := range []int{100, 2} { + t.Run(fmt.Sprintf("bufsize=%d", size), func(t *testing.T) { + r := io.MultiReader(strings.NewReader("abc"), &emptyThenNonEmptyReader{r: strings.NewReader("def"), n: 1}) + br := NewReaderSize(r, size) + want := func(s string, wantErr error) { + p := make([]byte, 50) + n, err := br.Read(p) + if err != wantErr || n != len(s) || string(p[:n]) != s { + t.Fatalf("read(%d) = %q, %v, want %q, %v", len(p), string(p[:n]), err, s, wantErr) + } + t.Logf("read(%d) = %q, %v", len(p), string(p[:n]), err) + } + want("abc", nil) + want("", nil) + want("def", nil) + want("", io.EOF) + }) + } +} + func TestReaderReset(t *testing.T) { r := NewReader(strings.NewReader("foo foo")) buf := make([]byte, 3) diff --git a/libgo/go/bufio/scan.go b/libgo/go/bufio/scan.go index 27a0f004595..9f741c98307 100644 --- a/libgo/go/bufio/scan.go +++ b/libgo/go/bufio/scan.go @@ -199,7 +199,6 @@ func (s *Scanner) Scan() bool { s.buf = newBuf s.end -= s.start s.start = 0 - continue } // Finally we can read some input. Make sure we don't get stuck with // a misbehaving Reader. Officially we don't need to do this, but let's |