aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRob Pike <r@golang.org>2011-06-03 07:53:50 +1000
committerRob Pike <r@golang.org>2011-06-03 07:53:50 +1000
commitce5c1cf0368a7b17254086ab00134e47137ee720 (patch)
tree99273e4430cdc58a3081d1928e94ea74e1b639a8
parent4e9e92500249258e9baa77fbaf8075f0c07e56b2 (diff)
downloadgo-ce5c1cf0368a7b17254086ab00134e47137ee720.tar.gz
go-ce5c1cf0368a7b17254086ab00134e47137ee720.zip
fmt: fix bug in UnreadRune: must clear memory of previous
rune if input implements UnreadRune; otherwise the lookahead will lie. R=golang-dev, rsc CC=golang-dev https://golang.org/cl/4548082
-rw-r--r--src/pkg/fmt/scan.go10
1 files changed, 1 insertions, 9 deletions
diff --git a/src/pkg/fmt/scan.go b/src/pkg/fmt/scan.go
index 2aade027bb..dd8548ceb7 100644
--- a/src/pkg/fmt/scan.go
+++ b/src/pkg/fmt/scan.go
@@ -226,20 +226,12 @@ func (s *ss) mustReadRune() (rune int) {
}
func (s *ss) UnreadRune() os.Error {
- // Don't use strings.Reader.UnreadRune for now - appears to cause a problem.
- // TODO(r, gri): Fix this and remove code between --- lines!
- // ---
- if _, ok := s.rr.(*strings.Reader); ok {
- s.peekRune = s.prevRune
- s.count--
- return nil
- }
- // ---
if u, ok := s.rr.(runeUnreader); ok {
u.UnreadRune()
} else {
s.peekRune = s.prevRune
}
+ s.prevRune = -1
s.count--
return nil
}