summaryrefslogtreecommitdiff
path: root/regcomp.c
diff options
context:
space:
mode:
authornagachika <nagachika@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2016-08-15 19:24:47 +0000
committernagachika <nagachika@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2016-08-15 19:24:47 +0000
commitab61e5c932c96acd56d22c898bf67d960c1bb677 (patch)
tree1ec4a71087f75e584ba81533bd771cd8d7fd64a8 /regcomp.c
parentb7c5eba722fa07ddfa33341c860a79e41176d88e (diff)
merge revision(s) 55562: [Backport #12454]
* regcomp.c (noname_disable_map): don't optimize out group 0 Ruby's Regexp doesn't allow normal numbered groups if the regexp has named groups. On such case it optimizes out related NT_ENCLOSE. But even on the case it can use \g<0>. This fix not to remove NT_ENCLOSE whose regnum is 0. [ruby-core:75828] [Bug #12454] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_3@55908 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'regcomp.c')
-rw-r--r--regcomp.c7
1 files changed, 3 insertions, 4 deletions
diff --git a/regcomp.c b/regcomp.c
index 34b37f8e4c..c9583a3288 100644
--- a/regcomp.c
+++ b/regcomp.c
@@ -1876,17 +1876,16 @@ noname_disable_map(Node** plink, GroupNumRemap* map, int* counter)
(*counter)++;
map[en->regnum].new_val = *counter;
en->regnum = *counter;
- r = noname_disable_map(&(en->target), map, counter);
}
- else {
+ else if (en->regnum != 0) {
*plink = en->target;
en->target = NULL_NODE;
onig_node_free(node);
r = noname_disable_map(plink, map, counter);
+ break;
}
}
- else
- r = noname_disable_map(&(en->target), map, counter);
+ r = noname_disable_map(&(en->target), map, counter);
}
break;