aboutsummaryrefslogtreecommitdiff
path: root/src/jdk/nashorn/internal/runtime/regexp/joni/ast/QuantifierNode.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/jdk/nashorn/internal/runtime/regexp/joni/ast/QuantifierNode.java')
-rw-r--r--src/jdk/nashorn/internal/runtime/regexp/joni/ast/QuantifierNode.java83
1 files changed, 54 insertions, 29 deletions
diff --git a/src/jdk/nashorn/internal/runtime/regexp/joni/ast/QuantifierNode.java b/src/jdk/nashorn/internal/runtime/regexp/joni/ast/QuantifierNode.java
index 7d84accc..d4be3780 100644
--- a/src/jdk/nashorn/internal/runtime/regexp/joni/ast/QuantifierNode.java
+++ b/src/jdk/nashorn/internal/runtime/regexp/joni/ast/QuantifierNode.java
@@ -19,12 +19,18 @@
*/
package jdk.nashorn.internal.runtime.regexp.joni.ast;
+import static jdk.nashorn.internal.runtime.regexp.joni.ast.QuantifierNode.ReduceType.A;
+import static jdk.nashorn.internal.runtime.regexp.joni.ast.QuantifierNode.ReduceType.AQ;
+import static jdk.nashorn.internal.runtime.regexp.joni.ast.QuantifierNode.ReduceType.ASIS;
+import static jdk.nashorn.internal.runtime.regexp.joni.ast.QuantifierNode.ReduceType.DEL;
+import static jdk.nashorn.internal.runtime.regexp.joni.ast.QuantifierNode.ReduceType.PQ_Q;
+import static jdk.nashorn.internal.runtime.regexp.joni.ast.QuantifierNode.ReduceType.P_QQ;
+import static jdk.nashorn.internal.runtime.regexp.joni.ast.QuantifierNode.ReduceType.QQ;
import jdk.nashorn.internal.runtime.regexp.joni.Config;
import jdk.nashorn.internal.runtime.regexp.joni.ScanEnvironment;
import jdk.nashorn.internal.runtime.regexp.joni.constants.TargetInfo;
-import static jdk.nashorn.internal.runtime.regexp.joni.ast.QuantifierNode.ReduceType.*;
-
+@SuppressWarnings("javadoc")
public final class QuantifierNode extends StateNode {
public Node target;
@@ -66,13 +72,15 @@ public final class QuantifierNode extends StateNode {
};
- public QuantifierNode(int lower, int upper, boolean byNumber) {
+ public QuantifierNode(final int lower, final int upper, final boolean byNumber) {
this.lower = lower;
this.upper = upper;
greedy = true;
targetEmptyInfo = TargetInfo.ISNOT_EMPTY;
- if (byNumber) setByNumber();
+ if (byNumber) {
+ setByNumber();
+ }
}
@Override
@@ -81,7 +89,7 @@ public final class QuantifierNode extends StateNode {
}
@Override
- protected void setChild(Node newChild) {
+ protected void setChild(final Node newChild) {
target = newChild;
}
@@ -90,13 +98,13 @@ public final class QuantifierNode extends StateNode {
return target;
}
- public void setTarget(Node tgt) {
+ public void setTarget(final Node tgt) {
target = tgt;
tgt.parent = this;
}
- public StringNode convertToString(int flag) {
- StringNode sn = new StringNode();
+ public StringNode convertToString(final int flag) {
+ final StringNode sn = new StringNode();
sn.flag = flag;
sn.swap(this);
return sn;
@@ -108,8 +116,8 @@ public final class QuantifierNode extends StateNode {
}
@Override
- public String toString(int level) {
- StringBuilder value = new StringBuilder(super.toString(level));
+ public String toString(final int level) {
+ final StringBuilder value = new StringBuilder(super.toString(level));
value.append("\n target: " + pad(target, level + 1));
value.append("\n lower: " + lower);
value.append("\n upper: " + upper);
@@ -130,23 +138,33 @@ public final class QuantifierNode extends StateNode {
protected int popularNum() {
if (greedy) {
if (lower == 0) {
- if (upper == 1) return 0;
- else if (isRepeatInfinite(upper)) return 1;
+ if (upper == 1) {
+ return 0;
+ } else if (isRepeatInfinite(upper)) {
+ return 1;
+ }
} else if (lower == 1) {
- if (isRepeatInfinite(upper)) return 2;
+ if (isRepeatInfinite(upper)) {
+ return 2;
+ }
}
} else {
if (lower == 0) {
- if (upper == 1) return 3;
- else if (isRepeatInfinite(upper)) return 4;
+ if (upper == 1) {
+ return 3;
+ } else if (isRepeatInfinite(upper)) {
+ return 4;
+ }
} else if (lower == 1) {
- if (isRepeatInfinite(upper)) return 5;
+ if (isRepeatInfinite(upper)) {
+ return 5;
+ }
}
}
return -1;
}
- protected void set(QuantifierNode other) {
+ protected void set(final QuantifierNode other) {
setTarget(other.target);
other.target = null;
lower = other.lower;
@@ -161,11 +179,13 @@ public final class QuantifierNode extends StateNode {
isRefered = other.isRefered;
}
- public void reduceNestedQuantifier(QuantifierNode other) {
- int pnum = popularNum();
- int cnum = other.popularNum();
+ public void reduceNestedQuantifier(final QuantifierNode other) {
+ final int pnum = popularNum();
+ final int cnum = other.popularNum();
- if (pnum < 0 || cnum < 0) return;
+ if (pnum < 0 || cnum < 0) {
+ return;
+ }
switch(REDUCE_TABLE[cnum][pnum]) {
case DEL:
@@ -218,22 +238,27 @@ public final class QuantifierNode extends StateNode {
case ASIS:
setTarget(other);
return;
+
+ default:
+ break;
}
// ??? remove the parent from target ???
other.target = null; // remove target from reduced quantifier
}
@SuppressWarnings("fallthrough")
- public int setQuantifier(Node tgt, boolean group, ScanEnvironment env, char[] chars, int p, int end) {
- if (lower == 1 && upper == 1) return 1;
+ public int setQuantifier(final Node tgt, final boolean group, final ScanEnvironment env, final char[] chars, final int p, final int end) {
+ if (lower == 1 && upper == 1) {
+ return 1;
+ }
switch(tgt.getType()) {
case STR:
if (!group) {
- StringNode sn = (StringNode)tgt;
+ final StringNode sn = (StringNode)tgt;
if (sn.canBeSplit()) {
- StringNode n = sn.splitLastChar();
+ final StringNode n = sn.splitLastChar();
if (n != null) {
setTarget(n);
return 2;
@@ -245,9 +270,9 @@ public final class QuantifierNode extends StateNode {
case QTFR:
/* check redundant double repeat. */
/* verbose warn (?:.?)? etc... but not warn (.?)? etc... */
- QuantifierNode qnt = (QuantifierNode)tgt;
- int nestQNum = popularNum();
- int targetQNum = qnt.popularNum();
+ final QuantifierNode qnt = (QuantifierNode)tgt;
+ final int nestQNum = popularNum();
+ final int targetQNum = qnt.popularNum();
if (Config.USE_WARNING_REDUNDANT_NESTED_REPEAT_OPERATOR) {
if (!isByNumber() && !qnt.isByNumber() && env.syntax.warnReduntantNestedRepeat()) {
@@ -290,7 +315,7 @@ public final class QuantifierNode extends StateNode {
}
public static final int REPEAT_INFINITE = -1;
- public static boolean isRepeatInfinite(int n) {
+ public static boolean isRepeatInfinite(final int n) {
return n == REPEAT_INFINITE;
}