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