// addq adds id to the queue, expanding according to flag. func (m *matcher) addq(q *sparse.Set, id uint32, flag syntax.EmptyOp) { if q.Has(id) { return } q.Add(id) i := &m.prog.Inst[id] switch i.Op { case syntax.InstCapture, syntax.InstNop: m.addq(q, i.Out, flag) case syntax.InstAlt, syntax.InstAltMatch: m.addq(q, i.Out, flag) m.addq(q, i.Arg, flag) case syntax.InstEmptyWidth: if syntax.EmptyOp(i.Arg)&^flag == 0 { m.addq(q, i.Out, flag) } } }