class.c: TypeError when superclass mismatch
* class.c (rb_define_class_id_under): raise TypeError exception same as ruby level class definition when superclass mismatch. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51048 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
6cdc55f4a3
commit
a13ab237c7
@ -1,3 +1,8 @@
|
|||||||
|
Sun Jun 28 12:07:35 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||||
|
|
||||||
|
* class.c (rb_define_class_id_under): raise TypeError exception
|
||||||
|
same as ruby level class definition when superclass mismatch.
|
||||||
|
|
||||||
Sun Jun 14 19:02:03 2015 Benoit Daloze <eregontp@gmail.com>
|
Sun Jun 14 19:02:03 2015 Benoit Daloze <eregontp@gmail.com>
|
||||||
|
|
||||||
* lib/net/ftp.rb (makeport): close the TCPServer
|
* lib/net/ftp.rb (makeport): close the TCPServer
|
||||||
|
4
NEWS
4
NEWS
@ -143,6 +143,10 @@ with all sufficient information, see the ChangeLog file.
|
|||||||
|
|
||||||
=== C API updates
|
=== C API updates
|
||||||
|
|
||||||
|
* rb_define_class_id_under() now raises a TypeError exception when the
|
||||||
|
class is already defined but its superclass does not match the given
|
||||||
|
superclass, as well as definitions in ruby level.
|
||||||
|
|
||||||
=== Build system updates
|
=== Build system updates
|
||||||
|
|
||||||
=== Implementation changes
|
=== Implementation changes
|
||||||
|
3
class.c
3
class.c
@ -703,7 +703,8 @@ rb_define_class_id_under(VALUE outer, ID id, VALUE super)
|
|||||||
rb_raise(rb_eTypeError, "%"PRIsVALUE" is not a class", rb_id2str(id));
|
rb_raise(rb_eTypeError, "%"PRIsVALUE" is not a class", rb_id2str(id));
|
||||||
}
|
}
|
||||||
if (rb_class_real(RCLASS_SUPER(klass)) != super) {
|
if (rb_class_real(RCLASS_SUPER(klass)) != super) {
|
||||||
rb_name_error(id, "%"PRIsVALUE" is already defined", rb_id2str(id));
|
rb_raise(rb_eTypeError, "superclass mismatch for class %"PRIsVALUE"",
|
||||||
|
rb_id2str(id));
|
||||||
}
|
}
|
||||||
return klass;
|
return klass;
|
||||||
}
|
}
|
||||||
|
@ -228,7 +228,7 @@ class TestRequire < Test::Unit::TestCase
|
|||||||
assert_separately([], <<-INPUT)
|
assert_separately([], <<-INPUT)
|
||||||
module Zlib; end
|
module Zlib; end
|
||||||
class Zlib::Error; end
|
class Zlib::Error; end
|
||||||
assert_raise(NameError) do
|
assert_raise(TypeError) do
|
||||||
require 'zlib'
|
require 'zlib'
|
||||||
end
|
end
|
||||||
INPUT
|
INPUT
|
||||||
|
Loading…
x
Reference in New Issue
Block a user