diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2018-06-01 22:39:40 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2018-06-01 22:39:40 +0900 |
| commit | f408143c289b8017883294f13d36d43b50c8bc5d (patch) | |
| tree | 7d812c8a1886d3bf4cd477f67a104cfac883fea8 | |
| parent | 7ed164ba896f5f3b0fca7c82e5b64230a432c842 (diff) | |
| download | mruby-f408143c289b8017883294f13d36d43b50c8bc5d.tar.gz mruby-f408143c289b8017883294f13d36d43b50c8bc5d.zip | |
The `clone` method should copy object status (e.g. frozen) too; #4030
| -rw-r--r-- | src/kernel.c | 1 | ||||
| -rw-r--r-- | test/t/kernel.rb | 4 |
2 files changed, 5 insertions, 0 deletions
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 |
