summaryrefslogtreecommitdiff
path: root/class.c
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2004-11-16 04:55:14 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2004-11-16 04:55:14 +0000
commitb93479b8d9b8f0f95844d8e53ad954445177af00 (patch)
tree2ab3eafa7c7820209707824cabea6de573c1244e /class.c
parentc2b7884076865795a309a93eda6589a66150e968 (diff)
* string.c (str_mod_check): frozen check should be separated.
[ruby-core:3742] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@7280 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'class.c')
-rw-r--r--class.c30
1 files changed, 14 insertions, 16 deletions
diff --git a/class.c b/class.c
index 0601d54aff..7fdfac8813 100644
--- a/class.c
+++ b/class.c
@@ -34,17 +34,28 @@ rb_class_boot(super)
return (VALUE)klass;
}
+void
+rb_check_inheritable(super)
+ VALUE super;
+{
+ if (TYPE(super) != T_CLASS) {
+ rb_raise(rb_eTypeError, "superclass must be a Class (%s given)",
+ rb_obj_classname(super));
+ }
+ if (RBASIC(super)->flags & FL_SINGLETON) {
+ rb_raise(rb_eTypeError, "can't make subclass of singleton class");
+ }
+}
+
VALUE
rb_class_new(super)
VALUE super;
{
Check_Type(super, T_CLASS);
+ rb_check_inheritable(super);
if (super == rb_cClass) {
rb_raise(rb_eTypeError, "can't make subclass of Class");
}
- if (FL_TEST(super, FL_SINGLETON)) {
- rb_raise(rb_eTypeError, "can't make subclass of virtual class");
- }
return rb_class_boot(super);
}
@@ -182,19 +193,6 @@ rb_define_class_id(id, super)
return klass;
}
-void
-rb_check_inheritable(super)
- VALUE super;
-{
- if (TYPE(super) != T_CLASS) {
- rb_raise(rb_eTypeError, "superclass must be a Class (%s given)",
- rb_obj_classname(super));
- }
- if (RBASIC(super)->flags & FL_SINGLETON) {
- rb_raise(rb_eTypeError, "can't make subclass of virtual class");
- }
-}
-
VALUE
rb_class_inherited(super, klass)
VALUE super, klass;