// A File is a handle for a file belonging to a FileSet.
// A File has a name, size, and line offset table.
type File struct {
- set *FileSet
name string // file name as provided to AddFile
base int // Pos value range for this file is [base...base+size]
size int // file size as provided to AddFile
panic(fmt.Sprintf("invalid size %d (should be >= 0)", size))
}
// base >= s.base && size >= 0
- f := &File{set: s, name: filename, base: base, size: size, lines: []int{0}}
+ f := &File{name: filename, base: base, size: size, lines: []int{0}}
base += size + 1 // +1 because EOF also has a position
if base < 0 {
panic("token.Pos offset overflow (> 2G of source code in file set)")
for i, f := range p.files {
g := q.files[i]
- if f.set != p {
- return fmt.Errorf("wrong fileset for %q", f.name)
- }
- if g.set != q {
- return fmt.Errorf("wrong fileset for %q", g.name)
- }
if f.name != g.name {
return fmt.Errorf("different filenames: %q != %q", f.name, g.name)
}