summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--mrblib/00class.rb8
-rw-r--r--src/class.c1
2 files changed, 9 insertions, 0 deletions
diff --git a/mrblib/00class.rb b/mrblib/00class.rb
index 1811236f0..8fcfb1362 100644
--- a/mrblib/00class.rb
+++ b/mrblib/00class.rb
@@ -1,3 +1,11 @@
+class Class
+ def new(*args, &block)
+ obj = self.allocate
+ obj.initialize(*args, &block)
+ obj
+ end
+end
+
class Module
# 15.2.2.4.12
def attr_accessor(*names)
diff --git a/src/class.c b/src/class.c
index 071b29901..112257380 100644
--- a/src/class.c
+++ b/src/class.c
@@ -2159,6 +2159,7 @@ mrb_init_class(mrb_state *mrb)
mrb_define_method(mrb, bob, "instance_eval", mrb_obj_instance_eval, MRB_ARGS_ANY()); /* 15.3.1.3.18 */
mrb_define_class_method(mrb, cls, "new", mrb_class_new_class, MRB_ARGS_OPT(1));
+ mrb_define_method(mrb, cls, "allocate", mrb_instance_alloc, MRB_ARGS_NONE());
mrb_define_method(mrb, cls, "superclass", mrb_class_superclass, MRB_ARGS_NONE()); /* 15.2.3.3.4 */
mrb_define_method(mrb, cls, "new", mrb_instance_new, MRB_ARGS_ANY()); /* 15.2.3.3.3 */
mrb_define_method(mrb, cls, "initialize", mrb_class_initialize, MRB_ARGS_OPT(1)); /* 15.2.3.3.1 */