code: func (p *Parser) fill() {
  	p.offs += p.bsp
  	left := len(p.bs) - p.bsp
  	copy(p.readBuf[:left], p.readBuf[p.bsp:])
  readAgain:
  	n, err := 0, p.readErr
  	if err == nil {
  		n, err = p.src.Read(p.readBuf[left:])
  		p.readErr = err
  	}
  	if n == 0 {
  		if err == nil {
  			goto readAgain
  		}
  		// don't use p.errPass as we don't want to overwrite p.tok
  		if err != io.EOF {
  			p.err = err
  		}
  		if left > 0 {
  			p.bs = p.readBuf[:left]
  		} else {
  			p.bs = nil
  		}
  	} else {
  		p.bs = p.readBuf[:left+n]
  	}
  	p.bsp = 0
  }
docs: // fill reads more bytes from the input src into readBuf. Any bytes that
  // had not yet been used at the end of the buffer are slid into the
  // beginning of the buffer.