From f408143c289b8017883294f13d36d43b50c8bc5d Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Fri, 1 Jun 2018 22:39:40 +0900 Subject: The `clone` method should copy object status (e.g. frozen) too; #4030 --- src/kernel.c | 1 + test/t/kernel.rb | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/src/kernel.c b/src/kernel.c index 2a50d3126..f378004cb 100644 --- a/src/kernel.c +++ b/src/kernel.c @@ -348,6 +348,7 @@ mrb_obj_clone(mrb_state *mrb, mrb_value self) mrb_field_write_barrier(mrb, (struct RBasic*)p, (struct RBasic*)p->c); clone = mrb_obj_value(p); init_copy(mrb, clone, self); + p->flags = mrb_obj_ptr(self)->flags; return clone; } diff --git a/test/t/kernel.rb b/test/t/kernel.rb index eaae78e47..561118302 100644 --- a/test/t/kernel.rb +++ b/test/t/kernel.rb @@ -171,6 +171,10 @@ assert('Kernel#clone', '15.3.1.3.8') do assert_true a.respond_to?(:test) assert_false b.respond_to?(:test) assert_true c.respond_to?(:test) + + a.freeze + d = a.clone + assert_true d.frozen? end assert('Kernel#dup', '15.3.1.3.9') do -- cgit v1.2.3