[jruby-joni] 210/223: Some preliminaries for \K

Hideki Yamane henrich at moszumanska.debian.org
Mon Nov 16 11:22:14 UTC 2015


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 6eb41c76678513851c39e49ccbc747e0f52e2c44
Author: Marcin Mielzynski <lopx at gazeta.pl>
Date:   Fri Apr 10 01:48:39 2015 +0200

    Some preliminaries for \K
---
 src/org/joni/Analyser.java            |  8 ++++----
 src/org/joni/ArrayCompiler.java       |  4 ++++
 src/org/joni/Lexer.java               |  2 ++
 src/org/joni/Parser.java              | 11 ++++++++---
 src/org/joni/Syntax.java              |  3 ++-
 src/org/joni/ast/AnchorNode.java      | 34 +++++++++++++++++-----------------
 src/org/joni/constants/TokenType.java |  1 +
 7 files changed, 38 insertions(+), 25 deletions(-)

diff --git a/src/org/joni/Analyser.java b/src/org/joni/Analyser.java
index 46fd470..d871f77 100644
--- a/src/org/joni/Analyser.java
+++ b/src/org/joni/Analyser.java
@@ -220,10 +220,10 @@ final class Analyser extends Parser {
     private void noNameDisableMapFor_anchor(Node node, int[]map, Ptr counter) {
         AnchorNode an = (AnchorNode)node;
         switch (an.type) {
-            case AnchorNode.PREC_READ:
-            case AnchorNode.PREC_READ_NOT:
-            case AnchorNode.LOOK_BEHIND:
-            case AnchorNode.LOOK_BEHIND_NOT:
+            case AnchorType.PREC_READ:
+            case AnchorType.PREC_READ_NOT:
+            case AnchorType.LOOK_BEHIND:
+            case AnchorType.LOOK_BEHIND_NOT:
                 an.setTarget(noNameDisableMap(an.target, map, counter));
         }
     }
diff --git a/src/org/joni/ArrayCompiler.java b/src/org/joni/ArrayCompiler.java
index 9b61ecd..62e44fc 100644
--- a/src/org/joni/ArrayCompiler.java
+++ b/src/org/joni/ArrayCompiler.java
@@ -1046,6 +1046,10 @@ final class ArrayCompiler extends Compiler {
                 addOpcode(enc.isSingleByte() ? OPCode.WORD_END_SB : OPCode.WORD_END);
             break;
 
+        case AnchorType.KEEP:
+            addOpcode(OPCode.KEEP);
+            break;
+
         case AnchorType.PREC_READ:
             regex.requireStack = true;
             addOpcode(OPCode.PUSH_POS);
diff --git a/src/org/joni/Lexer.java b/src/org/joni/Lexer.java
index f447059..fe01da6 100644
--- a/src/org/joni/Lexer.java
+++ b/src/org/joni/Lexer.java
@@ -1128,6 +1128,8 @@ class Lexer extends ScannerSupport {
                 case 'X':
                     if (syntax.op2EscCapitalXExtendedGraphemeCluster()) token.type = TokenType.EXTENDED_GRAPHEME_CLUSTER;
                     break;
+                case 'K':
+                    if (syntax.op2EscCapitalKKeep()) token.type = TokenType.KEEP;
                 default:
                     unfetch();
                     int num = fetchEscapedValue();
diff --git a/src/org/joni/Parser.java b/src/org/joni/Parser.java
index 992c2f7..77352b7 100644
--- a/src/org/joni/Parser.java
+++ b/src/org/joni/Parser.java
@@ -771,10 +771,10 @@ class Parser extends Lexer {
                         cc1.addCType(ctype, false, env, this);
                         QuantifierNode qn = new QuantifierNode(0, QuantifierNode.REPEAT_INFINITE, false);
                         qn.setTarget(cc2);
-                        /* \P{M}\p{M}* */
-                        ConsAltNode list = ConsAltNode.newListNode(cc1, ConsAltNode.newListNode(qn, null));
+                        /* (?>...) */
                         EncloseNode en2 = new EncloseNode(EncloseType.STOP_BACKTRACK);
-                        en2.setTarget(list);
+                        /* \P{M}\p{M}* */
+                        en2.setTarget(ConsAltNode.newListNode(cc1, ConsAltNode.newListNode(qn, null)));
                         node = en2;
                     }
                 }
@@ -786,6 +786,11 @@ class Parser extends Lexer {
                 node = np1;
             }
             break;
+
+        case KEEP:
+            node = new AnchorNode(AnchorType.KEEP);
+            break;
+
         case STRING:
             return parseExpTkByte(group); // tk_byte:
 
diff --git a/src/org/joni/Syntax.java b/src/org/joni/Syntax.java
index 47f069d..5ec30f7 100644
--- a/src/org/joni/Syntax.java
+++ b/src/org/joni/Syntax.java
@@ -422,7 +422,8 @@ public final class Syntax implements SyntaxProperties{
         OP2_ESC_H_XDIGIT |
         OP2_ESC_CAPITAL_X_EXTENDED_GRAPHEME_CLUSTER |
         OP2_QMARK_LPAREN_CONDITION |
-        OP2_ESC_CAPITAL_R_LINEBREAK),
+        OP2_ESC_CAPITAL_R_LINEBREAK // | OP2_ESC_CAPITAL_K_KEEP
+        ),
 
         ( GNU_REGEX_BV |
         ALLOW_INTERVAL_LOW_ABBREV |
diff --git a/src/org/joni/ast/AnchorNode.java b/src/org/joni/ast/AnchorNode.java
index 1000083..498f1a6 100644
--- a/src/org/joni/ast/AnchorNode.java
+++ b/src/org/joni/ast/AnchorNode.java
@@ -21,7 +21,7 @@ package org.joni.ast;
 
 import org.joni.constants.AnchorType;
 
-public final class AnchorNode extends Node implements AnchorType {
+public final class AnchorNode extends Node {
     public final int type;
     public boolean asciiRange;
     public Node target;
@@ -68,22 +68,22 @@ public final class AnchorNode extends Node implements AnchorType {
 
     public String typeToString() {
         StringBuilder type = new StringBuilder();
-        if (isType(BEGIN_BUF)) type.append("BEGIN_BUF ");
-        if (isType(BEGIN_LINE)) type.append("BEGIN_LINE ");
-        if (isType(BEGIN_POSITION)) type.append("BEGIN_POSITION ");
-        if (isType(END_BUF)) type.append("END_BUF ");
-        if (isType(SEMI_END_BUF)) type.append("SEMI_END_BUF ");
-        if (isType(END_LINE)) type.append("END_LINE ");
-        if (isType(WORD_BOUND)) type.append("WORD_BOUND ");
-        if (isType(NOT_WORD_BOUND)) type.append("NOT_WORD_BOUND ");
-        if (isType(WORD_BEGIN)) type.append("WORD_BEGIN ");
-        if (isType(WORD_END)) type.append("WORD_END ");
-        if (isType(PREC_READ)) type.append("PREC_READ ");
-        if (isType(PREC_READ_NOT)) type.append("PREC_READ_NOT ");
-        if (isType(LOOK_BEHIND)) type.append("LOOK_BEHIND ");
-        if (isType(LOOK_BEHIND_NOT)) type.append("LOOK_BEHIND_NOT ");
-        if (isType(ANYCHAR_STAR)) type.append("ANYCHAR_STAR ");
-        if (isType(ANYCHAR_STAR_ML)) type.append("ANYCHAR_STAR_ML ");
+        if (isType(AnchorType.BEGIN_BUF)) type.append("BEGIN_BUF ");
+        if (isType(AnchorType.BEGIN_LINE)) type.append("BEGIN_LINE ");
+        if (isType(AnchorType.BEGIN_POSITION)) type.append("BEGIN_POSITION ");
+        if (isType(AnchorType.END_BUF)) type.append("END_BUF ");
+        if (isType(AnchorType.SEMI_END_BUF)) type.append("SEMI_END_BUF ");
+        if (isType(AnchorType.END_LINE)) type.append("END_LINE ");
+        if (isType(AnchorType.WORD_BOUND)) type.append("WORD_BOUND ");
+        if (isType(AnchorType.NOT_WORD_BOUND)) type.append("NOT_WORD_BOUND ");
+        if (isType(AnchorType.WORD_BEGIN)) type.append("WORD_BEGIN ");
+        if (isType(AnchorType.WORD_END)) type.append("WORD_END ");
+        if (isType(AnchorType.PREC_READ)) type.append("PREC_READ ");
+        if (isType(AnchorType.PREC_READ_NOT)) type.append("PREC_READ_NOT ");
+        if (isType(AnchorType.LOOK_BEHIND)) type.append("LOOK_BEHIND ");
+        if (isType(AnchorType.LOOK_BEHIND_NOT)) type.append("LOOK_BEHIND_NOT ");
+        if (isType(AnchorType.ANYCHAR_STAR)) type.append("ANYCHAR_STAR ");
+        if (isType(AnchorType.ANYCHAR_STAR_ML)) type.append("ANYCHAR_STAR_ML ");
         return type.toString();
     }
 
diff --git a/src/org/joni/constants/TokenType.java b/src/org/joni/constants/TokenType.java
index 3dc8386..80f3079 100644
--- a/src/org/joni/constants/TokenType.java
+++ b/src/org/joni/constants/TokenType.java
@@ -41,6 +41,7 @@ public enum TokenType {
       CHAR_PROPERTY,    /* \p{...}, \P{...} */
       LINEBREAK,
       EXTENDED_GRAPHEME_CLUSTER,
+      KEEP,
       /* in cc */
       CC_CLOSE,
       CC_RANGE,

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-java/jruby-joni.git



More information about the pkg-java-commits mailing list