]> granicus.if.org Git - onig/commitdiff
fix anchor conflict by look-behind following anychar-star-multiline (/(?<=a).*/m...
authorK.Kosako <kkosako0@gmail.com>
Thu, 22 Sep 2016 13:04:22 +0000 (22:04 +0900)
committerK.Kosako <kkosako0@gmail.com>
Thu, 22 Sep 2016 13:04:22 +0000 (22:04 +0900)
src/regcomp.c

index 0235a9f4d0f3dc782b5e448c8aee7498b19e69cd..1ba16966a6626ee657450081ee446706bbb618e8 100644 (file)
@@ -4712,6 +4712,8 @@ optimize_node_left(Node* node, NodeOptInfo* opt, OptEnv* env)
     case ANCHOR_END_BUF:
     case ANCHOR_SEMI_END_BUF:
     case ANCHOR_END_LINE:
+    case ANCHOR_PREC_READ_NOT:
+    case ANCHOR_LOOK_BEHIND:
       add_opt_anc_info(&opt->anc, NANCHOR(node)->type);
       break;
 
@@ -4734,8 +4736,6 @@ optimize_node_left(Node* node, NodeOptInfo* opt, OptEnv* env)
       }
       break;
 
-    case ANCHOR_PREC_READ_NOT:
-    case ANCHOR_LOOK_BEHIND: /* Sorry, I can't make use of it. */
     case ANCHOR_LOOK_BEHIND_NOT:
       break;
     }
@@ -4989,6 +4989,9 @@ set_optimize_info_from_tree(Node* node, regex_t* reg, ScanEnv* scan_env)
   reg->anchor = opt.anc.left_anchor & (ANCHOR_BEGIN_BUF |
         ANCHOR_BEGIN_POSITION | ANCHOR_ANYCHAR_STAR | ANCHOR_ANYCHAR_STAR_ML);
 
+  if ((opt.anc.left_anchor & (ANCHOR_LOOK_BEHIND | ANCHOR_PREC_READ_NOT)) != 0)
+    reg->anchor &= ~ANCHOR_ANYCHAR_STAR_ML;
+
   reg->anchor |= opt.anc.right_anchor & (ANCHOR_END_BUF | ANCHOR_SEMI_END_BUF);
 
   if (reg->anchor & (ANCHOR_END_BUF | ANCHOR_SEMI_END_BUF)) {