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

ruby-changes:33370

From: nobu <ko1@a...>
Date: Thu, 27 Mar 2014 18:09:08 +0900 (JST)
Subject: [ruby-changes:33370] nobu:r45449 (trunk): re.c: class name encoding

nobu	2014-03-27 18:08:54 +0900 (Thu, 27 Mar 2014)

  New Revision: 45449

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=45449

  Log:
    re.c: class name encoding
    
    * re.c (match_inspect): preserve class name encoding by PRIsVALUE.

  Modified files:
    trunk/re.c
    trunk/test/ruby/test_regexp.rb
Index: re.c
===================================================================
--- re.c	(revision 45448)
+++ re.c	(revision 45449)
@@ -1898,7 +1898,7 @@ match_inspect_name_iter(const OnigUChar https://github.com/ruby/ruby/blob/trunk/re.c#L1898
 static VALUE
 match_inspect(VALUE match)
 {
-    const char *cname = rb_obj_classname(match);
+    VALUE cname = rb_class_path(rb_obj_class(match));
     VALUE str;
     int i;
     struct re_registers *regs = RMATCH_REGS(match);
@@ -1907,7 +1907,7 @@ match_inspect(VALUE match) https://github.com/ruby/ruby/blob/trunk/re.c#L1907
     VALUE regexp = RMATCH(match)->regexp;
 
     if (regexp == 0) {
-        return rb_sprintf("#<%s:%p>", cname, (void*)match);
+        return rb_sprintf("#<%"PRIsVALUE":%p>", cname, (void*)match);
     }
 
     names = ALLOCA_N(struct backref_name_tag, num_regs);
@@ -1917,7 +1917,7 @@ match_inspect(VALUE match) https://github.com/ruby/ruby/blob/trunk/re.c#L1917
             match_inspect_name_iter, names);
 
     str = rb_str_buf_new2("#<");
-    rb_str_buf_cat2(str, cname);
+    rb_str_append(str, cname);
 
     for (i = 0; i < num_regs; i++) {
         VALUE v;
Index: test/ruby/test_regexp.rb
===================================================================
--- test/ruby/test_regexp.rb	(revision 45448)
+++ test/ruby/test_regexp.rb	(revision 45449)
@@ -887,12 +887,15 @@ class TestRegexp < Test::Unit::TestCase https://github.com/ruby/ruby/blob/trunk/test/ruby/test_regexp.rb#L887
     assert_no_match(/^\p{age=1.1}$/u, "\u2754")
   end
 
+  MatchData_A = eval("class MatchData_\u{3042} < MatchData; self; end")
+
   def test_matchdata
     a = "haystack".match(/hay/)
     b = "haystack".match(/hay/)
     assert_equal(a, b, '[ruby-core:24748]')
     h = {a => 42}
     assert_equal(42, h[b], '[ruby-core:24748]')
+    assert_match(/#<TestRegexp::MatchData_\u{3042}:/, MatchData_A.allocate.inspect)
   end
 
   def test_regexp_poped

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

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