diff options
Diffstat (limited to 'src/jdk/nashorn/internal/runtime/regexp/joni/StackMachine.java')
-rw-r--r-- | src/jdk/nashorn/internal/runtime/regexp/joni/StackMachine.java | 217 |
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++; } |