summaryrefslogtreecommitdiffhomepage
path: root/src/kernel.c
diff options
context:
space:
mode:
authorKOBAYASHI Shuji <[email protected]>2019-04-25 19:48:40 +0900
committerKOBAYASHI Shuji <[email protected]>2019-04-25 19:48:40 +0900
commit8fa3995a1a02e9014ce01351e0260bec20ceefd7 (patch)
treed2cc4cec5af07f02cb0e7f46c0b242e9d46fe37a /src/kernel.c
parente5799b5d40a5c25beab5db881f8d6315720b987c (diff)
downloadmruby-8fa3995a1a02e9014ce01351e0260bec20ceefd7.tar.gz
mruby-8fa3995a1a02e9014ce01351e0260bec20ceefd7.zip
Singleton class of frozen object should be frozen
Before this patch: p (class << Object.new.freeze; self end).frozen? #=> false sc = class << (o=Object.new); self end; o.freeze; p sc.frozen? #=> false After this patch / Ruby: p (class << Object.new.freeze; self end).frozen? #=> true sc = class << (o=Object.new); self end; o.freeze; p sc.frozen? #=> true
Diffstat (limited to 'src/kernel.c')
-rw-r--r--src/kernel.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/src/kernel.c b/src/kernel.c
index d9a1d36ce..45bca7558 100644
--- a/src/kernel.c
+++ b/src/kernel.c
@@ -438,6 +438,7 @@ mrb_obj_freeze(mrb_state *mrb, mrb_value self)
struct RBasic *b = mrb_basic_ptr(self);
if (!MRB_FROZEN_P(b)) {
MRB_SET_FROZEN_FLAG(b);
+ if (b->c->tt == MRB_TT_SCLASS) MRB_SET_FROZEN_FLAG(b->c);
}
}
return self;