summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorYukihiro Matsumoto <[email protected]>2012-05-31 11:11:55 +0900
committerYukihiro Matsumoto <[email protected]>2012-05-31 11:11:55 +0900
commit3e8d330c2cca7b67edbfa2a03331c03499dbdbf5 (patch)
tree1798fffa8eb05728e804aa973feb6727f726a009 /src
parent0e5958d4043001d242c2677d37a9c7db2bb0bf56 (diff)
downloadmruby-3e8d330c2cca7b67edbfa2a03331c03499dbdbf5.tar.gz
mruby-3e8d330c2cca7b67edbfa2a03331c03499dbdbf5.zip
remove #new from immediate classes
Diffstat (limited to 'src')
-rw-r--r--src/class.c14
-rw-r--r--src/numeric.c2
-rw-r--r--src/object.c3
3 files changed, 15 insertions, 4 deletions
diff --git a/src/class.c b/src/class.c
index b1ed7c0dc..fa349a015 100644
--- a/src/class.c
+++ b/src/class.c
@@ -1100,8 +1100,8 @@ mrb_mod_alias(mrb_state *mrb, mrb_value mod)
}
-void
-mrb_undef_method(mrb_state *mrb, struct RClass *c, mrb_sym a)
+static void
+undef_method(mrb_state *mrb, struct RClass *c, mrb_sym a)
{
mrb_value m;
@@ -1110,6 +1110,12 @@ mrb_undef_method(mrb_state *mrb, struct RClass *c, mrb_sym a)
mrb_define_method_vm(mrb, c, a, m);
}
+void
+mrb_undef_method(mrb_state *mrb, struct RClass *c, const char *name)
+{
+ undef_method(mrb, c, mrb_intern(mrb, name));
+}
+
mrb_value
mrb_mod_undef(mrb_state *mrb, mrb_value mod)
{
@@ -1119,7 +1125,7 @@ mrb_mod_undef(mrb_state *mrb, mrb_value mod)
mrb_get_args(mrb, "*", &argv, &argc);
while (argc--) {
- mrb_undef_method(mrb, c, mrb_symbol(*argv));
+ undef_method(mrb, c, mrb_symbol(*argv));
argv++;
}
return mrb_nil_value();
@@ -1170,7 +1176,7 @@ mrb_init_class(mrb_state *mrb)
mrb_name_class(mrb, mod, mrb_intern(mrb, "Module"));
mrb_name_class(mrb, cls, mrb_intern(mrb, "Class"));
- mrb_undef_method(mrb, mod, mrb_intern(mrb, "new"));
+ mrb_undef_method(mrb, mod, "new");
MRB_SET_INSTANCE_TT(cls, MRB_TT_CLASS);
mrb_define_method(mrb, bob, "initialize", mrb_bob_init, ARGS_NONE());
mrb_define_method(mrb, bob, "!", mrb_bob_not, ARGS_NONE());
diff --git a/src/numeric.c b/src/numeric.c
index 722473a6c..e1f711478 100644
--- a/src/numeric.c
+++ b/src/numeric.c
@@ -1266,6 +1266,7 @@ mrb_init_numeric(mrb_state *mrb)
integer = mrb_define_class(mrb, "Integer", numeric);
fixnum = mrb->fixnum_class = mrb_define_class(mrb, "Fixnum", integer);
+ mrb_undef_method(mrb, fixnum, "new");
mrb_define_method(mrb, fixnum, "+", mrb_fixnum_plus, ARGS_REQ(1)); /* 15.2.8.3.1 */
mrb_define_method(mrb, fixnum, "-", mrb_fixnum_minus, ARGS_REQ(1)); /* 15.2.8.3.2 */
mrb_define_method(mrb, fixnum, "-@", fix_uminus, ARGS_REQ(1)); /* 15.2.7.4.2 */
@@ -1293,6 +1294,7 @@ mrb_init_numeric(mrb_state *mrb)
/* Float Class */
fl = mrb->float_class = mrb_define_class(mrb, "Float", numeric);
+ mrb_undef_method(mrb, fl, "new");
mrb_define_method(mrb, fl, "+", mrb_float_plus, ARGS_REQ(1)); /* 15.2.9.3.1 */
mrb_define_method(mrb, fl, "-", flo_minus, ARGS_REQ(1)); /* 15.2.9.3.2 */
mrb_define_method(mrb, fl, "*", flo_mul, ARGS_REQ(1)); /* 15.2.9.3.3 */
diff --git a/src/object.c b/src/object.c
index 01a40063a..1d84909ec 100644
--- a/src/object.c
+++ b/src/object.c
@@ -290,6 +290,7 @@ mrb_init_object(mrb_state *mrb)
struct RClass *f;
n = mrb->nil_class = mrb_define_class(mrb, "NilClass", mrb->object_class);
+ mrb_undef_method(mrb, n, "new");
mrb_define_method(mrb, n, "&", false_and, ARGS_REQ(1)); /* 15.2.4.3.1 */
mrb_define_method(mrb, n, "^", false_xor, ARGS_REQ(1)); /* 15.2.4.3.2 */
mrb_define_method(mrb, n, "|", false_or, ARGS_REQ(1)); /* 15.2.4.3.3 */
@@ -297,12 +298,14 @@ mrb_init_object(mrb_state *mrb)
mrb_define_method(mrb, n, "to_s", nil_to_s, ARGS_NONE()); /* 15.2.4.3.5 */
t = mrb->true_class = mrb_define_class(mrb, "TrueClass", mrb->object_class);
+ mrb_undef_method(mrb, n, "new");
mrb_define_method(mrb, t, "&", true_and, ARGS_REQ(1)); /* 15.2.5.3.1 */
mrb_define_method(mrb, t, "^", true_xor, ARGS_REQ(1)); /* 15.2.5.3.2 */
mrb_define_method(mrb, t, "to_s", true_to_s, ARGS_NONE()); /* 15.2.5.3.3 */
mrb_define_method(mrb, t, "|", true_or, ARGS_REQ(1)); /* 15.2.5.3.4 */
f = mrb->false_class = mrb_define_class(mrb, "FalseClass", mrb->object_class);
+ mrb_undef_method(mrb, n, "new");
mrb_define_method(mrb, f, "&", false_and, ARGS_REQ(1)); /* 15.2.6.3.1 */
mrb_define_method(mrb, f, "^", false_xor, ARGS_REQ(1)); /* 15.2.6.3.2 */
mrb_define_method(mrb, f, "to_s", false_to_s, ARGS_NONE()); /* 15.2.6.3.3 */