in jflex/src/main/java/jflex/core/unicode/CharClasses.java [158:200]
public void makeClass(IntCharSet set, boolean caseless) {
set = IntCharSet.copyOf(set); // avoid destructively updating the original
if (caseless) set = set.getCaseless(unicodeProps);
if (DEBUG) {
Out.dump("makeClass(" + set + ", " + caseless + ")");
dump();
}
int oldSize = classes.size();
for (int i = 0; i < oldSize; i++) {
IntCharSet x = classes.get(i);
if (Objects.equals(x, set)) return;
IntCharSet and = x.and(set);
if (and.containsElements()) {
if (Objects.equals(x, and)) {
set.sub(and);
continue;
} else if (Objects.equals(set, and)) {
x.sub(and);
classes.add(and);
if (DEBUG) {
Out.dump("makeClass(..) finished");
dump();
}
return;
}
set.sub(and);
x.sub(and);
classes.add(and);
}
}
if (DEBUG) {
Out.dump("makeClass(..) finished");
dump();
}
}