From: SASADA Koichi <ko1@...>
Date: 2012-10-28T05:33:45+09:00
Subject: [ruby-core:48497] Re: [ruby-trunk - Feature #3222] Can bignums have singleton class & methods?

(2012/10/27 23:25), matz (Yukihiro Matsumoto) wrote:
> 
> Issue #3222 has been updated by matz (Yukihiro Matsumoto).
> 
> Assignee changed from matz (Yukihiro Matsumoto) to ko1 (Koichi Sasada)
> 
> Accepted.

Should I commit Fixnum and Bignum freezing patch (*1)?

*1: http://www.atdot.net/sp/view/4qjkcm/readonly

I got several errors on test-all caused by Fixnum freezing (no effect on
Bignum freezing at test-all).  I want to make clear that Fixnum can be
frozen or not (Ruby programmers expect Fixnum is mutable?).


> [ 3393/11368] TestEval#test_instance_eval_block_basic = 0.00 s
>   1) Error:
> test_instance_eval_block_basic(TestEval):
> RuntimeError: can't modify frozen Fixnum
>     /mnt/sdb1/ruby/trunk/test/ruby/test_eval.rb:133:in `instance_variable_set'
>     /mnt/sdb1/ruby/trunk/test/ruby/test_eval.rb:133:in `block in forall_TYPE'
>     /mnt/sdb1/ruby/trunk/test/ruby/test_eval.rb:132:in `each'
>     /mnt/sdb1/ruby/trunk/test/ruby/test_eval.rb:132:in `forall_TYPE'
>     /mnt/sdb1/ruby/trunk/test/ruby/test_eval.rb:191:in `test_instance_eval_block_basic'
> 
> [ 3398/11368] TestEval#test_instance_eval_string_basic = 0.00 s
>   2) Error:
> test_instance_eval_string_basic(TestEval):
> RuntimeError: can't modify frozen Fixnum
>     /mnt/sdb1/ruby/trunk/test/ruby/test_eval.rb:133:in `instance_variable_set'
>     /mnt/sdb1/ruby/trunk/test/ruby/test_eval.rb:133:in `block in forall_TYPE'
>     /mnt/sdb1/ruby/trunk/test/ruby/test_eval.rb:132:in `each'
>     /mnt/sdb1/ruby/trunk/test/ruby/test_eval.rb:132:in `forall_TYPE'
>     /mnt/sdb1/ruby/trunk/test/ruby/test_eval.rb:163:in `test_instance_eval_string_basic'
> 
> [ 6110/11368] TestMarshal#test_fixnum_ivar = 0.00 s
>   3) Error:
> test_fixnum_ivar(TestMarshal):
> RuntimeError: can't modify frozen Fixnum
>     /mnt/sdb1/ruby/trunk/test/ruby/marshaltestlib.rb:186:in `remove_instance_variable'
>     /mnt/sdb1/ruby/trunk/test/ruby/marshaltestlib.rb:186:in `block in test_fixnum_ivar'
>     /mnt/sdb1/ruby/trunk/test/ruby/marshaltestlib.rb:186:in `instance_eval'
>     /mnt/sdb1/ruby/trunk/test/ruby/marshaltestlib.rb:186:in `ensure in test_fixnum_ivar'
>     /mnt/sdb1/ruby/trunk/test/ruby/marshaltestlib.rb:186:in `test_fixnum_ivar'
> 
> [ 6111/11368] TestMarshal#test_fixnum_ivar_self = 0.00 s
>   4) Error:
> test_fixnum_ivar_self(TestMarshal):
> RuntimeError: can't modify frozen Fixnum
>     /mnt/sdb1/ruby/trunk/test/ruby/marshaltestlib.rb:194:in `remove_instance_variable'
>     /mnt/sdb1/ruby/trunk/test/ruby/marshaltestlib.rb:194:in `block in test_fixnum_ivar_self'
>     /mnt/sdb1/ruby/trunk/test/ruby/marshaltestlib.rb:194:in `instance_eval'
>     /mnt/sdb1/ruby/trunk/test/ruby/marshaltestlib.rb:194:in `ensure in test_fixnum_ivar_self'
>     /mnt/sdb1/ruby/trunk/test/ruby/marshaltestlib.rb:194:in `test_fixnum_ivar_self'
> 
> [ 6695/11368] TestObject#test_freeze_immediate = 0.00 s
>   5) Failure:
> test_freeze_immediate(TestObject) [/mnt/sdb1/ruby/trunk/test/ruby/test_object.rb:65]:
> <false> expected but was
> <true>.

The following log is from rubyspec.

