@Override Matcher create(Regex regex, Region region, byte[]bytes, int p, int end) { return new ByteCodeMachine(regex, region, bytes, p, end); } };
private void opBackRef1() { backref(1); }
private void backref(int mem) { if (mem > regex.numMem || backrefInvalid(mem)) {opFail(); return;} int pstart = backrefStart(mem); int pend = backrefEnd(mem); int n = pend - pstart; if (s + n > range) {opFail(); return;} sprev = s; while (n-- > 0) if (bytes[pstart++] != bytes[s++]) {opFail(); return;} if (sprev < range) { // beyond string check int len; while (sprev + (len = enc.length(bytes, sprev, end)) < s) sprev += len; } }
private void opExact1IC() { if (s >= range) {opFail(); return;} byte[]lowbuf = cfbuf(); value = s; int len = enc.mbcCaseFold(regex.caseFoldFlag, bytes, this, end, lowbuf); s = value; if (s > range) {opFail(); return;} int q = 0; while (len-- > 0) { if (code[ip] != lowbuf[q]) {opFail(); return;} ip++; q++; } sprev = sbegin; // break; }
protected final int matchAt(int _range, int _sstart, int _sprev, boolean interrupt) throws InterruptedException { range = _range; sstart = _sstart; sprev = _sprev; stk = 0; ip = 0; if (Config.DEBUG_MATCH) debugMatchBegin(); stackInit(); bestLen = -1; s = _sstart; pkeep = _sstart; return enc.isSingleByte() || (msaOptions & Option.CR_7_BIT) != 0 ? executeSb(interrupt) : execute(interrupt); }
private void opBackRefAtLevel() { int ic = code[ip++]; int level = code[ip++]; int tlen = code[ip++]; sprev = s; if (backrefMatchAtNestedLevel(ic != 0, regex.caseFoldFlag, level, tlen, ip)) { // (s) and (end) implicit int len; if (sprev < range) { while (sprev + (len = enc.length(bytes, sprev, end)) < s) sprev += len; } ip += tlen; // * SIZE_MEMNUM } else { {opFail(); return;} } }
private boolean stringCmpIC(int caseFlodFlag, int s1, IntHolder ps2, int mbLen, int textEnd) { byte[]buf1 = cfbuf(); byte[]buf2 = cfbuf2(); int s2 = ps2.value; int end1 = s1 + mbLen; while (s1 < end1) { value = s1; int len1 = enc.mbcCaseFold(caseFlodFlag, bytes, this, textEnd, buf1); s1 = value; value = s2; int len2 = enc.mbcCaseFold(caseFlodFlag, bytes, this, textEnd, buf2); s2 = value; if (len1 != len2) return false; int p1 = 0; int p2 = 0; while (len1-- > 0) { if (buf1[p1] != buf2[p2]) return false; p1++; p2++; } } ps2.value = s2; return true; }
} else { return endBestLength(); return endBestLength();
protected final int matchAt(int _range, int _sstart, int _sprev, boolean interrupt) throws InterruptedException { range = _range; sstart = _sstart; sprev = _sprev; stk = 0; ip = 0; if (Config.DEBUG_MATCH) debugMatchBegin(); stackInit(); bestLen = -1; s = _sstart; pkeep = _sstart; return enc.isSingleByte() || (msaOptions & Option.CR_7_BIT) != 0 ? executeSb(interrupt) : execute(interrupt); }
private void opExact1IC() { if (s >= range) {opFail(); return;} byte[]lowbuf = cfbuf(); value = s; int len = enc.mbcCaseFold(regex.caseFoldFlag, bytes, this, end, lowbuf); s = value; if (s > range) {opFail(); return;} int q = 0; while (len-- > 0) { if (code[ip] != lowbuf[q]) {opFail(); return;} ip++; q++; } sprev = sbegin; // break; }
private void opBackRefAtLevel() { int ic = code[ip++]; int level = code[ip++]; int tlen = code[ip++]; sprev = s; if (backrefMatchAtNestedLevel(ic != 0, regex.caseFoldFlag, level, tlen, ip)) { // (s) and (end) implicit int len; if (sprev < range) { while (sprev + (len = enc.length(bytes, sprev, end)) < s) sprev += len; } ip += tlen; // * SIZE_MEMNUM } else { {opFail(); return;} } }
private boolean stringCmpIC(int caseFlodFlag, int s1, IntHolder ps2, int mbLen, int textEnd) { byte[]buf1 = cfbuf(); byte[]buf2 = cfbuf2(); int s2 = ps2.value; int end1 = s1 + mbLen; while (s1 < end1) { value = s1; int len1 = enc.mbcCaseFold(caseFlodFlag, bytes, this, textEnd, buf1); s1 = value; value = s2; int len2 = enc.mbcCaseFold(caseFlodFlag, bytes, this, textEnd, buf2); s2 = value; if (len1 != len2) return false; int p1 = 0; int p2 = 0; while (len1-- > 0) { if (buf1[p1] != buf2[p2]) return false; p1++; p2++; } } ps2.value = s2; return true; }
} else { return endBestLength(); return endBestLength();
private void backref(int mem) { if (mem > regex.numMem || backrefInvalid(mem)) {opFail(); return;} int pstart = backrefStart(mem); int pend = backrefEnd(mem); int n = pend - pstart; if (s + n > range) {opFail(); return;} sprev = s; while (n-- > 0) if (bytes[pstart++] != bytes[s++]) {opFail(); return;} if (sprev < range) { // beyond string check int len; while (sprev + (len = enc.length(bytes, sprev, end)) < s) sprev += len; } }
private void opBackRef1() { backref(1); }
@Override Matcher create(Regex regex, Region region, byte[]bytes, int p, int end) { return new ByteCodeMachine(regex, region, bytes, p, end); } };
private void opBackRefNIC() { int mem = code[ip++]; if (mem > regex.numMem || backrefInvalid(mem)) {opFail(); return;} int pstart = backrefStart(mem); int pend = backrefEnd(mem); int n = pend - pstart; if (s + n > range) {opFail(); return;} sprev = s; value = s; if (!stringCmpIC(regex.caseFoldFlag, pstart, this, n, end)) {opFail(); return;} s = value; if (sprev < range) { int len; while (sprev + (len = enc.length(bytes, sprev, end)) < s) sprev += len; } }
private void opBackRef2() { backref(2); }