diff options
author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 1998-03-05 06:37:50 +0000 |
---|---|---|
committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 1998-03-05 06:37:50 +0000 |
commit | f70ffbee2120cbbb8c6b0a15dfc693a69ac0d7d4 (patch) | |
tree | 2070b335aaddd33fd915c14557c82ba06ac86df9 /object.c | |
parent | 369124b0ec6aa0d58ea628339713444c559bfa5f (diff) |
block arg etc.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/v1_1r@107 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'object.c')
-rw-r--r-- | object.c | 20 |
1 files changed, 16 insertions, 4 deletions
@@ -369,11 +369,16 @@ VALUE obj_alloc(klass) VALUE klass; { - NEWOBJ(obj, struct RObject); - OBJSETUP(obj, klass, T_OBJECT); - obj->iv_tbl = 0; + if (FL_TEST(klass, FL_PRIMITIVE)) { + TypeError("allocating normal object for primitive class"); + } + else { + NEWOBJ(obj, struct RObject); + OBJSETUP(obj, klass, T_OBJECT); + obj->iv_tbl = 0; - return (VALUE)obj; + return (VALUE)obj; + } } static VALUE @@ -820,6 +825,9 @@ Init_Object() rb_include_module(cObject, mKernel); rb_define_private_method(cClass, "inherited", obj_dummy, 1); + FL_SET(cModule, FL_PRIMITIVE); + FL_SET(cClass, FL_PRIMITIVE); + /* * Ruby's Class Hierarchy Chart * @@ -891,6 +899,7 @@ Init_Object() rb_define_method(cNilClass, "nil?", rb_true, 0); rb_undef_method(CLASS_OF(cNilClass), "new"); rb_define_global_const("NIL", Qnil); + FL_SET(cNilClass, FL_PRIMITIVE); /* default addition */ rb_define_method(cNilClass, "+", nil_plus, 1); @@ -934,6 +943,7 @@ Init_Object() rb_define_singleton_method(cClass, "new", class_s_new, -1); cData = rb_define_class("Data", cObject); + rb_undef_method(CLASS_OF(cData), "new"); TopSelf = obj_alloc(cObject); rb_global_variable(&TopSelf); @@ -945,6 +955,7 @@ Init_Object() rb_define_method(cTrueClass, "type", true_type, 0); rb_undef_method(CLASS_OF(cTrueClass), "new"); rb_define_global_const("TRUE", TRUE); + FL_SET(cTrueClass, FL_PRIMITIVE); cFalseClass = rb_define_class("FalseClass", cObject); rb_define_method(cFalseClass, "to_s", false_to_s, 0); @@ -952,6 +963,7 @@ Init_Object() rb_define_method(cFalseClass, "type", false_type, 0); rb_undef_method(CLASS_OF(cFalseClass), "new"); rb_define_global_const("FALSE", FALSE); + FL_SET(cFalseClass, FL_PRIMITIVE); eq = rb_intern("=="); eql = rb_intern("eql?"); |