[jruby-joni] 120/194: dedup stack logic
Hideki Yamane
henrich at moszumanska.debian.org
Thu Feb 1 12:04:33 UTC 2018
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 422191d1fd2fec742552e8beff4eb6917ef55c05
Author: Marcin Mielzynski <lopx at gazeta.pl>
Date: Mon Jan 8 20:02:01 2018 +0100
dedup stack logic
---
src/org/joni/StackMachine.java | 85 +++++++++++-------------------------------
1 file changed, 21 insertions(+), 64 deletions(-)
diff --git a/src/org/joni/StackMachine.java b/src/org/joni/StackMachine.java
index 69af0a3..ae1fdd0 100644
--- a/src/org/joni/StackMachine.java
+++ b/src/org/joni/StackMachine.java
@@ -343,7 +343,6 @@ abstract class StackMachine extends Matcher implements StackType {
private StackEntry popFree() {
while (true) {
StackEntry e = stack[--stk];
-
if ((e.type & MASK_POP_USED) != 0) {
return e;
} else if (Config.USE_COMBINATION_EXPLOSION_CHECK) {
@@ -355,7 +354,6 @@ abstract class StackMachine extends Matcher implements StackType {
private StackEntry popMemStart() {
while (true) {
StackEntry e = stack[--stk];
-
if ((e.type & MASK_POP_USED) != 0) {
return e;
} else if (e.type == MEM_START) {
@@ -367,86 +365,45 @@ abstract class StackMachine extends Matcher implements StackType {
}
}
+ private void popRewrite(StackEntry e) {
+ if (e.type == MEM_START) {
+ repeatStk[memStartStk + e.getMemNum()] = e.getMemStart();
+ repeatStk[memEndStk + e.getMemNum()] = e.getMemEnd();
+ } else if (e.type == REPEAT_INC) {
+ stack[e.getSi()].decreaseRepeatCount();
+ } else if (e.type == MEM_END) {
+ repeatStk[memStartStk + e.getMemNum()] = e.getMemStart();
+ repeatStk[memEndStk + e.getMemNum()] = e.getMemEnd();
+ } else if (Config.USE_COMBINATION_EXPLOSION_CHECK) {
+ if (e.type == STATE_CHECK_MARK) stateCheckMark();
+ }
+ }
+
private StackEntry popDefault() {
while (true) {
StackEntry e = stack[--stk];
-
- if ((e.type & MASK_POP_USED) != 0) {
- return e;
- } else if (e.type == MEM_START) {
- repeatStk[memStartStk + e.getMemNum()] = e.getMemStart();
- repeatStk[memEndStk + e.getMemNum()] = e.getMemEnd();
- } else if (e.type == REPEAT_INC) {
- stack[e.getSi()].decreaseRepeatCount();
- } else if (e.type == MEM_END) {
- repeatStk[memStartStk + e.getMemNum()] = e.getMemStart();
- repeatStk[memEndStk + e.getMemNum()] = e.getMemEnd();
- } else if (Config.USE_COMBINATION_EXPLOSION_CHECK) {
- if (e.type == STATE_CHECK_MARK) stateCheckMark();
- }
+ if ((e.type & MASK_POP_USED) != 0) return e; else popRewrite(e);
}
}
protected final void popTilPosNot() {
while (true) {
- stk--;
- StackEntry e = stack[stk];
-
- if (e.type == POS_NOT) {
- break;
- } else if (e.type == MEM_START) {
- repeatStk[memStartStk + e.getMemNum()] = e.getMemStart();
- repeatStk[memEndStk + e.getMemNum()] = e.getMemEnd();
- } else if (e.type == REPEAT_INC) {
- stack[e.getSi()].decreaseRepeatCount();
- } else if (e.type == MEM_END){
- repeatStk[memStartStk + e.getMemNum()] = e.getMemStart();
- repeatStk[memEndStk + e.getMemNum()] = e.getMemEnd();
- } else if (Config.USE_COMBINATION_EXPLOSION_CHECK) {
- if (e.type == STATE_CHECK_MARK) stateCheckMark();
- }
+ StackEntry e = stack[--stk];
+ if (e.type == POS_NOT) break; else popRewrite(e);
}
}
protected final void popTilLookBehindNot() {
while (true) {
- stk--;
- StackEntry e = stack[stk];
-
- if (e.type == LOOK_BEHIND_NOT) {
- break;
- } else if (e.type == MEM_START) {
- repeatStk[memStartStk + e.getMemNum()] = e.getMemStart();
- repeatStk[memEndStk + e.getMemNum()] = e.getMemEnd();
- } else if (e.type == REPEAT_INC) {
- stack[e.getSi()].decreaseRepeatCount();
- } else if (e.type == MEM_END) {
- repeatStk[memStartStk + e.getMemNum()] = e.getMemStart();
- repeatStk[memEndStk + e.getMemNum()] = e.getMemEnd();
- } else if (Config.USE_COMBINATION_EXPLOSION_CHECK) {
- if (e.type == STATE_CHECK_MARK) stateCheckMark();
- }
+ StackEntry e = stack[--stk];
+ if (e.type == LOOK_BEHIND_NOT) break; else popRewrite(e);
}
}
protected final void popTilAbsent() {
while (true) {
- stk--;
- StackEntry e = stack[stk];
-
- if (e.type == ABSENT) {
- break;
- } else if (e.type == MEM_START) {
- repeatStk[memStartStk + e.getMemNum()] = e.getMemStart();
- repeatStk[memEndStk + e.getMemNum()] = e.getMemEnd();
- } else if (e.type == REPEAT_INC) {
- stack[e.getSi()].decreaseRepeatCount();
- } else if (e.type == MEM_END) {
- repeatStk[memStartStk + e.getMemNum()] = e.getMemStart();
- repeatStk[memEndStk + e.getMemNum()] = e.getMemEnd();
- } else if (Config.USE_COMBINATION_EXPLOSION_CHECK) {
- if (e.type == STATE_CHECK_MARK) stateCheckMark();
- }
+ StackEntry e = stack[--stk];
+ if (e.type == ABSENT) break; else popRewrite(e);
}
}
--
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