From 6a80859a161de8606d2eca289807c05d8f57dee1 Mon Sep 17 00:00:00 2001 From: shyouhei Date: Tue, 8 Jun 2010 09:33:00 +0000 Subject: merge revision(s) 28192: * regexp.c (re_compile_pattern): allow zero times match for non-greedy range repeatation. [ruby-core:30613] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8_7@28224 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 5 +++++ regex.c | 6 ++++++ test/ruby/test_regexp.rb | 5 +++++ version.h | 2 +- 4 files changed, 17 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 87bb7419f6..7880c52405 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Tue Jun 8 18:31:02 2010 NARUSE, Yui + + * regexp.c (re_compile_pattern): allow zero times match for + non-greedy range repeatation. [ruby-core:30613] + Tue Jun 8 18:08:18 2010 URABE Shyouhei * Makefile.in (fake.rb): double the backslash. diff --git a/regex.c b/regex.c index f8c2c20c6d..f3749fb12f 100644 --- a/regex.c +++ b/regex.c @@ -2152,6 +2152,12 @@ re_compile_pattern(pattern, size, bufp) more at the end of the loop. */ unsigned nbytes = upper_bound == 1 ? 10 : 20; + if (lower_bound == 0 && greedy == 0) { + GET_BUFFER_SPACE(3); + insert_jump(try_next, laststart, b + 3, b); + b += 3; + } + GET_BUFFER_SPACE(nbytes); /* Initialize lower bound of the `succeed_n', even though it will be set during matching by its diff --git a/test/ruby/test_regexp.rb b/test/ruby/test_regexp.rb index 52ac5f5324..93ffb17ec4 100644 --- a/test/ruby/test_regexp.rb +++ b/test/ruby/test_regexp.rb @@ -457,4 +457,9 @@ class TestRegexp < Test::Unit::TestCase assert_equal("1", $1) assert_equal(" " * 4999999, $2) end + + def test_range_greedy + /wo{0,3}?/ =~ "woo" + assert_equal("w", $&) + end end diff --git a/version.h b/version.h index 7e4bae61fc..28b97ab20e 100644 --- a/version.h +++ b/version.h @@ -2,7 +2,7 @@ #define RUBY_RELEASE_DATE "2010-06-08" #define RUBY_VERSION_CODE 187 #define RUBY_RELEASE_CODE 20100608 -#define RUBY_PATCHLEVEL 288 +#define RUBY_PATCHLEVEL 289 #define RUBY_VERSION_MAJOR 1 #define RUBY_VERSION_MINOR 8 -- cgit v1.2.3