}
Element[] expansion = o2;
Sequence ret = null;
- if (dropAll || lame) ret = Sequence.drop(expansion, and, not, lame);
- else if (unwrap) ret = new Sequence.Unwrap(expansion, drops, and, not);
- else if (tag!=null) ret = Sequence.rewritingSequence(tag, expansion, drops, and, not);
+ if (dropAll || lame) ret = Sequence.drop(expansion, lame);
+ else if (unwrap) ret = new Sequence.Unwrap(expansion, drops);
+ else if (tag!=null) ret = Sequence.rewritingSequence(tag, expansion, drops);
else {
int idx = -1;
for(int i=0; i<expansion.length; i++)
if (!drops[i])
if (idx==-1) idx = i;
- else throw new Error("multiple non-dropped elements in sequence: " + Sequence.drop(expansion,null,null,false));
- if (idx != -1) ret = Sequence.singleton(expansion, idx, and, not);
- else ret = Sequence.drop(expansion, and, not, false);
+ else throw new Error("multiple non-dropped elements in sequence: " + Sequence.drop(expansion,false));
+ if (idx != -1) ret = Sequence.singleton(expansion, idx);
+ else ret = Sequence.drop(expansion, false);
}
+ for(Sequence s : and) ret = ret.and(s);
+ for(Sequence s : not) ret = ret.not(s);
set.add(ret);
if (this.noFollow != null) ret.noFollow = new Atom.Invert(new Atom.Infer(this.noFollow));
return ret;