summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--mrblib/00class.rb15
-rw-r--r--src/class.c38
2 files changed, 15 insertions, 38 deletions
diff --git a/mrblib/00class.rb b/mrblib/00class.rb
index 39e0d5091..f3762e8d0 100644
--- a/mrblib/00class.rb
+++ b/mrblib/00class.rb
@@ -8,4 +8,19 @@ class Module
def attr(name)
attr_reader(name)
end
+
+ # 15.2.2.4.27
+ def include(*args)
+ args.reverse.each do |m|
+ m.append_features(self)
+ m.included(self)
+ end
+ end
+
+ def prepend(*args)
+ args.reverse.each do |m|
+ m.prepend_features(self)
+ m.prepended(self)
+ end
+ end
end
diff --git a/src/class.c b/src/class.c
index 0f72c7753..47a6c846b 100644
--- a/src/class.c
+++ b/src/class.c
@@ -948,24 +948,6 @@ mrb_mod_prepend_features(mrb_state *mrb, mrb_value mod)
}
static mrb_value
-mrb_mod_prepend(mrb_state *mrb, mrb_value klass)
-{
- mrb_value *argv;
- mrb_int argc, i;
-
- mrb_get_args(mrb, "*", &argv, &argc);
- for (i=0; i<argc; i++) {
- mrb_check_type(mrb, argv[i], MRB_TT_MODULE);
- }
- while (argc--) {
- mrb_funcall(mrb, argv[argc], "prepend_features", 1, klass);
- mrb_funcall(mrb, argv[argc], "prepended", 1, klass);
- }
-
- return klass;
-}
-
-static mrb_value
mrb_mod_append_features(mrb_state *mrb, mrb_value mod)
{
mrb_value klass;
@@ -976,24 +958,6 @@ mrb_mod_append_features(mrb_state *mrb, mrb_value mod)
return mod;
}
-static mrb_value
-mrb_mod_include(mrb_state *mrb, mrb_value klass)
-{
- mrb_value *argv;
- mrb_int argc, i;
-
- mrb_get_args(mrb, "*", &argv, &argc);
- for (i=0; i<argc; i++) {
- mrb_check_type(mrb, argv[i], MRB_TT_MODULE);
- }
- while (argc--) {
- mrb_funcall(mrb, argv[argc], "append_features", 1, klass);
- mrb_funcall(mrb, argv[argc], "included", 1, klass);
- }
-
- return klass;
-}
-
/* 15.2.2.4.28 */
/*
* call-seq:
@@ -2247,10 +2211,8 @@ mrb_init_class(mrb_state *mrb)
mrb_define_method(mrb, mod, "class_variable_set", mrb_mod_cvar_set, MRB_ARGS_REQ(2)); /* 15.2.2.4.18 */
mrb_define_method(mrb, mod, "extend_object", mrb_mod_extend_object, MRB_ARGS_REQ(1)); /* 15.2.2.4.25 */
mrb_define_method(mrb, mod, "extended", mrb_bob_init, MRB_ARGS_REQ(1)); /* 15.2.2.4.26 */
- mrb_define_method(mrb, mod, "prepend", mrb_mod_prepend, MRB_ARGS_ANY());
mrb_define_method(mrb, mod, "prepended", mrb_bob_init, MRB_ARGS_REQ(1));
mrb_define_method(mrb, mod, "prepend_features", mrb_mod_prepend_features, MRB_ARGS_REQ(1));
- mrb_define_method(mrb, mod, "include", mrb_mod_include, MRB_ARGS_ANY()); /* 15.2.2.4.27 */
mrb_define_method(mrb, mod, "include?", mrb_mod_include_p, MRB_ARGS_REQ(1)); /* 15.2.2.4.28 */
mrb_define_method(mrb, mod, "append_features", mrb_mod_append_features, MRB_ARGS_REQ(1)); /* 15.2.2.4.10 */
mrb_define_method(mrb, mod, "class_eval", mrb_mod_module_eval, MRB_ARGS_ANY()); /* 15.2.2.4.15 */