This is an automated email from the git hooks/post-receive script. henrich pushed a commit to branch debian/sid in repository jruby-joni.
commit e197e1833a5e7ac6d596e4af406a77bcd665f13d Author: Ben Browning <[email protected]> Date: Fri Oct 25 10:19:55 2013 -0400 Squash all the JS options to OP2_OPTION_ECMASCRIPT This also guards against a couple of minor behavioral changes to ensure they only happen when OP2_OPTION_ECMASCRIPT is set. --- src/org/joni/Analyser.java | 8 ++++---- src/org/joni/Lexer.java | 2 +- src/org/joni/Parser.java | 14 +++++++------- src/org/joni/Syntax.java | 28 +++++----------------------- src/org/joni/ast/CClassNode.java | 2 +- src/org/joni/ast/QuantifierNode.java | 4 +++- src/org/joni/constants/SyntaxProperties.java | 9 ++------- 7 files changed, 23 insertions(+), 44 deletions(-) diff --git a/src/org/joni/Analyser.java b/src/org/joni/Analyser.java index 59063ff..9665ba6 100644 --- a/src/org/joni/Analyser.java +++ b/src/org/joni/Analyser.java @@ -413,14 +413,14 @@ final class Analyser extends Parser { if (br.isRecursion()) break; if (br.back[0] > env.numMem) { - if (syntax.strictCheckBackref()) newValueException(ERR_INVALID_BACKREF); + if (!syntax.op2OptionECMAScript()) newValueException(ERR_INVALID_BACKREF); } else { min = getMinMatchLength(env.memNodes[br.back[0]]); } for (int i=1; i<br.backNum; i++) { if (br.back[i] > env.numMem) { - if (syntax.strictCheckBackref()) newValueException(ERR_INVALID_BACKREF); + if (!syntax.op2OptionECMAScript()) newValueException(ERR_INVALID_BACKREF); } else { int tmin = getMinMatchLength(env.memNodes[br.back[i]]); if (min > tmin) min = tmin; @@ -553,7 +553,7 @@ final class Analyser extends Parser { for (int i=0; i<br.backNum; i++) { if (br.back[i] > env.numMem) { - if(syntax.strictCheckBackref()) newValueException(ERR_INVALID_BACKREF); + if(!syntax.op2OptionECMAScript()) newValueException(ERR_INVALID_BACKREF); } else { int tmax = getMaxMatchLength(env.memNodes[br.back[i]]); if (max < tmax) max = tmax; @@ -1790,7 +1790,7 @@ final class Analyser extends Parser { BackRefNode br = (BackRefNode)node; for (int i=0; i<br.backNum; i++) { if (br.back[i] > env.numMem) { - if (syntax.strictCheckBackref()) newValueException(ERR_INVALID_BACKREF); + if (!syntax.op2OptionECMAScript()) newValueException(ERR_INVALID_BACKREF); } else { env.backrefedMem = bsOnAt(env.backrefedMem, br.back[i]); env.btMemStart = bsOnAt(env.btMemStart, br.back[i]); diff --git a/src/org/joni/Lexer.java b/src/org/joni/Lexer.java index e50be33..0b70271 100644 --- a/src/org/joni/Lexer.java +++ b/src/org/joni/Lexer.java @@ -185,7 +185,7 @@ class Lexer extends ScannerSupport { private void fetchEscapedValueControl() { if (!left()) { - if (syntax.op2EscIdentity()) { + if (syntax.op2OptionECMAScript()) { return; } else { newSyntaxException(ERR_END_PATTERN_AT_CONTROL); diff --git a/src/org/joni/Parser.java b/src/org/joni/Parser.java index 95e5618..62208a7 100644 --- a/src/org/joni/Parser.java +++ b/src/org/joni/Parser.java @@ -157,7 +157,7 @@ class Parser extends Lexer { neg = false; } - if (token.type == TokenType.CC_CLOSE && !syntax.allowEmptyCC()) { + if (token.type == TokenType.CC_CLOSE && !syntax.op2OptionECMAScript()) { if (!codeExistCheck(']', true)) newSyntaxException(ERR_EMPTY_CHAR_CLASS); env.ccEscWarn("]"); token.type = TokenType.CHAR; /* allow []...] */ @@ -429,7 +429,7 @@ class Parser extends Lexer { break; case '!': /* preceding read */ node = new AnchorNode(AnchorType.PREC_READ_NOT); - if (syntax.ignoreBackrefPrecReadNot()) { + if (syntax.op2OptionECMAScript()) { env.pushPrecReadNotNode(node); } break; @@ -582,14 +582,14 @@ class Parser extends Lexer { if (node.getType() == NodeType.ANCHOR) { AnchorNode an = (AnchorNode) node; an.setTarget(target); - if (syntax.ignoreBackrefPrecReadNot() && an.type == AnchorType.PREC_READ_NOT) { + if (syntax.op2OptionECMAScript() && an.type == AnchorType.PREC_READ_NOT) { env.popPrecReadNotNode(an); } } else { EncloseNode en = (EncloseNode)node; en.setTarget(target); if (en.type == EncloseType.MEMORY) { - if (syntax.ignoreBackrefPrecReadNot()) { + if (syntax.op2OptionECMAScript()) { en.containingAnchor = env.currentPrecReadNotNode(); } /* Don't move this to previous of parse_subexp() */ @@ -759,7 +759,7 @@ class Parser extends Lexer { break; case BACKREF: - if (syntax.ignoreBackrefPrecReadNot() && token.getBackrefNum() == 1 && env.memNodes != null) { + if (syntax.op2OptionECMAScript() && token.getBackrefNum() == 1 && env.memNodes != null) { EncloseNode encloseNode = (EncloseNode) env.memNodes[token.getBackrefRef1()]; boolean shouldIgnore = false; if (encloseNode != null && encloseNode.containingAnchor != null) { @@ -890,7 +890,7 @@ class Parser extends Lexer { while (token.type == TokenType.OP_REPEAT || token.type == TokenType.INTERVAL) { // repeat: if (target.isInvalidQuantifier()) newSyntaxException(ERR_TARGET_OF_REPEAT_OPERATOR_INVALID); - if (!syntax.allowNestedRepeat() && target.getType() == NodeType.QTFR) { + if (syntax.op2OptionECMAScript() && target.getType() == NodeType.QTFR) { newSyntaxException(ERR_NESTED_REPEAT_NOT_ALLOWED); } QuantifierNode qtfr = new QuantifierNode(token.getRepeatLower(), @@ -907,7 +907,7 @@ class Parser extends Lexer { qn = en; } - if (ret == 0 || ret == 1) { + if (ret == 0 || (syntax.op2OptionECMAScript() && ret == 1)) { target = qn; } else if (ret == 2) { /* split case: /abc+/ */ target = ConsAltNode.newListNode(target, null); diff --git a/src/org/joni/Syntax.java b/src/org/joni/Syntax.java index 4cd349b..4e7b5e7 100644 --- a/src/org/joni/Syntax.java +++ b/src/org/joni/Syntax.java @@ -278,12 +278,8 @@ public final class Syntax implements SyntaxProperties{ return isOp2(OP2_INEFFECTIVE_ESCAPE); } - public boolean op2EscIdentity() { - return isOp2(OP2_ESC_IDENTITY); - } - - public boolean op2UnicodeWhitespace() { - return isOp2(OP2_UNICODE_WHITESPACE); + public boolean op2OptionECMAScript() { + return isOp2(OP2_OPTION_ECMASCRIPT); } /** @@ -334,14 +330,6 @@ public final class Syntax implements SyntaxProperties{ return isBehavior(FIXED_INTERVAL_IS_GREEDY_ONLY); } - public boolean ignoreBackrefPrecReadNot() { - return isBehavior(IGNORE_BACKREF_PREC_READ_NOT); - } - - - public boolean allowEmptyCC() { - return isBehavior(ALLOW_EMPTY_CC); - } public boolean notNewlineInNegativeCC() { return isBehavior(NOT_NEWLINE_IN_NEGATIVE_CC); @@ -359,10 +347,6 @@ public final class Syntax implements SyntaxProperties{ return isBehavior(ALLOW_DOUBLE_RANGE_OP_IN_CC); } - public boolean allowNestedRepeat() { - return isBehavior(ALLOW_NESTED_REPEAT); - } - public boolean warnCCOpNotEscaped() { return isBehavior(WARN_CC_OP_NOT_ESCAPED); } @@ -624,7 +608,7 @@ public final class Syntax implements SyntaxProperties{ ) ); - public static final Syntax JavaScript = new Syntax( + public static final Syntax ECMAScript = new Syntax( (( GNU_REGEX_OP | OP_QMARK_NON_GREEDY | OP_ESC_OCTAL3 | OP_ESC_X_HEX2 | OP_ESC_CONTROL_CHARS | OP_ESC_C_CONTROL | @@ -637,17 +621,15 @@ public final class Syntax implements SyntaxProperties{ OP2_ESC_P_BRACE_CHAR_PROPERTY | OP2_ESC_P_BRACE_CIRCUMFLEX_NOT | OP2_ESC_U_HEX4 | OP2_ESC_V_VTAB | - OP2_ESC_IDENTITY | OP2_UNICODE_WHITESPACE ), + OP2_OPTION_ECMASCRIPT ), ( CONTEXT_INDEP_ANCHORS | CONTEXT_INDEP_REPEAT_OPS | CONTEXT_INVALID_REPEAT_OPS | ALLOW_INVALID_INTERVAL | - ALLOW_EMPTY_CC | BACKSLASH_ESCAPE_IN_CC | ALLOW_DOUBLE_RANGE_OP_IN_CC | - DIFFERENT_LEN_ALT_LOOK_BEHIND | - IGNORE_BACKREF_PREC_READ_NOT ), + DIFFERENT_LEN_ALT_LOOK_BEHIND ), Option.NONE, diff --git a/src/org/joni/ast/CClassNode.java b/src/org/joni/ast/CClassNode.java index f3a9306..6dd5d7f 100644 --- a/src/org/joni/ast/CClassNode.java +++ b/src/org/joni/ast/CClassNode.java @@ -336,7 +336,7 @@ public final class CClassNode extends Node { if (Config.NON_UNICODE_SDW) { switch(ctype) { case CharacterType.S: - if (!not && env.syntax.op2UnicodeWhitespace()) { + if (!not && env.syntax.op2OptionECMAScript()) { // treat \u2028 and \u2029 as whitespace addCodeRange(env, 8232, 8233); } diff --git a/src/org/joni/ast/QuantifierNode.java b/src/org/joni/ast/QuantifierNode.java index 39be333..d75aa27 100644 --- a/src/org/joni/ast/QuantifierNode.java +++ b/src/org/joni/ast/QuantifierNode.java @@ -201,7 +201,9 @@ public final class QuantifierNode extends StateNode { public int setQuantifier(Node tgt, boolean group, ScanEnvironment env, byte[]bytes, int p, int end) { if (lower == 1 && upper == 1) { - setTarget(tgt); + if (env.syntax.op2OptionECMAScript()) { + setTarget(tgt); + } return 1; } diff --git a/src/org/joni/constants/SyntaxProperties.java b/src/org/joni/constants/SyntaxProperties.java index 4fb159d..075324c 100644 --- a/src/org/joni/constants/SyntaxProperties.java +++ b/src/org/joni/constants/SyntaxProperties.java @@ -74,8 +74,7 @@ public interface SyntaxProperties { /* final int OP2_CHAR_PROPERTY_PREFIX_IS = (1<<18); */ final int OP2_ESC_H_XDIGIT = (1<<19); /* \h, \H */ final int OP2_INEFFECTIVE_ESCAPE = (1<<20); /* \ */ - final int OP2_ESC_IDENTITY = (1<<21); /* \a, \b, \c */ - final int OP2_UNICODE_WHITESPACE = (1<<22); /* \s matches \u2028 */ + final int OP2_OPTION_ECMASCRIPT = (1<<21); /* EcmaScript quirks */ /* syntax (behavior); */ final int CONTEXT_INDEP_ANCHORS = (1<<31); /* not implemented */ @@ -89,11 +88,8 @@ public interface SyntaxProperties { final int CAPTURE_ONLY_NAMED_GROUP = (1<<7); /* see doc/RE */ final int ALLOW_MULTIPLEX_DEFINITION_NAME = (1<<8); /* (?<x>);(?<x>); */ final int FIXED_INTERVAL_IS_GREEDY_ONLY = (1<<9); /* a{n}?=(?:a{n});? */ - final int ALLOW_NESTED_REPEAT = (1<<10); /* a{0,}{1}{2} */ - final int IGNORE_BACKREF_PREC_READ_NOT = (1<<11); /* /(?!(a+)b\2c)\2 */ /* syntax (behavior); in char class [...] */ - final int ALLOW_EMPTY_CC = (1<<19); /* [] */ final int NOT_NEWLINE_IN_NEGATIVE_CC = (1<<20); /* [^...] */ final int BACKSLASH_ESCAPE_IN_CC = (1<<21); /* [..\w..] etc.. */ final int ALLOW_EMPTY_RANGE_IN_CC = (1<<22); @@ -125,6 +121,5 @@ public interface SyntaxProperties { final int GNU_REGEX_BV = CONTEXT_INDEP_ANCHORS | CONTEXT_INDEP_REPEAT_OPS | CONTEXT_INVALID_REPEAT_OPS | ALLOW_INVALID_INTERVAL | - BACKSLASH_ESCAPE_IN_CC | ALLOW_DOUBLE_RANGE_OP_IN_CC | - ALLOW_NESTED_REPEAT; + BACKSLASH_ESCAPE_IN_CC | ALLOW_DOUBLE_RANGE_OP_IN_CC; } -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-java/jruby-joni.git _______________________________________________ pkg-java-commits mailing list [email protected] http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-java-commits

