mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* vm_core.h (rb_vm_defineclass_type_t),
compile.c (iseq_compile_each), insns.def (defineclass): change the meaning of the third operand of defineclass as follows: lower 3bits: the type of the defineclass 0 = class, 1 = singleton class, 2 = module 4th bit: a flag represents whether the defineclass is scoped 0 = not scoped (e.g., class Foo) 1 = scoped (e.g., class Bar::Baz) 5th bit: a flag represents whether the superclass is specified 0 = not specified (e.g., class Foo) 1 = specified (e.g., class Bar < Foo) If the superclass is specified and is not a class, a TypeError should be raised. [ruby-dev:46747] [Bug #7572] * test/ruby/test_class.rb: related test. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@38495 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
a158034789
commit
ea01ffa569
5 changed files with 96 additions and 13 deletions
|
@ -299,4 +299,41 @@ class TestClass < Test::Unit::TestCase
|
|||
assert_equal 1, m::C
|
||||
assert_equal 1, m.m
|
||||
end
|
||||
|
||||
def test_invalid_superclass
|
||||
assert_raise(TypeError) do
|
||||
eval <<-EOF
|
||||
class C < nil
|
||||
end
|
||||
EOF
|
||||
end
|
||||
|
||||
assert_raise(TypeError) do
|
||||
eval <<-EOF
|
||||
class C < false
|
||||
end
|
||||
EOF
|
||||
end
|
||||
|
||||
assert_raise(TypeError) do
|
||||
eval <<-EOF
|
||||
class C < true
|
||||
end
|
||||
EOF
|
||||
end
|
||||
|
||||
assert_raise(TypeError) do
|
||||
eval <<-EOF
|
||||
class C < 0
|
||||
end
|
||||
EOF
|
||||
end
|
||||
|
||||
assert_raise(TypeError) do
|
||||
eval <<-EOF
|
||||
class C < ""
|
||||
end
|
||||
EOF
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue