diff options
author | Jeremy Evans <code@jeremyevans.net> | 2020-06-11 11:40:45 -0700 |
---|---|---|
committer | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2020-06-20 18:35:03 +0900 |
commit | ad156f7e2caa28f429a9f05f3b9b184118b85432 (patch) | |
tree | 68e629f35ba1754f339ad0e37162f101c6e455c9 /ext | |
parent | d1af2345c927a06e01002a351f0c2e36319860b7 (diff) | |
download | ruby-ad156f7e2caa28f429a9f05f3b9b184118b85432.tar.gz |
[ruby/date] Fix cannot load complex into simple error when loading marshal dump (Fixes #20)
This problem exists because Marshal.load calls Date.allocate, which
uses a SimpleDateData. There doesn't seem to be any support for
taking an existing Date instance and converting it from SimpleDateData
to ComplexDateData. Work around this issue by making Date.allocate
use a ComplexDateData. This causes problems in Date#initialize,
so remove the Date#initialize method (keeping the date_initialize
function, used internally for Date.civil). Alias Date.new to
Date.civil, since they do the same thing.
https://github.com/ruby/date/commit/6bb8d8fa0f
Diffstat (limited to 'ext')
-rw-r--r-- | ext/date/date_core.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/ext/date/date_core.c b/ext/date/date_core.c index e44dcc15e2..8c5d280d1d 100644 --- a/ext/date/date_core.c +++ b/ext/date/date_core.c @@ -9318,7 +9318,7 @@ Init_date_core(void) */ rb_define_const(cDate, "GREGORIAN", DBL2NUM(GREGORIAN)); - rb_define_alloc_func(cDate, d_lite_s_alloc_simple); + rb_define_alloc_func(cDate, d_lite_s_alloc_complex); #ifndef NDEBUG rb_define_private_method(CLASS_OF(cDate), "_valid_jd?", @@ -9368,6 +9368,7 @@ Init_date_core(void) rb_define_singleton_method(cDate, "jd", date_s_jd, -1); rb_define_singleton_method(cDate, "ordinal", date_s_ordinal, -1); rb_define_singleton_method(cDate, "civil", date_s_civil, -1); + rb_define_singleton_method(cDate, "new", date_s_civil, -1); rb_define_singleton_method(cDate, "commercial", date_s_commercial, -1); #ifndef NDEBUG @@ -9395,7 +9396,6 @@ Init_date_core(void) rb_define_singleton_method(cDate, "_jisx0301", date_s__jisx0301, 1); rb_define_singleton_method(cDate, "jisx0301", date_s_jisx0301, -1); - rb_define_method(cDate, "initialize", date_initialize, -1); rb_define_method(cDate, "initialize_copy", d_lite_initialize_copy, 1); #ifndef NDEBUG |