]> Cypherpunks repositories - gostls13.git/commitdiff
token/position: provide files iterator
authorRobert Griesemer <gri@golang.org>
Tue, 14 Dec 2010 01:08:40 +0000 (17:08 -0800)
committerRobert Griesemer <gri@golang.org>
Tue, 14 Dec 2010 01:08:40 +0000 (17:08 -0800)
R=golang-dev, r2
CC=golang-dev
https://golang.org/cl/3541044

src/pkg/go/token/position.go
src/pkg/go/token/position_test.go

index 8eb8d138e6bc9c342dd274c5a52a65afb02e8527..0044a0ed77d53541f97e35686dbf07802698a364 100644 (file)
@@ -385,3 +385,25 @@ func (s *FileSet) AddFile(filename string, base, size int) *File {
        s.files = append(s.files, f)
        return f
 }
+
+
+// Files returns the files added to the file set.
+func (s *FileSet) Files() <-chan *File {
+       ch := make(chan *File)
+       go func() {
+               for i := 0; ; i++ {
+                       var f *File
+                       s.mutex.RLock()
+                       if i < len(s.files) {
+                               f = s.files[i]
+                       }
+                       s.mutex.RUnlock()
+                       if f == nil {
+                               break
+                       }
+                       ch <- f
+               }
+               close(ch)
+       }()
+       return ch
+}
index bc10ef6c0ae2acc9d7c5ab070b495c81e8c6b834..1cffcc3c27857f1928534c45d424967fa72710ab 100644 (file)
@@ -138,3 +138,21 @@ func TestLineInfo(t *testing.T) {
                checkPos(t, msg, fset.Position(p), Position{"bar", offs, 42, col})
        }
 }
+
+
+func TestFiles(t *testing.T) {
+       fset := NewFileSet()
+       for i, test := range tests {
+               fset.AddFile(test.filename, fset.Base(), test.size)
+               j := 0
+               for g := range fset.Files() {
+                       if g.Name() != tests[j].filename {
+                               t.Errorf("expected filename = %s; got %s", tests[j].filename, g.Name())
+                       }
+                       j++
+               }
+               if j != i+1 {
+                       t.Errorf("expected %d files; got %d", i+1, j)
+               }
+       }
+}