--- old/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/regexp/joni/Syntax.java 2020-04-15 18:51:46.000000000 +0530 +++ /dev/null 2020-04-15 18:51:46.000000000 +0530 @@ -1,627 +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; - -import static jdk.nashorn.internal.runtime.regexp.joni.constants.MetaChar.INEFFECTIVE_META_CHAR; -import jdk.nashorn.internal.runtime.regexp.joni.constants.SyntaxProperties; - -@SuppressWarnings("javadoc") -public final class Syntax implements SyntaxProperties { - private final int op; - private final int op2; - private final int behavior; - public final int options; - public final MetaCharTable metaCharTable; - - public Syntax(final int op, final int op2, final int behavior, final int options, final MetaCharTable metaCharTable) { - this.op = op; - this.op2 = op2; - this.behavior = behavior; - this.options = options; - this.metaCharTable = metaCharTable; - } - - public static class MetaCharTable { - public final int esc; - public final int anyChar; - public final int anyTime; - public final int zeroOrOneTime; - public final int oneOrMoreTime; - public final int anyCharAnyTime; - - public MetaCharTable(final int esc, final int anyChar, final int anyTime, - final int zeroOrOneTime, final int oneOrMoreTime, final int anyCharAnyTime) { - this.esc = esc; - this.anyChar = anyChar; - this.anyTime = anyTime; - this.zeroOrOneTime = zeroOrOneTime; - this.oneOrMoreTime = oneOrMoreTime; - this.anyCharAnyTime = anyCharAnyTime; - } - } - - // - // OP - // - - protected boolean isOp(final int opm) { - return (op & opm) != 0; - } - - public boolean opVariableMetaCharacters() { - return isOp(OP_VARIABLE_META_CHARACTERS); - } - - public boolean opDotAnyChar() { - return isOp(OP_DOT_ANYCHAR); - } - - public boolean opAsteriskZeroInf() { - return isOp(OP_ASTERISK_ZERO_INF); - } - - public boolean opEscAsteriskZeroInf() { - return isOp(OP_ESC_ASTERISK_ZERO_INF); - } - - public boolean opPlusOneInf() { - return isOp(OP_PLUS_ONE_INF); - } - - public boolean opEscPlusOneInf() { - return isOp(OP_ESC_PLUS_ONE_INF); - } - - public boolean opQMarkZeroOne() { - return isOp(OP_QMARK_ZERO_ONE); - } - - public boolean opEscQMarkZeroOne() { - return isOp(OP_ESC_QMARK_ZERO_ONE); - } - - public boolean opBraceInterval() { - return isOp(OP_BRACE_INTERVAL); - } - - public boolean opEscBraceInterval() { - return isOp(OP_ESC_BRACE_INTERVAL); - } - - public boolean opVBarAlt() { - return isOp(OP_VBAR_ALT); - } - - public boolean opEscVBarAlt() { - return isOp(OP_ESC_VBAR_ALT); - } - - public boolean opLParenSubexp() { - return isOp(OP_LPAREN_SUBEXP); - } - - public boolean opEscLParenSubexp() { - return isOp(OP_ESC_LPAREN_SUBEXP); - } - - public boolean opEscAZBufAnchor() { - return isOp(OP_ESC_AZ_BUF_ANCHOR); - } - - public boolean opEscCapitalGBeginAnchor() { - return isOp(OP_ESC_CAPITAL_G_BEGIN_ANCHOR); - } - - public boolean opDecimalBackref() { - return isOp(OP_DECIMAL_BACKREF); - } - - public boolean opBracketCC() { - return isOp(OP_BRACKET_CC); - } - - public boolean opEscWWord() { - return isOp(OP_ESC_W_WORD); - } - - public boolean opEscLtGtWordBeginEnd() { - return isOp(OP_ESC_LTGT_WORD_BEGIN_END); - } - - public boolean opEscBWordBound() { - return isOp(OP_ESC_B_WORD_BOUND); - } - - public boolean opEscSWhiteSpace() { - return isOp(OP_ESC_S_WHITE_SPACE); - } - - public boolean opEscDDigit() { - return isOp(OP_ESC_D_DIGIT); - } - - public boolean opLineAnchor() { - return isOp(OP_LINE_ANCHOR); - } - - public boolean opPosixBracket() { - return isOp(OP_POSIX_BRACKET); - } - - public boolean opQMarkNonGreedy() { - return isOp(OP_QMARK_NON_GREEDY); - } - - public boolean opEscControlChars() { - return isOp(OP_ESC_CONTROL_CHARS); - } - - public boolean opEscCControl() { - return isOp(OP_ESC_C_CONTROL); - } - - public boolean opEscOctal3() { - return isOp(OP_ESC_OCTAL3); - } - - public boolean opEscXHex2() { - return isOp(OP_ESC_X_HEX2); - } - - public boolean opEscXBraceHex8() { - return isOp(OP_ESC_X_BRACE_HEX8); - } - - // - // OP2 - // - - protected boolean isOp2(final int opm) { - return (op2 & opm) != 0; - } - - public boolean op2EscCapitalQQuote() { - return isOp2(OP2_ESC_CAPITAL_Q_QUOTE); - } - - public boolean op2QMarkGroupEffect() { - return isOp2(OP2_QMARK_GROUP_EFFECT); - } - - public boolean op2OptionPerl() { - return isOp2(OP2_OPTION_PERL); - } - - public boolean op2OptionRuby() { - return isOp2(OP2_OPTION_RUBY); - } - - public boolean op2PlusPossessiveRepeat() { - return isOp2(OP2_PLUS_POSSESSIVE_REPEAT); - } - - public boolean op2PlusPossessiveInterval() { - return isOp2(OP2_PLUS_POSSESSIVE_INTERVAL); - } - - public boolean op2CClassSetOp() { - return isOp2(OP2_CCLASS_SET_OP); - } - - public boolean op2QMarkLtNamedGroup() { - return isOp2(OP2_QMARK_LT_NAMED_GROUP); - } - - public boolean op2EscKNamedBackref() { - return isOp2(OP2_ESC_K_NAMED_BACKREF); - } - - public boolean op2EscGSubexpCall() { - return isOp2(OP2_ESC_G_SUBEXP_CALL); - } - - public boolean op2AtMarkCaptureHistory() { - return isOp2(OP2_ATMARK_CAPTURE_HISTORY); - } - - public boolean op2EscCapitalCBarControl() { - return isOp2(OP2_ESC_CAPITAL_C_BAR_CONTROL); - } - - public boolean op2EscCapitalMBarMeta() { - return isOp2(OP2_ESC_CAPITAL_M_BAR_META); - } - - public boolean op2EscVVtab() { - return isOp2(OP2_ESC_V_VTAB); - } - - public boolean op2EscUHex4() { - return isOp2(OP2_ESC_U_HEX4); - } - - public boolean op2EscGnuBufAnchor() { - return isOp2(OP2_ESC_GNU_BUF_ANCHOR); - } - - public boolean op2EscPBraceCharProperty() { - return isOp2(OP2_ESC_P_BRACE_CHAR_PROPERTY); - } - - public boolean op2EscPBraceCircumflexNot() { - return isOp2(OP2_ESC_P_BRACE_CIRCUMFLEX_NOT); - } - - public boolean op2EscHXDigit() { - return isOp2(OP2_ESC_H_XDIGIT); - } - - public boolean op2IneffectiveEscape() { - return isOp2(OP2_INEFFECTIVE_ESCAPE); - } - - // - // BEHAVIOR - // - - protected boolean isBehavior(final int bvm) { - return (behavior & bvm) != 0; - } - - public boolean contextIndepRepeatOps() { - return isBehavior(CONTEXT_INDEP_REPEAT_OPS); - } - - public boolean contextInvalidRepeatOps() { - return isBehavior(CONTEXT_INVALID_REPEAT_OPS); - } - - public boolean allowUnmatchedCloseSubexp() { - return isBehavior(ALLOW_UNMATCHED_CLOSE_SUBEXP); - } - - public boolean allowInvalidInterval() { - return isBehavior(ALLOW_INVALID_INTERVAL); - } - - public boolean allowIntervalLowAbbrev() { - return isBehavior(ALLOW_INTERVAL_LOW_ABBREV); - } - - public boolean strictCheckBackref() { - return isBehavior(STRICT_CHECK_BACKREF); - } - - public boolean differentLengthAltLookBehind() { - return isBehavior(DIFFERENT_LEN_ALT_LOOK_BEHIND); - } - - public boolean captureOnlyNamedGroup() { - return isBehavior(CAPTURE_ONLY_NAMED_GROUP); - } - - public boolean allowMultiplexDefinitionName() { - return isBehavior(ALLOW_MULTIPLEX_DEFINITION_NAME); - } - - public boolean fixedIntervalIsGreedyOnly() { - return isBehavior(FIXED_INTERVAL_IS_GREEDY_ONLY); - } - - - public boolean notNewlineInNegativeCC() { - return isBehavior(NOT_NEWLINE_IN_NEGATIVE_CC); - } - - public boolean backSlashEscapeInCC() { - return isBehavior(BACKSLASH_ESCAPE_IN_CC); - } - - public boolean allowEmptyRangeInCC() { - return isBehavior(ALLOW_EMPTY_RANGE_IN_CC); - } - - public boolean allowDoubleRangeOpInCC() { - return isBehavior(ALLOW_DOUBLE_RANGE_OP_IN_CC); - } - - public boolean warnCCOpNotEscaped() { - return isBehavior(WARN_CC_OP_NOT_ESCAPED); - } - - public boolean warnReduntantNestedRepeat() { - return isBehavior(WARN_REDUNDANT_NESTED_REPEAT); - } - - public static final Syntax RUBY = new Syntax( - (( GNU_REGEX_OP | OP_QMARK_NON_GREEDY | - OP_ESC_OCTAL3 | OP_ESC_X_HEX2 | - OP_ESC_X_BRACE_HEX8 | OP_ESC_CONTROL_CHARS | - OP_ESC_C_CONTROL ) - & ~OP_ESC_LTGT_WORD_BEGIN_END ), - - ( OP2_QMARK_GROUP_EFFECT | - OP2_OPTION_RUBY | - OP2_QMARK_LT_NAMED_GROUP | OP2_ESC_K_NAMED_BACKREF | - OP2_ESC_G_SUBEXP_CALL | - OP2_ESC_P_BRACE_CHAR_PROPERTY | - OP2_ESC_P_BRACE_CIRCUMFLEX_NOT | - OP2_PLUS_POSSESSIVE_REPEAT | - OP2_CCLASS_SET_OP | OP2_ESC_CAPITAL_C_BAR_CONTROL | - OP2_ESC_CAPITAL_M_BAR_META | OP2_ESC_V_VTAB | - OP2_ESC_H_XDIGIT ), - - ( GNU_REGEX_BV | - ALLOW_INTERVAL_LOW_ABBREV | - DIFFERENT_LEN_ALT_LOOK_BEHIND | - CAPTURE_ONLY_NAMED_GROUP | - ALLOW_MULTIPLEX_DEFINITION_NAME | - FIXED_INTERVAL_IS_GREEDY_ONLY | - WARN_CC_OP_NOT_ESCAPED | - WARN_REDUNDANT_NESTED_REPEAT ), - - Option.NONE, - - new MetaCharTable( - '\\', /* esc */ - INEFFECTIVE_META_CHAR, /* anychar '.' */ - INEFFECTIVE_META_CHAR, /* anytime '*' */ - INEFFECTIVE_META_CHAR, /* zero or one time '?' */ - INEFFECTIVE_META_CHAR, /* one or more time '+' */ - INEFFECTIVE_META_CHAR /* anychar anytime */ - ) - ); - - public static final Syntax DEFAULT = RUBY; - - public static final Syntax ASIS = new Syntax( - 0, - - OP2_INEFFECTIVE_ESCAPE, - - 0, - - Option.NONE, - - new MetaCharTable( - '\\', /* esc */ - INEFFECTIVE_META_CHAR, /* anychar '.' */ - INEFFECTIVE_META_CHAR, /* anytime '*' */ - INEFFECTIVE_META_CHAR, /* zero or one time '?' */ - INEFFECTIVE_META_CHAR, /* one or more time '+' */ - INEFFECTIVE_META_CHAR /* anychar anytime */ - ) - ); - - public static final Syntax PosixBasic = new Syntax( - (POSIX_COMMON_OP | OP_ESC_LPAREN_SUBEXP | - OP_ESC_BRACE_INTERVAL ), - - 0, - - 0, - - ( Option.SINGLELINE | Option.MULTILINE ), - - new MetaCharTable( - '\\', /* esc */ - INEFFECTIVE_META_CHAR, /* anychar '.' */ - INEFFECTIVE_META_CHAR, /* anytime '*' */ - INEFFECTIVE_META_CHAR, /* zero or one time '?' */ - INEFFECTIVE_META_CHAR, /* one or more time '+' */ - INEFFECTIVE_META_CHAR /* anychar anytime */ - ) - ); - - public static final Syntax PosixExtended = new Syntax( - ( POSIX_COMMON_OP | OP_LPAREN_SUBEXP | - OP_BRACE_INTERVAL | - OP_PLUS_ONE_INF | OP_QMARK_ZERO_ONE |OP_VBAR_ALT ), - - 0, - - ( CONTEXT_INDEP_ANCHORS | - CONTEXT_INDEP_REPEAT_OPS | CONTEXT_INVALID_REPEAT_OPS | - ALLOW_UNMATCHED_CLOSE_SUBEXP | - ALLOW_DOUBLE_RANGE_OP_IN_CC ), - - ( Option.SINGLELINE | Option.MULTILINE ), - - new MetaCharTable( - '\\', /* esc */ - INEFFECTIVE_META_CHAR, /* anychar '.' */ - INEFFECTIVE_META_CHAR, /* anytime '*' */ - INEFFECTIVE_META_CHAR, /* zero or one time '?' */ - INEFFECTIVE_META_CHAR, /* one or more time '+' */ - INEFFECTIVE_META_CHAR /* anychar anytime */ - ) - ); - - public static final Syntax Emacs = new Syntax( - ( OP_DOT_ANYCHAR | OP_BRACKET_CC | - OP_ESC_BRACE_INTERVAL | - OP_ESC_LPAREN_SUBEXP | OP_ESC_VBAR_ALT | - OP_ASTERISK_ZERO_INF | OP_PLUS_ONE_INF | - OP_QMARK_ZERO_ONE | OP_DECIMAL_BACKREF | - OP_LINE_ANCHOR | OP_ESC_CONTROL_CHARS ), - - OP2_ESC_GNU_BUF_ANCHOR, - - ALLOW_EMPTY_RANGE_IN_CC, - - Option.NONE, - - new MetaCharTable( - '\\', /* esc */ - INEFFECTIVE_META_CHAR, /* anychar '.' */ - INEFFECTIVE_META_CHAR, /* anytime '*' */ - INEFFECTIVE_META_CHAR, /* zero or one time '?' */ - INEFFECTIVE_META_CHAR, /* one or more time '+' */ - INEFFECTIVE_META_CHAR /* anychar anytime */ - ) - ); - - public static final Syntax Grep = new Syntax( - ( OP_DOT_ANYCHAR | OP_BRACKET_CC | OP_POSIX_BRACKET | - OP_ESC_BRACE_INTERVAL | OP_ESC_LPAREN_SUBEXP | - OP_ESC_VBAR_ALT | - OP_ASTERISK_ZERO_INF | OP_ESC_PLUS_ONE_INF | - OP_ESC_QMARK_ZERO_ONE | OP_LINE_ANCHOR | - OP_ESC_W_WORD | OP_ESC_B_WORD_BOUND | - OP_ESC_LTGT_WORD_BEGIN_END | OP_DECIMAL_BACKREF ), - - 0, - - ( ALLOW_EMPTY_RANGE_IN_CC | NOT_NEWLINE_IN_NEGATIVE_CC ), - - Option.NONE, - - new MetaCharTable( - '\\', /* esc */ - INEFFECTIVE_META_CHAR, /* anychar '.' */ - INEFFECTIVE_META_CHAR, /* anytime '*' */ - INEFFECTIVE_META_CHAR, /* zero or one time '?' */ - INEFFECTIVE_META_CHAR, /* one or more time '+' */ - INEFFECTIVE_META_CHAR /* anychar anytime */ - ) - ); - - public static final Syntax GnuRegex = new Syntax( - GNU_REGEX_OP, - 0, - GNU_REGEX_BV, - - Option.NONE, - - new MetaCharTable( - '\\', /* esc */ - INEFFECTIVE_META_CHAR, /* anychar '.' */ - INEFFECTIVE_META_CHAR, /* anytime '*' */ - INEFFECTIVE_META_CHAR, /* zero or one time '?' */ - INEFFECTIVE_META_CHAR, /* one or more time '+' */ - INEFFECTIVE_META_CHAR /* anychar anytime */ - ) - ); - - public static final Syntax Java = new Syntax( - (( GNU_REGEX_OP | OP_QMARK_NON_GREEDY | - OP_ESC_CONTROL_CHARS | OP_ESC_C_CONTROL | - OP_ESC_OCTAL3 | OP_ESC_X_HEX2 ) - & ~OP_ESC_LTGT_WORD_BEGIN_END ), - - ( OP2_ESC_CAPITAL_Q_QUOTE | OP2_QMARK_GROUP_EFFECT | - OP2_OPTION_PERL | OP2_PLUS_POSSESSIVE_REPEAT | - OP2_PLUS_POSSESSIVE_INTERVAL | OP2_CCLASS_SET_OP | - OP2_ESC_V_VTAB | OP2_ESC_U_HEX4 | - OP2_ESC_P_BRACE_CHAR_PROPERTY ), - - ( GNU_REGEX_BV | DIFFERENT_LEN_ALT_LOOK_BEHIND ), - - Option.SINGLELINE, - - new MetaCharTable( - '\\', /* esc */ - INEFFECTIVE_META_CHAR, /* anychar '.' */ - INEFFECTIVE_META_CHAR, /* anytime '*' */ - INEFFECTIVE_META_CHAR, /* zero or one time '?' */ - INEFFECTIVE_META_CHAR, /* one or more time '+' */ - INEFFECTIVE_META_CHAR /* anychar anytime */ - ) - ); - - public static final Syntax Perl = new Syntax( - (( GNU_REGEX_OP | OP_QMARK_NON_GREEDY | - OP_ESC_OCTAL3 | OP_ESC_X_HEX2 | - OP_ESC_X_BRACE_HEX8 | OP_ESC_CONTROL_CHARS | - OP_ESC_C_CONTROL ) - & ~OP_ESC_LTGT_WORD_BEGIN_END ), - - ( OP2_ESC_CAPITAL_Q_QUOTE | - OP2_QMARK_GROUP_EFFECT | OP2_OPTION_PERL | - OP2_ESC_P_BRACE_CHAR_PROPERTY | - OP2_ESC_P_BRACE_CIRCUMFLEX_NOT ), - - GNU_REGEX_BV, - - Option.SINGLELINE, - - new MetaCharTable( - '\\', /* esc */ - INEFFECTIVE_META_CHAR, /* anychar '.' */ - INEFFECTIVE_META_CHAR, /* anytime '*' */ - INEFFECTIVE_META_CHAR, /* zero or one time '?' */ - INEFFECTIVE_META_CHAR, /* one or more time '+' */ - INEFFECTIVE_META_CHAR /* anychar anytime */ - ) - ); - - public static final Syntax PerlNG = new Syntax( - (( GNU_REGEX_OP | OP_QMARK_NON_GREEDY | - OP_ESC_OCTAL3 | OP_ESC_X_HEX2 | - OP_ESC_X_BRACE_HEX8 | OP_ESC_CONTROL_CHARS | - OP_ESC_C_CONTROL ) - & ~OP_ESC_LTGT_WORD_BEGIN_END ), - - ( OP2_ESC_CAPITAL_Q_QUOTE | - OP2_QMARK_GROUP_EFFECT | OP2_OPTION_PERL | - OP2_ESC_P_BRACE_CHAR_PROPERTY | - OP2_ESC_P_BRACE_CIRCUMFLEX_NOT | - OP2_QMARK_LT_NAMED_GROUP | - OP2_ESC_K_NAMED_BACKREF | - OP2_ESC_G_SUBEXP_CALL ), - - ( GNU_REGEX_BV | - CAPTURE_ONLY_NAMED_GROUP | - ALLOW_MULTIPLEX_DEFINITION_NAME ), - - Option.SINGLELINE, - - new MetaCharTable( - '\\', /* esc */ - INEFFECTIVE_META_CHAR, /* anychar '.' */ - INEFFECTIVE_META_CHAR, /* anytime '*' */ - INEFFECTIVE_META_CHAR, /* zero or one time '?' */ - INEFFECTIVE_META_CHAR, /* one or more time '+' */ - INEFFECTIVE_META_CHAR /* anychar anytime */ - ) - ); - - public static final Syntax JAVASCRIPT = new Syntax( - (( GNU_REGEX_OP | OP_QMARK_NON_GREEDY | - OP_ESC_CONTROL_CHARS | OP_ESC_C_CONTROL | OP_ESC_X_HEX2) - & ~OP_ESC_LTGT_WORD_BEGIN_END ), - - ( OP2_QMARK_GROUP_EFFECT | - OP2_ESC_V_VTAB | OP2_ESC_U_HEX4 ), - - ( GNU_REGEX_BV | DIFFERENT_LEN_ALT_LOOK_BEHIND ), - - Option.SINGLELINE, - - new MetaCharTable( - '\\', /* esc */ - INEFFECTIVE_META_CHAR, /* anychar '.' */ - INEFFECTIVE_META_CHAR, /* anytime '*' */ - INEFFECTIVE_META_CHAR, /* zero or one time '?' */ - INEFFECTIVE_META_CHAR, /* one or more time '+' */ - INEFFECTIVE_META_CHAR /* anychar anytime */ - ) - ); -}