File tree 2 files changed +18
-3
lines changed
2 files changed +18
-3
lines changed Original file line number Diff line number Diff line change @@ -453,9 +453,23 @@ mrb_obj_extend_m(mrb_state *mrb, mrb_value self)
453
453
static mrb_value
454
454
mrb_obj_freeze (mrb_state * mrb , mrb_value self )
455
455
{
456
- struct RBasic * b = mrb_basic_ptr (self );
456
+ struct RBasic * b ;
457
+
458
+ switch (mrb_type (self )) {
459
+ case MRB_TT_FALSE :
460
+ case MRB_TT_TRUE :
461
+ case MRB_TT_FIXNUM :
462
+ case MRB_TT_SYMBOL :
463
+ case MRB_TT_FLOAT :
464
+ return self ;
465
+ default :
466
+ break ;
467
+ }
457
468
458
- MRB_SET_FROZEN_FLAG (b );
469
+ b = mrb_basic_ptr (self );
470
+ if (!MRB_FROZEN_P (b )) {
471
+ MRB_SET_FROZEN_FLAG (b );
472
+ }
459
473
return self ;
460
474
}
461
475
Original file line number Diff line number Diff line change @@ -260,6 +260,8 @@ def test_method; end
260
260
assert ( 'Kernel#freeze' ) do
261
261
obj = Object . new
262
262
assert_equal obj , obj . freeze
263
+ assert_equal 0 , 0 . freeze
264
+ assert_equal :a , :a . freeze
263
265
end
264
266
265
267
assert ( 'Kernel#global_variables' , '15.3.1.3.14' ) do
@@ -620,4 +622,3 @@ def recurse(count, stop)
620
622
621
623
assert_equal 6 , recurse ( 0 , 5 )
622
624
end
623
-
You can’t perform that action at this time.
0 commit comments