type Location … type Map … // Find reports whether the specified span is recorded by m, and if so returns // the new location it was mapped to. If the input span was not found, the // returned location is the same as the input. func (m Map) Find(pos, end int) (Location, bool) { … } func (m Map) add(opos, oend, npos, nend int) { … } // Compute constructs a location mapping from input to output. An error is // reported if any of the tokens of output cannot be mapped. func Compute(input, output []byte) (Map, error) { … } type tokinfo … func tokenize(src []byte) []tokinfo { … }