Skip to content

Commit 8bdf68d

Browse files
committed
merge r47598 partially. extracted commits are as follows. [Bug ruby#9728]
k-takata/Onigmo@15ddec6 git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_1@47954 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
1 parent b3cfa2f commit 8bdf68d

File tree

3 files changed

+13
-4
lines changed

3 files changed

+13
-4
lines changed

ChangeLog

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
Wed Oct 15 23:58:13 2014 CHIKANAGA Tomoyuki <[email protected]>
2+
3+
merge r47598 partially. extracted commits are as follows. [Bug #9728]
4+
https://github.com/k-takata/Onigmo/commit/15ddec6d18e27fdc1988236764e766fd5892ecf5
5+
16
Wed Oct 15 23:50:33 2014 SHIBATA Hiroshi <[email protected]>
27

38
* lib/fileutils.rb: handle ENOENT error with symlink targeted to

regcomp.c

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4495,6 +4495,9 @@ concat_opt_anc_info(OptAncInfo* to, OptAncInfo* left, OptAncInfo* right,
44954495
if (right_len == 0) {
44964496
to->right_anchor |= left->right_anchor;
44974497
}
4498+
else {
4499+
to->right_anchor |= (left->right_anchor & ANCHOR_PREC_READ_NOT);
4500+
}
44984501
}
44994502

45004503
static int
@@ -5068,7 +5071,8 @@ optimize_node_left(Node* node, NodeOptInfo* opt, OptEnv* env)
50685071
case ANCHOR_END_BUF:
50695072
case ANCHOR_SEMI_END_BUF:
50705073
case ANCHOR_END_LINE:
5071-
case ANCHOR_LOOK_BEHIND: /* just for (?<=x).* */
5074+
case ANCHOR_LOOK_BEHIND: /* just for (?<=x).* */
5075+
case ANCHOR_PREC_READ_NOT: /* just for (?!x).* */
50725076
add_opt_anc_info(&opt->anc, NANCHOR(node)->type);
50735077
break;
50745078

@@ -5091,7 +5095,6 @@ optimize_node_left(Node* node, NodeOptInfo* opt, OptEnv* env)
50915095
}
50925096
break;
50935097

5094-
case ANCHOR_PREC_READ_NOT:
50955098
case ANCHOR_LOOK_BEHIND_NOT:
50965099
break;
50975100
}
@@ -5357,7 +5360,8 @@ set_optimize_info_from_tree(Node* node, regex_t* reg, ScanEnv* scan_env)
53575360
ANCHOR_BEGIN_POSITION | ANCHOR_ANYCHAR_STAR | ANCHOR_ANYCHAR_STAR_ML |
53585361
ANCHOR_LOOK_BEHIND);
53595362

5360-
reg->anchor |= opt.anc.right_anchor & (ANCHOR_END_BUF | ANCHOR_SEMI_END_BUF);
5363+
reg->anchor |= opt.anc.right_anchor & (ANCHOR_END_BUF | ANCHOR_SEMI_END_BUF |
5364+
ANCHOR_PREC_READ_NOT);
53615365

53625366
if (reg->anchor & (ANCHOR_END_BUF | ANCHOR_SEMI_END_BUF)) {
53635367
reg->anchor_dmin = opt.len.min;

regexec.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4184,7 +4184,7 @@ onig_search_gpos(regex_t* reg, const UChar* str, const UChar* end,
41844184
prev = s;
41854185
s += enclen(reg->enc, s, end);
41864186

4187-
if ((reg->anchor & ANCHOR_LOOK_BEHIND) == 0) {
4187+
if ((reg->anchor & (ANCHOR_LOOK_BEHIND | ANCHOR_PREC_READ_NOT)) == 0) {
41884188
while (!ONIGENC_IS_MBC_NEWLINE_EX(reg->enc, prev, str, end, reg->options, 0)
41894189
&& s < range) {
41904190
prev = s;

0 commit comments

Comments
 (0)