diff options
author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2002-12-25 07:44:33 +0000 |
---|---|---|
committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2002-12-25 07:44:33 +0000 |
commit | 1b07582fcc575e21b6fc3d5166492783b1bdcf35 (patch) | |
tree | 2e6ffe65d86d5216b86bd90847ab4eeb51177746 | |
parent | 25fa63dc042c14021276c80ee3f9ff9613bd7bff (diff) |
* regex.c (re_match_exec): fix odd \G behavior based on the patch
from Nobu.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@3216 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | regex.c | 19 | ||||
-rw-r--r-- | version.h | 6 |
3 files changed, 24 insertions, 6 deletions
@@ -1,3 +1,8 @@ +Wed Dec 25 16:41:16 2002 Yukihiro Matsumoto <matz@ruby-lang.org> + + * regex.c (re_match_exec): fix odd \G behavior based on the patch + from Nobu. + Wed Dec 25 11:05:11 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net> * bcc32/setup.mak (-generic-): removed garbages. @@ -3089,6 +3089,9 @@ re_adjust_startpos(bufp, string, size, startpos, range) } +static int re_match_exec _((struct re_pattern_buffer *, const char *, int, int, int, + struct re_registers *)); + /* Using the compiled pattern in BUFP->buffer, first tries to match STRING, starting first at index STARTPOS, then at STARTPOS + 1, and so on. RANGE is the number of places to try before giving up. If @@ -3109,7 +3112,7 @@ re_search(bufp, string, size, startpos, range, regs) struct re_registers *regs; { register char *fastmap = bufp->fastmap; - int val, anchor = 0; + int val, anchor = 0, initpos = startpos; /* Check for out-of-range starting position. */ if (startpos < 0 || startpos > size) @@ -3238,7 +3241,7 @@ re_search(bufp, string, size, startpos, range, regs) if (startpos > size) return -1; if ((anchor || !bufp->can_be_null) && range > 0 && size > 0 && startpos == size) return -1; - val = re_match(bufp, string, size, startpos, regs); + val = re_match_exec(bufp, string, size, startpos, initpos, regs); if (val >= 0) return startpos; if (val == -2) return -2; @@ -3473,6 +3476,16 @@ re_match(bufp, string_arg, size, pos, regs) int size, pos; struct re_registers *regs; { + return re_match_exec(bufp, string_arg, size, pos, 0, regs); +} + +static int +re_match_exec(bufp, string_arg, size, pos, beg, regs) + struct re_pattern_buffer *bufp; + const char *string_arg; + int size, pos, beg; + struct re_registers *regs; +{ register unsigned char *p = (unsigned char*)bufp->buffer; unsigned char *p1; @@ -3884,7 +3897,7 @@ re_match(bufp, string_arg, size, pos, regs) /* Match at the starting position. */ case begpos: - if (d - string == pos) + if (d - string == beg) break; goto fail; @@ -1,11 +1,11 @@ #define RUBY_VERSION "1.8.0" -#define RUBY_RELEASE_DATE "2002-12-24" +#define RUBY_RELEASE_DATE "2002-12-25" #define RUBY_VERSION_CODE 180 -#define RUBY_RELEASE_CODE 20021224 +#define RUBY_RELEASE_CODE 20021225 #define RUBY_VERSION_MAJOR 1 #define RUBY_VERSION_MINOR 8 #define RUBY_VERSION_TEENY 0 #define RUBY_RELEASE_YEAR 2002 #define RUBY_RELEASE_MONTH 12 -#define RUBY_RELEASE_DAY 24 +#define RUBY_RELEASE_DAY 25 |