> 1)
> A singleton class has class Bignum as the superclass of a Bignum instance ERROR
> TypeError: can't define singleton
> /mnt/sdb1/ruby/trunk/spec/rubyspec/language/singleton_class_spec.rb:79:in `singleton_class'
> /mnt/sdb1/ruby/trunk/spec/rubyspec/language/singleton_class_spec.rb:79:in `block (3 levels) in <top (required)>'
> /mnt/sdb1/ruby/trunk/spec/rubyspec/language/singleton_class_spec.rb:4:in `<top (required)>'
> 
> 2)
> Kernel#instance_variables immediate values returns the correct array if an instance variable is added ERROR
> RuntimeError: can't modify frozen Fixnum
> /mnt/sdb1/ruby/trunk/spec/rubyspec/core/kernel/instance_variables_spec.rb:23:in `instance_variable_set'
> /mnt/sdb1/ruby/trunk/spec/rubyspec/core/kernel/instance_variables_spec.rb:23:in `block (4 levels) in <top (required)>'
> /mnt/sdb1/ruby/trunk/spec/rubyspec/core/kernel/instance_variables_spec.rb:4:in `<top (required)>'
> 
> 3)
> Kernel#taint has no effect on immediate values ERROR
> RuntimeError: can't modify frozen Fixnum
> /mnt/sdb1/ruby/trunk/spec/rubyspec/core/kernel/taint_spec.rb:37:in `taint'
> /mnt/sdb1/ruby/trunk/spec/rubyspec/core/kernel/taint_spec.rb:37:in `block (3 levels) in <top (required)>'
> /mnt/sdb1/ruby/trunk/spec/rubyspec/core/kernel/taint_spec.rb:36:in `each'
> /mnt/sdb1/ruby/trunk/spec/rubyspec/core/kernel/taint_spec.rb:36:in `block (2 levels) in <top (required)>'
> /mnt/sdb1/ruby/trunk/spec/rubyspec/core/kernel/taint_spec.rb:4:in `<top (required)>'
> 
> 4)
> Kernel#untrusted? has no effect on immediate values ERROR
> RuntimeError: can't modify frozen Fixnum
> /mnt/sdb1/ruby/trunk/spec/rubyspec/core/kernel/untrusted_spec.rb:21:in `untrust'
> /mnt/sdb1/ruby/trunk/spec/rubyspec/core/kernel/untrusted_spec.rb:21:in `block (3 levels) in <top (required)>'
> /mnt/sdb1/ruby/trunk/spec/rubyspec/core/kernel/untrusted_spec.rb:4:in `<top (required)>'
> 
> 5)
> Module#attr_accessor allows creating an attr_accessor on an immediate class ERROR
> RuntimeError: can't modify frozen Fixnum
> /mnt/sdb1/ruby/trunk/spec/rubyspec/core/module/attr_accessor_spec.rb:36:in `block (2 levels) in <top (required)>'
> /mnt/sdb1/ruby/trunk/spec/rubyspec/core/module/attr_accessor_spec.rb:4:in `<top (required)>'
> 
> 6)
> Module#attr_reader allows for adding an attr_reader to an immediate ERROR
> RuntimeError: can't modify frozen Fixnum
> /mnt/sdb1/ruby/trunk/spec/rubyspec/core/module/attr_reader_spec.rb:32:in `instance_variable_set'
> /mnt/sdb1/ruby/trunk/spec/rubyspec/core/module/attr_reader_spec.rb:32:in `block (2 levels) in <top (required)>'
> /mnt/sdb1/ruby/trunk/spec/rubyspec/core/module/attr_reader_spec.rb:4:in `<top (required)>'
> 
> 7)
> Module#attr_writer allows for adding an attr_writer to an immediate ERROR
> RuntimeError: can't modify frozen Fixnum
> /mnt/sdb1/ruby/trunk/spec/rubyspec/core/module/attr_writer_spec.rb:32:in `block (2 levels) in <top (required)>'
> /mnt/sdb1/ruby/trunk/spec/rubyspec/core/module/attr_writer_spec.rb:4:in `<top (required)>'
> 
> 8)
> String#% taints result for %s when argument is tainted ERROR
> RuntimeError: can't modify frozen Float
> /mnt/sdb1/ruby/trunk/spec/rubyspec/core/string/modulo_spec.rb:654:in `taint'
> /mnt/sdb1/ruby/trunk/spec/rubyspec/core/string/modulo_spec.rb:654:in `block (2 levels) in <top (required)>'
> /mnt/sdb1/ruby/trunk/spec/rubyspec/core/string/modulo_spec.rb:4:in `<top (required)>'

Thanks,
Koichi

-- 
// SASADA Koichi at atdot dot net