summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--re.c6
-rw-r--r--test/ruby/test_regexp.rb3
2 files changed, 6 insertions, 3 deletions
diff --git a/re.c b/re.c
index 3e53982912..54ba47c199 100644
--- a/re.c
+++ b/re.c
@@ -1898,7 +1898,7 @@ match_inspect_name_iter(const OnigUChar *name, const OnigUChar *name_end,
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)
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)
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;
diff --git a/test/ruby/test_regexp.rb b/test/ruby/test_regexp.rb
index cff2bb6d1f..de8ecdba22 100644
--- a/test/ruby/test_regexp.rb
+++ b/test/ruby/test_regexp.rb
@@ -887,12 +887,15 @@ class TestRegexp < Test::Unit::TestCase
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