summaryrefslogtreecommitdiffstats
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
commitcef4168f2fc8440188d371f92d607777a471fdfe (patch)
tree2ab3eafa7c7820209707824cabea6de573c1244e /class.c
parent8770ea7b6b003e4d6de062c12c1eec7d069c93dc (diff)
downloadruby-cef4168f2fc8440188d371f92d607777a471fdfe.tar.gz
ruby-cef4168f2fc8440188d371f92d607777a471fdfe.tar.xz
ruby-cef4168f2fc8440188d371f92d607777a471fdfe.zip
* string.c (str_mod_check): frozen check should be separated.
[ruby-core:3742] git-svn-id: http://svn.ruby-lang.org/repos/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 0601d54af..7fdfac881 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;