--- old/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/regexp/joni/NodeOptInfo.java 2020-04-15 18:51:36.000000000 +0530 +++ /dev/null 2020-04-15 18:51:36.000000000 +0530 @@ -1,130 +0,0 @@ -/* - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies - * of the Software, and to permit persons to whom the Software is furnished to do - * so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -package jdk.nashorn.internal.runtime.regexp.joni; - -@SuppressWarnings("javadoc") -public final class NodeOptInfo { - final MinMaxLen length = new MinMaxLen(); - final OptAnchorInfo anchor = new OptAnchorInfo(); - final OptExactInfo exb = new OptExactInfo(); /* boundary */ - final OptExactInfo exm = new OptExactInfo(); /* middle */ - final OptExactInfo expr = new OptExactInfo(); /* prec read (?=...) */ - final OptMapInfo map = new OptMapInfo(); /* boundary */ - - public void setBoundNode(final MinMaxLen mmd) { - exb.mmd.copy(mmd); - expr.mmd.copy(mmd); - map.mmd.copy(mmd); - } - - public void clear() { - length.clear(); - anchor.clear(); - exb.clear(); - exm.clear(); - expr.clear(); - map.clear(); - } - - public void copy(final NodeOptInfo other) { - length.copy(other.length); - anchor.copy(other.anchor); - exb.copy(other.exb); - exm.copy(other.exm); - expr.copy(other.expr); - map.copy(other.map); - } - - public void concatLeftNode(final NodeOptInfo other) { - final OptAnchorInfo tanchor = new OptAnchorInfo(); // remove it somehow ? - tanchor.concat(anchor, other.anchor, length.max, other.length.max); - anchor.copy(tanchor); - - if (other.exb.length > 0 && length.max == 0) { - tanchor.concat(anchor, other.exb.anchor, length.max, other.length.max); - other.exb.anchor.copy(tanchor); - } - - if (other.map.value > 0 && length.max == 0) { - if (other.map.mmd.max == 0) { - other.map.anchor.leftAnchor |= anchor.leftAnchor; - } - } - - final boolean exbReach = exb.reachEnd; - final boolean exmReach = exm.reachEnd; - - if (other.length.max != 0) { - exb.reachEnd = exm.reachEnd = false; - } - - if (other.exb.length > 0) { - if (exbReach) { - exb.concat(other.exb); - other.exb.clear(); - } else if (exmReach) { - exm.concat(other.exb); - other.exb.clear(); - } - } - - exm.select(other.exb); - exm.select(other.exm); - - if (expr.length > 0) { - if (other.length.max > 0) { - // TODO: make sure it is not an Oniguruma bug (casting unsigned int to int for arithmetic comparison) - int otherLengthMax = other.length.max; - if (otherLengthMax == MinMaxLen.INFINITE_DISTANCE) { - otherLengthMax = -1; - } - if (expr.length > otherLengthMax) { - expr.length = otherLengthMax; - } - if (expr.mmd.max == 0) { - exb.select(expr); - } else { - exm.select(expr); - } - } - } else if (other.expr.length > 0) { - expr.copy(other.expr); - } - - map.select(other.map); - length.add(other.length); - } - - public void altMerge(final NodeOptInfo other, final OptEnvironment env) { - anchor.altMerge(other.anchor); - exb.altMerge(other.exb, env); - exm.altMerge(other.exm, env); - expr.altMerge(other.expr, env); - map.altMerge(other.map); - length.altMerge(other.length); - } - - public void setBound(final MinMaxLen mmd) { - exb.mmd.copy(mmd); - expr.mmd.copy(mmd); - map.mmd.copy(mmd); - } - -}