diff options
author | tadf <tadf@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2012-07-01 20:37:38 +0000 |
---|---|---|
committer | tadf <tadf@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2012-07-01 20:37:38 +0000 |
commit | c8cde4e2be5a1cdc151e436d6d2189314902d748 (patch) | |
tree | 60dc7d80df6136025d28502b1138b3ecc0854ca7 /ext/date | |
parent | 2d3fd69503752ec41bdcb3ccd58ab253623625b1 (diff) | |
download | ruby-c8cde4e2be5a1cdc151e436d6d2189314902d748.tar.gz |
* ext/date/date_core.c (d_lite_marshal_load): accepts old dump.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@36264 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'ext/date')
-rw-r--r-- | ext/date/date_core.c | 30 |
1 files changed, 26 insertions, 4 deletions
diff --git a/ext/date/date_core.c b/ext/date/date_core.c index 82d078a0dd..8096fd7bfb 100644 --- a/ext/date/date_core.c +++ b/ext/date/date_core.c @@ -7272,15 +7272,26 @@ d_lite_marshal_load(VALUE self, VALUE a) rb_raise(rb_eTypeError, "expected an array"); switch (RARRAY_LEN(a)) { - case 3: + case 2: /* 1.6.x */ + case 3: /* 1.8.x, 1.9.2 */ { VALUE ajd, of, sg, nth, sf; int jd, df, rof; double rsg; - ajd = RARRAY_PTR(a)[0]; - of = RARRAY_PTR(a)[1]; - sg = RARRAY_PTR(a)[2]; + + if (RARRAY_LEN(a) == 2) { + ajd = f_sub(RARRAY_PTR(a)[0], half_days_in_day); + of = INT2FIX(0); + sg = RARRAY_PTR(a)[1]; + if (!k_numeric_p(sg)) + sg = DBL2NUM(RTEST(sg) ? GREGORIAN : JULIAN); + } + else { + ajd = RARRAY_PTR(a)[0]; + of = RARRAY_PTR(a)[1]; + sg = RARRAY_PTR(a)[2]; + } old_to_new(ajd, of, sg, &nth, &jd, &df, &sf, &rof, &rsg); @@ -7336,6 +7347,16 @@ d_lite_marshal_load(VALUE self, VALUE a) return self; } +/* :nodoc: */ +static VALUE +date_s__load(VALUE klass, VALUE s) +{ + VALUE a, obj; + + a = rb_marshal_load(s); + obj = d_lite_s_alloc(klass); + return d_lite_marshal_load(obj, a); +} /* datetime */ @@ -9674,6 +9695,7 @@ Init_date_core(void) #endif rb_define_method(cDate, "marshal_dump", d_lite_marshal_dump, 0); rb_define_method(cDate, "marshal_load", d_lite_marshal_load, 1); + rb_define_singleton_method(cDate, "_load", date_s__load, 1); /* datetime */ |