aboutsummaryrefslogtreecommitdiff
path: root/src/jdk/nashorn/internal/runtime/regexp/joni/StackMachine.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/jdk/nashorn/internal/runtime/regexp/joni/StackMachine.java')
-rw-r--r--src/jdk/nashorn/internal/runtime/regexp/joni/StackMachine.java217
1 files changed, 112 insertions, 105 deletions
diff --git a/src/jdk/nashorn/internal/runtime/regexp/joni/StackMachine.java b/src/jdk/nashorn/internal/runtime/regexp/joni/StackMachine.java
index cacf3182..fc498c45 100644
--- a/src/jdk/nashorn/internal/runtime/regexp/joni/StackMachine.java
+++ b/src/jdk/nashorn/internal/runtime/regexp/joni/StackMachine.java
@@ -20,9 +20,7 @@
package jdk.nashorn.internal.runtime.regexp.joni;
import static jdk.nashorn.internal.runtime.regexp.joni.BitStatus.bsAt;
-
import java.lang.ref.WeakReference;
-
import jdk.nashorn.internal.runtime.regexp.joni.constants.StackPopLevel;
import jdk.nashorn.internal.runtime.regexp.joni.constants.StackType;
@@ -35,11 +33,11 @@ abstract class StackMachine extends Matcher implements StackType {
protected final int[]repeatStk;
protected final int memStartStk, memEndStk;
- protected StackMachine(Regex regex, char[] chars, int p , int end) {
+ protected StackMachine(final Regex regex, final char[] chars, final int p , final int end) {
super(regex, chars, p, end);
this.stack = regex.stackNeeded ? fetchStack() : null;
- int n = regex.numRepeat + (regex.numMem << 1);
+ final int n = regex.numRepeat + (regex.numMem << 1);
this.repeatStk = n > 0 ? new int[n] : null;
memStartStk = regex.numRepeat - 1;
@@ -49,25 +47,27 @@ abstract class StackMachine extends Matcher implements StackType {
}
private static StackEntry[] allocateStack() {
- StackEntry[]stack = new StackEntry[Config.INIT_MATCH_STACK_SIZE];
+ final StackEntry[]stack = new StackEntry[Config.INIT_MATCH_STACK_SIZE];
stack[0] = new StackEntry();
return stack;
}
private void doubleStack() {
- StackEntry[] newStack = new StackEntry[stack.length << 1];
+ final StackEntry[] newStack = new StackEntry[stack.length << 1];
System.arraycopy(stack, 0, newStack, 0, stack.length);
stack = newStack;
}
static final ThreadLocal<WeakReference<StackEntry[]>> stacks
= new ThreadLocal<WeakReference<StackEntry[]>>() {
+ @SuppressWarnings("unused")
@Override
protected WeakReference<StackEntry[]> initialValue() {
return new WeakReference<StackEntry[]>(allocateStack());
}
};
+ @SuppressWarnings("unused")
private static StackEntry[] fetchStack() {
WeakReference<StackEntry[]> ref = stacks.get();
StackEntry[] stack = ref.get();
@@ -79,7 +79,9 @@ abstract class StackMachine extends Matcher implements StackType {
}
protected final void init() {
- if (stack != null) pushEnsured(ALT, regex.codeLength - 1); /* bottom stack */
+ if (stack != null) {
+ pushEnsured(ALT, regex.codeLength - 1); /* bottom stack */
+ }
if (repeatStk != null) {
for (int i=1; i<=regex.numMem; i++) {
repeatStk[i + memStartStk] = repeatStk[i + memEndStk] = INVALID_INDEX;
@@ -88,19 +90,23 @@ abstract class StackMachine extends Matcher implements StackType {
}
protected final StackEntry ensure1() {
- if (stk >= stack.length) doubleStack();
+ if (stk >= stack.length) {
+ doubleStack();
+ }
StackEntry e = stack[stk];
- if (e == null) stack[stk] = e = new StackEntry();
+ if (e == null) {
+ stack[stk] = e = new StackEntry();
+ }
return e;
}
- protected final void pushType(int type) {
+ protected final void pushType(final int type) {
ensure1().type = type;
stk++;
}
- private void push(int type, int pat, int s, int prev) {
- StackEntry e = ensure1();
+ private void push(final int type, final int pat, final int s, final int prev) {
+ final StackEntry e = ensure1();
e.type = type;
e.setStatePCode(pat);
e.setStatePStr(s);
@@ -108,22 +114,22 @@ abstract class StackMachine extends Matcher implements StackType {
stk++;
}
- protected final void pushEnsured(int type, int pat) {
- StackEntry e = stack[stk];
+ protected final void pushEnsured(final int type, final int pat) {
+ final StackEntry e = stack[stk];
e.type = type;
e.setStatePCode(pat);
stk++;
}
- protected final void pushAlt(int pat, int s, int prev) {
+ protected final void pushAlt(final int pat, final int s, final int prev) {
push(ALT, pat, s, prev);
}
- protected final void pushPos(int s, int prev) {
+ protected final void pushPos(final int s, final int prev) {
push(POS, -1 /*NULL_UCHARP*/, s, prev);
}
- protected final void pushPosNot(int pat, int s, int prev) {
+ protected final void pushPosNot(final int pat, final int s, final int prev) {
push(POS_NOT, pat, s, prev);
}
@@ -131,12 +137,12 @@ abstract class StackMachine extends Matcher implements StackType {
pushType(STOP_BT);
}
- protected final void pushLookBehindNot(int pat, int s, int sprev) {
+ protected final void pushLookBehindNot(final int pat, final int s, final int sprev) {
push(LOOK_BEHIND_NOT, pat, s, sprev);
}
- protected final void pushRepeat(int id, int pat) {
- StackEntry e = ensure1();
+ protected final void pushRepeat(final int id, final int pat) {
+ final StackEntry e = ensure1();
e.type = REPEAT;
e.setRepeatNum(id);
e.setRepeatPCode(pat);
@@ -144,15 +150,15 @@ abstract class StackMachine extends Matcher implements StackType {
stk++;
}
- protected final void pushRepeatInc(int sindex) {
- StackEntry e = ensure1();
+ protected final void pushRepeatInc(final int sindex) {
+ final StackEntry e = ensure1();
e.type = REPEAT_INC;
e.setSi(sindex);
stk++;
}
- protected final void pushMemStart(int mnum, int s) {
- StackEntry e = ensure1();
+ protected final void pushMemStart(final int mnum, final int s) {
+ final StackEntry e = ensure1();
e.type = MEM_START;
e.setMemNum(mnum);
e.setMemPstr(s);
@@ -163,8 +169,8 @@ abstract class StackMachine extends Matcher implements StackType {
stk++;
}
- protected final void pushMemEnd(int mnum, int s) {
- StackEntry e = ensure1();
+ protected final void pushMemEnd(final int mnum, final int s) {
+ final StackEntry e = ensure1();
e.type = MEM_END;
e.setMemNum(mnum);
e.setMemPstr(s);
@@ -174,40 +180,42 @@ abstract class StackMachine extends Matcher implements StackType {
stk++;
}
- protected final void pushMemEndMark(int mnum) {
- StackEntry e = ensure1();
+ protected final void pushMemEndMark(final int mnum) {
+ final StackEntry e = ensure1();
e.type = MEM_END_MARK;
e.setMemNum(mnum);
stk++;
}
- protected final int getMemStart(int mnum) {
+ protected final int getMemStart(final int mnum) {
int level = 0;
int stkp = stk;
while (stkp > 0) {
stkp--;
- StackEntry e = stack[stkp];
+ final StackEntry e = stack[stkp];
if ((e.type & MASK_MEM_END_OR_MARK) != 0 && e.getMemNum() == mnum) {
level++;
} else if (e.type == MEM_START && e.getMemNum() == mnum) {
- if (level == 0) break;
+ if (level == 0) {
+ break;
+ }
level--;
}
}
return stkp;
}
- protected final void pushNullCheckStart(int cnum, int s) {
- StackEntry e = ensure1();
+ protected final void pushNullCheckStart(final int cnum, final int s) {
+ final StackEntry e = ensure1();
e.type = NULL_CHECK_START;
e.setNullCheckNum(cnum);
e.setNullCheckPStr(s);
stk++;
}
- protected final void pushNullCheckEnd(int cnum) {
- StackEntry e = ensure1();
+ protected final void pushNullCheckEnd(final int cnum) {
+ final StackEntry e = ensure1();
e.type = NULL_CHECK_END;
e.setNullCheckNum(cnum);
stk++;
@@ -233,7 +241,7 @@ abstract class StackMachine extends Matcher implements StackType {
private StackEntry popFree() {
while (true) {
- StackEntry e = stack[--stk];
+ final StackEntry e = stack[--stk];
if ((e.type & MASK_POP_USED) != 0) {
return e;
@@ -243,7 +251,7 @@ abstract class StackMachine extends Matcher implements StackType {
private StackEntry popMemStart() {
while (true) {
- StackEntry e = stack[--stk];
+ final StackEntry e = stack[--stk];
if ((e.type & MASK_POP_USED) != 0) {
return e;
@@ -256,7 +264,7 @@ abstract class StackMachine extends Matcher implements StackType {
private StackEntry popDefault() {
while (true) {
- StackEntry e = stack[--stk];
+ final StackEntry e = stack[--stk];
if ((e.type & MASK_POP_USED) != 0) {
return e;
@@ -277,7 +285,7 @@ abstract class StackMachine extends Matcher implements StackType {
protected final void popTilPosNot() {
while (true) {
stk--;
- StackEntry e = stack[stk];
+ final StackEntry e = stack[stk];
if (e.type == POS_NOT) {
break;
@@ -298,7 +306,7 @@ abstract class StackMachine extends Matcher implements StackType {
protected final void popTilLookBehindNot() {
while (true) {
stk--;
- StackEntry e = stack[stk];
+ final StackEntry e = stack[stk];
if (e.type == LOOK_BEHIND_NOT) {
break;
@@ -320,7 +328,7 @@ abstract class StackMachine extends Matcher implements StackType {
int k = stk;
while (true) {
k--;
- StackEntry e = stack[k];
+ final StackEntry e = stack[k];
if ((e.type & MASK_TO_VOID_TARGET) != 0) {
e.type = VOID;
} else if (e.type == POS) {
@@ -335,7 +343,7 @@ abstract class StackMachine extends Matcher implements StackType {
int k = stk;
while (true) {
k--;
- StackEntry e = stack[k];
+ final StackEntry e = stack[k];
if ((e.type & MASK_TO_VOID_TARGET) != 0) {
e.type = VOID;
@@ -347,11 +355,11 @@ abstract class StackMachine extends Matcher implements StackType {
}
// int for consistency with other null check routines
- protected final int nullCheck(int id, int s) {
+ protected final int nullCheck(final int id, final int s) {
int k = stk;
while (true) {
k--;
- StackEntry e = stack[k];
+ final StackEntry e = stack[k];
if (e.type == NULL_CHECK_START) {
if (e.getNullCheckNum() == id) {
@@ -361,20 +369,19 @@ abstract class StackMachine extends Matcher implements StackType {
}
}
- protected final int nullCheckRec(int id, int s) {
+ protected final int nullCheckRec(final int id, final int s) {
int level = 0;
int k = stk;
while (true) {
k--;
- StackEntry e = stack[k];
+ final StackEntry e = stack[k];
if (e.type == NULL_CHECK_START) {
if (e.getNullCheckNum() == id) {
if (level == 0) {
return e.getNullCheckPStr() == s ? 1 : 0;
- } else {
- level--;
}
+ level--;
}
} else if (e.type == NULL_CHECK_END) {
level++;
@@ -382,7 +389,7 @@ abstract class StackMachine extends Matcher implements StackType {
}
}
- protected final int nullCheckMemSt(int id, int s) {
+ protected final int nullCheckMemSt(final int id, final int s) {
int k = stk;
int isNull;
while (true) {
@@ -394,39 +401,38 @@ abstract class StackMachine extends Matcher implements StackType {
if (e.getNullCheckPStr() != s) {
isNull = 0;
break;
- } else {
- int endp;
- isNull = 1;
- while (k < stk) {
- if (e.type == MEM_START) {
- if (e.getMemEnd() == INVALID_INDEX) {
- isNull = 0;
- break;
- }
- if (bsAt(regex.btMemEnd, e.getMemNum())) {
- endp = stack[e.getMemEnd()].getMemPStr();
- } else {
- endp = e.getMemEnd();
- }
- if (stack[e.getMemStart()].getMemPStr() != endp) {
- isNull = 0;
- break;
- } else if (endp != s) {
- isNull = -1; /* empty, but position changed */
- }
+ }
+ int endp;
+ isNull = 1;
+ while (k < stk) {
+ if (e.type == MEM_START) {
+ if (e.getMemEnd() == INVALID_INDEX) {
+ isNull = 0;
+ break;
+ }
+ if (bsAt(regex.btMemEnd, e.getMemNum())) {
+ endp = stack[e.getMemEnd()].getMemPStr();
+ } else {
+ endp = e.getMemEnd();
+ }
+ if (stack[e.getMemStart()].getMemPStr() != endp) {
+ isNull = 0;
+ break;
+ } else if (endp != s) {
+ isNull = -1; /* empty, but position changed */
}
- k++;
- e = stack[k]; // !!
}
- break;
+ k++;
+ e = stack[k]; // !!
}
+ break;
}
}
}
return isNull;
}
- protected final int nullCheckMemStRec(int id, int s) {
+ protected final int nullCheckMemStRec(final int id, final int s) {
int level = 0;
int k = stk;
int isNull;
@@ -440,53 +446,55 @@ abstract class StackMachine extends Matcher implements StackType {
if (e.getNullCheckPStr() != s) {
isNull = 0;
break;
- } else {
- int endp;
- isNull = 1;
- while (k < stk) {
- if (e.type == MEM_START) {
- if (e.getMemEnd() == INVALID_INDEX) {
- isNull = 0;
- break;
- }
- if (bsAt(regex.btMemEnd, e.getMemNum())) {
- endp = stack[e.getMemEnd()].getMemPStr();
- } else {
- endp = e.getMemEnd();
- }
- if (stack[e.getMemStart()].getMemPStr() != endp) {
- isNull = 0;
- break;
- } else if (endp != s) {
- isNull = -1; /* empty, but position changed */
- }
+ }
+ int endp;
+ isNull = 1;
+ while (k < stk) {
+ if (e.type == MEM_START) {
+ if (e.getMemEnd() == INVALID_INDEX) {
+ isNull = 0;
+ break;
+ }
+ if (bsAt(regex.btMemEnd, e.getMemNum())) {
+ endp = stack[e.getMemEnd()].getMemPStr();
+ } else {
+ endp = e.getMemEnd();
+ }
+ if (stack[e.getMemStart()].getMemPStr() != endp) {
+ isNull = 0;
+ break;
+ } else if (endp != s) {
+ isNull = -1; /* empty, but position changed */
}
- k++;
- e = stack[k];
}
- break;
+ k++;
+ e = stack[k];
}
- } else {
- level--;
+ break;
}
+ level--;
}
} else if (e.type == NULL_CHECK_END) {
- if (e.getNullCheckNum() == id) level++;
+ if (e.getNullCheckNum() == id) {
+ level++;
+ }
}
}
return isNull;
}
- protected final int getRepeat(int id) {
+ protected final int getRepeat(final int id) {
int level = 0;
int k = stk;
while (true) {
k--;
- StackEntry e = stack[k];
+ final StackEntry e = stack[k];
if (e.type == REPEAT) {
if (level == 0) {
- if (e.getRepeatNum() == id) return k;
+ if (e.getRepeatNum() == id) {
+ return k;
+ }
}
} else if (e.type == CALL_FRAME) {
level--;
@@ -501,14 +509,13 @@ abstract class StackMachine extends Matcher implements StackType {
int k = stk;
while (true) {
k--;
- StackEntry e = stack[k];
+ final StackEntry e = stack[k];
if (e.type == CALL_FRAME) {
if (level == 0) {
return e.getCallFrameRetAddr();
- } else {
- level--;
}
+ level--;
} else if (e.type == RETURN) {
level++;
}