diff options
Diffstat (limited to 'ext')
| -rw-r--r-- | ext/date/date_core.c | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/ext/date/date_core.c b/ext/date/date_core.c index 44dbf4fbcf..360f2fecdb 100644 --- a/ext/date/date_core.c +++ b/ext/date/date_core.c @@ -6936,13 +6936,24 @@ d_lite_eql_p(VALUE self, VALUE other) static VALUE d_lite_hash(VALUE self) { - st_index_t v, h[4]; + st_index_t v, h[5]; + VALUE nth; get_d1(self); - h[0] = m_nth(dat); - h[1] = m_jd(dat); - h[2] = m_df(dat); - h[3] = m_sf(dat); + nth = m_nth(dat); + + if (FIXNUM_P(nth)) { + h[0] = 0; + h[1] = (st_index_t)nth; + } else { + h[0] = 1; + h[1] = (st_index_t)FIX2LONG(rb_hash(nth)); + } + + h[2] = m_jd(dat); + h[3] = m_df(dat); + h[4] = m_sf(dat); + v = rb_memhash(h, sizeof(h)); return ST2FIX(v); } |
