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/