[jruby-joni] 203/223: Optimize stack requirement info
Hideki Yamane
henrich at moszumanska.debian.org
Mon Nov 16 11:22:13 UTC 2015
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 d829b2a4f532ac37ca0e1d632ca7894417992872
Author: Marcin Mielzynski <lopx at gazeta.pl>
Date: Thu Apr 9 21:16:39 2015 +0200
Optimize stack requirement info
---
src/org/joni/Analyser.java | 2 +-
src/org/joni/ArrayCompiler.java | 49 +++++++++--------------------------------
src/org/joni/Regex.java | 2 +-
src/org/joni/StackMachine.java | 2 +-
4 files changed, 14 insertions(+), 41 deletions(-)
diff --git a/src/org/joni/Analyser.java b/src/org/joni/Analyser.java
index 1cffd9a..46fd470 100644
--- a/src/org/joni/Analyser.java
+++ b/src/org/joni/Analyser.java
@@ -170,7 +170,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);
+ Config.log.println("stack used: " + regex.requireStack);
if (Config.USE_STRING_TEMPLATES) Config.log.print("templates: " + regex.templateNum + "\n");
Config.log.println(new ByteCodePrinter(regex).byteCodeListToString());
diff --git a/src/org/joni/ArrayCompiler.java b/src/org/joni/ArrayCompiler.java
index 224c01b..9b61ecd 100644
--- a/src/org/joni/ArrayCompiler.java
+++ b/src/org/joni/ArrayCompiler.java
@@ -96,6 +96,7 @@ final class ArrayCompiler extends Compiler {
do {
len = compileLengthTree(aln.car);
if (aln.cdr != null) {
+ regex.requireStack = true;
addOpcodeRelAddr(OPCode.PUSH, len + OPSize.JUMP);
}
compileTree(aln.car);
@@ -161,6 +162,7 @@ final class ArrayCompiler extends Compiler {
int savedNumNullCheck = regex.numNullCheck;
if (emptyInfo != 0) {
+ regex.requireStack = true;
addOpcode(OPCode.NULL_CHECK_START);
addMemNum(regex.numNullCheck); /* NULL CHECK ID */
regex.numNullCheck++;
@@ -419,6 +421,7 @@ final class ArrayCompiler extends Compiler {
}
private void compileRangeRepeatNode(QuantifierNode qn, int targetLen, int emptyInfo) {
+ regex.requireStack = true;
int numRepeat = regex.numRepeat;
addOpcode(qn.greedy ? OPCode.REPEAT : OPCode.REPEAT_NG);
addMemNum(numRepeat); /* OP_REPEAT ID */
@@ -517,6 +520,7 @@ final class ArrayCompiler extends Compiler {
@Override
protected void compileCECQuantifierNode(QuantifierNode qn) {
+ regex.requireStack = true;
boolean infinite = isRepeatInfinite(qn.upper);
int emptyInfo = qn.targetEmptyInfo;
@@ -691,6 +695,7 @@ final class ArrayCompiler extends Compiler {
@Override
protected void compileNonCECQuantifierNode(QuantifierNode qn) {
+ regex.requireStack = true;
boolean infinite = isRepeatInfinite(qn.upper);
int emptyInfo = qn.targetEmptyInfo;
@@ -887,6 +892,7 @@ final class ArrayCompiler extends Compiler {
case EncloseType.MEMORY:
if (Config.USE_SUBEXP_CALL) {
if (node.isCalled()) {
+ regex.requireStack = true;
addOpcode(OPCode.CALL);
node.callAddr = codeLength + OPSize.ABSADDR + OPSize.JUMP;
node.setAddrFixed();
@@ -903,6 +909,7 @@ final class ArrayCompiler extends Compiler {
} // USE_SUBEXP_CALL
if (bsAt(regex.btMemStart, node.regNum)) {
+ regex.requireStack = true;
addOpcode(OPCode.MEMORY_START_PUSH);
} else {
addOpcode(OPCode.MEMORY_START);
@@ -930,6 +937,7 @@ final class ArrayCompiler extends Compiler {
break;
case EncloseType.STOP_BACKTRACK:
+ regex.requireStack = true;
if (node.isStopBtSimpleRepeat()) {
QuantifierNode qn = (QuantifierNode)node.target;
@@ -1039,12 +1047,14 @@ final class ArrayCompiler extends Compiler {
break;
case AnchorType.PREC_READ:
+ regex.requireStack = true;
addOpcode(OPCode.PUSH_POS);
compileTree(node.target);
addOpcode(OPCode.POP_POS);
break;
case AnchorType.PREC_READ_NOT:
+ regex.requireStack = true;
len = compileLengthTree(node.target);
addOpcodeRelAddr(OPCode.PUSH_POS_NOT, len + OPSize.FAIL_POS);
compileTree(node.target);
@@ -1064,6 +1074,7 @@ final class ArrayCompiler extends Compiler {
break;
case AnchorType.LOOK_BEHIND_NOT:
+ regex.requireStack = true;
len = compileLengthTree(node.target);
addOpcodeRelAddr(OPCode.PUSH_LOOK_BEHIND_NOT, len + OPSize.FAIL_LOOK_BEHIND_NOT);
if (node.charLength < 0) {
@@ -1218,44 +1229,6 @@ final class ArrayCompiler extends Compiler {
private void addOpcode(int opcode) {
addInt(opcode);
-
- switch(opcode) {
- case OPCode.ANYCHAR_STAR:
- case OPCode.ANYCHAR_STAR_SB:
- case OPCode.ANYCHAR_ML_STAR:
- case OPCode.ANYCHAR_ML_STAR_SB:
- case OPCode.ANYCHAR_STAR_PEEK_NEXT:
- case OPCode.ANYCHAR_STAR_PEEK_NEXT_SB:
- case OPCode.ANYCHAR_ML_STAR_PEEK_NEXT:
- case OPCode.ANYCHAR_ML_STAR_PEEK_NEXT_SB:
- case OPCode.STATE_CHECK_ANYCHAR_STAR:
- case OPCode.STATE_CHECK_ANYCHAR_STAR_SB:
- case OPCode.STATE_CHECK_ANYCHAR_ML_STAR:
- case OPCode.MEMORY_START_PUSH:
- case OPCode.MEMORY_END_PUSH:
- case OPCode.MEMORY_END_PUSH_REC:
- case OPCode.MEMORY_END_REC:
- case OPCode.NULL_CHECK_START:
- case OPCode.NULL_CHECK_END_MEMST_PUSH:
- case OPCode.PUSH:
- case OPCode.STATE_CHECK_PUSH:
- case OPCode.STATE_CHECK_PUSH_OR_JUMP:
- case OPCode.STATE_CHECK:
- case OPCode.PUSH_OR_JUMP_EXACT1:
- case OPCode.PUSH_IF_PEEK_NEXT:
- case OPCode.REPEAT:
- case OPCode.REPEAT_NG:
- case OPCode.REPEAT_INC_SG:
- case OPCode.REPEAT_INC_NG:
- case OPCode.REPEAT_INC_NG_SG:
- case OPCode.PUSH_POS:
- case OPCode.PUSH_POS_NOT:
- case OPCode.PUSH_STOP_BT:
- case OPCode.PUSH_LOOK_BEHIND_NOT:
- case OPCode.CALL:
- case OPCode.RETURN: // it will appear only with CALL though
- regex.stackNeeded = true;
- }
}
private void addStateCheckNum(int num) {
diff --git a/src/org/joni/Regex.java b/src/org/joni/Regex.java
index d6fffae..f5eadbd 100644
--- a/src/org/joni/Regex.java
+++ b/src/org/joni/Regex.java
@@ -39,7 +39,7 @@ public final class Regex {
int[] code; /* compiled pattern */
int codeLength;
- boolean stackNeeded;
+ boolean requireStack;
Object[]operands; /* e.g. shared CClassNode */
int operandLength;
diff --git a/src/org/joni/StackMachine.java b/src/org/joni/StackMachine.java
index 2975096..b3d1106 100644
--- a/src/org/joni/StackMachine.java
+++ b/src/org/joni/StackMachine.java
@@ -43,7 +43,7 @@ abstract class StackMachine extends Matcher implements StackType {
protected StackMachine(Regex regex, byte[]bytes, int p , int end) {
super(regex, bytes, p, end);
- this.stack = regex.stackNeeded ? fetchStack() : null;
+ this.stack = regex.requireStack ? fetchStack() : null;
int n = regex.numRepeat + (regex.numMem << 1);
this.repeatStk = n > 0 ? new int[n] : null;
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-java/jruby-joni.git
More information about the pkg-java-commits
mailing list