code: func (m *matcher) stepByte(runq, nextq *sparse.Set, c int, flag syntax.EmptyOp) (match bool) {
  	nextq.Reset()
  	m.addq(nextq, uint32(m.prog.Start), flag)
  	for _, id := range runq.Dense() {
  		i := &m.prog.Inst[id]
  		switch i.Op {
  		default:
  			continue
  		case syntax.InstMatch:
  			match = true
  			continue
  		case instByteRange:
  			if c == endText {
  				break
  			}
  			lo := int((i.Arg >> 8) & 0xFF)
  			hi := int(i.Arg & 0xFF)
  			ch := c
  			if i.Arg&argFold != 0 && 'a' <= ch && ch <= 'z' {
  				ch += 'A' - 'a'
  			}
  			if lo <= ch && ch <= hi {
  				m.addq(nextq, i.Out, flag)
  			}
  		}
  	}
  	return
  }
docs: // stepByte steps runq to nextq consuming c and then expanding according to flag.
  // It returns true if a match ends immediately before c.
  // c is either an input byte or endText.