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 1f2ae1dc6174d15fdfa96d266012d3cb868b42b6 Author: Marcin Mielzynski <[email protected]> Date: Mon Feb 20 03:14:51 2012 +0100 Make EXACTMBN opcode use string tamplates. --- src/org/joni/ArrayCompiler.java | 2 +- src/org/joni/ByteCodeMachine.java | 17 ++++++++++++++--- src/org/joni/ByteCodePrinter.java | 17 +++++++++++++++-- src/org/joni/Config.java | 1 + src/org/joni/Parser.java | 4 +--- 5 files changed, 32 insertions(+), 9 deletions(-) diff --git a/src/org/joni/ArrayCompiler.java b/src/org/joni/ArrayCompiler.java index 6ac7429..fed29c5 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 || op == OPCode.EXACTN_IC || op == OPCode.EXACTN_IC_SB; + return op == OPCode.EXACTN || op == OPCode.EXACTMB2N || op == OPCode.EXACTN_IC || op == OPCode.EXACTN_IC_SB || op == OPCode.EXACTMBN; } private int selectStrOpcode(int mbLength, int strLength, boolean ignoreCase) { diff --git a/src/org/joni/ByteCodeMachine.java b/src/org/joni/ByteCodeMachine.java index 3e5f8fb..fbe5956 100644 --- a/src/org/joni/ByteCodeMachine.java +++ b/src/org/joni/ByteCodeMachine.java @@ -571,10 +571,21 @@ class ByteCodeMachine extends StackMachine { tlen2 *= tlen; if (s + tlen2 > range) {opFail(); return;} - while(tlen2-- > 0) { - if (code[ip] != bytes[s]) {opFail(); return;} - ip++; s++; + if (Config.USE_STRING_TEMPLATES) { + byte[]bs = regex.templates[code[ip++]]; + int ps = code[ip++]; + + while (tlen2-- > 0) { + if (bs[ps] != bytes[s]) {opFail(); return;} + ps++; s++; + } + } else { + while (tlen2-- > 0) { + if (code[ip] != bytes[s]) {opFail(); return;} + ip++; s++; + } } + sprev = s - tlen; } diff --git a/src/org/joni/ByteCodePrinter.java b/src/org/joni/ByteCodePrinter.java index 6c95149..112a2ec 100644 --- a/src/org/joni/ByteCodePrinter.java +++ b/src/org/joni/ByteCodePrinter.java @@ -205,9 +205,22 @@ class ByteCodePrinter { bp += OPSize.LENGTH; len = code[bp]; bp += OPSize.LENGTH; - sb.append(":" + mbLen + ":" + len + ":"); n = len * mbLen; - while (n-- > 0) sb.append(new String(new byte[]{(byte)code[bp++]})); + + if (Config.USE_STRING_TEMPLATES) { + tm = code[bp]; + bp += OPSize.INDEX; + idx = code[bp]; + bp += OPSize.INDEX; + sb.append(":T:" + mbLen + ":" + len + ":"); + + while (n-- > 0) sb.append(new String(new byte[]{templates[tm][idx++]})); + } else { + sb.append(":" + mbLen + ":" + len + ":"); + + while (n-- > 0) sb.append(new String(new byte[]{(byte)code[bp++]})); + } + break; case OPCode.EXACT1_IC: diff --git a/src/org/joni/Config.java b/src/org/joni/Config.java index dab3565..3467966 100644 --- a/src/org/joni/Config.java +++ b/src/org/joni/Config.java @@ -80,6 +80,7 @@ public interface Config extends org.jcodings.Config { final PrintStream err = System.err; final boolean DEBUG_ALL = false; + final boolean DEBUG = DEBUG_ALL; final boolean DEBUG_PARSE_TREE = DEBUG_ALL; final boolean DEBUG_PARSE_TREE_RAW = true; diff --git a/src/org/joni/Parser.java b/src/org/joni/Parser.java index 6ee740e..a5fa50d 100644 --- a/src/org/joni/Parser.java +++ b/src/org/joni/Parser.java @@ -773,7 +773,6 @@ class Parser extends Lexer { } node = new CallNode(bytes, token.getCallNameP(), token.getCallNameEnd(), gNum); env.numCall++; - break; } // USE_SUBEXP_CALL break; @@ -790,8 +789,7 @@ class Parser extends Lexer { node = new StringNode(); // node_new_empty } } else { - // !goto tk_byte;! - return parseExpTkByte(group); + return parseExpTkByte(group); // goto tk_byte } break; -- 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

