summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog4
-rw-r--r--re.c26
2 files changed, 29 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index ba91f41bc7..fe5a55aeb3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+Sat Jun 23 17:18:19 2007 Tanaka Akira <akr@fsij.org>
+
+ * re.c (match_inspect): MatchData#inspect implemented.
+
Sat Jun 23 01:25:40 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
* hash.c (rb_hash_assoc): new method.
diff --git a/re.c b/re.c
index 5398e29946..11c3b62315 100644
--- a/re.c
+++ b/re.c
@@ -1434,6 +1434,30 @@ match_string(VALUE match)
return RMATCH(match)->str; /* str is frozen */
}
+static VALUE
+match_inspect(VALUE match)
+{
+ char *cname = rb_obj_classname(match);
+ VALUE str;
+ int i;
+
+ str = rb_str_buf_new2("#<");
+ rb_str_buf_cat2(str, cname);
+
+ for (i = 0; i < RMATCH(match)->regs->num_regs; i++) {
+ VALUE v;
+ rb_str_buf_cat2(str, " ");
+ v = rb_reg_nth_match(i, match);
+ if (v == Qnil)
+ rb_str_buf_cat2(str, "nil");
+ else
+ rb_str_buf_append(str, rb_str_inspect(v));
+ }
+ rb_str_buf_cat2(str, ">");
+
+ return str;
+}
+
VALUE rb_cRegexp;
static void
@@ -2396,6 +2420,6 @@ Init_Regexp(void)
rb_define_method(rb_cMatch, "pre_match", rb_reg_match_pre, 0);
rb_define_method(rb_cMatch, "post_match", rb_reg_match_post, 0);
rb_define_method(rb_cMatch, "to_s", match_to_s, 0);
- rb_define_method(rb_cMatch, "inspect", rb_any_to_s, 0); /* in object.c */
+ rb_define_method(rb_cMatch, "inspect", match_inspect, 0);
rb_define_method(rb_cMatch, "string", match_string, 0);
}