diff options
| -rw-r--r-- | src/time.c | 4 | ||||
| -rw-r--r-- | test/test_time.rb | 3 |
2 files changed, 5 insertions, 2 deletions
diff --git a/src/time.c b/src/time.c index 16884d9d8..ed42f1f76 100644 --- a/src/time.c +++ b/src/time.c @@ -496,6 +496,10 @@ mrb_time_initialize_copy(mrb_state *mrb, mrb_value copy) if (!mrb_obj_is_instance_of(mrb, src, mrb_obj_class(mrb, copy))) { mrb_raise(mrb, E_TYPE_ERROR, "wrong argument class"); } + if (!DATA_PTR(copy)) { + DATA_PTR(copy) = mrb_malloc(mrb, sizeof(struct mrb_time)); + DATA_TYPE(copy) = &mrb_time_type; + } memcpy(DATA_PTR(copy), DATA_PTR(src), sizeof(struct mrb_time)); return copy; } diff --git a/test/test_time.rb b/test/test_time.rb index 79d658e1b..ea6e98696 100644 --- a/test/test_time.rb +++ b/test/test_time.rb @@ -43,7 +43,6 @@ assert("yday") { t1.yday == 71 } assert("year") { t1.year == 2011 } t2 = Time.at(7.0e6) -t1.initialize_copy(t2) -assert("initialize_copy") { t1 == t2 } +assert("initialize_copy") { t2.clone == t2 } report() |
