diff options
author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 1998-03-18 08:47:48 +0000 |
---|---|---|
committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 1998-03-18 08:47:48 +0000 |
commit | ae08a031a6560fee564a113f4ba7799430f887f7 (patch) | |
tree | d0fbfc339af319089b5032e2e17c732e3a3c11c9 | |
parent | 15281f2e23d9a947626af5b64659520595bfd783 (diff) |
extended regexp bug fix
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/v1_1r@128 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | ChangeLog | 4 | ||||
-rw-r--r-- | regex.c | 8 | ||||
-rw-r--r-- | sample/test.rb | 4 |
3 files changed, 10 insertions, 6 deletions
@@ -1,3 +1,7 @@ +Wed Mar 18 17:46:31 1998 Yukihiro Matsumoto <matz@netlab.co.jp> + + * regex.c (re_match): forwading failure point popped too much. + Tue Mar 17 18:23:06 1998 Yukihiro Matsumoto <matz@netlab.co.jp> * math.c (math_frexp): newly added. @@ -1848,7 +1848,7 @@ re_compile_pattern(pattern, size, bufp) c1 = 0; GET_UNSIGNED_NUMBER(c1); - if (p < pend) PATUNFETCH; + if (!ISDIGIT(c)) PATUNFETCH; if (c1 >= regnum) { /* need to get octal */ @@ -2892,9 +2892,11 @@ re_match(bufp, string_arg, size, pos, regs) /* If not end of string, try backtracking. Otherwise done. */ if (d != dend) { + while (stackp != stackb && (int)stackp[-1] == 1) + POP_FAILURE_POINT(); if (stackp != stackb) { - /* More failure points to try. */ + /* More failure points to try. */ /* If exceeds best match so far, save it. */ if (! best_regs_set || (d > best_regend[0])) @@ -3419,8 +3421,6 @@ re_match(bufp, string_arg, size, pos, regs) SET_REGS_MATCHED; break; } - if (stackp != stackb && (int)stackp[-1] == 1) - POP_FAILURE_POINT(); continue; /* Successfully executed one pattern command; keep going. */ /* Jump here if any matching operation fails. */ diff --git a/sample/test.rb b/sample/test.rb index e413ada27a..a3f23a6d24 100644 --- a/sample/test.rb +++ b/sample/test.rb @@ -120,7 +120,7 @@ $bad = false tmp = open("while_tmp", "r") while tmp.gets() if gsub!('vt100', 'VT100') - p gsub!('VT100', 'Vt100') + gsub!('VT100', 'Vt100') redo; end $bad = 1 if /vt100/; @@ -296,7 +296,7 @@ ok(defined? "a".chomp) ok("abc".scan(/./) == ["a", "b", "c"]) ok("1a2b3c".scan(/(\d.)/) == [["1a"], ["2b"], ["3c"]]) # non-greedy match -ok("a=12;b=22".scan(/(.*?)=(\d*?);?/) == [["a", "12"], ["b", "22"]]) +ok("a=12;b=22".scan(/(.*?)=(\d*);?/) == [["a", "12"], ["b", "22"]]) $x = [1] ok(($x * 5).join(":") == '1:1:1:1:1') |