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>
|
Mon Mar 20 11:12:38 2006 NAKAMURA Usaku <usa@ruby-lang.org>
|
||||||
|
|
||||||
* ext/win32ole/win32ole.c (folevariant_value): could not compile
|
* 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;
|
break;
|
||||||
|
|
||||||
case T_MATCH:
|
case T_MATCH:
|
||||||
|
gc_mark(obj->as.match.regexp, lev);
|
||||||
if (obj->as.match.str) {
|
if (obj->as.match.str) {
|
||||||
ptr = obj->as.match.str;
|
ptr = obj->as.match.str;
|
||||||
goto again;
|
goto again;
|
||||||
|
41
re.c
41
re.c
@ -655,6 +655,7 @@ match_alloc(VALUE klass)
|
|||||||
|
|
||||||
match->str = 0;
|
match->str = 0;
|
||||||
match->regs = 0;
|
match->regs = 0;
|
||||||
|
match->regexp = 0;
|
||||||
match->regs = ALLOC(struct re_registers);
|
match->regs = ALLOC(struct re_registers);
|
||||||
MEMZERO(match->regs, struct re_registers, 1);
|
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);
|
onig_region_copy(RMATCH(match)->regs, ®s);
|
||||||
RMATCH(match)->str = rb_str_new4(str);
|
RMATCH(match)->str = rb_str_new4(str);
|
||||||
|
RMATCH(match)->regexp = re;
|
||||||
rb_backref_set(match);
|
rb_backref_set(match);
|
||||||
|
|
||||||
OBJ_INFECT(match, re);
|
OBJ_INFECT(match, re);
|
||||||
@ -1183,10 +1185,43 @@ match_aref(int argc, VALUE *argv, VALUE match)
|
|||||||
|
|
||||||
rb_scan_args(argc, argv, "11", &idx, &rest);
|
rb_scan_args(argc, argv, "11", &idx, &rest);
|
||||||
|
|
||||||
if (!NIL_P(rest) || !FIXNUM_P(idx) || FIX2INT(idx) < 0) {
|
if (NIL_P(rest)) {
|
||||||
return rb_ary_aref(argc, argv, match_to_a(match));
|
if (FIXNUM_P(idx)) {
|
||||||
}
|
if (FIX2INT(idx) >= 0) {
|
||||||
return rb_reg_nth_match(FIX2INT(idx), match);
|
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_ary_aref(argc, argv, match_to_a(match));
|
||||||
}
|
}
|
||||||
|
|
||||||
static VALUE
|
static VALUE
|
||||||
|
1
re.h
1
re.h
@ -24,6 +24,7 @@ struct RMatch {
|
|||||||
struct RBasic basic;
|
struct RBasic basic;
|
||||||
VALUE str;
|
VALUE str;
|
||||||
struct re_registers *regs;
|
struct re_registers *regs;
|
||||||
|
VALUE regexp; /* RRegexp */
|
||||||
};
|
};
|
||||||
|
|
||||||
#define RMATCH(obj) (R_CAST(RMatch)(obj))
|
#define RMATCH(obj) (R_CAST(RMatch)(obj))
|
||||||
|
@ -1,14 +1,14 @@
|
|||||||
#define RUBY_VERSION "1.9.0"
|
#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_VERSION_CODE 190
|
||||||
#define RUBY_RELEASE_CODE 20060320
|
#define RUBY_RELEASE_CODE 20060321
|
||||||
|
|
||||||
#define RUBY_VERSION_MAJOR 1
|
#define RUBY_VERSION_MAJOR 1
|
||||||
#define RUBY_VERSION_MINOR 9
|
#define RUBY_VERSION_MINOR 9
|
||||||
#define RUBY_VERSION_TEENY 0
|
#define RUBY_VERSION_TEENY 0
|
||||||
#define RUBY_RELEASE_YEAR 2006
|
#define RUBY_RELEASE_YEAR 2006
|
||||||
#define RUBY_RELEASE_MONTH 3
|
#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_version[];
|
||||||
RUBY_EXTERN const char ruby_release_date[];
|
RUBY_EXTERN const char ruby_release_date[];
|
||||||
|
Loading…
x
Reference in New Issue
Block a user