Bug #5171 » 0001-ext-date-date_core.c-d_lite_inspect-RB_GC_GUARD-temp.patch
| ext/date/date_core.c | ||
|---|---|---|
|
static VALUE
|
||
|
mk_inspect(union DateData *x, const char *klass, const char *to_s)
|
||
|
{
|
||
|
VALUE real_jd = f_inspect(m_real_jd(x));
|
||
|
VALUE sf = f_inspect(m_sf(x));
|
||
|
RB_GC_GUARD(real_jd);
|
||
|
RB_GC_GUARD(sf);
|
||
|
return rb_enc_sprintf(rb_usascii_encoding(),
|
||
|
"#<%s: %s ((%sj,%ds,%sn),%+ds,%.0fj)>",
|
||
|
klass ? klass : "?",
|
||
|
to_s ? to_s : "?",
|
||
|
RSTRING_PTR(f_inspect(m_real_jd(x))), m_df(x),
|
||
|
RSTRING_PTR(f_inspect(m_sf(x))),
|
||
|
RSTRING_PTR(real_jd), m_df(x),
|
||
|
RSTRING_PTR(sf),
|
||
|
m_of(x), m_sg(x));
|
||
|
}
|
||
| ... | ... | |
|
static VALUE
|
||
|
d_lite_inspect(VALUE self)
|
||
|
{
|
||
|
VALUE to_s;
|
||
|
get_d1(self);
|
||
|
return mk_inspect(dat, rb_obj_classname(self),
|
||
|
RSTRING_PTR(f_to_s(self)));
|
||
|
to_s = f_to_s(self);
|
||
|
RB_GC_GUARD(to_s);
|
||
|
return mk_inspect(dat, rb_obj_classname(self), RSTRING_PTR(to_s));
|
||
|
}
|
||
|
#include <errno.h>
|
||
| test/date/test_date.rb | ||
|---|---|---|
|
assert_instance_of(String, d.to_s)
|
||
|
end
|
||
|
def test_gc
|
||
|
stress, GC.stress = GC.stress, true
|
||
|
5.times do
|
||
|
Date.new(1965, 5, 23).inspect.gsub!(/./, '')
|
||
|
DateTime.new(1965, 5, 23, 22, 31, 59).inspect.gsub!(/./, '')
|
||
|
end
|
||
|
ensure
|
||
|
GC.stress = stress
|
||
|
end
|
||
|
end
|
||