[前][次][番号順一覧][スレッド一覧]

ruby-changes:4548

From: ko1@a...
Date: Tue, 15 Apr 2008 20:45:34 +0900 (JST)
Subject: [ruby-changes:4548] akr - Ruby:r16041 (ruby_1_8): * re.c (match_inspect): backported from 1.9.

akr	2008-04-15 20:45:17 +0900 (Tue, 15 Apr 2008)

  New Revision: 16041

  Modified files:
    branches/ruby_1_8/ChangeLog
    branches/ruby_1_8/re.c

  Log:
    * re.c (match_inspect): backported from 1.9.


  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/branches/ruby_1_8/re.c?r1=16041&r2=16040&diff_format=u
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/branches/ruby_1_8/ChangeLog?r1=16041&r2=16040&diff_format=u

Index: ruby_1_8/ChangeLog
===================================================================
--- ruby_1_8/ChangeLog	(revision 16040)
+++ ruby_1_8/ChangeLog	(revision 16041)
@@ -1,3 +1,7 @@
+Tue Apr 15 20:32:03 2008  Tanaka Akira  <akr@f...>
+
+	* re.c (match_inspect): backported from 1.9.
+
 Tue Apr 15 19:03:28 2008  Kazuhiro NISHIYAMA  <zn@m...>
 
 	* eval.c (method_receiver, method_name, method_owner): New
Index: ruby_1_8/re.c
===================================================================
--- ruby_1_8/re.c	(revision 16040)
+++ ruby_1_8/re.c	(revision 16041)
@@ -1279,6 +1279,55 @@
     return RMATCH(match)->str;	/* str is frozen */
 }
 
+/*
+ * call-seq:
+ *    mtch.inspect   => str
+ *
+ * Returns a printable version of <i>mtch</i>.
+ *
+ *     puts /.$/.match("foo").inspect
+ *     #=> #<MatchData "o">
+ *
+ *     puts /(.)(.)(.)/.match("foo").inspect
+ *     #=> #<MatchData "foo" 1:"f" 2:"o" 3:"o">
+ *
+ *     puts /(.)(.)?(.)/.match("fo").inspect
+ *     #=> #<MatchData "fo" 1:"f" 2:nil 3:"o">
+ *
+ */
+
+static VALUE
+match_inspect(VALUE match)
+{
+    char *cname = rb_obj_classname(match);
+    VALUE str;
+    int i;
+    struct re_registers *regs = RMATCH(match)->regs;
+    int num_regs = regs->num_regs;
+
+    str = rb_str_buf_new2("#<");
+    rb_str_buf_cat2(str, cname);
+
+    for (i = 0; i < num_regs; i++) {
+        VALUE v;
+        rb_str_buf_cat2(str, " ");
+        if (0 < i) {
+            char buf[sizeof(i)*3+1];
+            snprintf(buf, sizeof(buf), "%d", i);
+            rb_str_buf_cat2(str, buf);
+            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
@@ -2280,6 +2329,6 @@
     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);
 }

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]