This is an automated email from the git hooks/post-receive script. henrich pushed a commit to branch debian/sid in repository jruby-joni.
commit 2b108024033385c32a674b8c460f93a7b5da6712 Author: Marcin Mielzynski <[email protected]> Date: Mon Feb 20 01:33:03 2012 +0100 Make OPCode.EXACTN_IC, OPCode.EXACTN_IC_SB use string templates as well. --- src/org/joni/Analyser.java | 2 +- src/org/joni/ArrayCompiler.java | 2 +- src/org/joni/ByteCodeMachine.java | 63 +++++++++++++++++++++++++++++---------- src/org/joni/ByteCodePrinter.java | 12 ++++++-- 4 files changed, 60 insertions(+), 19 deletions(-) diff --git a/src/org/joni/Analyser.java b/src/org/joni/Analyser.java index b8995ce..7b03ec2 100644 --- a/src/org/joni/Analyser.java +++ b/src/org/joni/Analyser.java @@ -172,7 +172,7 @@ final class Analyser extends Parser { if (Config.DEBUG_COMPILE) { if (Config.USE_NAMED_GROUP) Config.log.print(regex.nameTableToString()); Config.log.println("stack used: " + regex.stackNeeded); - if (Config.USE_STRING_TEMPLATES) Config.log.print(" templates: " + regex.templateNum); + if (Config.USE_STRING_TEMPLATES) Config.log.print("templates: " + regex.templateNum + "\n"); Config.log.println(new ByteCodePrinter(regex).byteCodeListToString()); } // DEBUG_COMPILE diff --git a/src/org/joni/ArrayCompiler.java b/src/org/joni/ArrayCompiler.java index f863a3f..6ac7429 100644 --- a/src/org/joni/ArrayCompiler.java +++ b/src/org/joni/ArrayCompiler.java @@ -106,7 +106,7 @@ final class ArrayCompiler extends Compiler { } private boolean opTemplated(int op) { - return op == OPCode.EXACTN || op == OPCode.EXACTMB2N; + return op == OPCode.EXACTN || op == OPCode.EXACTMB2N || op == OPCode.EXACTN_IC || op == OPCode.EXACTN_IC_SB; } private int selectStrOpcode(int mbLength, int strLength, boolean ignoreCase) { diff --git a/src/org/joni/ByteCodeMachine.java b/src/org/joni/ByteCodeMachine.java index f36a2ce..1c78909 100644 --- a/src/org/joni/ByteCodeMachine.java +++ b/src/org/joni/ByteCodeMachine.java @@ -605,32 +605,65 @@ class ByteCodeMachine extends StackMachine { private void opExactNIC() { int tlen = code[ip++]; - int endp = ip + tlen; - byte[]lowbuf = cfbuf(); - while (ip < endp) { - sprev = s; - if (s >= range) {opFail(); return;} + if (Config.USE_STRING_TEMPLATES) { + byte[]bs = regex.templates[code[ip++]]; + int ps = code[ip++]; + int endp = ps + tlen; - value = s; - int len = enc.mbcCaseFold(regex.caseFoldFlag, bytes, this, end, lowbuf); - s = value; + while (ps < endp) { + sprev = s; + if (s >= range) {opFail(); return;} + + 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 (bs[ps] != lowbuf[q]) {opFail(); return;} + ps++; q++; + } + } + } else { + int endp = ip + tlen; - if (s > range) {opFail(); return;} - int q = 0; - while (len-- > 0) { - if (code[ip] != lowbuf[q]) {opFail(); return;} - ip++; q++; + while (ip < endp) { + sprev = s; + if (s >= range) {opFail(); return;} + + 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++; + } } } + } private void opExactNICSb() { int tlen = code[ip++]; if (s + tlen > range) {opFail(); return;} - byte[]toLowerTable = enc.toLowerCaseTable(); - while (tlen-- > 0) if (code[ip++] != toLowerTable[bytes[s++] & 0xff]) {opFail(); return;} + + if (Config.USE_STRING_TEMPLATES) { + byte[]bs = regex.templates[code[ip++]]; + int ps = code[ip++]; + byte[]toLowerTable = enc.toLowerCaseTable(); + while (tlen-- > 0) if (bs[ps++] != toLowerTable[bytes[s++] & 0xff]) {opFail(); return;} + + } else { + byte[]toLowerTable = enc.toLowerCaseTable(); + while (tlen-- > 0) if (code[ip++] != toLowerTable[bytes[s++] & 0xff]) {opFail(); return;} + + } sprev = s - 1; } diff --git a/src/org/joni/ByteCodePrinter.java b/src/org/joni/ByteCodePrinter.java index 4cddca3..6c95149 100644 --- a/src/org/joni/ByteCodePrinter.java +++ b/src/org/joni/ByteCodePrinter.java @@ -224,8 +224,16 @@ class ByteCodePrinter { case OPCode.EXACTN_IC_SB: len = code[bp]; bp += OPSize.LENGTH; - pLenString(sb, len, 1, bp); - bp += len; + if (Config.USE_STRING_TEMPLATES) { + tm = code[bp]; + bp += OPSize.INDEX; + idx = code[bp]; + bp += OPSize.INDEX; + pLenStringFromTemplate(sb, len, 1, templates[tm], idx); + } else { + pLenString(sb, len, 1, bp); + bp += len; + } break; case OPCode.CCLASS: -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-java/jruby-joni.git _______________________________________________ pkg-java-commits mailing list [email protected] http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-java-commits

