diff options
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.java | 83 |
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; } |