ruby-changes:43328
From: nagachika <ko1@a...>
Date: Tue, 14 Jun 2016 03:33:35 +0900 (JST)
Subject: [ruby-changes:43328] nagachika:r55402 (ruby_2_3): merge revision(s) 54970: [Backport #12367]
nagachika 2016-06-14 03:33:28 +0900 (Tue, 14 Jun 2016) New Revision: 55402 https://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=55402 Log: merge revision(s) 54970: [Backport #12367] * insns.def (defineclass): Also raise an error when redeclaring the superclass of a class as Object and it has another superclass. [Bug #12367] [ruby-core:75446] * test/ruby/test_class.rb: test for above. Modified directories: branches/ruby_2_3/ Modified files: branches/ruby_2_3/ChangeLog branches/ruby_2_3/insns.def branches/ruby_2_3/test/ruby/test_class.rb branches/ruby_2_3/version.h Index: ruby_2_3/ChangeLog =================================================================== --- ruby_2_3/ChangeLog (revision 55401) +++ ruby_2_3/ChangeLog (revision 55402) @@ -1,3 +1,11 @@ https://github.com/ruby/ruby/blob/trunk/ruby_2_3/ChangeLog#L1 +Tue Jun 14 03:25:14 2016 Benoit Daloze <eregontp@g...> + + * insns.def (defineclass): Also raise an error when redeclaring the + superclass of a class as Object and it has another superclass. + [Bug #12367] [ruby-core:75446] + + * test/ruby/test_class.rb: test for above. + Tue Jun 14 03:15:54 2016 Nobuyoshi Nakada <nobu@r...> * process.c (rb_exec_getargs): honor the expected argument types Index: ruby_2_3/insns.def =================================================================== --- ruby_2_3/insns.def (revision 55401) +++ ruby_2_3/insns.def (revision 55402) @@ -863,10 +863,6 @@ defineclass https://github.com/ruby/ruby/blob/trunk/ruby_2_3/insns.def#L863 rb_obj_class(super)); } - if (super == Qnil) { - super = rb_cObject; - } - vm_check_if_namespace(cbase); /* find klass */ @@ -879,7 +875,7 @@ defineclass https://github.com/ruby/ruby/blob/trunk/ruby_2_3/insns.def#L875 rb_raise(rb_eTypeError, "%"PRIsVALUE" is not a class", rb_id2str(id)); } - if (super != rb_cObject) { + if (VM_DEFINECLASS_HAS_SUPERCLASS_P(flags)) { VALUE tmp; tmp = rb_class_real(RCLASS_SUPER(klass)); @@ -890,6 +886,9 @@ defineclass https://github.com/ruby/ruby/blob/trunk/ruby_2_3/insns.def#L886 } } else { + if (!VM_DEFINECLASS_HAS_SUPERCLASS_P(flags)) { + super = rb_cObject; + } /* new class declaration */ klass = rb_define_class_id(id, super); rb_set_class_path_string(klass, cbase, rb_id2str(id)); Index: ruby_2_3/version.h =================================================================== --- ruby_2_3/version.h (revision 55401) +++ ruby_2_3/version.h (revision 55402) @@ -1,6 +1,6 @@ https://github.com/ruby/ruby/blob/trunk/ruby_2_3/version.h#L1 #define RUBY_VERSION "2.3.2" #define RUBY_RELEASE_DATE "2016-06-14" -#define RUBY_PATCHLEVEL 126 +#define RUBY_PATCHLEVEL 127 #define RUBY_RELEASE_YEAR 2016 #define RUBY_RELEASE_MONTH 6 Index: ruby_2_3/test/ruby/test_class.rb =================================================================== --- ruby_2_3/test/ruby/test_class.rb (revision 55401) +++ ruby_2_3/test/ruby/test_class.rb (revision 55402) @@ -375,6 +375,25 @@ class TestClass < Test::Unit::TestCase https://github.com/ruby/ruby/blob/trunk/ruby_2_3/test/ruby/test_class.rb#L375 } end + define_method :test_invalid_reset_superclass do + class A; end + class SuperclassCannotBeReset < A + end + assert_equal A, SuperclassCannotBeReset.superclass + + assert_raise_with_message(TypeError, /superclass mismatch/) { + class SuperclassCannotBeReset < String + end + } + + assert_raise_with_message(TypeError, /superclass mismatch/, "[ruby-core:75446]") { + class SuperclassCannotBeReset < Object + end + } + + assert_equal A, SuperclassCannotBeReset.superclass + end + def test_cloned_singleton_method_added bug5283 = '[ruby-dev:44477]' added = [] Property changes on: ruby_2_3 ___________________________________________________________________ Modified: svn:mergeinfo Merged /trunk:r54970 -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/