add String/Symbol argument to MatchData[x]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@10045 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
1e608d0dff
commit
a350e9c6e2
10
ChangeLog
10
ChangeLog
@ -1,3 +1,13 @@
|
||||
Tue Mar 21 22:14:01 2006 K.Kosako <sndgk393 AT ybb.ne.jp>
|
||||
|
||||
* re.c (match_alloc): initialize member regexp.
|
||||
|
||||
* re.c (match_aref): add String and Symbol argument. [ruby-dev:28448]
|
||||
|
||||
* re.h : add member regexp to RMatch.
|
||||
|
||||
* gc.c (gc_mark_children): add gc_mark() to regexp member.
|
||||
|
||||
Mon Mar 20 11:12:38 2006 NAKAMURA Usaku <usa@ruby-lang.org>
|
||||
|
||||
* ext/win32ole/win32ole.c (folevariant_value): could not compile
|
||||
|
1
gc.c
1
gc.c
@ -970,6 +970,7 @@ gc_mark_children(VALUE ptr, int lev)
|
||||
break;
|
||||
|
||||
case T_MATCH:
|
||||
gc_mark(obj->as.match.regexp, lev);
|
||||
if (obj->as.match.str) {
|
||||
ptr = obj->as.match.str;
|
||||
goto again;
|
||||
|
41
re.c
41
re.c
@ -655,6 +655,7 @@ match_alloc(VALUE klass)
|
||||
|
||||
match->str = 0;
|
||||
match->regs = 0;
|
||||
match->regexp = 0;
|
||||
match->regs = ALLOC(struct re_registers);
|
||||
MEMZERO(match->regs, struct re_registers, 1);
|
||||
|
||||
@ -942,6 +943,7 @@ rb_reg_search(VALUE re, VALUE str, long pos, long reverse)
|
||||
|
||||
onig_region_copy(RMATCH(match)->regs, ®s);
|
||||
RMATCH(match)->str = rb_str_new4(str);
|
||||
RMATCH(match)->regexp = re;
|
||||
rb_backref_set(match);
|
||||
|
||||
OBJ_INFECT(match, re);
|
||||
@ -1183,10 +1185,43 @@ match_aref(int argc, VALUE *argv, VALUE match)
|
||||
|
||||
rb_scan_args(argc, argv, "11", &idx, &rest);
|
||||
|
||||
if (!NIL_P(rest) || !FIXNUM_P(idx) || FIX2INT(idx) < 0) {
|
||||
return rb_ary_aref(argc, argv, match_to_a(match));
|
||||
if (NIL_P(rest)) {
|
||||
if (FIXNUM_P(idx)) {
|
||||
if (FIX2INT(idx) >= 0) {
|
||||
return rb_reg_nth_match(FIX2INT(idx), match);
|
||||
}
|
||||
}
|
||||
else {
|
||||
char *p, *end;
|
||||
int num;
|
||||
|
||||
switch (TYPE(idx)) {
|
||||
case T_SYMBOL:
|
||||
p = rb_id2name(SYM2ID(idx));
|
||||
goto name_to_backref;
|
||||
break;
|
||||
case T_STRING:
|
||||
p = StringValuePtr(idx);
|
||||
|
||||
name_to_backref:
|
||||
end = p + strlen(p);
|
||||
num = onig_name_to_backref_number(RREGEXP(RMATCH(match)->regexp)->ptr,
|
||||
(unsigned char* )p, (unsigned char* )end, RMATCH(match)->regs);
|
||||
if (num >= 1) {
|
||||
return rb_reg_nth_match(num, match);
|
||||
}
|
||||
else {
|
||||
rb_raise(rb_eArgError, "undefined group name reference: %s", p);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return rb_reg_nth_match(FIX2INT(idx), match);
|
||||
|
||||
return rb_ary_aref(argc, argv, match_to_a(match));
|
||||
}
|
||||
|
||||
static VALUE
|
||||
|
1
re.h
1
re.h
@ -24,6 +24,7 @@ struct RMatch {
|
||||
struct RBasic basic;
|
||||
VALUE str;
|
||||
struct re_registers *regs;
|
||||
VALUE regexp; /* RRegexp */
|
||||
};
|
||||
|
||||
#define RMATCH(obj) (R_CAST(RMatch)(obj))
|
||||
|
@ -1,14 +1,14 @@
|
||||
#define RUBY_VERSION "1.9.0"
|
||||
#define RUBY_RELEASE_DATE "2006-03-20"
|
||||
#define RUBY_RELEASE_DATE "2006-03-21"
|
||||
#define RUBY_VERSION_CODE 190
|
||||
#define RUBY_RELEASE_CODE 20060320
|
||||
#define RUBY_RELEASE_CODE 20060321
|
||||
|
||||
#define RUBY_VERSION_MAJOR 1
|
||||
#define RUBY_VERSION_MINOR 9
|
||||
#define RUBY_VERSION_TEENY 0
|
||||
#define RUBY_RELEASE_YEAR 2006
|
||||
#define RUBY_RELEASE_MONTH 3
|
||||
#define RUBY_RELEASE_DAY 20
|
||||
#define RUBY_RELEASE_DAY 21
|
||||
|
||||
RUBY_EXTERN const char ruby_version[];
|
||||
RUBY_EXTERN const char ruby_release_date[];
|
||||
|
Loading…
x
Reference in New Issue
Block a user