mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	* 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. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@54970 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
		
							parent
							
								
									15fbd05e4e
								
							
						
					
					
						commit
						06dd20f7fe
					
				
					 3 changed files with 31 additions and 5 deletions
				
			
		|  | @ -1,3 +1,11 @@ | |||
| Tue May 10 21:05:45 2016  Benoit Daloze  <eregontp@gmail.com> | ||||
| 
 | ||||
| 	* 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 May 10 14:57:09 2016  Nobuyoshi Nakada  <nobu@ruby-lang.org> | ||||
| 
 | ||||
| 	* random.c (obj_random_bytes): base on bytes method instead of | ||||
|  |  | |||
|  | @ -865,10 +865,6 @@ defineclass | |||
| 		     rb_obj_class(super)); | ||||
| 	} | ||||
| 
 | ||||
| 	if (super == Qnil) { | ||||
| 	    super = rb_cObject; | ||||
| 	} | ||||
| 
 | ||||
| 	vm_check_if_namespace(cbase); | ||||
| 
 | ||||
| 	/* find klass */ | ||||
|  | @ -881,7 +877,7 @@ defineclass | |||
| 		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)); | ||||
| 
 | ||||
|  | @ -892,6 +888,9 @@ defineclass | |||
| 	    } | ||||
| 	} | ||||
| 	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)); | ||||
|  |  | |||
|  | @ -378,6 +378,25 @@ class TestClass < Test::Unit::TestCase | |||
|     } | ||||
|   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 = [] | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 eregon
						eregon