summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoryugui <yugui@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2010-08-18 05:42:40 +0000
committeryugui <yugui@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2010-08-18 05:42:40 +0000
commitf7f765ee306bf499fe4c3e02e76e926bc67f6f5f (patch)
tree6130d62e8083a0ba56a52d67ef1c2fdb74e9600b
parent84d71259e63f67578b6b0f23199417bc3681a299 (diff)
merges r29023 from trunk into ruby_1_9_2.
-- * regcomp.c: revert r26701; it introduces Bug #3681. [ruby-core:31677] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_2@29029 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog5
-rw-r--r--regcomp.c20
-rw-r--r--test/ruby/test_regexp.rb1
3 files changed, 8 insertions, 18 deletions
diff --git a/ChangeLog b/ChangeLog
index 59673c44ec..fb1dc55672 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Wed Aug 18 01:37:49 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * regcomp.c: revert r26701; it introduces Bug #3681.
+ [ruby-core:31677]
+
Mon Aug 16 23:16:21 2010 Yusuke Endoh <mame@tsg.ne.jp>
* NEWS: updated. a patch from Kazuhiro NISHIYAMA in [ruby-dev:42001].
diff --git a/regcomp.c b/regcomp.c
index b681e669bf..06b67f5b69 100644
--- a/regcomp.c
+++ b/regcomp.c
@@ -3671,7 +3671,6 @@ setup_comb_exp_check(Node* node, int state, ScanEnv* env)
#define IN_NOT (1<<1)
#define IN_REPEAT (1<<2)
#define IN_VAR_REPEAT (1<<3)
-#define IN_LAST (1<<4)
/* setup_tree does the following work.
1. check empty loop. (set qn->target_empty_info)
@@ -3693,8 +3692,7 @@ setup_tree(Node* node, regex_t* reg, int state, ScanEnv* env)
{
Node* prev = NULL_NODE;
do {
- int s = IS_NOT_NULL(NCDR(node)) ? (state & ~IN_LAST) : state;
- r = setup_tree(NCAR(node), reg, s, env);
+ r = setup_tree(NCAR(node), reg, state, env);
if (IS_NOT_NULL(prev) && r == 0) {
r = next_setup(prev, NCAR(node), reg);
}
@@ -3825,20 +3823,6 @@ setup_tree(Node* node, regex_t* reg, int state, ScanEnv* env)
}
}
#endif
-
- if ((state & IN_LAST) != 0 && qn->greedy && IS_REPEAT_INFINITE(qn->upper)) {
- /* automatic posseivation a* (at last) ==> (?>a*) */
- if (qn->lower <= 1) {
- int ttype = NTYPE(qn->target);
- if (IS_NODE_TYPE_SIMPLE(ttype)) {
- Node* en = onig_node_new_enclose(ENCLOSE_STOP_BACKTRACK);
- CHECK_NULL_RETURN_MEMERR(en);
- SET_ENCLOSE_STATUS(en, NST_STOP_BT_SIMPLE_REPEAT);
- swap_node(node, en);
- NENCLOSE(node)->target = en;
- }
- }
- }
}
break;
@@ -5393,7 +5377,7 @@ onig_compile(regex_t* reg, const UChar* pattern, const UChar* pattern_end,
reg->num_call = 0;
#endif
- r = setup_tree(root, reg, IN_LAST, &scan_env);
+ r = setup_tree(root, reg, 0, &scan_env);
if (r != 0) goto err_unset;
#ifdef ONIG_DEBUG_PARSE_TREE
diff --git a/test/ruby/test_regexp.rb b/test/ruby/test_regexp.rb
index 35162310db..16ae4e0801 100644
--- a/test/ruby/test_regexp.rb
+++ b/test/ruby/test_regexp.rb
@@ -816,6 +816,7 @@ class TestRegexp < Test::Unit::TestCase
assert_nothing_raised { s.match(/(\d) (.*)/) }
assert_equal("1", $1)
assert_equal(" " * 4999999, $2)
+ assert_match(/(?:A.+){2}/, 'AbAb')
end
def test_invalid_fragment